Welcome to TiddlyWiki created by Jeremy Ruston, Copyright © 2007 UnaMesa Association
/***
|Name|AdvancedOptionsPlugin|
|Source|http://www.TiddlyTools.com/#AdvancedOptionsPlugin|
|Documentation|http://www.TiddlyTools.com/#AdvancedOptionsPlugin|
|Version|1.2.0|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.3|
|Type|plugin|
|Description|automatically add plugin-defined options to the [[AdvancedOptions]] shadow tiddler|
!!!!!Usage
<<<
At document startup, this plugin examines each tiddler tagged with <<tag systemConfig>> and looks for a tiddler slice named "Options" whose value refers to a tiddler section (or separate tiddler) that contains an 'advanced options control panel' for configuring that plugin's features and behavior. For each plugin that contains an "Options" slice, a tabbed entry is automatically created in the [[AdvancedOptions]] shadow tiddler to display that plugin's control panel.
As an optional fallback for backward-compatibility with plugin tiddlers that do not define the "Options" slice, this plugin will also look for a section heading named "Configuration" within those tiddlers, so that older plugins that define this section can automatically have their settings added to the [[AdvancedOptions]] tiddler without requiring the "Options" slice to be added.
This plugin also extends the standard {{{<<option>>}}} macro syntax so you can directly set the internal value of a boolean or text option, without displaying a corresponding checkbox or input field control simply by appending {{{=value}}} syntax to the end of the option ID parameter:
{{{
<<option "txtSomeOption=some text">>
<<option chkSomeOtherOption=true>> OR <<option chkSomeOtherOption=false>>
}}}
Example: {{{<<option chkAnimate=false>>}}}
<<<
!!!!!Configuration
<<<
<<option chkAdvancedOptions>> automatically add plugin-defined options to the [[AdvancedOptions]] shadow tiddler
<<option chkAdvancedOptionsBackstage>> automatically add plugin-defined options to Backstage menu
<<option chkAdvancedOptionsFallback>> use <<option txtAdvancedOptionsFallback>> section as a fallback for plugins that don't define an ~AdvancedOptions slice
//note: these settings only take effect after reloading the document//
<<<
!!!!!Revisions
<<<
2009.07.23 [1.2.0] added support for enhanced {{{<<option id=value>>}}} 'direct assignment' syntax
2008.05.09 [1.1.0] add "options" panel to backstage
2008.04.08 [1.0.0] initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.AdvancedOptionsPlugin= {major: 1, minor: 2, revision: 0, date: new Date(2009,7,23)};
if (config.options.chkAdvancedOptions===undefined)
config.options.chkAdvancedOptions=true;
if (config.options.chkAdvancedOptionsBackstage===undefined)
config.options.chkAdvancedOptionsBackstage=true;
if (config.options.chkAdvancedOptionsFallback===undefined)
config.options.chkAdvancedOptionsFallback=true;
if (config.options.txtAdvancedOptionsFallback===undefined)
config.options.txtAdvancedOptionsFallback="Configuration";
if (config.optionsDesc) config.optionsDesc.chkAdvancedOptions=
"automatically add plugin-defined options to [[AdvancedOptions]]";
//}}}
//{{{
var items=[];
var fmt="[[%0 ]] [[view options for %0]] [[%1]]\n";
var section=config.options.txtAdvancedOptionsFallback;
var plugins=store.getTaggedTiddlers("systemConfig");
for (var p=0; p<plugins.length; p++) {
var tid=plugins[p].title;
var settings=store.getTiddlerSlice(tid,"Options");
if (!settings && config.options.chkAdvancedOptionsFallback && store.getTiddlerText(tid+"##"+section))
settings="##"+section; // fallback handling for older plugins
if (settings&&settings.length) {
if (settings.substr(0,2)=="##") settings=tid+settings;
items.push(fmt.format([tid,settings]));
}
}
if (items.length) config.shadowTiddlers.PluginOptions=
"!![[Plugin-defined options|PluginManager]]\n>@@text-align:left;<<tabs '' \n"+items.join(' ')+">>@@";
if (config.options.chkAdvancedOptions)
config.shadowTiddlers.AdvancedOptions+="{{smallform{{{wrap{<<tiddler PluginOptions>>}}}}}}";
//}}}
//{{{
// // add "options" backstage task
if (config.tasks && config.options.chkAdvancedOptionsBackstage) { // for TW2.2b3 or above
config.tasks.options = {
text: "options",
tooltip: "manage plugin-defined option settings",
content: "{{smallform{{{groupbox{{{wrap{<<tiddler PluginOptions>>}}}}}}\n{{groupbox small {<<options>>}}}}}}"
}
config.backstageTasks.splice(config.backstageTasks.indexOf("plugins")+1,0,"options");
}
//}}}
//{{{
config.macros.option.AOPsave_handler=config.macros.option.handler;
config.macros.option.handler=function(place,macroName,params,wikifier,paramString,tiddler) {
var parts=params[0].split('=');
if (parts.length==1) return this.AOPsave_handler.apply(this,arguments);
var id=parts[0]; var val=(id.substr(0,3)=='txt')?parts[1]:(parts[1]=='true');
config.options[id]=val;
}
//}}}
/***
|''Name:''|AnnotationsPlugin|
|''Description:''|Inline annotations for tiddler text.|
|''Author:''|Saq Imtiaz ( lewcid@gmail.com )|
|''Source:''|http://tw.lewcid.org/#AnnotationsPlugin|
|''Code Repository:''|http://tw.lewcid.org/svn/plugins|
|''Version:''|2.0|
|''Date:''||
|''License:''|[[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]]|
|''~CoreVersion:''|2.2.3|
!!Usage:
*{{{((text to annotate(annotation goes here)}}}
* To include the text being annotated, in the popup as a title, put {{{^}}} as the first letter of the annotation text.
** {{{((text to annotate(^annotation goes here)}}}
!!Examples:
Mouse over, the text below:
* ((banana(the best fruit in the world)))
* ((banana(^ the best fruit in the world)))
***/
// /%
config.formatters.unshift({name:"annotations",match:"\\(\\(",lookaheadRegExp:/\(\((.*?)\((\^?)((?:.|\n)*?)\)\)\)/g,handler:function(w){
this.lookaheadRegExp.lastIndex=w.matchStart;
var _2=this.lookaheadRegExp.exec(w.source);
if(_2&&_2.index==w.matchStart){
var _3=createTiddlyElement(w.output,"span",null,"annosub",_2[1]);
_3.anno=_2[3];
if(_2[2]){
_3.subject=_2[1];
}
_3.onmouseover=this.onmouseover;
_3.onmouseout=this.onmouseout;
_3.ondblclick=this.onmouseout;
w.nextMatch=_2.index+_2[0].length;
}
},onmouseover:function(e){
popup=createTiddlyElement(document.body,"div",null,"anno");
this.popup=popup;
if(this.subject){
wikify("!"+this.subject+"\n",popup);
}
wikify(this.anno,popup);
addClass(this,"annosubover");
Popup.place(this,popup,{x:25,y:7});
},onmouseout:function(e){
removeNode(this.popup);
this.popup=null;
removeClass(this,"annosubover");
}});
setStylesheet(".anno{position:absolute;border:2px solid #000;background-color:#DFDFFF; color:#000;padding:0.5em;max-width:15em;width:expression(document.body.clientWidth > (255/12) *parseInt(document.body.currentStyle.fontSize)?'15em':'auto' );}\n"+".anno h1, .anno h2{margin-top:0;color:#000;}\n"+".annosub{background:#ccc;}\n"+".annosubover{z-index:25; background-color:#DFDFFF;cursor:help;}\n","AnnotationStyles");
// %/
/***
|''Name:''|ArchivePlugin|
|''Version:''|2.4.0 (2 Jun 2008)|
|''Source''|http://jackparke.googlepages.com/jtw.html#ArchivePlugin ([[del.icio.us|http://del.icio.us/post?url=http://jackparke.googlepages.com/jtw.html%23ArchivePlugin]])|
|''Author:''|[[Jack]]|
|''Type:''|Plugin|
!Description
The archive plugin allows you to store tiddler text outside of the tiddlywiki file.
Typically you would tag bulky tiddlers or those with infrequently needed content as "Archive" and these would
then be archived as separate html files in the sub folder called "archive".
!Usage
#Create a folder "archive" in the same folder as your tiddlywiki file.
#Install the Archive Plugin and reload your tiddlywiki
#Tag your bulky tiddlers with "Archive"
#Save your tiddlywiki file
!To Do
* Synchronize tiddler renames/deletions with file system
* Lazy loading of archived files via HTTP
/%
!Code
***/
version.extensions.ArchivePlugin = {major: 2, minor: 4, revision: 0, date: new Date("Jun 6, 2008")};
config.macros.ArchivePlugin = {};
config.macros.ArchivePlugin.init = function () {
this.archivePath = getWikiPath('archive');
}
// Hijacking the built-in functions
TW21Saver.prototype.externalizeTiddler = function(store,tiddler)
{
try {
var extendedAttributes = "";
var usePre = config.options.chkUsePreForStorage;
store.forEachField(tiddler,
function(tiddler,fieldName,value) {
// don't store stuff from the temp namespace
if(typeof value != "string")
value = "";
if (!fieldName.match(/^temp\./))
extendedAttributes += ' %0="%1"'.format([fieldName,value.escapeLineBreaks().htmlEncode()]);
},true);
var created = tiddler.created.convertToYYYYMMDDHHMM();
var modified = tiddler.modified.convertToYYYYMMDDHHMM();
var vdate = version.date.convertToYYYYMMDDHHMM();
var attributes = tiddler.modifier ? ' modifier="' + tiddler.modifier.htmlEncode() + '"' : "";
attributes += (usePre && modified == created) ? "" : ' modified="' + modified +'"';
attributes += (usePre && created == vdate) ? "" :' created="' + created + '"';
var tags = tiddler.getTags();
if(!usePre || tags)
attributes += ' tags="' + tags.htmlEncode() + '"';
return ('<div %0="%1"%2%3>%4</'+'div>').format([
usePre ? "title" : "tiddler",
tiddler.title.htmlEncode(),
attributes,
extendedAttributes,
usePre ? "\n<pre>" + tiddler.saveMe() + "</pre>\n" : tiddler.escapeLineBreaks().htmlEncode()
]);
} catch (ex) {
throw exceptionText(ex,config.messages.tiddlerSaveError.format([tiddler.title]));
}
};
Tiddler.prototype.saveMe = function() {
if (this.tags.indexOf('Archive') != -1) {
// Save tiddler body to a file in the archive folder
if (this.text) saveFile(config.macros.ArchivePlugin.archivePath + this.title.filenameEncode() + '.html', this.text)
return '';
}
else
return this.text.htmlEncode();
}
// This hijack ensures plugins can also be archived
var archivePlugin_getPluginInfo = getPluginInfo;
getPluginInfo = function(tiddler) {
alert(tiddler.title)
tiddler.text = store.getValue(tiddler, 'text');
return archivePlugin_getPluginInfo(tiddler);
}
TiddlyWiki.prototype.getValue = function(tiddler, fieldName) {
var t = this.resolveTiddler(tiddler);
if (!t)
return undefined;
fieldName = fieldName.toLowerCase();
if (t.tags.indexOf('Archive')!=-1 && fieldName=='text' && t['text']=='') {
try {
var tmp = loadFile(config.macros.ArchivePlugin.archivePath + t.title.filenameEncode() + '.html');
tmp = (tmp.charCodeAt(0) == 239 ? manualConvertUTF8ToUnicode(tmp) : tmp);
} catch (e) {
return ''; //alert("{{{Error: Unable to load file '" + config.macros.ArchivePlugin.archivePath + t.title.filenameEncode() + '.html' + "'}}}");
}
return tmp;
} else {
var accessor = TiddlyWiki.standardFieldAccess[fieldName];
if (accessor) {
return accessor.get(t);
}
}
return t.fields ? t.fields[fieldName] : undefined;
}
String.prototype.filenameEncode = function() {
return(this.toLowerCase().replace(/[^a-z0-9_-]/g ,"_"));
}
function getWikiPath(folderName) {
var originalPath = document.location.toString();
if(originalPath.substr(0,5) != 'file:') {
alert(config.messages.notFileUrlError);
if(store.tiddlerExists(config.messages.saveInstructions))
story.displayTiddler(null,config.messages.saveInstructions);
return;
}
var localPath = getLocalPath(originalPath);
var backSlash = localPath.lastIndexOf('\\') == -1 ? '/' : '\\';
var dirPathPos = localPath.lastIndexOf(backSlash);
var fileName = localPath.substring(dirPathPos+1,localPath.lastIndexOf('.'));
folderName += backSlash + fileName;
var subPath = localPath.substr(0,dirPathPos) + backSlash + (folderName ? folderName + backSlash : '');
return subPath;
}
// Deleting archive files
TiddlyWiki.prototype.archivePlugin_removeTiddler = TiddlyWiki.prototype.removeTiddler;
TiddlyWiki.prototype.removeTiddler = function(title) {
var tiddler = store.getTiddler(title);
var filePath = config.macros.ArchivePlugin.archivePath + title.filenameEncode() + '.html';
if (tiddler.tags.indexOf('Archive') != -1) ieDeleteFile(filePath);
this.archivePlugin_removeTiddler(title);
}
function ieDeleteFile(filePath) {
// IE Support only
if (!config.browser.isIE) return false;
try {
var fso = new ActiveXObject("Scripting.FileSystemObject");
} catch(ex) {return null;}
try {
var file = fso.GetFile(filePath);
file.Delete();
} catch(ex) {return null;}
return true;
}
//%/
<<myComment>>
----
~~:::::__Fri Jun 25 2010 19:16:34 GMT-0400 (Eastern Daylight Time)__:::::~~
BUG? keep popping up on page load when open via http.
----
~~:::::__Fri Jun 25 2010 19:17:18 GMT-0400 (Eastern Daylight Time)__:::::~~
Change: archivePath = archive\FILENAME\tiddlerTitle
text/plain
.txt .text .js .vbs .asp .cgi .pl
----
text/html
.htm .html .hta .htx .mht
----
text/comma-separated-values
.csv
----
text/javascript
.js
----
text/css
.css
----
text/xml
.xml .xsl .xslt
----
image/gif
.gif
----
image/jpeg
.jpg .jpe .jpeg
----
image/png
.png
----
image/bmp
.bmp
----
image/tiff
.tif .tiff
----
audio/basic
.au .snd
----
audio/wav
.wav
----
audio/x-pn-realaudio
.ra .rm .ram
----
audio/x-midi
.mid .midi
----
audio/mp3
.mp3
----
audio/m3u
.m3u
----
video/x-ms-asf
.asf
----
video/avi
.avi
----
video/mpeg
.mpg .mpeg
----
video/quicktime
.qt .mov .qtvr
----
application/pdf
.pdf
----
application/rtf
.rtf
----
application/postscript
.ai .eps .ps
----
application/wordperfect
.wpd
----
application/mswrite
.wri
----
application/msexcel
.xls .xls3 .xls4 .xls5 .xlw
----
application/msword
.doc
----
application/mspowerpoint
.ppt .pps
----
application/x-director
.swa
----
application/x-shockwave-flash
.swf
----
application/x-zip-compressed
.zip
----
application/x-gzip
.gz
----
application/x-rar-compressed
.rar
----
application/octet-stream
.com .exe .dll .ocx
----
application/java-archive
.jar
/***
|Name|AttachFilePlugin|
|Source|http://www.TiddlyTools.com/#AttachFilePlugin|
|Documentation|http://www.TiddlyTools.com/#AttachFilePluginInfo|
|Version|4.0.0|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Requires|AttachFilePluginFormatters, AttachFileMIMETypes|
|Description|Store binary files as base64-encoded tiddlers with fallback links for separate local and/or remote file storage|
Store or link binary files (such as jpg, gif, pdf or even mp3) within your TiddlyWiki document and then use them as images or links from within your tiddler content.
> Important note: As of version 3.6.0, in order to //render// images and other binary attachments created with this plugin, you must also install [[AttachFilePluginFormatters]], which extends the behavior of the TiddlyWiki core formatters for embedded images ({{{[img[tooltip|image]]}}}), linked embedded images ({{{[img[tooltip|image][link]]}}}), and external/"pretty" links ({{{[[label|link]]}}}), so that these formatter will process references to attachment tiddlers as if a normal file reference had been provided. |
!!!!!Documentation
>see [[AttachFilePluginInfo]]
!!!!!Inline interface (live)
>see [[AttachFile]] (shadow tiddler)
><<tiddler AttachFile>>
!!!!!Revisions
<<<
2009.06.04 [4.0.0] changed attachment storage format to use //sections// instead of embedded substring markers.
|please see [[AttachFilePluginInfo]] for additional revision details|
2005.07.20 [1.0.0] Initial Release
<<<
!!!!!Code
***/
// // version
//{{{
version.extensions.AttachFilePlugin= {major: 4, minor: 0, revision: 0, date: new Date(2009,6,4)};
//config
if(!config.options.chkAttachFileShowData) config.options.chkAttachFileShowData=false;
// shadow tiddler
config.shadowTiddlers.AttachFile="<<attach inline>>";
// add 'attach' backstage task (insert before built-in 'importTask')
if (config.tasks) { // for TW2.2b or above
config.tasks.attachTask = {
text: "attach",
tooltip: "Attach a binary file as a tiddler",
content: "<<attach inline>>"
}
config.backstageTasks.splice(config.backstageTasks.indexOf("importTask"),0,"attachTask");
}
config.macros.attach = {
// // lingo
//{{{
label: "attach file",
tooltip: "Attach a file to this document",
linkTooltip: "Attachment: ",
typeList: "AttachFileMIMETypes",
titlePrompt: " enter tiddler title...",
MIMEPrompt: "<option value=''>select MIME type...</option><option value='editlist'>[edit list...]</option>",
localPrompt: " enter local path/filename...",
URLPrompt: " enter remote URL...",
tiddlerErr: "Please enter a tiddler title",
sourceErr: "Please enter a source path/filename",
storageErr: "Please select a storage method: embedded, local or remote",
MIMEErr: "Unrecognized file format. Please select a MIME type",
localErr: "Please enter a local path/filename",
URLErr: "Please enter a remote URL",
fileErr: "Invalid path/file or file not found",
tiddlerFormat: '!usage\n{{{%0}}}\n%0\n!notes\n%1\n!type\n%2\n!file\n%3\n!url\n%4\n!hiddenData\n/\u0025\n!data\n%5\n!endHiddenData\n\u0025/',
//}}}
// // macro definition
//{{{
handler:
function(place,macroName,params) {
if (params && !params[0])
{ createTiddlyButton(place,this.label,this.tooltip,this.toggleAttachPanel); return; }
var id=params.shift();
this.createAttachPanel(place,id+"_attachPanel",params);
document.getElementById(id+"_attachPanel").style.position="static";
document.getElementById(id+"_attachPanel").style.display="block";
},
//}}}
//{{{
createAttachPanel:
function(place,panel_id,params) {
if (!panel_id || !panel_id.length) var panel_id="_attachPanel";
// remove existing panel (if any)
var panel=document.getElementById(panel_id); if (panel) panel.parentNode.removeChild(panel);
// set styles for this panel
setStylesheet(this.css,"attachPanel");
// create new panel
var title=""; if (params && params[0]) title=params.shift();
var types=this.MIMEPrompt+this.formatListOptions(store.getTiddlerText(this.typeList)); // get MIME types
panel=createTiddlyElement(place,"span",panel_id,"attachPanel",null);
var html=this.html.replace(/%id%/g,panel_id);
html=html.replace(/%title%/g,title);
html=html.replace(/%disabled%/g,title.length?"disabled":"");
html=html.replace(/%IEdisabled%/g,config.browser.isIE?"disabled":"");
html=html.replace(/%types%/g,types);
panel.innerHTML=html;
if (config.browser.isGecko) { // FF3 FIXUP
document.getElementById("attachSource").style.display="none";
document.getElementById("attachFixPanel").style.display="block";
}
return panel;
},
//}}}
//{{{
toggleAttachPanel:
function (e) {
if (!e) var e = window.event;
var parent=resolveTarget(e).parentNode;
var panel = document.getElementById("_attachPanel");
if (panel==undefined || panel.parentNode!=parent)
panel=config.macros.attach.createAttachPanel(parent,"_attachPanel");
var isOpen = panel.style.display=="block";
if(config.options.chkAnimate)
anim.startAnimating(new Slider(panel,!isOpen,e.shiftKey || e.altKey,"none"));
else
panel.style.display = isOpen ? "none" : "block" ;
e.cancelBubble = true;
if (e.stopPropagation) e.stopPropagation();
return(false);
},
//}}}
//{{{
formatListOptions:
function(text) {
if (!text || !text.trim().length) return "";
// get MIME list content from text
var parts=text.split("\n----\n");
var out="";
for (var p=0; p<parts.length; p++) {
var lines=parts[p].split("\n");
var label=lines.shift(); // 1st line=display text
var value=lines.shift(); // 2nd line=item value
out +='<option value="%1">%0</option>'.format([label,value]);
}
return out;
},
//}}}
// // interface definition
//{{{
css:
".attachPanel { display: none; position:absolute; z-index:10; width:35em; right:105%; top:0em;\
background-color: #eee; color:#000; font-size: 8pt; line-height:110%;\
border:1px solid black; border-bottom-width: 3px; border-right-width: 3px;\
padding: 0.5em; margin:0em; -moz-border-radius:1em;-webkit-border-radius:1em; text-align:left }\
.attachPanel form { display:inline;border:0;padding:0;margin:0; }\
.attachPanel select { width:99%;margin:0px;font-size:8pt;line-height:110%;}\
.attachPanel input { width:98%;padding:0px;margin:0px;font-size:8pt;line-height:110%}\
.attachPanel textarea { width:98%;margin:0px;height:2em;font-size:8pt;line-height:110%}\
.attachPanel table { width:100%;border:0;margin:0;padding:0;color:inherit; }\
.attachPanel tbody, .attachPanel tr, .attachPanel td { border:0;margin:0;padding:0;color:#000; }\
.attachPanel .box { border:1px solid black; padding:.3em; margin:.3em 0px; background:#f8f8f8; \
-moz-border-radius:5px;-webkit-border-radius:5px; }\
.attachPanel .chk { width:auto;border:0; }\
.attachPanel .btn { width:auto; }\
.attachPanel .btn2 { width:49%; }\
",
//}}}
//{{{
html:
'<form>\
attach from source file\
<input type="file" id="attachSource" name="source" size="56"\
onChange="config.macros.attach.onChangeSource(this)">\
<div id="attachFixPanel" style="display:none"><!-- FF3 FIXUP -->\
<input type="text" id="attachFixSource" style="width:90%"\
title="Enter a path/file to attach"\
onChange="config.macros.attach.onChangeSource(this);">\
<input type="button" style="width:7%" value="..."\
title="Enter a path/file to attach"\
onClick="config.macros.attach.askForFilename(document.getElementById(\'attachFixSource\'));">\
</div><!--end FF3 FIXUP-->\
<div class="box">\
<table style="border:0"><tr style="border:0"><td style="border:0;text-align:right;width:1%;white-space:nowrap">\
embed data <input type=checkbox class=chk name="useData" %IEdisabled% \
onclick="if (!this.form.MIMEType.value.length)\
this.form.MIMEType.selectedIndex=this.checked?1:0; "> \
</td><td style="border:0">\
<select size=1 name="MIMEType" \
onchange="this.title=this.value; if (this.value==\'editlist\')\
{ this.selectedIndex=this.form.useData.checked?1:0; story.displayTiddler(null,config.macros.attach.typeList,2); return; }">\
<option value=""></option>\
%types%\
</select>\
</td></tr><tr style="border:0"><td style="border:0;text-align:right;width:1%;white-space:nowrap">\
local link <input type=checkbox class=chk name="useLocal"\
onclick="this.form.local.value=this.form.local.defaultValue=this.checked?config.macros.attach.localPrompt:\'\';"> \
</td><td style="border:0">\
<input type=text name="local" size=15 autocomplete=off value=""\
onchange="this.form.useLocal.checked=this.value.length" \
onkeyup="this.form.useLocal.checked=this.value.length" \
onfocus="if (!this.value.length) this.value=config.macros.attach.localPrompt; this.select()">\
</td></tr><tr style="border:0"><td style="border:0;text-align:right;width:1%;white-space:nowrap">\
remote link <input type=checkbox class=chk name="useURL"\
onclick="this.form.URL.value=this.form.URL.defaultValue=this.checked?config.macros.attach.URLPrompt:\'\';\"> \
</td><td style="border:0">\
<input type=text name="URL" size=15 autocomplete=off value=""\
onfocus="if (!this.value.length) this.value=config.macros.attach.URLPrompt; this.select()"\
onchange="this.form.useURL.checked=this.value.length;"\
onkeyup="this.form.useURL.checked=this.value.length;">\
</td></tr></table>\
</div>\
<table style="border:0"><tr style="border:0"><td style="border:0;text-align:right;vertical-align:top;width:1%;white-space:nowrap">\
notes \
</td><td style="border:0" colspan=2>\
<textarea name="notes" style="width:98%;height:3.5em;margin-bottom:2px"></textarea>\
</td><tr style="border:0"><td style="border:0;text-align:right;width:1%;white-space:nowrap">\
attach as \
</td><td style="border:0" colspan=2>\
<input type=text name="tiddlertitle" size=15 autocomplete=off value="%title%"\
onkeyup="if (!this.value.length) { this.value=config.macros.attach.titlePrompt; this.select(); }"\
onfocus="if (!this.value.length) this.value=config.macros.attach.titlePrompt; this.select()" %disabled%>\
</td></tr></tr><tr style="border:0"><td style="border:0;text-align:right;width:1%;white-space:nowrap">\
add tags \
</td><td style="border:0">\
<input type=text name="tags" size=15 autocomplete=off value="" onfocus="this.select()">\
</td><td style="width:40%;text-align:right;border:0">\
<input type=button class=btn2 value="attach"\
onclick="config.macros.attach.onClickAttach(this)"><!--\
--><input type=button class=btn2 value="close"\
onclick="var panel=document.getElementById(\'%id%\'); if (panel) panel.parentNode.removeChild(panel);">\
</td></tr></table>\
</form>',
//}}}
// // control processing
//{{{
onChangeSource:
function(here) {
var form=here.form;
var list=form.MIMEType;
var theFilename = here.value;
var theExtension = theFilename.substr(theFilename.lastIndexOf('.')).toLowerCase();
// if theFilename is in current document folder, remove path prefix and use relative reference
var h=document.location.href; folder=getLocalPath(decodeURIComponent(h.substr(0,h.lastIndexOf("/")+1)));
if (theFilename.substr(0,folder.length)==folder) theFilename='./'+theFilename.substr(folder.length);
else theFilename='file:///'+theFilename; // otherwise, use absolute reference
theFilename=theFilename.replace(/\\/g,"/"); // fixup: change \ to /
form.useLocal.checked = true;
form.local.value = theFilename;
form.useData.checked = !form.useData.disabled;
list.selectedIndex=1;
for (var i=0; i<list.options.length; i++) // find matching MIME type
if (list.options[i].value.indexOf(theExtension)!=-1) { list.selectedIndex = i; break; }
if (!form.tiddlertitle.disabled)
form.tiddlertitle.value=theFilename.substr(theFilename.lastIndexOf('/')+1); // get tiddlername from filename
},
//}}}
//{{{
onClickAttach:
function (here) {
clearMessage();
// get input values
var form=here.form;
var src=form.source; if (config.browser.isGecko) src=document.getElementById("attachFixSource");
src=src.value!=src.defaultValue?src.value:"";
var when=(new Date()).formatString(config.macros.timeline.dateFormat);
var title=form.tiddlertitle.value;
var local = form.local.value!=form.local.defaultValue?form.local.value:"";
var url = form.URL.value!=form.URL.defaultValue?form.URL.value:"";
var notes = form.notes.value;
var tags = "attachment excludeMissing "+form.tags.value;
var useData=form.useData.checked;
var useLocal=form.useLocal.checked;
var useURL=form.useURL.checked;
var mimetype = form.MIMEType.value.length?form.MIMEType.options[form.MIMEType.selectedIndex].text:"";
// validate checkboxes and get filename
if (useData) {
if (src.length) { if (!theLocation) var theLocation=src; }
else { alert(this.sourceErr); src.focus(); return false; }
}
if (useLocal) {
if (local.length) { if (!theLocation) var theLocation = local; }
else { alert(this.localErr); form.local.focus(); return false; }
}
if (useURL) {
if (url.length) { if (!theLocation) var theLocation = url; }
else { alert(this.URLErr); form.URL.focus(); return false; }
}
if (!(useData||useLocal||useURL))
{ form.useData.focus(); alert(this.storageErr); return false; }
if (!theLocation)
{ src.focus(); alert(this.sourceErr); return false; }
if (!title || !title.trim().length || title==this.titlePrompt)
{ form.tiddlertitle.focus(); alert(this.tiddlerErr); return false; }
// if not already selected, determine MIME type based on filename extension (if any)
if (useData && !mimetype.length && theLocation.lastIndexOf('.')!=-1) {
var theExt = theLocation.substr(theLocation.lastIndexOf('.')).toLowerCase();
var theList=form.MIMEType;
for (var i=0; i<theList.options.length; i++)
if (theList.options[i].value.indexOf(theExt)!=-1)
{ var mimetype=theList.options[i].text; theList.selectedIndex=i; break; }
}
// attach the file
return this.createAttachmentTiddler(src, when, notes, tags, title,
useData, useLocal, useURL, local, url, mimetype);
},
getMIMEType:
function(src,def) {
var ext = src.substr(src.lastIndexOf('.')).toLowerCase();
var list=store.getTiddlerText(this.typeList);
if (!list || !list.trim().length) return def;
// get MIME list content from tiddler
var parts=list.split("\n----\n");
for (var p=0; p<parts.length; p++) {
var lines=parts[p].split("\n");
var mime=lines.shift(); // 1st line=MIME type
var match=lines.shift(); // 2nd line=matching extensions
if (match.indexOf(ext)!=-1) return mime;
}
return def;
},
createAttachmentTiddler:
function (src, when, notes, tags, title, useData, useLocal, useURL, local, url, mimetype, noshow) {
if (useData) { // encode the data
if (!mimetype.length) {
alert(this.MIMEErr);
form.MIMEType.selectedIndex=1; form.MIMEType.focus();
return false;
}
var d = this.readFile(src); if (!d) { return false; }
displayMessage('encoding '+src);
var encoded = this.encodeBase64(d);
displayMessage('file size='+d.length+' bytes, encoded size='+encoded.length+' bytes');
}
var usage=(mimetype.substr(0,5)=="image"?'[img[%0]]':'[[%0|%0]]').format([title]);
var theText=this.tiddlerFormat.format([
usage, notes.length?notes:'//none//', mimetype,
useLocal?local.replace(/\\/g,'/'):'', useURL?url:'',
useData?('data:'+mimetype+';base64,'+encoded):'' ]);
store.saveTiddler(title,title,theText,config.options.txtUserName,new Date(),tags);
var panel=document.getElementById("attachPanel"); if (panel) panel.style.display="none";
if (!noshow) { story.displayTiddler(null,title); story.refreshTiddler(title,null,true); }
if(useData) displayMessage('attached "'+title+'"');
else displayMessage('linked"'+title+'"');
return true;
},
//}}}
// // base64 conversion
//{{{
encodeBase64:
function (d) {
if (!d) return null;
// encode as base64
var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
var out="";
var chr1,chr2,chr3="";
var enc1,enc2,enc3,enc4="";
for (var count=0,i=0; i<d.length; ) {
chr1=d.charCodeAt(i++);
chr2=d.charCodeAt(i++);
chr3=d.charCodeAt(i++);
enc1=chr1 >> 2;
enc2=((chr1 & 3) << 4) | (chr2 >> 4);
enc3=((chr2 & 15) << 2) | (chr3 >> 6);
enc4=chr3 & 63;
if (isNaN(chr2)) enc3=enc4=64;
else if (isNaN(chr3)) enc4=64;
out+=keyStr.charAt(enc1)+keyStr.charAt(enc2)+keyStr.charAt(enc3)+keyStr.charAt(enc4);
chr1=chr2=chr3=enc1=enc2=enc3=enc4="";
}
return out;
},
decodeBase64: function(input) {
var out="";
var chr1,chr2,chr3;
var enc1,enc2,enc3,enc4;
var i = 0;
// remove all characters that are not A-Z, a-z, 0-9, +, /, or =
input=input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
do {
enc1=keyStr.indexOf(input.charAt(i++));
enc2=keyStr.indexOf(input.charAt(i++));
enc3=keyStr.indexOf(input.charAt(i++));
enc4=keyStr.indexOf(input.charAt(i++));
chr1=(enc1 << 2) | (enc2 >> 4);
chr2=((enc2 & 15) << 4) | (enc3 >> 2);
chr3=((enc3 & 3) << 6) | enc4;
out=out+String.fromCharCode(chr1);
if (enc3!=64) out=out+String.fromCharCode(chr2);
if (enc4!=64) out=out+String.fromCharCode(chr3);
} while (i<input.length);
return out;
},
//}}}
// // I/O functions
//{{{
readFile: // read local BINARY file data
function(filePath) {
if(!window.Components) { return null; }
try { netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); }
catch(e) { alert("access denied: "+filePath); return null; }
var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
try { file.initWithPath(filePath); } catch(e) { alert("cannot read file - invalid path: "+filePath); return null; }
if (!file.exists()) { alert("cannot read file - not found: "+filePath); return null; }
var inputStream = Components.classes["@mozilla.org/network/file-input-stream;1"].createInstance(Components.interfaces.nsIFileInputStream);
inputStream.init(file, 0x01, 00004, null);
var bInputStream = Components.classes["@mozilla.org/binaryinputstream;1"].createInstance(Components.interfaces.nsIBinaryInputStream);
bInputStream.setInputStream(inputStream);
return(bInputStream.readBytes(inputStream.available()));
},
//}}}
//{{{
writeFile:
function(filepath,data) {
// TBD: decode base64 and write BINARY data to specified local path/filename
return(false);
},
//}}}
//{{{
askForFilename: // for FF3 fixup
function(target) {
var msg=config.messages.selectFile;
if (target && target.title) msg=target.title; // use target field tooltip (if any) as dialog prompt text
// get local path for current document
var path=getLocalPath(document.location.href);
var p=path.lastIndexOf("/"); if (p==-1) p=path.lastIndexOf("\\"); // Unix or Windows
if (p!=-1) path=path.substr(0,p+1); // remove filename, leave trailing slash
var file=""
var result=window.mozAskForFilename(msg,path,file,true); // FF3 FIXUP ONLY
if (target && result.length) // set target field and trigger handling
{ target.value=result; target.onchange(); }
return result;
}
};
//}}}
//{{{
if (window.mozAskForFilename===undefined) { // also defined by CoreTweaks (for ticket #604)
window.mozAskForFilename=function(msg,path,file,mustExist) {
if(!window.Components) return false;
try {
netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
var nsIFilePicker = window.Components.interfaces.nsIFilePicker;
var picker = Components.classes['@mozilla.org/filepicker;1'].createInstance(nsIFilePicker);
picker.init(window, msg, mustExist?nsIFilePicker.modeOpen:nsIFilePicker.modeSave);
var thispath = Components.classes['@mozilla.org/file/local;1'].createInstance(Components.interfaces.nsILocalFile);
thispath.initWithPath(path);
picker.displayDirectory=thispath;
picker.defaultExtension='';
picker.defaultString=file;
picker.appendFilters(nsIFilePicker.filterAll|nsIFilePicker.filterText|nsIFilePicker.filterHTML);
if (picker.show()!=nsIFilePicker.returnCancel)
var result=picker.file.persistentDescriptor;
}
catch(ex) { displayMessage(ex.toString()); }
return result;
}
}
//}}}
/***
|Name|AttachFilePluginFormatters|
|Source|http://www.TiddlyTools.com/#AttachFilePluginFormatters|
|Version|4.0.1|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1.3|
|Type|plugin|
|Description|run-time library for displaying attachment tiddlers|
Runtime processing for //rendering// attachment tiddlers created by [[AttachFilePlugin]]. Attachment tiddlers are tagged with<<tag attachment>>and contain binary file content (e.g., jpg, gif, pdf, mp3, etc.) that has been stored directly as base64 text-encoded data or can be loaded from external files stored on a local filesystem or remote web server. Note: after creating new attachment tiddlers, you can remove [[AttachFilePlugin]], as long as you retain //this// tiddler (so that images can be rendered later on).
!!!!!Formatters
<<<
This plugin extends the behavior of the following TiddlyWiki core "wikify()" formatters:
* embedded images: {{{[img[tooltip|image]]}}}
* linked embedded images: {{{[img[tooltip|image][link]]}}}
* external/"pretty" links: {{{[[label|link]]}}}
''Please refer to AttachFilePlugin (source: http://www.TiddlyTools.com/#AttachFilePlugin) for additional information.''
<<<
!!!!!Revisions
<<<
2009.10.10 [4.0.1] in fileExists(), check for IE to avoid hanging Chrome during startup
2009.06.04 [4.0.0] changed attachment storage format to use //sections// instead of embedded substring markers.
2008.01.08 [*.*.*] plugin size reduction: documentation moved to ...Info
2007.12.04 [*.*.*] update for TW2.3.0: replaced deprecated core functions, regexps, and macros
2007.10.29 [3.7.0] more code reduction: removed upload handling from AttachFilePlugin (saves ~7K!)
2007.10.28 [3.6.0] removed duplicate formatter code from AttachFilePlugin (saves ~10K!) and updated documentation accordingly. This plugin ([[AttachFilePluginFormatters]]) is now //''required''// in order to display attached images/binary files within tiddler content.
2006.05.20 [3.4.0] through 2007.03.01 [3.5.3] sync with AttachFilePlugin
2006.05.13 [3.2.0] created from AttachFilePlugin v3.2.0
<<<
!!!!!Code
***/
// // version
//{{{
version.extensions.AttachFilePluginFormatters= {major: 4, minor: 0, revision: 1, date: new Date(2009,10,10)};
//}}}
//{{{
if (config.macros.attach==undefined) config.macros.attach= { };
//}}}
//{{{
if (config.macros.attach.isAttachment==undefined) config.macros.attach.isAttachment=function (title) {
var tiddler = store.getTiddler(title);
if (tiddler==undefined || tiddler.tags==undefined) return false;
return (tiddler.tags.indexOf("attachment")!=-1);
}
//}}}
//{{{
// test for local file existence - returns true/false without visible error display
if (config.macros.attach.fileExists==undefined) config.macros.attach.fileExists=function(f) {
if(window.Components) { // MOZ
try { netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); }
catch(e) { return false; } // security access denied
var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
try { file.initWithPath(f); }
catch(e) { return false; } // invalid directory
return file.exists();
}
else if (config.browser.isIE) { // IE
var fso = new ActiveXObject("Scripting.FileSystemObject");
return fso.FileExists(f);
}
else return true; // other browsers: assume file exists
}
//}}}
//{{{
if (config.macros.attach.getAttachment==undefined) config.macros.attach.getAttachment=function(title) {
// extract embedded data, local and remote links (if any)
var text=store.getTiddlerText(title,'');
var embedded=store.getTiddlerText(title+'##data','').trim();
var locallink=store.getTiddlerText(title+'##file','').trim();
var remotelink=store.getTiddlerText(title+'##url','').trim();
// backward-compatibility for older attachments (pre 4.0.0)
var startmarker="---BEGIN_DATA---\n";
var endmarker="\n---END_DATA---";
var pos=0; var endpos=0;
if ((pos=text.indexOf(startmarker))!=-1 && (endpos=text.indexOf(endmarker))!=-1)
embedded="data:"+(text.substring(pos+startmarker.length,endpos)).replace(/\n/g,'');
if ((pos=text.indexOf("/%LOCAL_LINK%/"))!=-1)
locallink=text.substring(text.indexOf("|",pos)+1,text.indexOf("]]",pos));
if ((pos=text.indexOf("/%REMOTE_LINK%/"))!=-1)
remotelink=text.substring(text.indexOf("|",pos)+1,text.indexOf("]]",pos));
// if there is a data: URI defined (not supported by IE)
if (embedded.length && !config.browser.isIE) return embedded;
// document is being served remotely... use remote URL (if any) (avoids security alert)
if (remotelink.length && document.location.protocol!="file:")
return remotelink;
// local link only... return link without checking file existence (avoids security alert)
if (locallink.length && !remotelink.length)
return locallink;
// local link, check for file exist... use local link if found
if (locallink.length) {
locallink=locallink.replace(/^\.[\/\\]/,''); // strip leading './' or '.\' (if any)
if (this.fileExists(getLocalPath(locallink))) return locallink;
// maybe local link is relative... add path from current document and try again
var pathPrefix=document.location.href; // get current document path and trim off filename
var slashpos=pathPrefix.lastIndexOf("/"); if (slashpos==-1) slashpos=pathPrefix.lastIndexOf("\\");
if (slashpos!=-1 && slashpos!=pathPrefix.length-1) pathPrefix=pathPrefix.substr(0,slashpos+1);
if (this.fileExists(getLocalPath(pathPrefix+locallink))) return locallink;
}
// no embedded data, no local (or not found), fallback to remote URL (if any)
if (remotelink.length) return remotelink;
// attachment URL doesn't resolve, just return input as is
return title;
}
//}}}
//{{{
if (config.macros.attach.init_formatters==undefined) config.macros.attach.init_formatters=function() {
if (this.initialized) return;
// find the formatter for "image" and replace the handler
for (var i=0; i<config.formatters.length && config.formatters[i].name!="image"; i++);
if (i<config.formatters.length) config.formatters[i].handler=function(w) {
this.lookaheadRegExp.lastIndex = w.matchStart;
var lookaheadMatch = this.lookaheadRegExp.exec(w.source)
if(lookaheadMatch && lookaheadMatch.index == w.matchStart) // Simple bracketted link
{
var e = w.output;
if(lookaheadMatch[5])
{
var link = lookaheadMatch[5];
// ELS -------------
var external=config.formatterHelpers.isExternalLink(link);
if (external)
{
if (config.macros.attach.isAttachment(link))
{
e = createExternalLink(w.output,link);
e.href=config.macros.attach.getAttachment(link);
e.title = config.macros.attach.linkTooltip + link;
}
else
e = createExternalLink(w.output,link);
}
else
e = createTiddlyLink(w.output,link,false,null,w.isStatic);
// ELS -------------
addClass(e,"imageLink");
}
var img = createTiddlyElement(e,"img");
if(lookaheadMatch[1])
img.align = "left";
else if(lookaheadMatch[2])
img.align = "right";
if(lookaheadMatch[3])
img.title = lookaheadMatch[3];
img.src = lookaheadMatch[4];
// ELS -------------
if (config.macros.attach.isAttachment(lookaheadMatch[4]))
img.src=config.macros.attach.getAttachment(lookaheadMatch[4]);
// ELS -------------
w.nextMatch = this.lookaheadRegExp.lastIndex;
}
}
//}}}
//{{{
// find the formatter for "prettyLink" and replace the handler
for (var i=0; i<config.formatters.length && config.formatters[i].name!="prettyLink"; i++);
if (i<config.formatters.length) {
config.formatters[i].handler=function(w) {
this.lookaheadRegExp.lastIndex = w.matchStart;
var lookaheadMatch = this.lookaheadRegExp.exec(w.source);
if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
var e;
var text = lookaheadMatch[1];
if(lookaheadMatch[3]) {
// Pretty bracketted link
var link = lookaheadMatch[3];
if (config.macros.attach.isAttachment(link)) {
e = createExternalLink(w.output,link);
e.href=config.macros.attach.getAttachment(link);
e.title=config.macros.attach.linkTooltip+link;
}
else e = (!lookaheadMatch[2] && config.formatterHelpers.isExternalLink(link))
? createExternalLink(w.output,link)
: createTiddlyLink(w.output,link,false,null,w.isStatic);
} else {
e = createTiddlyLink(w.output,text,false,null,w.isStatic);
}
createTiddlyText(e,text);
w.nextMatch = this.lookaheadRegExp.lastIndex;
}
}
} // if "prettyLink" formatter found
this.initialized=true;
}
//}}}
//{{{
config.macros.attach.init_formatters(); // load time init
//}}}
//{{{
if (TiddlyWiki.prototype.coreGetRecursiveTiddlerText==undefined) {
TiddlyWiki.prototype.coreGetRecursiveTiddlerText = TiddlyWiki.prototype.getRecursiveTiddlerText;
TiddlyWiki.prototype.getRecursiveTiddlerText = function(title,defaultText,depth) {
return config.macros.attach.isAttachment(title)?
config.macros.attach.getAttachment(title):this.coreGetRecursiveTiddlerText.apply(this,arguments);
}
}
//}}}
<<myComment>>
----
~~:::::__Fri Jun 25 2010 21:33:01 GMT-0400 (Eastern Daylight Time)__:::::~~
^^(__KennyZ Wrote:__)^^ Hide base64 encoded data in !data section.
EditFile:AttachFilePlugin
{{{
tiddlerFormat: '!usage\n{{{%0}}}\n%0\n!notes\n%1\n!type\n%2\n!file\n%3\n!url\n%4\n!hiddenData\n/\u0025\n!data\n%5\n!endHiddenData\n\u0025/',
}}}
----
~~:::::__Fri Jun 25 2010 21:34:45 GMT-0400 (Eastern Daylight Time)__:::::~~
^^(__KennyZ Wrote:__)^^ Added help message to differentiate linking or embedding.
{{{
if(useData) displayMessage('attached "'+title+'"');
else displayMessage('linked"'+title+'"');
}}}
/***
|Name|BugMeNotExitingPlugin|
|Source|http://cooltool.tiddlyspot.com#BugMeNotExitingPlugin|
|Documentation||
|Version|0.01|
|Author|Kenny Z|
|License|Plubic Domain|
|~CoreVersion|2.6|
|Type|plugin|
|Description|Disable confirm exit|
!Description:
Exit quickly without being bugged.
!Usage:
#Import
#Save and reload
!Code:
***/
//{{{
function confirmExit(){
hadConfirmExit = true;
return;
};
//}}}
/***
''Name:'' CalendarPlugin
''Version:'' <<getversion calendar>> (<<getversiondate calendar "DD MMM YYYY">>)
''Author:'' SteveRumsby
''Configuration:''
|''First day of week:''|<<option txtCalFirstDay>>|(Monday = 0, Sunday = 6)|
|''First day of weekend:''|<<option txtCalStartOfWeekend>>|(Monday = 0, Sunday = 6)|
''Syntax:''
|{{{<<calendar>>}}}|Produce a full-year calendar for the current year|
|{{{<<calendar year>>}}}|Produce a full-year calendar for the given year|
|{{{<<calendar year month>>}}}|Produce a one-month calendar for the given month and year|
|{{{<<calendar thismonth>>}}}|Produce a one-month calendar for the current month|
|{{{<<calendar lastmonth>>}}}|Produce a one-month calendar for last month|
|{{{<<calendar nextmonth>>}}}|Produce a one-month calendar for next month|
***/
// //Modify this section to change the text displayed for the month and day names, to a different language for example. You can also change the format of the tiddler names linked to from each date, and the colours used.
// // ''[[Changes]] by ELS 2005.10.30:''
// // config.macros.calendar.handler()
// // ^^use "tbody" element for IE compatibility^^
// // ^^IE returns 2005 for current year, FF returns 105... fix year adjustment accordingly^^
// // createCalendarDays()
// // ^^use showDate() function (if defined) to render autostyled date with linked popup^^
// // calendar stylesheet definition
// // ^^use .calendar class-specific selectors, add text centering and margin settings^^
//{{{
config.macros.calendar = {};
config.macros.calendar.monthnames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
config.macros.calendar.daynames = ["M", "T", "W", "T", "F", "S", "S"];
config.macros.calendar.weekendbg = "#c0c0c0";
config.macros.calendar.monthbg = "#e0e0e0";
config.macros.calendar.holidaybg = "#ffc0c0";
//}}}
// //''Code section:''
// (you should not need to alter anything below here)//
//{{{
if(config.options.txtCalFirstDay == undefined)
config.options.txtCalFirstDay = 0;
if(config.options.txtCalStartOfWeekend == undefined)
config.options.txtCalStartOfWeekend = 5;
config.macros.calendar.tiddlerformat = "0DD/0MM/YYYY"; // This used to be changeable - for now, it isn't// <<smiley :-(>>
version.extensions.calendar = { major: 0, minor: 6, revision: 0, date: new Date(2006, 1, 22)};
config.macros.calendar.monthdays = [ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
config.macros.calendar.holidays = [ ]; // Not sure this is required anymore - use reminders instead
//}}}
// //Is the given date a holiday?
//{{{
function calendarIsHoliday(date)
{
var longHoliday = date.formatString("0DD/0MM/YYYY");
var shortHoliday = date.formatString("0DD/0MM");
for(var i = 0; i < config.macros.calendar.holidays.length; i++) {
if(config.macros.calendar.holidays[i] == longHoliday || config.macros.calendar.holidays[i] == shortHoliday) {
return true;
}
}
return false;
}
//}}}
// //The main entry point - the macro handler.
// //Decide what sort of calendar we are creating (month or year, and which month or year)
// // Create the main calendar container and pass that to sub-ordinate functions to create the structure.
// ELS 2005.10.30: added creation and use of "tbody" for IE compatibility and fixup for year >1900//
// ELS 2005.10.30: fix year calculation for IE's getYear() function (which returns '2005' instead of '105')//
//{{{
config.macros.calendar.handler = function(place,macroName,params)
{
//alert("handle");
var calendar = createTiddlyElement(place, "table", null, "calendar", null);
var tbody = createTiddlyElement(calendar, "tbody", null, null, null);
var today = new Date();
var year = today.getYear();
if (year<1900) year+=1900;
if (params[0] == "thismonth")
{
cacheReminders(new Date(year, today.getMonth(), 1, 0, 0), 31);
createCalendarOneMonth(tbody, year, today.getMonth());
}
else if (params[0] == "lastmonth") {
var month = today.getMonth()-1; if (month==-1) { month=11; year--; }
cacheReminders(new Date(year, month, 1, 0, 0), 31);
createCalendarOneMonth(tbody, year, month);
}
else if (params[0] == "nextmonth") {
var month = today.getMonth()+1; if (month>11) { month=0; year++; }
cacheReminders(new Date(year, month, 1, 0, 0), 31);
createCalendarOneMonth(tbody, year, month);
}
else {
if (params[0]) year = params[0];
if(params[1])
{
cacheReminders(new Date(year, params[1]-1, 1, 0, 0), 31);
createCalendarOneMonth(tbody, year, params[1]-1);
}
else
{
cacheReminders(new Date(year, 0, 1, 0, 0), 366);
createCalendarYear(tbody, year);
}
}
window.reminderCacheForCalendar = null;
}
//}}}
//{{{
//This global variable is used to store reminders that have been cached
//while the calendar is being rendered. It will be renulled after the calendar is fully rendered.
window.reminderCacheForCalendar = null;
//}}}
//{{{
function cacheReminders(date, leadtime)
{
//alert("reminder");
if (window.findTiddlersWithReminders == null)
return;
window.reminderCacheForCalendar = {};
var leadtimeHash = [];
leadtimeHash [0] = 0;
leadtimeHash [1] = leadtime;
var t = findTiddlersWithReminders(date, leadtimeHash, null, 1);
for(var i = 0; i < t.length; i++) {
//just tag it in the cache, so that when we're drawing days, we can bold this one.
window.reminderCacheForCalendar[t[i]["matchedDate"]] = "reminder:" + t[i]["params"]["title"];
}
}
//}}}
//{{{
function createCalendarOneMonth(calendar, year, mon)
{
var row = createTiddlyElement(calendar, "tr", null, null, null);
createCalendarMonthHeader(calendar, row, config.macros.calendar.monthnames[mon] + " " + year, true, year, mon);
row = createTiddlyElement(calendar, "tr", null, null, null);
createCalendarDayHeader(row, 1);
createCalendarDayRowsSingle(calendar, year, mon);
}
//}}}
//{{{
function createCalendarMonth(calendar, year, mon)
{
var row = createTiddlyElement(calendar, "tr", null, null, null);
createCalendarMonthHeader(calendar, row, config.macros.calendar.monthnames[mon] + " " + year, false, year, mon);
row = createTiddlyElement(calendar, "tr", null, null, null);
createCalendarDayHeader(row, 1);
createCalendarDayRowsSingle(calendar, year, mon);
}
//}}}
//{{{
function createCalendarYear(calendar, year)
{
var row;
row = createTiddlyElement(calendar, "tr", null, null, null);
var back = createTiddlyElement(row, "td", null, null, null);
var backHandler = function() {
removeChildren(calendar);
createCalendarYear(calendar, year-1);
};
createTiddlyButton(back, "<", "Previous year", backHandler);
back.align = "center";
var yearHeader = createTiddlyElement(row, "td", null, "calendarYear", year);
yearHeader.align = "center";
yearHeader.setAttribute("colSpan", 19);
var fwd = createTiddlyElement(row, "td", null, null, null);
var fwdHandler = function() {
removeChildren(calendar);
createCalendarYear(calendar, year+1);
};
createTiddlyButton(fwd, ">", "Next year", fwdHandler);
fwd.align = "center";
createCalendarMonthRow(calendar, year, 0);
createCalendarMonthRow(calendar, year, 3);
createCalendarMonthRow(calendar, year, 6);
createCalendarMonthRow(calendar, year, 9);
}
//}}}
//{{{
function createCalendarMonthRow(cal, year, mon)
{
var row = createTiddlyElement(cal, "tr", null, null, null);
createCalendarMonthHeader(cal, row, config.macros.calendar.monthnames[mon], false, year, mon);
createCalendarMonthHeader(cal, row, config.macros.calendar.monthnames[mon+1], false, year, mon);
createCalendarMonthHeader(cal, row, config.macros.calendar.monthnames[mon+2], false, year, mon);
row = createTiddlyElement(cal, "tr", null, null, null);
createCalendarDayHeader(row, 3);
createCalendarDayRows(cal, year, mon);
}
//}}}
//{{{
function createCalendarMonthHeader(cal, row, name, nav, year, mon)
{
var month;
if(nav) {
var back = createTiddlyElement(row, "td", null, null, null);
back.align = "center";
back.style.background = config.macros.calendar.monthbg;
/*
back.setAttribute("colSpan", 2);
var backYearHandler = function() {
var newyear = year-1;
removeChildren(cal);
cacheReminders(new Date(newyear, mon , 1, 0, 0), 31);
createCalendarOneMonth(cal, newyear, mon);
};
createTiddlyButton(back, "<<", "Previous year", backYearHandler);
*/
var backMonHandler = function() {
var newyear = year;
var newmon = mon-1;
if(newmon == -1) { newmon = 11; newyear = newyear-1;}
removeChildren(cal);
cacheReminders(new Date(newyear, newmon , 1, 0, 0), 31);
createCalendarOneMonth(cal, newyear, newmon);
};
createTiddlyButton(back, "<", "Previous month", backMonHandler);
month = createTiddlyElement(row, "td", null, "calendarMonthname", name)
// month.setAttribute("colSpan", 3);
month.setAttribute("colSpan", 5);
var fwd = createTiddlyElement(row, "td", null, null, null);
fwd.align = "center";
fwd.style.background = config.macros.calendar.monthbg;
// fwd.setAttribute("colSpan", 2);
var fwdMonHandler = function() {
var newyear = year;
var newmon = mon+1;
if(newmon == 12) { newmon = 0; newyear = newyear+1;}
removeChildren(cal);
cacheReminders(new Date(newyear, newmon , 1, 0, 0), 31);
createCalendarOneMonth(cal, newyear, newmon);
};
createTiddlyButton(fwd, ">", "Next month", fwdMonHandler);
/*
var fwdYear = createTiddlyElement(row, "td", null, null, null);
var fwdYearHandler = function() {
var newyear = year+1;
removeChildren(cal);
cacheReminders(new Date(newyear, mon , 1, 0, 0), 31);
createCalendarOneMonth(cal, newyear, mon);
};
createTiddlyButton(fwd, ">>", "Next year", fwdYearHandler);
*/
} else {
month = createTiddlyElement(row, "td", null, "calendarMonthname", name)
month.setAttribute("colSpan", 7);
}
month.align = "center";
month.style.background = config.macros.calendar.monthbg;
}
//}}}
//{{{
function createCalendarDayHeader(row, num)
{
//alert("createCalendarDayHeader");
var cell;
for(var i = 0; i < num; i++) {
for(var j = 0; j < 7; j++) {
var d = j + (config.options.txtCalFirstDay - 0);
if(d > 6) d = d - 7;
cell = createTiddlyElement(row, "td", null, null, config.macros.calendar.daynames[d]);
if(d == (config.options.txtCalStartOfWeekend-0) || d == (config.options.txtCalStartOfWeekend-0+1))
cell.style.background = config.macros.calendar.weekendbg;
}
}
}
//}}}
//{{{
function createCalendarDays(row, col, first, max, year, mon)
{
//alert("createCalendarDays");
var i;
for(i = 0; i < col; i++) {
createTiddlyElement(row, "td", null, null, null);
}
var day = first;
for(i = col; i < 7; i++) {
var d = i + (config.options.txtCalFirstDay - 0);
if(d > 6) d = d - 7;
var daycell = createTiddlyElement(row, "td", null, null, null);
var isaWeekend = ((d == (config.options.txtCalStartOfWeekend-0) || d == (config.options.txtCalStartOfWeekend-0+1))? true:false);
if(day > 0 && day <= max) {
var celldate = new Date(year, mon, day);
// ELS 2005.10.30: use <<date>> macro's showDate() function to create popup
if (window.showDate) {
showDate(daycell,celldate,"popup","DD","DD-MMM-YYYY",true, isaWeekend);
} else {
if(isaWeekend) daycell.style.background = config.macros.calendar.weekendbg;
var title = celldate.formatString(config.macros.calendar.tiddlerformat);
if(calendarIsHoliday(celldate)) {
daycell.style.background = config.macros.calendar.holidaybg;
}
if(window.findTiddlersWithReminders == null) {
var link = createTiddlyLink(daycell, title, false);
link.appendChild(document.createTextNode(day));
} else {
var button = createTiddlyButton(daycell, day, title, onClickCalendarDate);
}
}
}
day++;
}
}
//}}}
// //We've clicked on a day in a calendar - create a suitable pop-up of options.
// //The pop-up should contain:
// // * a link to create a new entry for that date
// // * a link to create a new reminder for that date
// // * an <hr>
// // * the list of reminders for that date
//{{{
function onClickCalendarDate(e)
{
//alert("onClickCalendarDate");
// var button = this;
// var date = button.getAttribute("title");
// var dat = new Date(date.substr(6,4), date.substr(3,2)-1, date.substr(0, 2));
// date = dat.formatString(config.macros.calendar.tiddlerformat);
//var popup = createTiddlerPopup(this);
// popup.appendChild(document.createTextNode(date));
// var newReminder = function() {
// var t = store.getTiddlers(date);
// displayTiddler(null, date, 2, null, null, false, false);
// if(t) {
// document.getElementById("editorBody" + date).value += "\n<<reminder day:" + dat.getDate() +
// " month:" + (dat.getMonth()+1) +
// " year:" + (dat.getYear()+1900) + " title: >>";
// } else {
// document.getElementById("editorBody" + date).value = "<<reminder day:" + dat.getDate() +
// " month:" + (dat.getMonth()+1) +
// " year:" + (dat.getYear()+1900) + " title: >>";
// }
// };
// var link = createTiddlyButton(popup, "New reminder", null, newReminder);
// popup.appendChild(document.createElement("hr"));
// var t = findTiddlersWithReminders(dat, [0,14], null, 1);
// for(var i = 0; i < t.length; i++) {
// link = createTiddlyLink(popup, t[i].tiddler, false);
// link.appendChild(document.createTextNode(t[i].tiddler));
// }
}
//}}}
//{{{
function calendarMaxDays(year, mon)
{
//alert("calendarMaxDays");
var max = config.macros.calendar.monthdays[mon];
if(mon == 1 && (year % 4) == 0 && ((year % 100) != 0 || (year % 400) == 0)) {
max++;
}
return max;
}
//}}}
//{{{
function createCalendarDayRows(cal, year, mon)
{
//alert("createCalendarDayRows");
var row = createTiddlyElement(cal, "tr", null, null, null);
var first1 = (new Date(year, mon, 1)).getDay() -1 - (config.options.txtCalFirstDay-0);
if(first1 < 0) first1 = first1 + 7;
var day1 = -first1 + 1;
var first2 = (new Date(year, mon+1, 1)).getDay() -1 - (config.options.txtCalFirstDay-0);
if(first2 < 0) first2 = first2 + 7;
var day2 = -first2 + 1;
var first3 = (new Date(year, mon+2, 1)).getDay() -1 - (config.options.txtCalFirstDay-0);
if(first3 < 0) first3 = first3 + 7;
var day3 = -first3 + 1;
var max1 = calendarMaxDays(year, mon);
var max2 = calendarMaxDays(year, mon+1);
var max3 = calendarMaxDays(year, mon+2);
while(day1 <= max1 || day2 <= max2 || day3 <= max3) {
row = createTiddlyElement(cal, "tr", null, null, null);
createCalendarDays(row, 0, day1, max1, year, mon); day1 += 7;
createCalendarDays(row, 0, day2, max2, year, mon+1); day2 += 7;
createCalendarDays(row, 0, day3, max3, year, mon+2); day3 += 7;
}
}
//}}}
//{{{
function createCalendarDayRowsSingle(cal, year, mon)
{
//alert("createCalendar");
var row = createTiddlyElement(cal, "tr", null, null, null);
var first1 = (new Date(year, mon, 1)).getDay() -1 - (config.options.txtCalFirstDay-0);
if(first1 < 0) first1 = first1+ 7;
var day1 = -first1 + 1;
var max1 = calendarMaxDays(year, mon);
while(day1 <= max1) {
row = createTiddlyElement(cal, "tr", null, null, null);
createCalendarDays(row, 0, day1, max1, year, mon); day1 += 7;
}
}
//}}}
// //ELS 2005.10.30: added styles
//{{{
setStylesheet(".calendar, .calendar table, .calendar th, .calendar tr, .calendar td { font-size:10pt; text-align:center; } .calendar, .calendar a { margin:0px !important; padding:0px !important; }", "calendarStyles");
//}}}
/***
|''Name:''|ClearChangeCountPlugin|
|''Description:''|Adds a button to toolbar or sync menu to clear the change count|
|''Author:''|Kenny Z|
|''Source:''|http://cooltool.tiddlyspot.com/#ClearChangeCountPlugin|
|''CodeRepository:''| |
|''Version:''|0.0.1|
|''Status:''|Beta|
|''Date:''|June 20, 2010|
|''Comments:''| |
|''License:''|[[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]] |
|''~CoreVersion:''|2.6|
!!Description:
Adds a button to toolbar or sync menu to clear the change count. Useful for clearing out distractions during syncing.
[img[clearChangeCount.png]]
!!Usage:
#Import
#Save and reload
//Optionally, add "clearChangeCount" to [[ToolbarCommands]]//
!!Code:
***/
//{{{
originalSyncing = config.commands.syncing.handlePopup;
config.commands.syncing.handlePopup = function(popup,title) {
originalSyncing(popup,title);
var btn = createTiddlyButton(createTiddlyElement(popup,"li"),
config.commands.clearChangeCount.text,
config.commands.clearChangeCount.tooltip,
config.commands.clearChangeCount.handler);
btn.setAttribute("title",title);
};
// toolbar - add this to [[ToolbarCommands]]
config.commands.clearChangeCount = {
text: "clearChangeCount",
tooltip: "Clears the change count",
handler: function(event,src,title){
if(!title) title = this.getAttribute("title");
store.resetTiddler(title);
autoSaveChanges();
}
};
//}}}
<<myComment>>
Comment of: [[ClearChangeCountPlugin]]
----
~~:::::__Sat Jun 26 2010 14:20:40 GMT-0400 (Eastern Daylight Time)__:::::~~
^^(__KennyZ Wrote:__)^^ added autosave check
/***
!! Collapse Plugins
folds and unfolds tiddlers.
***/
///%
config.commands.toggleTiddler = {
text: " ▲ ",
tooltip: "Toggle this tiddler",
handler: function(event,src,title)
{
var e = story.findContainingTiddler(src);
if(e.getAttribute("template") != config.tiddlerTemplates[DEFAULT_EDIT_TEMPLATE]){
var template;
if(e.getAttribute("template") != "CollapsedTemplate" ){
config.commands.toggleTiddler.text=" ▼ ";
e.setAttribute("oldTemplate",e.getAttribute("template"));
story.displayTiddler(null,title,"CollapsedTemplate");
}
else{
config.commands.toggleTiddler.text=" ▲ ";
var e = story.findContainingTiddler(src);
story.displayTiddler(null,title,e.getAttribute("oldTemplate"));
}
}
}
}
config.macros.toggleAll = {
handler: function(place,macroName,params,wikifier,paramString,tiddler){
createTiddlyButton(place,"toggle all","",function(){
story.forEachTiddler(function(title,tiddler){
config.commands.toggleTiddler.handler(null,tiddler,title);
}
)})
}
}
config.commands.collapseOthers = {
text: "collapse others",
tooltip: "Expand this tiddler and collapse all others",
handler: function(event,src,title)
{
var e = story.findContainingTiddler(src);
story.forEachTiddler(function(title,tiddler){
if(tiddler.getAttribute("template") != config.tiddlerTemplates[DEFAULT_EDIT_TEMPLATE]){
var t="CollapsedTemplate";
if (e==tiddler) t=e.getAttribute("oldTemplate");
if (!t||!t.length){
t="ViewTemplate";
config.commands.toggleTiddler.text=" ▲ ";
}
else config.commands.toggleTiddler.text=" ▼ ";
story.displayTiddler(null,title,t);
}
})
}
}
config.macros.collapseAll = {
handler: function(place,macroName,params,wikifier,paramString,tiddler){
createTiddlyButton(place,"collapse all","",function(){
story.forEachTiddler(function(title,tiddler){
if(tiddler.getAttribute("template") != config.tiddlerTemplates[DEFAULT_EDIT_TEMPLATE]){
config.commands.toggleTiddler.text=" ▼ ";
story.displayTiddler(null,title,"CollapsedTemplate");
}
})})
}
}
config.macros.expandAll = {
handler: function(place,macroName,params,wikifier,paramString,tiddler){
createTiddlyButton(place,"expand all","",function(){
story.forEachTiddler(function(title,tiddler){
if(tiddler.getAttribute("template") == "CollapsedTemplate"){
config.commands.toggleTiddler.text=" ▲ ";
story.displayTiddler(null,title,tiddler.getAttribute("oldTemplate"));
}
})})
}
}
//%/
<<myComment>>
----
~~:::::__Sat Jun 26 2010 00:06:21 GMT-0400 (Eastern Daylight Time)__:::::~~
^^(__KennyZ Wrote:__)^^ Change: Instead of close or open, I made it toggle.
<!--{{{-->
<span class='title' macro='view title'></span>
<span class='subtitle'><span macro='view modifier link'></span>, <span macro='view modified date'></span> (<span macro='message views.wikified.createdPrompt'></span> <span macro='view created date'></span>)</span>
<div>
<span class='toolbar' macro='toolbar [[ToolbarCommands::ViewToolbar]]'></span>
<span class='toolbar' macro='tagger'></span>
<div class='toolbar' macro='toolbar toggleTiddler'></div>
</div>
<!--}}}-->
<<newTiddler
label:"New Ticket"
title:"title_comment"
focus:"text"
tag:"comment" tag:"excludeLists"
text:""
>>
#<<newTiddler label:"e" prompt:"edit" title:"title_comment" focus:"text" tag:"comment" tag:"excludeLists">><<newTiddler label:"v" prompt:"view" title:"title_comment" template:"ViewTemplate">><<slider chkCookieSlider title_comment "Help I can't get it to work and it's driving me crazy!!" "Read more...">>
#<<newTiddler label:"e" title:"title_comment" focus:"text" tag:"comment" tag:"excludeLists">><<newTiddler label:"v" title:"title_comment" template:"ViewTemplate">><<slider chkCookieSlider title_comment "Help I can't get it to work and it's driving me crazy!!" "Read more...">>
#<<newTiddler label:"e" title:"title_comment" focus:"text" tag:"comment" tag:"excludeLists">><<newTiddler label:"v" title:"title_comment" template:"ViewTemplate">><<slider chkCookieSlider title_comment "Help I can't get it to work and it's driving me crazy!!" "Read more...">>
#<<newTiddler label:"e" title:"title_comment" focus:"text" tag:"comment" tag:"excludeLists">><<newTiddler label:"v" title:"title_comment" template:"ViewTemplate">><<slider chkCookieSlider title_comment "Help I can't get it to work and it's driving me crazy!!" "Read more...">>
#<<slider chkCookieSlider title_comment "Help I can't get it to work and it's driving me crazy!!" "Read more...">><<newTiddler label:"e" title:"title_comment" focus:"text" tag:"comment" tag:"excludeLists">><<newTiddler label:"v" title:"title_comment" template:"ViewTemplate">>
#<<slider chkCookieSlider title_comment "Help I can't get it to work and it's driving me crazy!!" "Read more...">><<newTiddler label:"e" title:"title_comment" focus:"text" tag:"comment" tag:"excludeLists">><<newTiddler label:"v" title:"title_comment" template:"ViewTemplate">>
#<<slider chkCookieSlider title_comment "Help I can't get it to work and it's driving me crazy!!" "Read more...">><<newTiddler label:"e" title:"title_comment" focus:"text" tag:"comment" tag:"excludeLists">><<newTiddler label:"v" title:"title_comment" template:"ViewTemplate">>
#<<slider chkCookieSlider title_comment "Help I can't get it to work and it's driving me crazy!!" "Read more...">><<newTiddler label:"e" title:"title_comment" focus:"text" tag:"comment" tag:"excludeLists">><<newTiddler label:"v" title:"title_comment" template:"ViewTemplate">>
#<<slider chkCookieSlider title_comment "Help I can't get it to work and it's driving me crazy!!" "Read more...">><<newTiddler label:"e" title:"title_comment" focus:"text" tag:"comment" tag:"excludeLists">><<newTiddler label:"v" title:"title_comment" template:"ViewTemplate">>
[[!!!Help I can't get it to work and it's driving me crazy!!|title_comment]] ~<<slider chkCookieSlider title_comment "Read more..." "Read more...">>
Help I can't get it to work and it's driving me crazy!! ~<<slider chkCookieSlider title_comment "Read more..." "Read more...">>
!!!!Help I can't get it to work and it's driving me crazy!!
adsdasfadsffds<<tiddler title_comment>><<foldHeadings closed>>
!!!!Help I can't get it to work and it's driving me crazy!!
sdfdf sf sdfas sdfs fd hfd g h 5e yt yu r 6 u 6 43 52343243 5 43 534 5 45765 8 73 6345 34535
4 35325 3 5 35 32 45 345 3 5 36 65 7 47 35 73 57 4 6 rjh gyj gn g mn gdh j ythu y 45 6 46 e t tr jytj <<foldHeadings closed>>
!!!!Help I can't get it to work and it's driving me crazy!!
sdfdf sf sdfas sdfs fd hfd g h 5e yt yu r 6 u 6 43 52343243 5 43 534 5 45765 8 73 6345 34535
4 35325 3 5 35 32 45 345 3 5 36 65 7 47 35 73 57 4 6 rjh gyj gn g mn gdh j ythu y 45 6 46 e t tr jytj <<foldHeadings closed>>
/***
|''Name:''|CopyPlugin|
|''Description:''|Copy a tiddler. For backup, etc...|
|''Author:''|Kenny Z|
|''Source:''|http://cooltool.tiddlyspot.com/#CopyPlugin|
|''CodeRepository:''||
|''Version:''|0.0.1|
|''Status:''|beta|
|''Date:''|June 25, 2010|
|''Comments:''| |
|''License:''|[[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]] |
|''~CoreVersion:''|2.6|
!!Description
Makes a copy of a tiddler. For backup, etc...
!!Usage
Add "{{{basicCopy}}}" to [[ToolbarCommands]] in the ~ViewToolbar slice.
<<<
|click|copy|
|ctrl+click|copy & display|
<<<
!!Code
***/
//{{{
if(!version.extensions.basicCopy) {
version.extensions.basicCopy= {installed:true};
config.commands.basicCopy= {
text: "copy",
tooltip: "Copy this tiddler to another tiddler",
readOnlyText: '',
readOnlyTooltip: '',
warning: '',
handler: function(event,src,title) {
des = prompt("Enter name for tiddler title:",title+"_copy");
if(!des.replace(/^\s+|\s+$/g,'')) return;
if(store.tiddlerExists(des)){
displayMessage('Fail: "'+des+'" already exists.');
return;
}
t = store.getTiddler(title);
store.saveTiddler(null,des,t.text,config.options.txtUserName,
(new Date()),t.tags.slice(0),(cooltool.core.clone(t.fields)),true,t.created);
if (t.tags.contains("systemConfig"))store.setTiddlerTag( des,1,"systemConfigDisable" );
autoSaveChanges();
if(event.ctrlKey) story.displayTiddler(null,des);
displayMessage('Success: "'+title+'" copied to "'+des+'".');
},
};
if(!window.cooltool) window.cooltool={};
if(!cooltool.core) cooltool.core={};
if(!cooltool.core.clone)
cooltool.core.clone = function(o){ //IF RENAMING, REM. THIS IS A RECURSIVE FUNCTION
if(!o||typeof(o)!='object')return o;
var t = new o.constructor();
for(var k in o) t[k] = cooltool.core.clone(o[k]); // RECURSIVE
return t;
};
} //# end of 'install only once'
//}}}
<<myComment>>
Comment of: [[CopyPlugin]]
----
~~:::::__Sat Jun 26 2010 14:17:34 GMT-0400 (Eastern Daylight Time)__:::::~~
^^(__KennyZ Wrote:__)^^ added autosave check
----
~~:::::__Sun Jun 27 2010 00:44:00 GMT-0400 (Eastern Daylight Time)__:::::~~
^^(__KennyZ Wrote:__)^^ Changes: modifier and modified date are updated and not duplicates of the old ones.
----
~~:::::__Sun Jun 27 2010 00:51:21 GMT-0400 (Eastern Daylight Time)__:::::~~
^^(__KennyZ Wrote:__)^^ I found it annoying having the copy displayed while I was only trying to make a backup. Not only that, I end up making changes to the duplicate instead. So I'm changing it to ctrl + click for the tiddler to display.
----
~~:::::__Sun Jun 27 2010 00:57:38 GMT-0400 (Eastern Daylight Time)__:::::~~
^^(__KennyZ Wrote:__)^^ added: if tag=="systemConfig", add "systemConfigDisable"
/***
!String callback function
***/
//{{{
function strCB(str){
return str;
};
//}}}
/***
!new window
__Parameters__
*obj
*maxLevel,
*maxStringLength,
*boolSkipMethodsAndFunctions,
*separator
*startLevel???,
*strCallback
***/
//{{{
//debug(document.location);
function debug(content,level, sMax, skipMethods, sep, l, strCallback) {
if(!level) level = 3;
top.console=window.open('','myconsole','width=600,height=800'
+',menubar=0'+',toolbar=1'+',status=0'+',scrollbars=1'+',resizable=1')
top.console.document.writeln(
'<html><head><title>Console</title></head>'
+'<body bgcolor=white onLoad="self.focus()">'
+print_r(content,level,sMax, skipMethods, sep, l, strCallback)+'</body></html>'
)
top.console.document.close()
}
//}}}
/***
!print_r
*added strCallback for string manipulations.
***/
//{{{
//print_r( obj, maxLevel, maxStringLength, boolSkipMethodsAndFunctions, separator, startLevel???, strCallback )
function print_r(x, max, sMax, skipMethods, sep, l, strCallback) {
max = max || 10;
sMax = sMax || 50;
skipMethods = skipMethods || true;
sep = sep || ' ';
l = l || 0;
if (l > max) return '<font color=\'green\'>[Stopped at ' + l + ' levels]</font><br>\n';
var i, r = '', t = typeof x, tab = '';
if (x === null)
r += '(null)<br>\n';
else if (t == 'object') {
l++;
for (i = 0; i < l; i++)
tab += sep;
if (x && x.length)
t = 'array';
r += '(' + t + ':' + l + ') : <br>\n';
for (i in x) {
if (!(typeof x[i] == 'function' && skipMethods)) {
try {
r += tab + '[' + i + '] : ' +
print_r(x[i], max, sMax, skipMethods, sep, l, strCallback);
}
catch (e) {
return r+='<font color=\'red\'>[ERROR: ' + e + ']</font><br>\n';
}
}
}
}
else {
var sLen = '';
if (t == 'string') {
sLen = '[' + x.length + ']';
if (x.length > sMax)
x = x.substr(0, sMax) + '...';
if(strCallback)
x = strCallback(x);
}
if (!(t == 'function' && skipMethods)) {
r += '(' + t + sLen + ') ' + x + '<br>\n';
}
}
return r + '<hr />';
};
//}}}
//{{{
if (window.location.protocol == "http:"){
Story.prototype.displayDefaultTiddlers = function(){
this.displayTiddlers(null,store.filterTiddlers("[GettingStarted] [historyPluginSample] [Samples]"));
};
config.options.txtUserName="Guest";
}
//}}}
/***
|''Name:''|DeliciousTaggingPlugin|
|''Version:''|0.1|
|''Source''|http://jackparke.googlepages.com/jtw.html#DeliciousTaggingPlugin ([[del.icio.us|http://del.icio.us/post?url=http://jackparke.googlepages.com/jtw.html%DeliciousTaggingPlugin]])|
|''Author:''|[[Jack]]|
!Description
Allows easy 'del.icio.us'-like tagging in the EditTemplate by showing all tags as a list of link-buttons.
!Usage
Replace your the editorFooter div in your [[EditTemplate]] with the following:
{{{
<div class='editorFooter' macro='deliciousTagging'></div>
}}}
!Code
***/
//{{{
version.extensions.deliciousTagging = {major: 0, minor: 1, revision: 0, date: new Date("June 11, 2007")};
config.macros.deliciousTagging= {};
config.macros.deliciousTagging.onTagClick = function(e)
{
if(!e) var e = window.event;
var tag = this.getAttribute("tag");
var title = this.getAttribute("tiddler");
if(!readOnly)
story.setTiddlerTag(title,tag,0);
return false;
};
config.macros.deliciousTagging.handler = function(place,macroName,params,wikifier,paramString,tiddler)
{
if(tiddler instanceof Tiddler) {
var title = tiddler.title;
if(!e) var e = window.event;
var tags = store.getTags();
var lingo = config.views.editor.tagChooser;
for(var t=0; t<tags.length; t++) {
var theTag = createTiddlyButton(place,tags[t][0],lingo.tagTooltip.format([tags[t][0]]),config.macros.deliciousTagging.onTagClick);
theTag.setAttribute("tag",tags[t][0]);
theTag.setAttribute("tiddler",tiddler.title);
place.appendChild(document.createTextNode(" "));
}
}
};
//}}}
/***
|''Name:''|DisableStrikeThroughPlugin|
|''Description:''|Allows you to disable TiddlyWiki's automatic linking of WikiWords|
|''Author:''|Martin Budden (mjbudden (at) gmail (dot) com)|
|''Source:''|http://www.martinswiki.com/#DisableStrikeThroughPlugin |
|''CodeRepository:''|http://svn.tiddlywiki.org/Trunk/contributors/MartinBudden/plugins/DisableStrikeThroughPlugin.js |
|''Version:''|0.0.1|
|''Date:''|Feb 18, 2008|
|''Comments:''|Please make comments at http://groups.google.co.uk/group/TiddlyWikiDev |
|''License:''|[[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]] |
|''~CoreVersion:''|2.1.0|
***/
//{{{
// Ensure that the DisableStrikeThroughPlugin is only installed once.
if(!version.extensions.DisableStrikeThroughPlugin) {
version.extensions.DisableStrikeThroughPlugin = {installed:true};
if(version.major < 2 || (version.major == 2 && version.minor < 1))
{alertAndThrow('DisableStrikeThroughPlugin requires TiddlyWiki 2.1 or newer.');}
DisableStrikeThroughPlugin = {};
DisableStrikeThroughPlugin.replaceFormatters = function()
{
for(var i=0; i<config.formatters.length; i++) {
var name = config.formatters[i].name;
if(name == 'characterFormat') {
config.formatters[i].match = "''|//|__|\\^\\^|~~|\\{\\{\\{";
break;
} else if(name == 'strikeByChar') {
config.formatters.splice(i,1);
break;
}
}
};
DisableStrikeThroughPlugin.replaceFormatters();
} // end of 'install only once'
//}}}
/***
|''Name:''|DisableWikiLinksPlugin|
|''Description:''|Allows you to disable TiddlyWiki's automatic linking of WikiWords|
|''Author:''|Martin Budden (mjbudden (at) gmail (dot) com)|
|''Source:''|http://www.martinswiki.com/#DisableWikiLinksPlugin |
|''CodeRepository:''|http://svn.tiddlywiki.org/Trunk/contributors/MartinBudden/plugins/DisableWikiLinksPlugin.js |
|''Version:''|0.1.3|
|''Date:''|Aug 5, 2006|
|''Comments:''|Please make comments at http://groups.google.co.uk/group/TiddlyWikiDev |
|''License:''|[[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]] |
|''~CoreVersion:''|2.1.0|
|''Disable WikiLinks''|<<option chkDisableWikiLinks>>|
!My change:
*added description for chkDisableWikiLinks
*defaults to true;
!Code
***/
//{{{
// Ensure that the DisableWikiLinksPlugin is only installed once.
if(!version.extensions.DisableWikiLinksPlugin) {
version.extensions.DisableWikiLinksPlugin = {installed:true};
if(version.major < 2 || (version.major == 2 && version.minor < 1))
{alertAndThrow('DisableWikiLinksPlugin requires TiddlyWiki 2.1 or newer.');}
merge(config.optionsDesc, {chkDisableWikiLinks:"Disables auto ~WikiLinks"}); //for "advanced options" section
if (config.options.chkDisableWikiLinks==undefined)
{config.options.chkDisableWikiLinks = true;} //default
Tiddler.prototype.autoLinkWikiWords = function()
{
if(config.options.chkDisableWikiLinks==true)
{return false;}
return !this.isTagged('systemConfig') && !this.isTagged('excludeMissing');
};
} // end of 'install only once'
//}}}
// Copyright (c) 2008 Tony Garnock-Jones <tonyg@lshift.net>
// Copyright (c) 2008 LShift Ltd. <query@lshift.net>
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation files
// (the "Software"), to deal in the Software without restriction,
// including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software,
// and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
//
// The above copyright notice and this permission notice shall be
// included in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
// BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
DrawDvcs = {
renderRepository: function (repo) {
var childCount = {};
var ordering = [];
var i, j, item, parent, column, row;
var worklist = repo.childlessRevisions();
while (worklist.length) {
item = worklist.shift();
ordering.push(item);
var parents = repo.lookupParents(item);
for (i = 0; i < parents.length; i++) {
parent = parents[i];
if (childCount[parent] == undefined) {
childCount[parent] = (repo.children[parent] || []).length;
}
childCount[parent] = childCount[parent] - 1;
if (childCount[parent] === 0) {
worklist.push(parent);
}
}
}
var slots = [];
var assignments = {};
function allocateSlot(item) {
var column = assignments[item];
if (typeof(column) != 'number') {
column = null;
for (var j = 0; j < slots.length; j++) {
if (slots[j] === null) {
column = j;
break;
}
}
if (column === null) {
slots.push(item);
column = slots.length - 1;
}
}
return column;
}
var finalAssignments = [];
var cells = [];
var oldrow = [];
for (i = 0; i < ordering.length; i++) {
item = ordering[i];
var hasKid = typeof(assignments[item]) == 'number';
column = allocateSlot(item);
var parentIds = repo.lookupParents(item);
var parentColumns = [];
slots[column] = null;
for (j = 0; j < parentIds.length; j++) {
parent = parentIds[j];
var c2 = (j === 0)
? (typeof(assignments[parent]) == 'number'
? allocateSlot(parent)
: column)
: allocateSlot(parent);
parentColumns.push(c2);
slots[c2] = parent;
assignments[parent] = c2;
}
finalAssignments.push(column);
row = [];
for (j = 0; j < slots.length; j++) {
var oldCell = (oldrow.length >= j ? oldrow[j] : 0);
if (oldCell & 16) {
row[j] = (oldCell & 4) ? 1 : 0;
} else {
row[j] = (oldCell & (1 | 4 | 8)) ? 1 : 0;
}
}
row[column] = 16 | (hasKid ? 1 : 0);
for (j = 0; j < parentColumns.length; j++) {
var parentColumn = parentColumns[j];
var n1 = Math.min(parentColumn, column) + 1;
var n2 = Math.max(parentColumn, column);
for (var k = n1; k < n2; k++) {
row[k] = row[k] | 2;
}
if (parentColumn == column) {
row[parentColumn] = row[parentColumn] | 4;
} else {
row[parentColumn] = row[parentColumn] | (column > parentColumn ? 8 : 4);
row[column] = row[column] | (column > parentColumn ? 2 : 8);
}
}
cells.push(row);
oldrow = row;
}
var results = [];
for (i = 0; i < ordering.length; i++) {
item = ordering[i];
column = finalAssignments[i];
row = cells[i];
var result = {revId: item, pictures: []};
for (j = 0; j < row.length; j++) {
var v = row[j];
result.pictures.push((v & 16 ? "blob_" : "stick_") + (v & 15) + ".png");
}
results.push(result);
}
return results;
},
simpleRenderRepository: function (repo) {
var ordering = DrawDvcs.renderRepository(repo);
var html = "";
for (var i = 0; i < ordering.length; i++) {
var item = ordering[i];
var rev = repo.lookupRev(item.revId);
var pictures = item.pictures;
for (var j = 0; j < pictures.length; j++) {
html = html + "<img src='img/" + pictures[j] + "' />";
}
html = html+" "+item.revId+" ("+rev.branch+") "+(rev.metadata||{}).summary+"<br />\n";
}
return "<p style='line-height: 0px; white-space: nowrap;'>" + html + "</p>";
}
};
/***
|!Name:| ''@@font-size(large):font-variant(small-caps):~EchoMacro@@'' |
|!Version:|1.0.0|
|!Location|http://gwsyzygy.googlepages.com/creator.html#EchoMacro|
|!Author:|GregWalker |
|!Type:|Macro Debugging Tool |
|!Requires|~TW2.x|
!Description
<<<
''echo'' will echo back all params passed to it, including each parameter's #, type, value, and //literal// value (unwikified). Useful for debugging exactly what is getting passed to a macro.
<<<
!Examples
|!Source|!Output|h
|{{{<<echo "Hello, World">>}}}|<<echo "Hello, World">>|
|{{{<<echo this and "that" and [[the other]]>>}}}|<<echo this and "that" and [[the other]]>>|
!History
* 23-Mar-06, version 1.0.0, initial version
!~ToDo
* Update to new //enhanced// parameters in 2.0.7
!Code
***/
/*{{{*/
version.extensions.EchoMacro = { major: 1, minor: 0, revision: 0, date: new Date(2006,3,23),
source: "http://gwsyzygy.googlepages.com/creator.html#EchoMacro"
};
config.macros.echo = {};
config.macros.echo.handler = function (place,macroName,params,wikifier,paramString,tiddler) {
if (params.length == 0)
wikify("//no params//",place);
for(var i=0; i<params.length; i++)
{
wikify("params[" + i + "] (" + typeof(params[i]) + ") = '" + params[i] + "' {{{[" + (params[i] ? params[i].toString() : "null" ) + "]}}}\n", place);
}
}
/*}}}*/
//This plugin is released under the [[Creative Commons Attribution 2.5 License|http://creativecommons.org/licenses/by/2.5/]]
/***
|Name|EditSectionPlugin|
|Source|http://www.TiddlyTools.com/#EditSectionPlugin|
|Documentation|http://www.TiddlyTools.com/#EditSectionPlugin|
|Version|1.0.1|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Requires|StickyPopupPlugin|
|Description|invoke popup 'section editor' for specified section of a tiddler|
!!!!!Usage
<<<
{{{
<<editSection TiddlerName##sectionname label tooltip>>
}}}
where:
* ''~TiddlerName##sectionname'' specifies the section you want to edit.
** If you omit the "~TiddlerName##" portion (i.e., only enter "sectionname"), the current containing tiddler is assumed.
** Changing the section name in the popup editor //renames// that section within the tiddler.
** Changing the tiddler title in the popup editor //copies// that section to another tiddler.
** If the indicated tiddler and/or section does not yet exist, it will be created when you press 'save'.
* ''label'' and ''tooltip'' (both //optional//) specify the link label and mouseover help text for the 'edit section' command link.
<<<
!!!!!Sample
<<<
This is a sample section for you to try
<<<
!!!!!Example
<<<
{{{
<<editSection Sample>>
}}}
<<editSection Sample>>
<<<
!!!!!Configuration
<<<
To customize and/or translate the HTML form layout used to render the section editor, edit the [[EditSectionPluginPanel]] shadow tiddler.
<<<
!!!!!Revisions
<<<
2010.05.24 [1.0.2] in save(), escape regexp chars in section titles (e.g. "!SectionNameWith?InIt")
2009.09.07 [1.0.1] documentation/code cleanup
2009.09.01 [1.0.0] initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.EditSectionPlugin= {major: 1, minor: 0, revision: 2, date: new Date(2010,5,24)};
// deliver shadow payload
config.shadowTiddlers.EditSectionPluginPanel=store.getTiddlerText('EditSectionPlugin##html');
config.macros.editSection = {
label: 'edit section...',
tip: 'edit %0',
handler: function(place,macroName,params,wikifier,paramString,tiddler) {
var here=story.findContainingTiddler(place);
var tid=params[0];
var label=params[1]||this.label.format([tid]);
var tip=params[2]||this.tip.format([tid]);
var btn=createTiddlyButton(place,label,tip,this.click);
btn.setAttribute('tid',tid);
},
click: function(event) {
var here=story.findContainingTiddler(this);
var parts=this.getAttribute('tid').split('##');
var title=parts[1]?parts[0]:null;
var section=parts[1]||parts[0];
if (!title&&here)
title=here.getAttribute('tiddler');
if (!title||!section) {
displayMessage('invalid section reference: '+this.getAttribute('tid'));
return false;
}
return config.macros.editSection.popup(this,event,title,section);
},
popup: function(here,event,title,section) {
var p=Popup.create(here); if (!p) return false;
p.className+=' smallform editSectionPopup sticky';
p.innerHTML=store.getTiddlerText('EditSectionPluginPanel');
var f=p.getElementsByTagName('form')[0];
f.title.value=title;
f.section.value=section;
f.newsection.value=title+'##'+section;
f.content.value=store.getTiddlerText(title+'##'+section,'');
if (version.extensions.TextAreaPlugin) new window.TextAreaResizer(f.content);
Popup.show();
event.cancelBubble=true;
if(event.stopPropagation)event.stopPropagation();
return false;
},
save: function(here,event) {
var f=here.form;
var parts=f.newsection.value.split('##');
var title=parts[1]?parts[0]:null;
var section=parts[1]||parts[0];
var where=Popup.stack[Popup.stack.length-1].root;
if (!title) title=story.findContainingTiddler(where).getAttribute('tiddler');
if (!title||!section) {
displayMessage('invalid section reference: '+f.newsection.value);
f.newsection.focus(); f.newsection.select(); return false;
}
var t=store.getTiddler(title);
if (!t) {
if (!confirm("The tiddler: '"+title+"' does not exist. Press OK to create it."))
{ f.newsection.focus(); f.newsection.select(); return false; }
t=new Tiddler(); t.title=title; t.text='!'+section+'\n';
}
var oldsection=f.section.value;
var current=store.getTiddlerText(title+'##'+oldsection,''); // current content
var pattern=new RegExp('(.*!{1,6})'
+oldsection.escapeRegExp()+'\\n'
+current.escapeRegExp()
+'((?:\\n!{1,6}|$).*)'); // replace
var revised='$1'+section+'\n'+f.content.value+'$2'; // new content
var who =t&&config.options.chkForceMinorUpdate?t.modifier:config.options.txtUserName;
var when=t&&config.options.chkForceMinorUpdate?t.modified:new Date();
store.saveTiddler(title,title,t.text.replace(pattern,revised),who,when,t.tags,t.fields);
story.refreshTiddler(title,null,true);
Popup.remove();
return false;
}
}
//}}}
/***
!!!!!html
<!--{{{-->
<form style="white-space:nowrap">
<input type="hidden" name="title" value="">
<input type="hidden" name="section" value="">
<input type="text" name="newsection" value="" style="width:68%"><!--
--><input type=button value="save" style="width:15%"
onclick="return config.macros.editSection.save(this,event)"><!--
--><input type=button value="cancel" style="width:15%"
onclick="Popup.remove(); return false;">
<div class="editor"><textarea name="content" rows="10" cols="60" style="border:0"
onfocus="this.select()"></textarea></div>
</form>
<!--}}}-->
!!!!!end
***/
<!--{{{-->
<form style="white-space:nowrap">
<input type="hidden" name="title" value="" /><input type="hidden" name="section" value="" />
<input type="text" name="newsection" value="" style="width:25em" />
<input type=button value="save" style="width:4em" onclick="return(config.macros.editSection.save(this,event))" />
<input type=button value="cancel" style="width:4em" onclick="Popup.remove(); return false;" /><br />
<textarea name="content" rows="10" cols="60" style="border:0;width:50%"></textarea>
</form>
<!--}}}-->
<!--{{{-->
<div class='toolbar' macro='toolbar +saveTiddler -cancelTiddler deleteTiddler'></div>
<div class="title" macro="view title"></div>
<table style="border:0px; width:100%;">
<tr><td><div class="editLabel">Title</div></td><td><div style="padding-right:1em;" class="editor" macro="edit title"></div></td></tr>
<tr><td><div class="editLabel">Tags</div></td><td><div style="padding-right:1em;" class="editor" macro="edit tags"></div></td></tr>
<tr><td></td><td>
<div class="editorFooter"><span macro="message views.editor.tagPrompt"></span><span macro="tagChooser"></span>
</div><div macro='annotations'></div></td></tr></table>
<div class="editor" macro="edit text"></div>
<!-- <span macro='autosizeEditor'></span> -->
<span macro='resizeEditor'></span><br /><br />
<!--}}}-->
!usage
{{{[img[EmbeddedHiddenData.png]]}}}
[img[EmbeddedHiddenData.png]]
!notes
attached by FileDropPlugin
!type
image/png
!file
!url
!hiddenData
/%
!data
data:image/png;base64,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
!endHiddenData
%/
/***
|''Name:''|ExampleAdaptorPlugin|
|''Description:''|Example Adaptor which can be used as a basis for creating a new Adaptor|
|''Author:''|Martin Budden (mjbudden (at) gmail (dot) com)|
|''Source:''|http://www.martinswiki.com/#ExampleAdaptorPlugin|
|''CodeRepository:''|http://svn.tiddlywiki.org/Trunk/contributors/MartinBudden/adaptors/ExampleAdaptorPlugin.js|
|''Version:''|0.5.3|
|''Status:''|Not for release - this is a template for creating new adaptors|
|''Date:''|Mar 11, 2007|
|''Comments:''|Please make comments at http://groups.google.co.uk/group/TiddlyWikiDev|
|''License:''|[[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|''~CoreVersion:''|2.2.0|
To make this example into a real TiddlyWiki adaptor, you need to:
# Globally search and replace ExampleAdpator with the name of your adaptor
# Delete any functionality not supported by you host (for example, putTiddler may not be supported)
# Do the actions indicated by the !!TODO comments, namely:
## Set the values of the main variables, eg ExampleAdaptor.serverType etc
## Fill in the uri templates in the .prototype functions
## Parse the responseText returned in the Callback functions and put the results in the appropriate variables
***/
//{{{
if(!version.extensions.ExampleAdaptorPlugin) {
version.extensions.ExampleAdaptorPlugin = {installed:true};
function ExampleAdaptor()
{
this.host = null;
this.workspace = null;
return this;
}
// !!TODO set the variables below
ExampleAdaptor.mimeType = 'text/x.';
ExampleAdaptor.serverType = 'example'; // MUST BE LOWER CASE
ExampleAdaptor.serverParsingErrorMessage = "Error parsing result from server";
ExampleAdaptor.errorInFunctionMessage = "Error in function ExampleAdaptor.%0";
ExampleAdaptor.prototype.setContext = function(context,userParams,callback)
{
if(!context) context = {};
context.userParams = userParams;
if(callback) context.callback = callback;
context.adaptor = this;
if(!context.host)
context.host = this.host;
context.host = ExampleAdaptor.fullHostName(context.host);
if(!context.workspace)
context.workspace = this.workspace;
return context;
};
ExampleAdaptor.doHttpGET = function(uri,callback,params,headers,data,contentType,username,password)
{
return doHttp('GET',uri,data,contentType,username,password,callback,params,headers);
};
ExampleAdaptor.doHttpPOST = function(uri,callback,params,headers,data,contentType,username,password)
{
return doHttp('POST',uri,data,contentType,username,password,callback,params,headers);
};
ExampleAdaptor.fullHostName = function(host)
{
if(!host)
return '';
if(!host.match(/:\/\//))
host = 'http://' + host;
if(host.substr(host.length-1) != '/')
host = host + '/';
return host;
};
ExampleAdaptor.minHostName = function(host)
{
return host ? host.replace(/^http:\/\//,'').replace(/\/$/,'') : '';
};
// Convert a page title to the normalized form used in uris
ExampleAdaptor.normalizedTitle = function(title)
{
var n = title.toLowerCase();
n = n.replace(/\s/g,'_').replace(/\//g,'_').replace(/\./g,'_').replace(/:/g,'').replace(/\?/g,'');
if(n.charAt(0)=='_')
n = n.substr(1);
return String(n);
};
// Convert a date in YYYY-MM-DD hh:mm format into a JavaScript Date object
ExampleAdaptor.dateFromEditTime = function(editTime)
{
var dt = editTime;
return new Date(Date.UTC(dt.substr(0,4),dt.substr(5,2)-1,dt.substr(8,2),dt.substr(11,2),dt.substr(14,2)));
};
ExampleAdaptor.prototype.openHost = function(host,context,userParams,callback)
{
this.host = ExampleAdaptor.fullHostName(host);
context = this.setContext(context,userParams,callback);
if(context.callback) {
context.status = true;
window.setTimeout(function() {callback(context,userParams);},0);
}
return true;
};
ExampleAdaptor.prototype.openWorkspace = function(workspace,context,userParams,callback)
{
this.workspace = workspace;
context = this.setContext(context,userParams,callback);
if(context.callback) {
context.status = true;
window.setTimeout(function() {callback(context,userParams);},0);
}
return true;
};
ExampleAdaptor.prototype.getWorkspaceList = function(context,userParams,callback)
{
context = this.setContext(context,userParams,callback);
// !!TODO set the uriTemplate
var uriTemplate = '%0';
var uri = uriTemplate.format([context.host]);
var req = ExampleAdaptor.doHttpGET(uri,ExampleAdaptor.getWorkspaceListCallback,context);
return typeof req == 'string' ? req : true;
};
ExampleAdaptor.getWorkspaceListCallback = function(status,context,responseText,uri,xhr)
{
context.status = false;
context.statusText = ExampleAdaptor.errorInFunctionMessage.format(['getWorkspaceListCallback']);
if(status) {
try {
// !!TODO: parse the responseText here
var list = [];
var item = {
title:'exampleTitle',
name:'exampleName'
};
list.push(item);
} catch (ex) {
context.statusText = exceptionText(ex,ExampleAdaptor.serverParsingErrorMessage);
if(context.callback)
context.callback(context,context.userParams);
return;
}
context.workspaces = list;
context.status = true;
} else {
context.statusText = xhr.statusText;
}
if(context.callback)
context.callback(context,context.userParams);
};
ExampleAdaptor.prototype.getTiddlerList = function(context,userParams,callback)
{
context = this.setContext(context,userParams,callback);
// !!TODO set the uriTemplate
var uriTemplate = '%0%1';
var uri = uriTemplate.format([context.host,context.workspace]);
var req = ExampleAdaptor.doHttpGET(uri,ExampleAdaptor.getTiddlerListCallback,context);
return typeof req == 'string' ? req : true;
};
ExampleAdaptor.getTiddlerListCallback = function(status,context,responseText,uri,xhr)
{
context.status = false;
context.statusText = ExampleAdaptor.errorInFunctionMessage.format(['getTiddlerListCallback']);
if(status) {
try {
// !!TODO: parse the responseText here
var list = [];
var tiddler = new Tiddler('example');
list.push(tiddler);
} catch (ex) {
context.statusText = exceptionText(ex,ExampleAdaptor.serverParsingErrorMessage);
if(context.callback)
context.callback(context,context.userParams);
return;
}
context.tiddlers = list;
context.status = true;
} else {
context.statusText = xhr.statusText;
}
if(context.callback)
context.callback(context,context.userParams);
};
ExampleAdaptor.prototype.generateTiddlerInfo = function(tiddler)
{
var info = {};
var host = this && this.host ? this.host : ExampleAdaptor.fullHostName(tiddler.fields['server.host']);
var workspace = this && this.workspace ? this.workspace : tiddler.fields['server.workspace'];
// !!TODO set the uriTemplate
uriTemplate = '%0%1%2';
info.uri = uriTemplate.format([host,workspace,tiddler.title]);
return info;
};
ExampleAdaptor.prototype.getTiddlerRevision = function(title,revision,context,userParams,callback)
{
context = this.setContext(context,userParams,callback);
if(revision)
context.revision = revision;
return this.getTiddler(title,context,userParams,callback);
};
ExampleAdaptor.prototype.getTiddler = function(title,context,userParams,callback)
{
context = this.setContext(context,userParams,callback);
if(title)
context.title = title;
if(context.revision) {
// !!TODO set the uriTemplate
var uriTemplate = '%0%1%2%3';
} else {
// !!TODO set the uriTemplate
uriTemplate = '%0%1%2';
}
uri = uriTemplate.format([context.host,context.workspace,ExampleAdaptor.normalizedTitle(title),context.revision]);
context.tiddler = new Tiddler(title);
context.tiddler.fields.wikiformat = 'exampleformat';
context.tiddler.fields['server.type'] = ExampleAdaptor.serverType;
context.tiddler.fields['server.host'] = ExampleAdaptor.minHostName(context.host);
context.tiddler.fields['server.workspace'] = context.workspace;
var req = ExampleAdaptor.doHttpGET(uri,ExampleAdaptor.getTiddlerCallback,context);
return typeof req == 'string' ? req : true;
};
ExampleAdaptor.getTiddlerCallback = function(status,context,responseText,uri,xhr)
{
context.status = false;
context.statusText = ExampleAdaptor.errorInFunctionMessage.format(['getTiddlerCallback']);
if(status) {
try {
// !!TODO: parse the responseText here
// !!TODO: fill in tiddler fields as available
//context.tiddler.tags = ;
//context.tiddler.fields['server.page.id'] = ;
//context.tiddler.fields['server.page.name'] = ;
//context.tiddler.fields['server.page.revision'] = String(...);
//context.tiddler.modifier = ;
//context.tiddler.modified = ExampleAdaptor.dateFromEditTime(...);
} catch (ex) {
context.statusText = exceptionText(ex,ExampleAdaptor.serverParsingErrorMessage);
if(context.callback)
context.callback(context,context.userParams);
return;
}
context.status = true;
} else {
context.statusText = xhr.statusText;
if(context.callback)
context.callback(context,context.userParams);
return;
}
if(context.callback)
context.callback(context,context.userParams);
};
ExampleAdaptor.prototype.getTiddlerRevisionList = function(title,limit,context,userParams,callback)
{
context = this.setContext(context,userParams,callback);
// !!TODO set the uriTemplate
var uriTemplate = '%0%1%2';
if(!limit)
limit = 10;
var uri = uriTemplate.format([context.host,context.workspace,ExampleAdaptor.normalizedTitle(title),limit]);
var req = ExampleAdaptor.doHttpGET(uri,ExampleAdaptor.getTiddlerRevisionListCallback,context);
return typeof req == 'string' ? req : true;
};
ExampleAdaptor.getTiddlerRevisionListCallback = function(status,context,responseText,uri,xhr)
{
context.status = false;
if(status) {
var content = null;
try {
// !!TODO: parse the responseText here
var list = [];
var tiddler = new Tiddler('example');
// !!TODO: fill in tiddler fields as available
//tiddler.modified = ExampleAdaptor.dateFromEditTime();
//tiddler.modifier = ;
//tiddler.tags = ;
//tiddler.fields['server.page.id'] = ;
//tiddler.fields['server.page.name'] = ;
//tiddler.fields['server.page.revision'] = ;
list.push(tiddler);
} catch (ex) {
context.statusText = exceptionText(ex,ExampleAdaptor.serverParsingErrorMessage);
if(context.callback)
context.callback(context,context.userParams);
return;
}
var sortField = 'server.page.revision';
list.sort(function(a,b) {return a.fields[sortField] < b.fields[sortField] ? +1 : (a.fields[sortField] == b.fields[sortField] ? 0 : -1);});
context.revisions = list;
context.status = true;
} else {
context.statusText = xhr.statusText;
}
if(context.callback)
context.callback(context,context.userParams);
};
ExampleAdaptor.prototype.putTiddler = function(tiddler,context,userParams,callback)
{
context = this.setContext(context,userParams,callback);
context.title = tiddler.title;
// !!TODO set the uriTemplate
var uriTemplate = '%0%1%2';
var host = context.host ? context.host : ExampleAdaptor.fullHostName(tiddler.fields['server.host']);
var workspace = context.workspace ? context.workspace : tiddler.fields['server.workspace'];
var uri = uriTemplate.format([host,workspace,tiddler.title,tiddler.text]);
var req = ExampleAdaptor.doHttpPOST(uri,ExampleAdaptor.putTiddlerCallback,context,{"X-Http-Method": "PUT"},tiddler.text,ExampleAdaptor.mimeType);
return typeof req == 'string' ? req : true;
};
ExampleAdaptor.putTiddlerCallback = function(status,context,responseText,uri,xhr)
{
if(status) {
context.status = true;
} else {
context.status = false;
context.statusText = xhr.statusText;
}
if(context.callback)
context.callback(context,context.userParams);
};
ExampleAdaptor.prototype.close = function()
{
return true;
};
config.adaptors[ExampleAdaptor.serverType] = ExampleAdaptor;
} //# end of 'install only once'
//}}}
/***
|''Name:''|ExampleFormatterPlugin|
|''Description:''|Example Formatter which can be used as a basis for creating a new Formatter. Allows Tiddlers to use [[example|http://www.example.com/wikitext]] text formatting|
|''Author:''|Martin Budden (mjbudden (at) gmail (dot) com)|
|''Source:''|http://www.martinswiki.com/#ExampleFormatterPlugin |
|''CodeRepository:''|http://svn.tiddlywiki.org/Trunk/contributors/MartinBudden/formatters/ExampleFormatterPlugin.js |
|''Version:''|0.1.10|
|''Status:''|Not for release - this is a template for creating new formatters|
|''Date:''|Nov 5, 2006|
|''Comments:''|Please make comments at http://groups.google.co.uk/group/TiddlyWikiDev |
|''License:''|[[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]] |
|''~CoreVersion:''|2.1.0|
To make this example into a real TiddlyWiki formatter, you need to:
# Globally search and replace ExampleAdpator with the name of your formatter
# Remove any format entries that are not required
# Change the existing format entries as required
# Add any new format entries that are required
***/
//{{{
// Ensure that the ExampleFormatterPlugin is only installed once.
if(!version.extensions.ExampleFormatterPlugin) {
version.extensions.ExampleFormatterPlugin = {installed:true};
if(version.major < 2 || (version.major == 2 && version.minor < 1))
{alertAndThrow('ExampleFormatterPlugin requires TiddlyWiki 2.1 or later.');}
exampleFormatter = {}; // 'namespace' for local functions
exampleDebug = function(out,str)
{
createTiddlyText(out,str.replace(/\n/mg,'\\n').replace(/\r/mg,'RR'));
createTiddlyElement(out,'br');
};
wikify = function(source,output,highlightRegExp,tiddler)
{
if(source && source !== '') {
var w = new Wikifier(source,getParser(tiddler),highlightRegExp,tiddler);
w.output = tiddler ? createTiddlyElement(output,'p') : output;
w.subWikifyUnterm(w.output);
}
};
config.formatterHelpers.setAttributesFromParams = function(e,p)
{
var re = /\s*(.*?)=(?:(?:"(.*?)")|(?:'(.*?)')|((?:\w|%|#)*))/mg;
var match = re.exec(p);
while(match) {
var s = match[1].unDash();
if(s=='bgcolor') {
s = 'backgroundColor';
}
try {
if(match[2]) {
e.setAttribute(s,match[2]);
} else if(match[3]) {
e.setAttribute(s,match[3]);
} else {
e.setAttribute(s,match[4]);
}
}
catch(ex) {}
match = re.exec(p);
}
};
config.exampleFormatters = [
{
name: 'exampleHeading',
match: '^={1,6}(?!=)',
termRegExp: /(={0,6} *\n+)/mg,
handler: function(w)
{
w.subWikifyTerm(createTiddlyElement(w.output,'h'+w.matchLength),this.termRegExp);
}
},
{
name: 'exampleList',
match: '^[\\*#;:]+ ',
lookaheadRegExp: /^([\*#;:])+ /mg,
termRegExp: /(\n)/mg,
handler: function(w)
{
var stack = [w.output];
var currLevel = 0, currType = null;
var listLevel, listType, itemType, baseType;
w.nextMatch = w.matchStart;
this.lookaheadRegExp.lastIndex = w.nextMatch;
var lookaheadMatch = this.lookaheadRegExp.exec(w.source);
while(lookaheadMatch && lookaheadMatch.index == w.nextMatch) {
switch(lookaheadMatch[1]) {
case '*':
listType = 'ul';
itemType = 'li';
break;
case '#':
listType = 'ol';
itemType = 'li';
break;
case ';':
listType = 'dl';
itemType = 'dt';
break;
case ':':
listType = 'dl';
itemType = 'dd';
break;
default:
break;
}
if(!baseType)
baseType = listType;
listLevel = lookaheadMatch[0].length;
w.nextMatch += lookaheadMatch[0].length;
var t;
if(listLevel > currLevel) {
for(t=currLevel; t<listLevel; t++) {
var target = (currLevel == 0) ? stack[stack.length-1] : stack[stack.length-1].lastChild;
stack.push(createTiddlyElement(target,listType));
}
} else if(listType!=baseType && listLevel==1) {
w.nextMatch -= lookaheadMatch[0].length;
return;
} else if(listLevel < currLevel) {
for(t=currLevel; t>listLevel; t--)
stack.pop();
} else if(listLevel == currLevel && listType != currType) {
stack.pop();
stack.push(createTiddlyElement(stack[stack.length-1].lastChild,listType));
}
currLevel = listLevel;
currType = listType;
var e = createTiddlyElement(stack[stack.length-1],itemType);
w.subWikifyTerm(e,this.termRegExp);
this.lookaheadRegExp.lastIndex = w.nextMatch;
lookaheadMatch = this.lookaheadRegExp.exec(w.source);
}
}
},
{
name: 'exampleRule',
match: '^---+$\\n?',
handler: function(w)
{
createTiddlyElement(w.output,'hr');
}
},
{
name: 'macro',
match: '<<',
lookaheadRegExp: /<<([^>\s]+)(?:\s*)((?:[^>]|(?:>(?!>)))*)>>/mg,
handler: function(w)
{
this.lookaheadRegExp.lastIndex = w.matchStart;
var lookaheadMatch = this.lookaheadRegExp.exec(w.source);
if(lookaheadMatch && lookaheadMatch.index == w.matchStart && lookaheadMatch[1]) {
w.nextMatch = this.lookaheadRegExp.lastIndex;
invokeMacro(w.output,lookaheadMatch[1],lookaheadMatch[2],w,w.tiddler);
}
}
},
{
name: 'exampleExplicitLink',
match: '\\[\\[',
lookaheadRegExp: /\[\[(.*?)(?:\|(.*?))?\]\]/mg,
handler: function(w)
{
this.lookaheadRegExp.lastIndex = w.matchStart;
var lookaheadMatch = this.lookaheadRegExp.exec(w.source);
if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
var link = lookaheadMatch[1];
var text = lookaheadMatch[2] ? lookaheadMatch[2] : link;
var e = config.formatterHelpers.isExternalLink(link) ? createExternalLink(w.output,link) : createTiddlyLink(w.output,link,false,null,w.isStatic);
createTiddlyText(e,text);
w.nextMatch = this.lookaheadRegExp.lastIndex;
}
}
},
{
name: 'exampleNotWikiLink',
match: '!' + config.textPrimitives.wikiLink,
handler: function(w)
{
w.outputText(w.output,w.matchStart+1,w.nextMatch);
}
},
{
name: 'exampleWikiLink',
match: config.textPrimitives.wikiLink,
handler: function(w)
{
if(w.matchStart > 0) {
var preRegExp = new RegExp(config.textPrimitives.anyLetter,'mg');
preRegExp.lastIndex = w.matchStart-1;
var preMatch = preRegExp.exec(w.source);
if(preMatch.index == w.matchStart-1) {
w.outputText(w.output,w.matchStart,w.nextMatch);
return;
}
}
var output = w.output;
if(w.autoLinkWikiWords == true || store.isShadowTiddler(w.matchText)) {
output = createTiddlyLink(w.output,w.matchText,false,null,w.isStatic);
}
w.outputText(output,w.matchStart,w.nextMatch);
}
},
{
name: 'exampleUrlLink',
match: config.textPrimitives.urlPattern,
handler: function(w)
{
w.outputText(createExternalLink(w.output,w.matchText),w.matchStart,w.nextMatch);
}
},
{
name: 'exampleBold',
match: '\\*\\*',
termRegExp: /(\*\*|(?=\n\n))/mg,
element: 'strong',
handler: config.formatterHelpers.createElementAndWikify
},
{
name: 'exampleItalic',
match: '//',
termRegExp: /(\/\/|(?=\n\n))/mg,
element: 'em',
handler: config.formatterHelpers.createElementAndWikify
},
{
name: 'exampleUnderline',
match: '__',
termRegExp: /(__|(?=\n\n))/mg,
element: 'u',
handler: config.formatterHelpers.createElementAndWikify
},
{
name: 'exampleStrikeBy',
match: '--(?!\\s|$)',
termRegExp: /((?!\s)--|(?=\n\n))/mg,
element: 'strike',
handler: config.formatterHelpers.createElementAndWikify
},
{
name: 'exampleSuperscript',
match: '\\^\\^',
termRegExp: /(\^\^|(?=\n\n))/mg,
element: 'sup',
handler: config.formatterHelpers.createElementAndWikify
},
{
name: 'exampleSubscript',
match: '~~',
termRegExp: /(~~|(?=\n\n))/mg,
element: 'sub',
handler: config.formatterHelpers.createElementAndWikify
},
{
name: 'exampleMonospaced',
match: '\\{\\{\\{',
lookaheadRegExp: /\{\{\{((?:.|\n)*?)\}\}\}/mg,
element: 'code',
handler: config.formatterHelpers.enclosedTextHelper
},
{
name: 'exampleParagraph',
match: '\\n{2,}',
handler: function(w)
{
w.output = createTiddlyElement(w.output,'p');
}
},
{
name: 'exampleLineBreak',
match: '\\n|<br ?/?>',
handler: function(w)
{
createTiddlyElement(w.output,'br');
}
},
{
name: 'exampleComment',
match: '<!\\-\\-',
lookaheadRegExp: /<!\-\-((?:.|\n)*?)\-\-!>/mg,
handler: function(w)
{
this.lookaheadRegExp.lastIndex = w.matchStart;
var lookaheadMatch = this.lookaheadRegExp.exec(w.source);
if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
w.nextMatch = this.lookaheadRegExp.lastIndex;
}
}
},
{
name: 'exampleHtmlEntitiesEncoding',
match: '&#?[a-zA-Z0-9]{2,8};',
handler: function(w)
{
createTiddlyElement(w.output,'span').innerHTML = w.matchText;
}
},
{
name: "html",
match: "<[Hh][Tt][Mm][Ll]>",
lookaheadRegExp: /<[Hh][Tt][Mm][Ll]>((?:.|\n)*?)<\/[Hh][Tt][Mm][Ll]>/mg,
handler: function(w)
{
this.lookaheadRegExp.lastIndex = w.matchStart;
var lookaheadMatch = this.lookaheadRegExp.exec(w.source);
if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
createTiddlyElement(w.output,"span").innerHTML = lookaheadMatch[1];
w.nextMatch = this.lookaheadRegExp.lastIndex;
}
}
}
];
config.parsers.exampleFormatter = new Formatter(config.exampleFormatters);
config.parsers.exampleFormatter.format = 'example';
config.parsers.exampleFormatter.formatTag = 'ExampleFormat';
} // end of 'install only once'
//}}}
/***
|''Name:''|XXXXXXXXXXX|
|''Description:''|YYYYYYYYYYY|
|''Author:''|Kenny Z|
|''Source:''|http://cooltool.tiddlyspot.com/#XXXXXXXXX|
|''Dependencies:''||
|''CodeRepository:''| |
|''Version:''|0.0.1|
|''Status:''|Alpha|
|''Date:''|June 25, 2010|
|''Comments:''| |
|''License:''|[[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]] |
|''~CoreVersion:''|2.6|
!!Description
//!!TODO write a brief description of the plugin here//
!!Usage
#Import
#Save & Reload
!!Configuration
MSGMSGMSG: <<option txtXXXXXXX>>
<<option chkXXXXXX>> MSGMSGMSGMSGMSG
!!Code
***/
//{{{
//------------
// VERSION
//------------
if(!version.extensions.MyProgramName) {
version.extensions.MyProgramName= {installed:true};
/*
config.extensions: Plugins
config.macros: Macros
config.commands: Toolbar Commands
config.paramifiers: Paramifiers
config.formatters: Formatters
config.adaptors: Adaptors
*/
//-------------------
// COMMANDS
//-------------------
config.commands.COMMANDNAME = {
text: "TEXT",
tooltip: "TOOLTIP",
readOnlyText: "READ_ONLY_MODE",
readOnlyTooltip: "READ_ONLY_MODE",
warning: "???",
handler: function(event,src,title) {
// Code Here
return false;
},
};
// ------------------
// MACROS
// ------------------
config.macros.MACRONAME= {
init: function () {
// Startup Code Here
},
handler: function(place,macroName,params,wikifier,paramString,tiddler)
{
createTiddlyButton(place,"label","",function(){ /*CALLBACK*/ });
},
otherFunction: function(e){ },
};
} //# end of 'install only once'
//}}}
/***
|''Name:''|ExportCommandPlugin|
|''Description:''|Adds export button to the toolbar|
|''Requires:''|Exports raw. Requires ExportTiddlersPlugin for fancy exports|
|''Author:''|Kenny Z|
|''Source:''|http://cooltool.tiddlyspot.com/#ExportCommandPlugin|
|''CodeRepository:''| |
|''Version:''|0.0.1|
|''Status:''|Alpha|
|''Date:''|June 29, 2010|
|''Comments:''| |
|''License:''|[[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]] |
|''~CoreVersion:''|2.6|
|''Browser''|Firefox|
!!Description
Adds export button to the toolbar.
!!Usage
#Import
#Save & Reload
#Add "{{{exportTiddler}}}" to [[ToolbarCommands]] in the ~ViewToolbar slice.
Click on export command to export to default file.
Ctrl+click for a different filename.
!!Configuration
Default export filename: <<option txtDefaultExportFile>> <<option chkUseTitleForFileName>> Use tiddler's title as filename?
__Advanced Options Requiring ExportTiddlersPlugin__
<<option chkMergeExportTiddler>> Merge Mode. * //Disregard the overwrite warning from the ChooseFile dialog when merging.//
Filetype: <<option txtExportFileType>>
**ps: PureStore (no code)
**cs: comma-separated (CSV)
**nf: news feed (XML)
**tw: full TiddlyWiki
**tx: plain text
**raw: only the tiddler's text
!!Code
***/
//{{{
if(!version.extensions.ExportCommandPlugin) {
version.extensions.ExportCommandPlugin= {installed:true};
var co=config.options;
if(!co.chkMergeExportTiddler)co.chkMergeExportTiddler=true;
if(!co.txtExportFileType)co.txtExportFileType="ps";
if(!co.txtDefaultExportFile)co.txtDefaultExportFile="export.html"
if(!co.chkUseTitleForFileName)co.chkUseTitleForFileName=false;
config.commands.exportTiddler = {
text: "export",
tooltip: "Export this tiddler",
handler: function(event,src,title){
if (window.location.protocol!='file:'){ // make sure we are local
displayMessage(config.messages.notFileUrlError); return;
}
var target=this.getPath();
if(event.ctrlKey){
target=askForFilename(null,target,title,false);
}else if(co.chkUseTitleForFileName){
target+="export\\"+title+".html"; // safety folder.
}else{ //default
target+=co.txtDefaultExportFile;
}
//If tagged as attachment, find MIME type and base64Decode it.
var filetype=co.txtExportFileType.toLowerCase();
if(!version.extensions.ExportTiddlersPlugin||filetype=="raw"){ // if not installed.
saveFile(target, convertUnicodeToUTF8(store.getTiddlerText(title,''))); // save Raw
displayMessage(target+" exported raw.");
return;
}
// Pass off to ExportTiddlersPlugin
var cme=config.macros.exportTiddlers;
var merge=co.chkMergeExportTiddler;
var tids=[]; tids.push(store.getTiddler(title));
var out=cme.assembleFile(target,filetype,tids,"",{val:0},merge);
var link='file:///'+target.replace(/\\/g,'/');
if (link==decodeURIComponent(window.location.href)) return; //prevent overwrite
var ok=saveFile(target,out.replace(/\\/g,'/')); //unix
displayMessage((ok?cme.okmsg:cme.failmsg).format([1,'',target]),link);
},
getPath: function(){
var path=getLocalPath(document.location.href);
var p=path.lastIndexOf("/");
if (p==-1) p=path.lastIndexOf("\\"); // Windows
return path.substr(0,p+1);
},
};
if(!window.askForFilename){
function askForFilename(msg,path,file,mustExist) { //Ticket #604
if(window.Components)
var r=mozAskForFilename(msg,path,file,mustExist);
else if(config.browser.isIE)
var r=ieAskForFilename(msg,path,file,mustExist);
else
var r=prompt(msg,path+file)||""; // fallback
return r||"";
}
function mozAskForFilename(msg,path,file,mustExist) {
try {
netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
var nsIFilePicker = window.Components.interfaces.nsIFilePicker;
var picker = Components.classes['@mozilla.org/filepicker;1'].createInstance(nsIFilePicker);
picker.init(window, msg,mustExist?nsiFilePicker.modeOpen:nsIFilePicker.modeSave);
var thispath = Components.classes['@mozilla.org/file/local;1'].createInstance(Components.interfaces.nsILocalFile);
thispath.initWithPath(path);
picker.displayDirectory=thispath;
picker.defaultExtension='html';
picker.defaultString=file;
picker.appendFilters(nsIFilePicker.filterAll|nsIFilePicker.filterText|nsIFilePicker.filterHTML);
if (picker.show()!=nsIFilePicker.returnCancel)
var result=picker.file.persistentDescriptor;
}
catch(e) {
alert('error during local file access: '+e.toString())
}
return result;
}
function ieAskForFilename(msg,path,file,mustExist) {
try {
var s = new ActiveXObject('UserAccounts.CommonDialog');
s.Filter='All files|*.*|Text files|*.txt|HTML files|*.htm;*.html|';
s.FilterIndex=3; // default to HTML files;
s.InitialDir=path;
s.FileName=file;
if (s.showOpen())
var result=s.FileName;
}
catch(e) {
var result=prompt(msg,path+file); // fallback for pre-XP/IE6
}
return result;
}
};
} //# end of 'install only once'
//}}}
/***
|Name|ExportTiddlersPlugin|
|Source|http://www.TiddlyTools.com/#ExportTiddlersPlugin|
|Documentation|http://www.TiddlyTools.com/#ExportTiddlersPluginInfo|
|Version|2.9.5|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|interactively select/export tiddlers to a separate file|
!!!!!Documentation
>see [[ExportTiddlersPluginInfo]]
!!!!!Inline control panel (live):
><<exportTiddlers inline>>
!!!!!Revisions
<<<
2010.02.25 2.9.5 added merge checkbox option and improved 'merge' status message
|please see [[ExportTiddlersPluginInfo]] for additional revision details|
2005.10.09 0.0.0 development started
<<<
!!!!!Code
***/
//{{{
// version
version.extensions.ExportTiddlersPlugin= {major: 2, minor: 9, revision: 5, date: new Date(2010,2,25)};
// default shadow definition
config.shadowTiddlers.ExportTiddlers='<<exportTiddlers inline>>';
// add 'export' backstage task (following built-in import task)
if (config.tasks) { // TW2.2 or above
config.tasks.exportTask = {
text:'export',
tooltip:'Export selected tiddlers to another file',
content:'<<exportTiddlers inline>>'
}
config.backstageTasks.splice(config.backstageTasks.indexOf('importTask')+1,0,'exportTask');
}
config.macros.exportTiddlers = {
$: function(id) { return document.getElementById(id); }, // abbreviation
label: 'export tiddlers',
prompt: 'Copy selected tiddlers to an export document',
okmsg: '%0 tiddler%1 written to %2',
failmsg: 'An error occurred while creating %1',
overwriteprompt: '%0\ncontains %1 tiddler%2 that will be discarded or replaced',
mergestatus: '%0 tiddler%1 added, %2 tiddler%3 updated, %4 tiddler%5 unchanged',
statusmsg: '%0 tiddler%1 - %2 selected for export',
newdefault: 'export.html',
datetimefmt: '0MM/0DD/YYYY 0hh:0mm:0ss', // for 'filter date/time' edit fields
type_TW: "tw", type_PS: "ps", type_TX: "tx", type_CS: "cs", type_NF: "nf", // file type tokens
type_map: { // maps type param to token values
tiddlywiki:"tw", tw:"tw", wiki: "tw",
purestore: "ps", ps:"ps", store:"ps",
plaintext: "tx", tx:"tx", text: "tx",
comma: "cs", cs:"cs", csv: "cs",
newsfeed: "nf", nf:"nf", xml: "nf", rss:"nf"
},
handler: function(place,macroName,params) {
if (params[0]!='inline')
{ createTiddlyButton(place,this.label,this.prompt,this.togglePanel); return; }
var panel=this.createPanel(place);
panel.style.position='static';
panel.style.display='block';
},
createPanel: function(place) {
var panel=this.$('exportPanel');
if (panel) { panel.parentNode.removeChild(panel); }
setStylesheet(store.getTiddlerText('ExportTiddlersPlugin##css',''),'exportTiddlers');
panel=createTiddlyElement(place,'span','exportPanel',null,null)
panel.innerHTML=store.getTiddlerText('ExportTiddlersPlugin##html','');
this.initFilter();
this.refreshList(0);
var fn=this.$('exportFilename');
if (window.location.protocol=='file:' && !fn.value.length) {
// get new target path/filename
var newPath=getLocalPath(window.location.href);
var slashpos=newPath.lastIndexOf('/'); if (slashpos==-1) slashpos=newPath.lastIndexOf('\\');
if (slashpos!=-1) newPath=newPath.substr(0,slashpos+1); // trim filename
fn.value=newPath+this.newdefault;
}
return panel;
},
togglePanel: function(e) { var e=e||window.event;
var cme=config.macros.exportTiddlers; // abbrev
var parent=resolveTarget(e).parentNode;
var panel=cme.$('exportPanel');
if (panel==undefined || panel.parentNode!=parent)
panel=cme.createPanel(parent);
var isOpen=panel.style.display=='block';
if(config.options.chkAnimate)
anim.startAnimating(new Slider(panel,!isOpen,e.shiftKey || e.altKey,'none'));
else
panel.style.display=isOpen?'none':'block' ;
if (panel.style.display!='none') {
cme.refreshList(0);
cme.$('exportFilename').focus();
cme.$('exportFilename').select();
}
e.cancelBubble = true; if (e.stopPropagation) e.stopPropagation(); return(false);
},
process: function(which) { // process panel control interactions
var theList=this.$('exportList'); if (!theList) return false;
var count = 0;
var total = store.getTiddlers('title').length;
switch (which.id) {
case 'exportFilter':
count=this.filterExportList();
var panel=this.$('exportFilterPanel');
if (count==-1) { panel.style.display='block'; break; }
this.$('exportStart').disabled=(count==0);
this.$('exportDelete').disabled=(count==0);
this.displayStatus(count,total);
if (count==0) { alert('No tiddlers were selected'); panel.style.display='block'; }
break;
case 'exportStart':
this.go();
break;
case 'exportDelete':
this.deleteTiddlers();
break;
case 'exportHideFilter':
case 'exportToggleFilter':
var panel=this.$('exportFilterPanel')
panel.style.display=(panel.style.display=='block')?'none':'block';
break;
case 'exportSelectChanges':
var lastmod=new Date(document.lastModified);
for (var t = 0; t < theList.options.length; t++) {
if (theList.options[t].value=='') continue;
var tiddler=store.getTiddler(theList.options[t].value); if (!tiddler) continue;
theList.options[t].selected=(tiddler.modified>lastmod);
count += (tiddler.modified>lastmod)?1:0;
}
this.$('exportStart').disabled=(count==0);
this.$('exportDelete').disabled=(count==0);
this.displayStatus(count,total);
if (count==0) alert('There are no unsaved changes');
break;
case 'exportSelectAll':
for (var t = 0; t < theList.options.length; t++) {
if (theList.options[t].value=='') continue;
theList.options[t].selected=true;
count += 1;
}
this.$('exportStart').disabled=(count==0);
this.$('exportDelete').disabled=(count==0);
this.displayStatus(count,count);
break;
case 'exportSelectOpened':
for (var t=0; t<theList.options.length; t++) theList.options[t].selected=false;
var tiddlerDisplay=this.$('tiddlerDisplay');
for (var t=0; t<tiddlerDisplay.childNodes.length;t++) {
var tiddler=tiddlerDisplay.childNodes[t].id.substr(7);
for (var i=0; i<theList.options.length; i++) {
if (theList.options[i].value!=tiddler) continue;
theList.options[i].selected=true; count++; break;
}
}
this.$('exportStart').disabled=(count==0);
this.$('exportDelete').disabled=(count==0);
this.displayStatus(count,total);
if (count==0) alert('There are no tiddlers currently opened');
break;
case 'exportSelectRelated':
// recursively build list of related tiddlers
function getRelatedTiddlers(tid,tids) {
var t=store.getTiddler(tid); if (!t || tids.contains(tid)) return tids;
tids.push(t.title);
if (!t.linksUpdated) t.changed();
for (var i=0; i<t.links.length; i++)
if (t.links[i]!=tid) tids=getRelatedTiddlers(t.links[i],tids);
return tids;
}
// for all currently selected tiddlers, gather up the related tiddlers (including self) and select them as well
var tids=[];
for (var i=0; i<theList.options.length; i++)
if (theList.options[i].selected) tids=getRelatedTiddlers(theList.options[i].value,tids);
// select related tiddlers (includes original selected tiddlers)
for (var i=0; i<theList.options.length; i++)
theList.options[i].selected=tids.contains(theList.options[i].value);
this.displayStatus(tids.length,total);
break;
case 'exportListSmaller': // decrease current listbox size
var min=5;
theList.size-=(theList.size>min)?1:0;
break;
case 'exportListLarger': // increase current listbox size
var max=(theList.options.length>25)?theList.options.length:25;
theList.size+=(theList.size<max)?1:0;
break;
case 'exportClose':
this.$('exportPanel').style.display='none';
break;
}
return false;
},
displayStatus: function(count,total) {
var txt=this.statusmsg.format([total,total!=1?'s':'',!count?'none':count==total?'all':count]);
clearMessage(); displayMessage(txt);
return txt;
},
refreshList: function(selectedIndex) {
var theList = this.$('exportList'); if (!theList) return;
// get the sort order
var sort;
if (!selectedIndex) selectedIndex=0;
if (selectedIndex==0) sort='modified';
if (selectedIndex==1) sort='title';
if (selectedIndex==2) sort='modified';
if (selectedIndex==3) sort='modifier';
if (selectedIndex==4) sort='tags';
// unselect headings and count number of tiddlers actually selected
var count=0;
for (var t=5; t < theList.options.length; t++) {
if (!theList.options[t].selected) continue;
if (theList.options[t].value!='')
count++;
else { // if heading is selected, deselect it, and then select and count all in section
theList.options[t].selected=false;
for ( t++; t<theList.options.length && theList.options[t].value!=''; t++) {
theList.options[t].selected=true;
count++;
}
}
}
// disable 'export' and 'delete' buttons if no tiddlers selected
this.$('exportStart').disabled=(count==0);
this.$('exportDelete').disabled=(count==0);
// show selection count
var tiddlers = store.getTiddlers('title');
if (theList.options.length) this.displayStatus(count,tiddlers.length);
// if a [command] item, reload list... otherwise, no further refresh needed
if (selectedIndex>4) return;
// clear current list contents
while (theList.length > 0) { theList.options[0] = null; }
// add heading and control items to list
var i=0;
var indent=String.fromCharCode(160)+String.fromCharCode(160);
theList.options[i++]=
new Option(tiddlers.length+' tiddlers in document', '',false,false);
theList.options[i++]=
new Option(((sort=='title' )?'>':indent)+' [by title]', '',false,false);
theList.options[i++]=
new Option(((sort=='modified')?'>':indent)+' [by date]', '',false,false);
theList.options[i++]=
new Option(((sort=='modifier')?'>':indent)+' [by author]', '',false,false);
theList.options[i++]=
new Option(((sort=='tags' )?'>':indent)+' [by tags]', '',false,false);
// output the tiddler list
switch(sort) {
case 'title':
for(var t = 0; t < tiddlers.length; t++)
theList.options[i++] = new Option(tiddlers[t].title,tiddlers[t].title,false,false);
break;
case 'modifier':
case 'modified':
var tiddlers = store.getTiddlers(sort);
// sort descending for newest date first
tiddlers.sort(function (a,b) {if(a[sort] == b[sort]) return(0); else return (a[sort] > b[sort]) ? -1 : +1; });
var lastSection = '';
for(var t = 0; t < tiddlers.length; t++) {
var tiddler = tiddlers[t];
var theSection = '';
if (sort=='modified') theSection=tiddler.modified.toLocaleDateString();
if (sort=='modifier') theSection=tiddler.modifier;
if (theSection != lastSection) {
theList.options[i++] = new Option(theSection,'',false,false);
lastSection = theSection;
}
theList.options[i++] = new Option(indent+indent+tiddler.title,tiddler.title,false,false);
}
break;
case 'tags':
var theTitles = {}; // all tiddler titles, hash indexed by tag value
var theTags = new Array();
for(var t=0; t<tiddlers.length; t++) {
var title=tiddlers[t].title;
var tags=tiddlers[t].tags;
if (!tags || !tags.length) {
if (theTitles['untagged']==undefined) { theTags.push('untagged'); theTitles['untagged']=new Array(); }
theTitles['untagged'].push(title);
}
else for(var s=0; s<tags.length; s++) {
if (theTitles[tags[s]]==undefined) { theTags.push(tags[s]); theTitles[tags[s]]=new Array(); }
theTitles[tags[s]].push(title);
}
}
theTags.sort();
for(var tagindex=0; tagindex<theTags.length; tagindex++) {
var theTag=theTags[tagindex];
theList.options[i++]=new Option(theTag,'',false,false);
for(var t=0; t<theTitles[theTag].length; t++)
theList.options[i++]=new Option(indent+indent+theTitles[theTag][t],theTitles[theTag][t],false,false);
}
break;
}
theList.selectedIndex=selectedIndex; // select current control item
this.$('exportStart').disabled=true;
this.$('exportDelete').disabled=true;
this.displayStatus(0,tiddlers.length);
},
askForFilename: function(here) {
var msg=here.title; // use tooltip as dialog box message
var path=getLocalPath(document.location.href);
var slashpos=path.lastIndexOf('/'); if (slashpos==-1) slashpos=path.lastIndexOf('\\');
if (slashpos!=-1) path = path.substr(0,slashpos+1); // remove filename from path, leave the trailing slash
var filetype=this.$('exportFormat').value.toLowerCase();
var defext='html';
if (filetype==this.type_TX) defext='txt';
if (filetype==this.type_CS) defext='csv';
if (filetype==this.type_NF) defext='xml';
var file=this.newdefault.replace(/html$/,defext);
var result='';
if(window.Components) { // moz
try {
netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
var nsIFilePicker = window.Components.interfaces.nsIFilePicker;
var picker = Components.classes['@mozilla.org/filepicker;1'].createInstance(nsIFilePicker);
picker.init(window, msg, nsIFilePicker.modeSave);
var thispath = Components.classes['@mozilla.org/file/local;1'].createInstance(Components.interfaces.nsILocalFile);
thispath.initWithPath(path);
picker.displayDirectory=thispath;
picker.defaultExtension=defext;
picker.defaultString=file;
picker.appendFilters(nsIFilePicker.filterAll|nsIFilePicker.filterText|nsIFilePicker.filterHTML);
if (picker.show()!=nsIFilePicker.returnCancel) var result=picker.file.persistentDescriptor;
}
catch(e) { alert('error during local file access: '+e.toString()) }
}
else { // IE
try { // XPSP2 IE only
var s = new ActiveXObject('UserAccounts.CommonDialog');
s.Filter='All files|*.*|Text files|*.txt|HTML files|*.htm;*.html|XML files|*.xml|';
s.FilterIndex=defext=='txt'?2:'html'?3:'xml'?4:1;
s.InitialDir=path;
s.FileName=file;
if (s.showOpen()) var result=s.FileName;
}
catch(e) { // fallback
var result=prompt(msg,path+file);
}
}
return result;
},
initFilter: function() {
this.$('exportFilterStart').checked=false; this.$('exportStartDate').value='';
this.$('exportFilterEnd').checked=false; this.$('exportEndDate').value='';
this.$('exportFilterTags').checked=false; this.$('exportTags').value='';
this.$('exportFilterText').checked=false; this.$('exportText').value='';
this.showFilterFields();
},
showFilterFields: function(which) {
var show=this.$('exportFilterStart').checked;
this.$('exportFilterStartBy').style.display=show?'block':'none';
this.$('exportStartDate').style.display=show?'block':'none';
var val=this.$('exportFilterStartBy').value;
this.$('exportStartDate').value
=this.getFilterDate(val,'exportStartDate').formatString(this.datetimefmt);
if (which && (which.id=='exportFilterStartBy') && (val=='other'))
this.$('exportStartDate').focus();
var show=this.$('exportFilterEnd').checked;
this.$('exportFilterEndBy').style.display=show?'block':'none';
this.$('exportEndDate').style.display=show?'block':'none';
var val=this.$('exportFilterEndBy').value;
this.$('exportEndDate').value
=this.getFilterDate(val,'exportEndDate').formatString(this.datetimefmt);
if (which && (which.id=='exportFilterEndBy') && (val=='other'))
this.$('exportEndDate').focus();
var show=this.$('exportFilterTags').checked;
this.$('exportTags').style.display=show?'block':'none';
var show=this.$('exportFilterText').checked;
this.$('exportText').style.display=show?'block':'none';
},
getFilterDate: function(val,id) {
var result=0;
switch (val) {
case 'file':
result=new Date(document.lastModified);
break;
case 'other':
result=new Date(this.$(id).value);
break;
default: // today=0, yesterday=1, one week=7, two weeks=14, a month=31
var now=new Date(); var tz=now.getTimezoneOffset()*60000; now-=tz;
var oneday=86400000;
if (id=='exportStartDate')
result=new Date((Math.floor(now/oneday)-val)*oneday+tz);
else
result=new Date((Math.floor(now/oneday)-val+1)*oneday+tz-1);
break;
}
return result;
},
filterExportList: function() {
var theList = this.$('exportList'); if (!theList) return -1;
var filterStart=this.$('exportFilterStart').checked;
var val=this.$('exportFilterStartBy').value;
var startDate=config.macros.exportTiddlers.getFilterDate(val,'exportStartDate');
var filterEnd=this.$('exportFilterEnd').checked;
var val=this.$('exportFilterEndBy').value;
var endDate=config.macros.exportTiddlers.getFilterDate(val,'exportEndDate');
var filterTags=this.$('exportFilterTags').checked;
var tags=this.$('exportTags').value;
var filterText=this.$('exportFilterText').checked;
var text=this.$('exportText').value;
if (!(filterStart||filterEnd||filterTags||filterText)) {
alert('Please set the selection filter');
this.$('exportFilterPanel').style.display='block';
return -1;
}
if (filterStart&&filterEnd&&(startDate>endDate)) {
var msg='starting date/time:\n'
msg+=startDate.toLocaleString()+'\n';
msg+='is later than ending date/time:\n'
msg+=endDate.toLocaleString()
alert(msg);
return -1;
}
// if filter by tags, get list of matching tiddlers
// use getMatchingTiddlers() (if MatchTagsPlugin is installed) for full boolean expressions
// otherwise use getTaggedTiddlers() for simple tag matching
if (filterTags) {
var fn=store.getMatchingTiddlers||store.getTaggedTiddlers;
var t=fn.apply(store,[tags]);
var tagged=[];
for (var i=0; i<t.length; i++) tagged.push(t[i].title);
}
// scan list and select tiddlers that match all applicable criteria
var total=0;
var count=0;
for (var i=0; i<theList.options.length; i++) {
// get item, skip non-tiddler list items (section headings)
var opt=theList.options[i]; if (opt.value=='') continue;
// get tiddler, skip missing tiddlers (this should NOT happen)
var tiddler=store.getTiddler(opt.value); if (!tiddler) continue;
var sel=true;
if ( (filterStart && tiddler.modified<startDate)
|| (filterEnd && tiddler.modified>endDate)
|| (filterTags && !tagged.contains(tiddler.title))
|| (filterText && (tiddler.text.indexOf(text)==-1) && (tiddler.title.indexOf(text)==-1)))
sel=false;
opt.selected=sel;
count+=sel?1:0;
total++;
}
return count;
},
deleteTiddlers: function() {
var list=this.$('exportList'); if (!list) return;
var tids=[];
for (i=0;i<list.length;i++)
if (list.options[i].selected && list.options[i].value.length)
tids.push(list.options[i].value);
if (!confirm('Are you sure you want to delete these tiddlers:\n\n'+tids.join(', '))) return;
store.suspendNotifications();
for (t=0;t<tids.length;t++) {
var tid=store.getTiddler(tids[t]); if (!tid) continue;
var msg="'"+tid.title+"' is tagged with 'systemConfig'.\n\n";
msg+='Removing this tiddler may cause unexpected results. Are you sure?'
if (tid.tags.contains('systemConfig') && !confirm(msg)) continue;
store.removeTiddler(tid.title);
story.closeTiddler(tid.title);
}
store.resumeNotifications();
alert(tids.length+' tiddlers deleted');
this.refreshList(0); // reload listbox
store.notifyAll(); // update page display
},
go: function() {
if (window.location.protocol!='file:') // make sure we are local
{ displayMessage(config.messages.notFileUrlError); return; }
// get selected tidders, target filename, target type, and notes
var list=this.$('exportList'); if (!list) return;
var tids=[]; for (var i=0; i<list.options.length; i++) {
var opt=list.options[i]; if (!opt.selected||!opt.value.length) continue;
var tid=store.getTiddler(opt.value); if (!tid) continue;
tids.push(tid);
}
if (!tids.length) return; // no tiddlers selected
var target=this.$('exportFilename').value.trim();
if (!target.length) {
displayMessage('A local target path/filename is required',target);
return;
}
var merge=this.$('exportMerge').checked;
var filetype=this.$('exportFormat').value.toLowerCase();
var notes=this.$('exportNotes').value.replace(/\n/g,'<br>');
var total={val:0};
var out=this.assembleFile(target,filetype,tids,notes,total,merge);
if (!total.val) return; // cancelled file overwrite
var link='file:///'+target.replace(/\\/g,'/');
var samefile=link==decodeURIComponent(window.location.href);
var p=getLocalPath(document.location.href);
if (samefile) {
if (config.options.chkSaveBackups) { var t=loadOriginal(p);if(t)saveBackup(p,t); }
if (config.options.chkGenerateAnRssFeed && saveRss instanceof Function) saveRss(p);
}
var ok=saveFile(target,out);
displayMessage((ok?this.okmsg:this.failmsg).format([total.val,total.val!=1?'s':'',target]),link);
},
plainTextHeader:
'Source:\n\t%0\n'
+'Title:\n\t%1\n'
+'Subtitle:\n\t%2\n'
+'Created:\n\t%3 by %4\n'
+'Application:\n\tTiddlyWiki %5 / %6 %7\n\n',
plainTextTiddler:
'- - - - - - - - - - - - - - -\n'
+'| title: %0\n'
+'| created: %1\n'
+'| modified: %2\n'
+'| edited by: %3\n'
+'| tags: %4\n'
+'- - - - - - - - - - - - - - -\n'
+'%5\n',
plainTextFooter:
'',
newsFeedHeader:
'<'+'?xml version="1.0"?'+'>\n'
+'<rss version="2.0">\n'
+'<channel>\n'
+'<title>%1</title>\n'
+'<link>%0</link>\n'
+'<description>%2</description>\n'
+'<language>en-us</language>\n'
+'<copyright>Copyright '+(new Date().getFullYear())+' %4</copyright>\n'
+'<pubDate>%3</pubDate>\n'
+'<lastBuildDate>%3</lastBuildDate>\n'
+'<docs>http://blogs.law.harvard.edu/tech/rss</docs>\n'
+'<generator>TiddlyWiki %5 / %6 %7</generator>\n',
newsFeedTiddler:
'\n%0\n',
newsFeedFooter:
'</channel></rss>',
pureStoreHeader:
'<html><body>'
+'<style type="text/css">'
+' #storeArea {display:block;margin:1em;}'
+' #storeArea div {padding:0.5em;margin:1em;border:2px solid black;height:10em;overflow:auto;}'
+' #pureStoreHeading {width:100%;text-align:left;background-color:#eeeeee;padding:1em;}'
+'</style>'
+'<div id="pureStoreHeading">'
+' TiddlyWiki "PureStore" export file<br>'
+' Source'+': <b>%0</b><br>'
+' Title: <b>%1</b><br>'
+' Subtitle: <b>%2</b><br>'
+' Created: <b>%3</b> by <b>%4</b><br>'
+' TiddlyWiki %5 / %6 %7<br>'
+' Notes:<hr><pre>%8</pre>'
+'</div>'
+'<div id="storeArea">',
pureStoreTiddler:
'%0\n%1',
pureStoreFooter:
'</div><!--POST-BODY-START-->\n<!--POST-BODY-END--></body></html>',
assembleFile: function(target,filetype,tids,notes,total,merge) {
var revised='';
var now = new Date().toLocaleString();
var src=convertUnicodeToUTF8(document.location.href);
var title = convertUnicodeToUTF8(wikifyPlain('SiteTitle').htmlEncode());
var subtitle = convertUnicodeToUTF8(wikifyPlain('SiteSubtitle').htmlEncode());
var user = convertUnicodeToUTF8(config.options.txtUserName.htmlEncode());
var twver = version.major+'.'+version.minor+'.'+version.revision;
var v=version.extensions.ExportTiddlersPlugin; var pver = v.major+'.'+v.minor+'.'+v.revision;
var headerargs=[src,title,subtitle,now,user,twver,'ExportTiddlersPlugin',pver,notes];
switch (filetype) {
case this.type_TX: // plain text
var header=this.plainTextHeader.format(headerargs);
var footer=this.plainTextFooter;
break;
case this.type_CS: // comma-separated
var fields={};
for (var i=0; i<tids.length; i++) for (var f in tids[i].fields) fields[f]=f;
var names=['title','created','modified','modifier','tags','text'];
for (var f in fields) names.push(f);
var header=names.join(',')+'\n';
var footer='';
break;
case this.type_NF: // news feed (XML)
headerargs[0]=store.getTiddlerText('SiteUrl','');
var header=this.newsFeedHeader.format(headerargs);
var footer=this.newsFeedFooter;
break;
case this.type_PS: // PureStore (no code)
var header=this.pureStoreHeader.format(headerargs);
var footer=this.pureStoreFooter;
break;
case this.type_TW: // full TiddlyWiki
default:
var currPath=getLocalPath(window.location.href);
var original=loadFile(currPath);
if (!original) { displayMessage(config.messages.cantSaveError); return; }
var posDiv = locateStoreArea(original);
if (!posDiv) { displayMessage(config.messages.invalidFileError.format([currPath])); return; }
var header = original.substr(0,posDiv[0]+startSaveArea.length)+'\n';
var footer = '\n'+original.substr(posDiv[1]);
break;
}
var out=this.getData(target,filetype,tids,fields,merge);
var revised = header+convertUnicodeToUTF8(out.join('\n'))+footer;
// if full TW, insert page title and language attr, and reset all MARKUP blocks...
if (filetype==this.type_TW) {
var newSiteTitle=convertUnicodeToUTF8(getPageTitle()).htmlEncode();
revised=revised.replaceChunk('<title'+'>','</title'+'>',' ' + newSiteTitle + ' ');
revised=updateLanguageAttribute(revised);
var titles=[]; for (var i=0; i<tids.length; i++) titles.push(tids[i].title);
revised=updateMarkupBlock(revised,'PRE-HEAD',
titles.contains('MarkupPreHead')? 'MarkupPreHead' :null);
revised=updateMarkupBlock(revised,'POST-HEAD',
titles.contains('MarkupPostHead')?'MarkupPostHead':null);
revised=updateMarkupBlock(revised,'PRE-BODY',
titles.contains('MarkupPreBody')? 'MarkupPreBody' :null);
revised=updateMarkupBlock(revised,'POST-SCRIPT',
titles.contains('MarkupPostBody')?'MarkupPostBody':null);
}
total.val=out.length;
return revised;
},
getData: function(target,filetype,tids,fields,merge) {
// output selected tiddlers and gather list of titles (for use with merge)
var out=[]; var titles=[];
var url=store.getTiddlerText('SiteUrl','');
for (var i=0; i<tids.length; i++) {
out.push(this.formatItem(store,filetype,tids[i],url,fields));
titles.push(tids[i].title);
}
// if TW or PureStore format, ask to merge with existing tiddlers (if any)
if (filetype==this.type_TW || filetype==this.type_PS) {
var txt=loadFile(target);
if (txt && txt.length) {
var remoteStore=new TiddlyWiki();
if (version.major+version.minor*.1+version.revision*.01<2.52) txt=convertUTF8ToUnicode(txt);
if (remoteStore.importTiddlyWiki(txt)) {
var existing=remoteStore.getTiddlers('title');
var msg=this.overwriteprompt.format([target,existing.length,existing.length!=1?'s':'']);
if (merge) {
var added=titles.length; var updated=0; var kept=0;
for (var i=0; i<existing.length; i++)
if (titles.contains(existing[i].title)) {
added--; updated++;
} else {
out.push(this.formatItem(remoteStore,filetype,existing[i],url));
kept++;
}
displayMessage(this.mergestatus.format(
[added,added!=1?'s':'',updated,updated!=1?'s':'',kept,kept!=1?'s':'',]));
}
else if (!confirm(msg)) out=[]; // empty the list = don't write file
}
}
}
return out;
},
formatItem: function(s,f,t,u,fields) {
if (f==this.type_TW)
var r=s.getSaver().externalizeTiddler(s,t);
if (f==this.type_PS)
var r=this.pureStoreTiddler.format([t.title,s.getSaver().externalizeTiddler(s,t)]);
if (f==this.type_NF)
var r=this.newsFeedTiddler.format([t.saveToRss(u)]);
if (f==this.type_TX)
var r=this.plainTextTiddler.format([t.title, t.created.toLocaleString(), t.modified.toLocaleString(),
t.modifier, String.encodeTiddlyLinkList(t.tags), t.text]);
if (f==this.type_CS) {
function toCSV(t) { return '"'+t.replace(/"/g,'""')+'"'; } // always encode CSV
var out=[ toCSV(t.title), toCSV(t.created.toLocaleString()), toCSV(t.modified.toLocaleString()),
toCSV(t.modifier), toCSV(String.encodeTiddlyLinkList(t.tags)), toCSV(t.text) ];
for (var f in fields) out.push(toCSV(t.fields[f]||''));
var r=out.join(',');
}
return r||"";
}
}
//}}}
/***
!!!Control panel CSS
//{{{
!css
#exportPanel {
display: none; position:absolute; z-index:12; width:90%; right:105%; top:6em;
background-color: #eee; color:#000; font-size: 8pt; line-height:110%;
border:1px solid black; border-bottom-width: 3px; border-right-width: 3px;
padding: 0.5em; margin:0em; -moz-border-radius:1em;-webkit-border-radius:1em;
}
#exportPanel a, #exportPanel td a { color:#009; display:inline; margin:0px; padding:1px; }
#exportPanel table {
width:100%; border:0px; padding:0px; margin:0px;
font-size:8pt; line-height:110%; background:transparent;
}
#exportPanel tr { border:0px;padding:0px;margin:0px; background:transparent; }
#exportPanel td { color:#000; border:0px;padding:0px;margin:0px; background:transparent; }
#exportPanel select { width:98%;margin:0px;font-size:8pt;line-height:110%;}
#exportPanel input { width:98%;padding:0px;margin:0px;font-size:8pt;line-height:110%; }
#exportPanel textarea { width:98%;padding:0px;margin:0px;overflow:auto;font-size:8pt; }
#exportPanel .box {
border:1px solid black; padding:3px; margin-bottom:5px;
background:#f8f8f8; -moz-border-radius:5px;-webkit-border-radius:5px; }
#exportPanel .topline { border-top:2px solid black; padding-top:3px; margin-bottom:5px; }
#exportPanel .rad { width:auto;border:0 }
#exportPanel .chk { width:auto;border:0 }
#exportPanel .btn { width:auto; }
#exportPanel .btn1 { width:98%; }
#exportPanel .btn2 { width:48%; }
#exportPanel .btn3 { width:32%; }
#exportPanel .btn4 { width:24%; }
#exportPanel .btn5 { width:19%; }
!end
//}}}
!!!Control panel HTML
//{{{
!html
<!-- target path/file -->
<div>
<div style="float:right;padding-right:.5em">
<input type="checkbox" style="width:auto" id="exportMerge" CHECKED
title="combine selected tiddlers with existing tiddlers (if any) in export file"> merge
</div>
export to:<br>
<input type="text" id="exportFilename" size=40 style="width:93%"><input
type="button" id="exportBrowse" value="..." title="select or enter a local folder/file..." style="width:5%"
onclick="var fn=config.macros.exportTiddlers.askForFilename(this); if (fn.length) this.previousSibling.value=fn; ">
</div>
<!-- output format -->
<div>
format:
<select id="exportFormat" size=1>
<option value="TW">TiddlyWiki HTML document (includes core code)</option>
<option value="PS">TiddlyWiki "PureStore" HTML file (tiddler data only)</option>
<option value="TX">TiddlyWiki plain text TXT file (tiddler source listing)</option>
<option value="CS">Comma-Separated Value (CSV) data file</option>
<option value="NF">RSS NewsFeed XML file</option>
</select>
</div>
<!-- notes -->
<div>
notes:<br>
<textarea id="exportNotes" rows=3 cols=40 style="height:10em;margin-bottom:5px;" onfocus="this.select()"></textarea>
</div>
<!-- list of tiddlers -->
<table><tr align="left"><td>
select:
<a href="JavaScript:;" id="exportSelectAll"
onclick="return config.macros.exportTiddlers.process(this)" title="select all tiddlers">
all </a>
<a href="JavaScript:;" id="exportSelectChanges"
onclick="return config.macros.exportTiddlers.process(this)" title="select tiddlers changed since last save">
changes </a>
<a href="JavaScript:;" id="exportSelectOpened"
onclick="return config.macros.exportTiddlers.process(this)" title="select tiddlers currently being displayed">
opened </a>
<a href="JavaScript:;" id="exportSelectRelated"
onclick="return config.macros.exportTiddlers.process(this)" title="select tiddlers related to the currently selected tiddlers">
related </a>
<a href="JavaScript:;" id="exportToggleFilter"
onclick="return config.macros.exportTiddlers.process(this)" title="show/hide selection filter">
filter </a>
</td><td align="right">
<a href="JavaScript:;" id="exportListSmaller"
onclick="return config.macros.exportTiddlers.process(this)" title="reduce list size">
– </a>
<a href="JavaScript:;" id="exportListLarger"
onclick="return config.macros.exportTiddlers.process(this)" title="increase list size">
+ </a>
</td></tr></table>
<select id="exportList" multiple size="10" style="height:50em; margin-bottom:5px;"
onchange="config.macros.exportTiddlers.refreshList(this.selectedIndex)">
</select><br>
<!-- selection filter -->
<div id="exportFilterPanel" style="display:none">
<table><tr align="left"><td>
selection filter
</td><td align="right">
<a href="JavaScript:;" id="exportHideFilter"
onclick="return config.macros.exportTiddlers.process(this)" title="hide selection filter">hide</a>
</td></tr></table>
<div class="box">
<input type="checkbox" class="chk" id="exportFilterStart" value="1"
onclick="config.macros.exportTiddlers.showFilterFields(this)"> starting date/time<br>
<table cellpadding="0" cellspacing="0"><tr valign="center"><td width="50%">
<select size=1 id="exportFilterStartBy"
onchange="config.macros.exportTiddlers.showFilterFields(this);">
<option value="0">today</option>
<option value="1">yesterday</option>
<option value="7">a week ago</option>
<option value="30">a month ago</option>
<option value="file">file date</option>
<option value="other">other (mm/dd/yyyy hh:mm)</option>
</select>
</td><td width="50%">
<input type="text" id="exportStartDate" onfocus="this.select()"
onchange="config.macros.exportTiddlers.$('exportFilterStartBy').value='other';">
</td></tr></table>
<input type="checkbox" class="chk" id="exportFilterEnd" value="1"
onclick="config.macros.exportTiddlers.showFilterFields(this)"> ending date/time<br>
<table cellpadding="0" cellspacing="0"><tr valign="center"><td width="50%">
<select size=1 id="exportFilterEndBy"
onchange="config.macros.exportTiddlers.showFilterFields(this);">
<option value="0">today</option>
<option value="1">yesterday</option>
<option value="7">a week ago</option>
<option value="30">a month ago</option>
<option value="file">file date</option>
<option value="other">other (mm/dd/yyyy hh:mm)</option>
</select>
</td><td width="50%">
<input type="text" id="exportEndDate" onfocus="this.select()"
onchange="config.macros.exportTiddlers.$('exportFilterEndBy').value='other';">
</td></tr></table>
<input type="checkbox" class="chk" id=exportFilterTags value="1"
onclick="config.macros.exportTiddlers.showFilterFields(this)"> match tags<br>
<input type="text" id="exportTags" onfocus="this.select()">
<input type="checkbox" class="chk" id=exportFilterText value="1"
onclick="config.macros.exportTiddlers.showFilterFields(this)"> match titles/tiddler text<br>
<input type="text" id="exportText" onfocus="this.select()">
</div> <!--box-->
</div> <!--panel-->
<!-- action buttons -->
<div style="text-align:center">
<input type=button class="btn4" onclick="config.macros.exportTiddlers.process(this)"
id="exportFilter" value="apply filter">
<input type=button class="btn4" onclick="config.macros.exportTiddlers.process(this)"
id="exportStart" value="export tiddlers">
<input type=button class="btn4" onclick="config.macros.exportTiddlers.process(this)"
id="exportDelete" value="delete tiddlers">
<input type=button class="btn4" onclick="config.macros.exportTiddlers.process(this)"
id="exportClose" value="close">
</div><!--center-->
!end
//}}}
***/
<<myComment>>
----
~~:::::__Fri Jun 25 2010 20:56:03 GMT-0400 (Eastern Daylight Time)__:::::~~
^^(__KennyZ Wrote:__)^^ My eyes hurt. Made the box bigger. Maybe too big...
/***
|Name|ExternalTiddlersPlugin|
|Source|http://www.TiddlyTools.com/#ExternalTiddlersPlugin|
|Documentation|http://www.TiddlyTools.com/#ExternalTiddlersPluginInfo|
|Version|1.3.1|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Requires|TemporaryTiddlersPlugin (optional, recommended)|
|Description|retrieve and wikify content from external files or remote URLs|
This plugin extends the {{{<<tiddler>>}}} macro syntax so you can retrieve and wikify content directly from external files or remote URLs. You can also define alternative "fallback" sources to provide basic "import on demand" handling by automatically creating/importing tiddler content from external sources when the specified ~TiddlerName does not already exist in your document.
!!!!!Documentation
>see [[ExternalTiddlersPluginInfo]]
!!!!!Configuration
<<<
<<option chkExternalTiddlersImport>> automatically create/import tiddlers when using external fallback references
{{{usage: <<option chkExternalTiddlersImport>>}}}
<<option chkExternalTiddlersQuiet>> don't display messages when adding tiddlers ("quiet mode")
{{{usage: <<option chkExternalTiddlersQuiet>>}}}
<<option chkExternalTiddlersTemporary>> tag retrieved tiddlers as 'temporary'(requires [[TemporaryTiddlersPlugin]])
{{{usage: <<option chkExternalTiddlersTemporary>>}}}
tag retrieved tiddlers with: <<option txtExternalTiddlersTags>>
{{{usage: <<option txtExternalTiddlersTags>>}}}
__password-protected server settings //(optional, if needed)//:__
>username: <<option txtRemoteUsername>> password: <<option txtRemotePassword>>
>{{{usage: <<option txtRemoteUsername>> <<option txtRemotePassword>>}}}
>''note: these settings are also used by [[LoadTiddlersPlugin]] and [[ImportTiddlersPlugin]]''
<<<
!!!!!Revisions
<<<
2008.10.27 [1.3.1] in insertTiddler(), fixed Safari bug by replacing static Array.concat(...) with new Array().concat(...)
|please see [[ExternalTiddlersPluginInfo]] for additional revision details|
2007.11.25 [1.0.0] initial release - moved from CoreTweaks
<<<
!!!!!Code
***/
//{{{
version.extensions.ExternalTiddlersPlugin= {major: 1, minor: 3, revision: 1, date: new Date(2008,10,27)};
// optional automatic import/create for missing tiddlers
if (config.options.chkExternalTiddlersImport==undefined) config.options.chkExternalTiddlersImport=true;
if (config.options.chkExternalTiddlersTemporary==undefined) config.options.chkExternalTiddlersTemporary=true;
if (config.options.chkExternalTiddlersQuiet==undefined) config.options.chkExternalTiddlersQuiet=false;
if (config.options.txtExternalTiddlersTags==undefined) config.options.txtExternalTiddlersTags="external";
if (config.options.txtRemoteUsername==undefined) config.options.txtRemoteUsername="";
if (config.options.txtRemotePassword==undefined) config.options.txtRemotePassword="";
config.macros.tiddler.externalTiddlers_handler = config.macros.tiddler.handler;
config.macros.tiddler.handler = function(place,macroName,params,wikifier,paramString,tiddler)
{
params = paramString.parseParams("name",null,true,false,true);
var names = params[0]["name"];
var list = names[0];
var items = list.split("|");
var className = names[1] ? names[1] : null;
var args = params[0]["with"];
// UTILITY FUNCTIONS
function extract(text,tids) { // get tiddler source content from plain text or TW doc
if (!text || !tids || !tids.length) return text; // no text or no tiddler list... return text as-is
var remoteStore=new TiddlyWiki();
if (!remoteStore.importTiddlyWiki(text)) return text; // not a TW document... return text as-is
var out=[]; for (var t=0;t<tids.length;t++)
{ var txt=remoteStore.getTiddlerText(tids[t]); if (txt) out.push(txt); }
return out.join("\n");
}
function substitute(text,args) { // replace "substitution markers" ($1-$9) with macro param values (if any)
if (!text || !args || !args.length) return text;
var n=args.length; if (n>9) n=9;
for(var i=0; i<n; i++) { var re=new RegExp("\\$" + (i + 1),"mg"); text=text.replace(re,args[i]); }
return text;
}
function addTiddler(src,text,tids) { // extract tiddler(s) from text and create local copy
if (!config.options.chkExternalTiddlersImport) return; // not enabled... do nothing
if (!text || !tids || !tids.length) return; // no text or no tiddler list... do nothing
var remoteStore=new TiddlyWiki();
if (!remoteStore.importTiddlyWiki(text)) // not a TW document... create a single tiddler from text
makeTiddler(src,text,tids[0]);
else // TW document with "permaview-like" suffix... copy tiddler(s) from remote store
for (var t=0;t<tids.length;t++)
insertTiddler(src,remoteStore.getTiddler(tids[t]));
return;
}
function makeTiddler(src,text,title) { // create a new tiddler object from text
var who=config.options.txtUserName; var when=new Date();
var msg="/%\n\nThis tiddler was automatically created using ExternalTiddlersPlugin\n";
msg+="by %0 on %1\nsource: %2\n\n%/";
var tags=config.options.txtExternalTiddlersTags.readBracketedList();
if (config.options.chkExternalTiddlersTemporary) tags.pushUnique(config.options.txtTemporaryTag);
store.saveTiddler(null,title,msg.format([who,when,src])+text,who,when,tags,{});
if (!config.options.chkExternalTiddlersQuiet) displayMessage("Created new tiddler '"+title+"' from text file "+src);
}
function insertTiddler(src,t) { // import a single tiddler object into the current document store
if (!t) return;
var who=config.options.txtUserName; var when=new Date();
var msg="/%\n\nThis tiddler was automatically imported using ExternalTiddlersPlugin\n";
msg+="by %0 on %1\nsource: %2\n\n%/";
var newtags=new Array().concat(t.tags,config.options.txtExternalTiddlersTags.readBracketedList());
if (config.options.chkExternalTiddlersTemporary) newtags.push(config.options.txtTemporaryTag);
store.saveTiddler(null,t.title,msg.format([who,when,src])+t.text,t.modifier,t.modified,newtags,t.fields);
if (!config.options.chkExternalTiddlersQuiet) displayMessage("Imported tiddler '"+t.title+"' from "+src);
}
function getGUID() // create a Globally Unique ID (for async reference to DOM elements)
{ return new Date().getTime()+Math.random().toString(); }
// loop through "|"-separated list of alternative tiddler/file/URL references until successful
var fallback="";
for (var i=0; i<items.length; i++) { var src=items[i];
// if tiddler (or shadow) exists, replace reference list with current source name and apply core handler
if (store.getTiddlerText(src)) {
arguments[2][0]=src; // params[] array
var p=arguments[4].split(list); arguments[4]=p[0]+src+p[1]; // paramString
this.externalTiddlers_handler.apply(this,arguments);
break; // stop processing alternatives
}
// tiddler doesn't exist, and not an external file/URL reference... skip it
if (!config.formatterHelpers.isExternalLink(src)) {
if (!fallback.length) fallback=src; // title to use when importing external tiddler
continue;
}
// separate 'permaview' list of tiddlers (if any) from file/URL (i.e., '#name name name..." suffix)
var p=src.split("#"); src=p[0]; var tids=p[1]?p[1].readBracketedList(false):[];
// if reference is to a remotely hosted document or the current document is remotely hosted...
if (src.substr(0,4)=="http" || document.location.protocol.substr(0,4)=="http") {
if (src.substr(0,4)!="http") // fixup URL for relative remote references
{ var h=document.location.href; src=h.substr(0,h.lastIndexOf("/")+1)+src; }
var wrapper = createTiddlyElement(place,"span",getGUID(),className); // create placeholder for async rendering
var callback=function(success,params,text,src,xhr) { // ASYNC CALLBACK
if (!success) { displayMessage(xhr.status); return; } // couldn't read remote file... report the error
if (params.fallback.length)
addTiddler(params.url,text,params.tids.length?params.tids:[params.fallback]); // import tiddler
var wrapper=document.getElementById(params.id); if (!wrapper) return;
wikify(substitute(extract(text,params.tids),params.args),wrapper); // ASYNC RENDER
};
var callbackparams={ url:src, id:wrapper.id, args:args, tids:tids, fallback:fallback } // ASYNC PARAMS
var name=config.options.txtRemoteUsername; // optional value
var pass=config.options.txtRemotePassword; // optional value
var x=doHttp("GET",src,null,null,name,pass,callback,callbackparams,null)
if (typeof(x)=="string") // couldn't start XMLHttpRequest... report error
{ displayMessage("error: cannot access "+src); displayMessage(x); }
break; // can't tell if async read will succeed.... stop processing alternatives anyway.
}
else { // read file from local filesystem
var text=loadFile(getLocalPath(src));
if (!text) { // couldn't load file... fixup path for relative reference and retry...
var h=document.location.href;
var text=loadFile(getLocalPath(decodeURIComponent(h.substr(0,h.lastIndexOf("/")+1)))+src);
}
if (text) { // test it again... if file was loaded OK, render it in a class wrapper
if (fallback.length) // create new tiddler using primary source name (if any)
addTiddler(src,text,tids.length?tids:[fallback]);
var wrapper=createTiddlyElement(place,"span",null,className);
wikify(substitute(extract(text,tids),args),wrapper); // render
break; // stop processing alternatives
}
}
}
};
//}}}
/***
|Name|FileDropPlugin|
|Source|http://www.TiddlyTools.com/#FileDropPlugin|
|Version|2.1.4|
|Author|BradleyMeck, Eric Shulman, and Kenny Z|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|drag-and-drop files/directories to create tiddlers|
''requires FireFox or another Mozilla-compatible browser.''
!!!!!Configuration
<<<
__FileDropPlugin options:__
<<option chkFileDropContent>>Use Binary Mode?
File Size Limit: <<option txtFileDropDataLimit>> bytes
//(note: excess text content will be truncated, oversized binary files will skipped, 0=no limit)//
<<option chkFileDropLink>>Generate external links to files, using this format:{{editor{<html><nowiki><textarea rows="4" onchange="
config.macros.option.propagateOption('txtFileDropLinkFormat','value',this.value.escapeLineBreaks(),'input');
"></textarea></html><<tiddler {{
var ta=place.lastChild.getElementsByTagName('textarea')[0];
var v=config.options.txtFileDropLinkFormat.unescapeLineBreaks();
ta.value=v;
"";}}>>}}}<<option chkFileDropTrimFilename>>Omit file extensions from tiddler titles
<<option chkFileDropDisplay>>Automatically display newly created tiddlers
Tag newly created tiddlers with: <<option txtFileDropTags>>
__FileDropPlugin+AttachFilePlugin options:__ //(binary file data as encoded 'base64' text)//
<<option chkFileDropAttachLocalLink>> attachment includes reference to local path/filename
>Note: if the plugin does not seem to work, enter ''about:config'' in the Firefox address bar, and make sure that {{{signed.applets.codebase_principal_support}}} is set to ''true''
<<<
!!!!!Usage
<<<
This plugin automatically creates tiddlers from files that are dropped onto an open TiddlyWiki document. You can drop multiple selected files and/or folders to create many tiddlers at once. New tiddler titles are created using the filename of each dropped file (i.e., omitting the path). If a title is already in use, you are prompted to enter a new title for that file. If you drop a folder, you will be asked if you want to create a simple 'directory list' of files in a single tiddler or create one tiddler for each file in that folder.
By default, it is assumed that all dropped files contain text. However, if [[AttachFilePlugin]], [[AttachFilePluginFormatters]] and [[AttachFileMIMETypes]] are installed, then you can drop ''//binary data files//'' as well as text files. If the MIME type of a dropped file is not "text/plain", then AttachFilePlugin is used to create an 'attachment' tiddler, rather than creating a simple text tiddler.
When creating text tiddlers, you can embed a //link// to the original external file at the top of the new tiddler, in addition to (or instead of) the text content itself. The format for this link (see Configuration, below) uses embedded ''//replacement markers//'' that allow you to generate a variety of wiki-formatted output, where:
*%0 = filename (without path)
*%1 = local """file://...""" URL
*%2 = local path and filename (OS-native format)
*%3 = relative path (if subdirectory of current document directory)
*%4 = file size
*%5 = file date
*%6 = current date
*%7 = current ~TiddlyWiki username
*\n = newline
By default, the link format uses the filename (%0) and local URL (%1), enclosed within a //hidden section// syntax, like this:
{{{
/%
!link
[[%0|%1]]
!end
%/
}}}
This permits the link to be embedded along with the text content, without changing the appearance of that content when the tiddler is viewed. To display the link in your tiddler content, use:
{{{
<<tiddler TiddlerName##link>>
}}}
<<<
!!!!!Examples (custom handler functions)
<<<
Adds a single file with confirmation and prompting for title:
{{{
config.macros.fileDrop.addEventListener('application/x-moz-file',
function(nsiFile) {
var msg='You have dropped the file:\n'
+nsiFile.path+'\n'
+'onto the page, it will be imported as a tiddler. Is that ok?'
if(confirm(msg)) {
var newDate = new Date();
var title = prompt('what would you like to name the tiddler?');
store.saveTiddler(title,title,loadFile(nsiFile.path),config.options.txtUserName,newDate,[]);
}
return true;
});
}}}
Adds a single file without confirmation, using path/filename as tiddler title:
{{{
config.macros.fileDrop.addEventListener('application/x-moz-file',
function(nsiFile) {
var newDate = new Date();
store.saveTiddler(nsiFile.path,nsiFile.path,loadFile(nsiFile.path),config.options.txtUserName,newDate,[]);
story.displayTiddler(null,nsiFile.path)
return true;
});
}}}
<<<
!!!!!Revisions
<<<
2010.03.06 2.1.4 added event listener for 'dragover' (for FireFox 3.6+)
2009.10.10 2.1.3 fixed IE code error
2009.10.08 2.1.2 fixed chkFileDropContent bypass handling for binary attachments
2009.10.07 2.1.0 added chkFileDropContent and chkFileDropLink/txtFileDropLinkFormat
2009.08.19 2.0.0 fixed event listener registration for FireFox 3.5+. Also, merged with FileDropPluginConfig, with code cleanup/reduction
2008.08.11 1.5.1 added chkFileDropAttachLocalLink option to allow suppression of local path/file link
2007.xx.xx *.*.* add suspend/resume of notifications to improve performance when multiple files are handled
2007.01.01 0.9.9 extensions for AttachFilePlugin
2006.11.04 0.1.1 initial release by Bradley Meck
<<<
!!!!!Code
***/
//{{{
version.extensions.FileDropPlugin={major:2, minor:1, revision:4, date: new Date(2010,3,6)};
config.macros.fileDrop = {
customDropHandlers: [],
addEventListener: function(paramflavor,func,inFront) {
var obj={}; obj.flavor=paramflavor; obj.handler=func;
if (!inFront) this.customDropHandlers.push(obj);
else this.customDropHandlers.shift(obj);
},
dragDropHandler: function(evt) {
netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
var dragService = Components.classes['@mozilla.org/widget/dragservice;1'].getService(Components.interfaces.nsIDragService);
var dragSession = dragService.getCurrentSession();
var transferObject = Components.classes['@mozilla.org/widget/transferable;1'].createInstance();
transferObject = transferObject.QueryInterface(Components.interfaces.nsITransferable);
transferObject.addDataFlavor('application/x-moz-file');
var numItems = dragSession.numDropItems;
if (numItems>1) {
clearMessage();
displayMessage('Reading '+numItems+' files...');
store.suspendNotifications();
}
for (var i = 0; i < numItems; i++) {
dragSession.getData(transferObject, i);
var dataObj = {};
var dropSizeObj = {};
for(var ind=0; ind<config.macros.fileDrop.customDropHandlers.length; ind++) {
var item = config.macros.fileDrop.customDropHandlers[ind];
if(dragSession.isDataFlavorSupported(item.flavor)) {
transferObject.getTransferData(item.flavor, dataObj, dropSizeObj);
var droppedFile = dataObj.value.QueryInterface(Components.interfaces.nsIFile);
var result = item.handler.call(item,droppedFile);
evt.stopPropagation();
evt.preventDefault();
if (result) break;
}
}
}
if (numItems>1) {
store.resumeNotifications();
store.notifyAll();
displayMessage(numItems+' files have been processed');
}
}
}
//}}}
/***
!!!!!window event handlers
***/
//{{{
if(!window.event) {
window.addEventListener('dragdrop', // FireFox3.1-
config.macros.fileDrop.dragDropHandler, true);
window.addEventListener('drop', // FireFox3.5+
config.macros.fileDrop.dragDropHandler, true);
window.addEventListener('dragover', // FireFox3.6+
function(e){e.stopPropagation();e.preventDefault();}, true);
}
//}}}
/***
!!!!!handler for files, directories and binary attachments (see [[AttachFilePlugin]])
***/
//{{{
var defaults={
chkFileDropDisplay: true,
chkFileDropTrimFilename: false,
chkFileDropContent: true,
chkFileDropLink: true,
txtFileDropLinkFormat: '/%\\n!link\\n[[%0|%1]]\\n!end\\n%/',
txtFileDropDataLimit: '32768',
chkFileDropAttachLocalLink: true,
txtFileDropTags: ''
};
for (var id in defaults) if (config.options[id]===undefined)
config.options[id]=defaults[id];
config.macros.fileDrop.addEventListener('application/x-moz-file',function(nsiFile) {
var co=config.options; // abbrev
var header='Index of %0\n^^(as of %1)^^\n|!filename| !size | !modified |\n';
var item='|[[%0|%1]]| %2|%3|\n';
var footer='Total of %0 bytes in %1 files\n';
var now=new Date();
var files=[nsiFile];
if(co.txtFileDropDataLimit==0) co.txtFileDropDataLimit ='';
if (nsiFile.isDirectory()) {
var folder=nsiFile.directoryEntries;
var files=[];
while (folder.hasMoreElements()) {
var f=folder.getNext().QueryInterface(Components.interfaces.nsILocalFile);
if (f instanceof Components.interfaces.nsILocalFile && !f.isDirectory()) files.push(f);
}
var msg=nsiFile.path.replace(/\\/g,'/')+'\n\n';
msg+='contains '+files.length+' files... ';
msg+='select OK to attach all files or CANCEL to create a list...';
if (!confirm(msg)) { // create a list in a tiddler
var title=nsiFile.leafName; // tiddler name is last directory name in path
while (title && title.length && store.tiddlerExists(title)) {
if (confirm(config.messages.overwriteWarning.format([title]))) break;
title=prompt('Enter a new tiddler title',nsiFile.path.replace(/\\/g,'/'));
}
if (!title || !title.length) return true; // cancelled
var text=header.format([nsiFile.path.replace(/\\/g,'/'),now.toLocaleString()]);
var total=0;
for (var i=0; i<files.length; i++) { var f=files[i];
var name=f.leafName;
if (co.chkFileDropTrimFilename)
{ var p=name.split('.'); if (p.length>1) p.pop(); name=p.join('.'); }
var path='file:///'+f.path.replace(/\\/g,'/');
var size=f.fileSize; total+=size;
var when=new Date(f.lastModifiedTime).formatString('YYYY.0MM.0DD 0hh:0mm:0ss');
text+=item.format([name,path,size,when]);
}
text+=footer.format([total,files.length]);
var newtags=co.txtFileDropTags?co.txtFileDropTags.readBracketedList():[];
store.saveTiddler(null,title,text,co.txtUserName,when,newtags);
if (co.chkFileDropDisplay) story.displayTiddler(null,title);
return true;
}
}
if (files.length>1) store.suspendNotifications();
for (i=0; i<files.length; i++) {
var append=false; var overwrite=false;
var file=files[i];
if (file.isDirectory()) continue; // skip over nested directories
var type='text/plain';
var title=file.leafName; // tiddler name is file name
if (co.chkFileDropTrimFilename)
{ var p=title.split('.'); if (p.length>1) p.pop(); title=p.join('.'); }
var name=file.leafName;
var path=file.path;
var url='file:///'+path.replace(/\\/g,'/');
var size=file.fileSize;
var when=new Date(file.lastModifiedTime);
var now=new Date();
var who=config.options.txtUserName;
var h=document.location.href;
var cwd=getLocalPath(decodeURIComponent(h.substr(0,h.lastIndexOf('/')+1)));
var relpath=path.startsWith(cwd)?'./'+path.substr(cwd.length):path;
while(title && title.length && store.tiddlerExists(title)) {
var tt=prompt('Tiddler '+title+' already exists, Press:\nA - Append (text only),\nO - Overwrite,\nR - Rename');
if(!tt||!tt.length){title=null;break;};
switch(tt){
case 'A':
case 'a': append=true; break;
case 'O':
case 'o': overwrite=true; break;
case 'R':
case 'r': tt=prompt('Enter a new tiddler title',path.replace(/\\/g,'/')); if(tt) title=tt; continue;
default: continue;
}
break;
}
if (!title || !title.length) continue; // cancelled
if (co.chkFileDropContent && config.macros.attach.getMIMEType) {
type=config.macros.attach.getMIMEType(name,'');
if (!type.length)
type=prompt('Unknown file type. Enter a MIME type','text/plain');
if (!type||!type.length) continue; // cancelled
}
var newtags=co.txtFileDropTags?co.txtFileDropTags.readBracketedList():[];
if (type=='text/plain' || !co.chkFileDropContent) {
//displayMessage("plain text");
var txt='';
var fmt=co.txtFileDropLinkFormat.unescapeLineBreaks();
var out=loadFile(path);
if (co.chkFileDropLink)
txt+=fmt.format([name,url,path,relpath,size,when,now,who]);
var lim=co.txtFileDropDataLimit;
txt+=(lim)?out.substr(0,lim):out;
if (lim && size>lim){
txt+='\n----\nfilesize ('+size+')'
+' is larger than FileDrop limit ('+lim+')...\n'
+'additional content has been omitted';
displayMessage(name+"'s filesize is over the limit");
alert(name+"'s filesize is over the limit");
}
if(!append) { // save or overwrite
store.saveTiddler(null,title,txt,co.txtUserName,when,newtags);
if(overwrite) displayMessage(title+' overwritten');
else displayMessage(title+' saved');
}
else{ //Append
store.getTiddler(title).text += '\n----\n' + txt;
story.refreshTiddler(title,null,true);
store.setDirty(true); autoSaveChanges();
displayMessage(title+' appended');
}
} else { // if binary file
//displayMessage("embedded");
//var embed=co.chkFileDropContent && ((!co.txtFileDropDataLimit) || (size<co.txtFileDropDataLimit));
var embed=((!co.txtFileDropDataLimit) || (size<co.txtFileDropDataLimit));
if(embed){ newtags.push('attachment'); newtags.push('excludeMissing');}
config.macros.attach.createAttachmentTiddler(path,now.formatString(config.macros.timeline.dateFormat),'attached by FileDropPlugin',newtags,title,embed,co.chkFileDropAttachLocalLink,false,url,'',type,co.chkFileDropDisplay);
}
if (co.chkFileDropDisplay) story.displayTiddler(null,title);
}
if (files.length>1) { store.resumeNotifications(); store.notifyAll(); }
return true;
})
//}}}
<<myComment>>
----
~~:::::__Fri Jun 25 2010 19:54:40 GMT-0400 (Eastern Daylight Time)__:::::~~
Changes:
* Added append feature.
* Improved the look&feel of prompts if tiddler already exists w/ same title.
* creation date changed to use variable "when" instead of "now".
----
~~:::::__Fri Jun 25 2010 19:55:56 GMT-0400 (Eastern Daylight Time)__:::::~~
fix:
*the original uses var relpath, I changed it to url in the last else block where config.macros.attach.createAttachmentTiddler was called. This seem to fix the linking issue.
----
~~:::::__Fri Jun 25 2010 19:57:01 GMT-0400 (Eastern Daylight Time)__:::::~~
added: allert & display message added when fileSize exceeds sizeLimit, which result in data loss.
----
~~:::::__Fri Jun 25 2010 20:01:31 GMT-0400 (Eastern Daylight Time)__:::::~~
unsure: Some confusion over configurations. Made alot of change to the last if/else block where binary/text mode are selected. Removed MIME type checking when in text mode. hmmm... Error when limit is set to zero, this is suppose to mean unlimited. However, it always evaluates to false. So I added {{{if(XXXXX=0) XXXX=null}}}, this seem to fix the js undefine/0/false issue.
/***
|Name|FoldHeadingsPlugin|
|Source|http://www.TiddlyTools.com/#FoldHeadingsPlugin|
|Version|1.1.2|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|automatically turn headings into slider-like panels that can be folded/unfolded with a single click|
This plugin defines a macro that automatically converts heading-formatted content into sliders that let you expand/collapse their content by clicking on individual headings.
!!!!!Usage
<<<
{{{
<<foldHeadings opened|closed tag tag tag...>>
}}}
where: ''opened'' or ''closed'' is a keyword indicating the initial state of the sections (default: opened), and ''tag tag tag...'' is an optional list of tags to match, so that the foldable effect is only applied to tiddlers that contain one (or more) of the indicated tags.
When you place the macro in a tiddler, any heading-formatted content (i.e, "!" through "!!!!!") in that tiddler will automatically become //'fold-able'//, allowing you to expand/collapse the content that follows each heading simply by clicking on that heading. Each content section begins with the first element following a heading, and continues until either another heading is found or the end of the tiddler is reached. For example:
{{{
<<foldHeadings closed>>
}}}
is embedded in ''this'' tiddler in order to make all the headings it contains 'fold-able'. Note that the macro has been placed at the //end// of the tiddler because it only operates on *rendered* content. Thus, only headings that //precede// it in the same tiddler will become fold-able, as any headings that //follow// it are not actually rendered until //after// the macro has been processed.
You can further limit the effect of the macro within the tiddler by surrounding several headings in a "CSS class wrapper" ("""{{classname{...}}}""") or other containing DOM element (e.g., """@@display:inline;...@@""") and then embedding the {{{<<foldHeadings>>}}} macro inside that container (at the end)... only those headings that are also within that container will be made fold-able, instead of converting ''all'' the headings in that tiddler.
Conversely, if you want the fold-able ability to apply to the headings in //all// tiddlers, ''without having to alter //any// of those individual tiddlers'', you can add the macro to the end of your [[ViewTemplate]], so that it will be invoked after the content in each tiddler has been rendered, causing all headings they contain to automatically become fold-able. For example:
{{{
<span macro="foldHeadings closed"></span>
}}}
You can also limit this effect to selected tiddlers by specifying one or more tags as additional macro parameters. For example:
{{{
<span macro="foldHeadings closed systemConfig"></span>
}}}
is only applied to headings contained in //plugin tiddlers// (i.e., tiddlers tagged with <<tag systemConfig>>), while headings in other tiddlers remain unaffected by the macro, even though it is embedded in the common [[ViewTemplate]] definition.
<<<
!!!!!Revisions
<<<
2009.11.30 [1.1.2] corrected CSS 'text-weight' to 'font-weight'
2009.01.06 [1.1.1] removed hijack of scrollToSection() (see [[SectionLinksPlugin]] for equivalent code)
2008.11.17 [1.1.0] added hijack of 'scrollToSection()' function (see [[CoreTweaks]] and http://trac.tiddlywiki.org/ticket/784)
2007.12.06 [1.0.2] fix handling for empty sections when checking for sliderPanel/floatingPanel
2007.12.02 [1.0.1] fix handling when content following a heading is already a sliderPanel/floatingPanel
2007.12.01 [1.0.0] initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.FoldHeadingsPlugin= {major: 1, minor: 1, revision: 2, date: new Date(2009,11,30)};
config.macros.foldHeadings = {
guideText: "opened|closed className",
showtip: "click to show '%0'",
hidetip: "click to hide '%0'",
showlabel: "more...",
hidelabel: "[x]",
html: "<span style='float:right;font-weight:normal;font-size:80%;' class='TiddlyLinkExisting'>%0 </span>",
handler: function(place,macroName,params) {
var show=params[0] && params.shift().toLowerCase()!="closed";
if (params.length) { // if filtering by tag(s)
var here=story.findContainingTiddler(place);
if (here) var tid=store.getTiddler(here.getAttribute("tiddler"));
if (!tid || !tid.tags.containsAny(params)) return; // in a tiddler and not tagged... do nothing...
}
var elems=place.parentNode.getElementsByTagName("*");
var heads=[]; for (var i=0; i<elems.length; i++) { // get non-foldable heading elements
var n=elems[i].nodeName; var foldable=hasClass(elems[i],"foldable");
if ((n=="H1"||n=="H2"||n=="H3"||n=="H4"||n=="H5")&&!foldable)
heads.push(elems[i]);
}
for (var i=0; i<heads.length; i++) { var h=heads[i]; // for each heading element...
// find start/end of section content (up to next heading or end of content)
var start=end=h.nextSibling; while (end && end.nextSibling) {
var n=end.nextSibling.nodeName.toUpperCase();
if (n=="H1"||n=="H2"||n=="H3"||n=="H4"||n=="H5") break;
end=end.nextSibling;
}
if (start && hasClass(start,"sliderPanel")||hasClass(start,"floatingPanel")) continue; // heading is already a slider!
var span=createTiddlyElement(null,"span",null,"sliderPanel"); // create container
span.style.display=show?"inline":"none"; // set initial display state
h.parentNode.insertBefore(span,start); // and insert it following the heading element
// move section elements into container...
var e=start; while (e) { var next=e.nextSibling; span.insertBefore(e,null); if (e==end) break; e=next; }
// set heading label/tip/cursor...
h.title=(show?this.hidetip:this.showtip).format([h.textContent])
h.innerHTML=this.html.format([show?this.hidelabel:this.showlabel])+h.innerHTML;
h.style.cursor='pointer';
addClass(h,"foldable"); // so we know it been done (and to add extra styles)
h.onclick=function() {
var panel=this.nextSibling; var show=panel.style.display=="none";
// update panel display state
if (config.options.chkAnimate) anim.startAnimating(new Slider(panel,show));
else panel.style.display = show?"inline":"none";
// update heading label/tip
this.removeChild(this.firstChild); // remove existing label
var fh=config.macros.foldHeadings; // abbreviation for readability...
this.title=(show?fh.hidetip:fh.showtip).format([this.textContent])
this.innerHTML=fh.html.format([show?fh.hidelabel:fh.showlabel])+this.innerHTML;
}
}
}
}
if (story.scrollToSection) {
Story.prototype.foldheadings_scrollToSection=Story.prototype.scrollToSection;
Story.prototype.scrollToSection=function(title,section) {
var e=this.foldheadings_scrollToSection.apply(this,arguments);
// if scrolling to a folded section heading, click to expand it
if (e && hasClass(e,'foldable') && e.nextSibling.style.display=='none') e.onclick();
}
}
//}}}
// //<<foldHeadings closed>>
/***
|''Name:''|FootnotesPlugin|
|''Description:''|Create automated tiddler footnotes.|
|''Author:''|Saq Imtiaz ( lewcid@gmail.com )|
|''Source:''|http://tw.lewcid.org/#FootnotesPlugin|
|''Code Repository:''|http://tw.lewcid.org/svn/plugins|
|''Version:''|2.01|
|''Date:''|10/25/07|
|''License:''|[[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]]|
|''~CoreVersion:''|2.2.2|
!!Usage:
*To create a footnote, just put the footnote text inside triple backticks.
*Footnotes are numbered automatically, and listed at the bottom of the tiddler.
*{{{Creating a footnote is easy. ```This is the text for my footnote```}}}
*[[FootnotesDemo|http://tw.lewcid.org/#FootnotesDemo]]
***/
// /%
//!BEGIN-PLUGIN-CODE
config.footnotesPlugin = {
backLabel: " ^",
backLabelTip: "back",
};
config.formatters.unshift( {
match: "```",
lookaheadRegExp: /```((?:.|\n)*?)```/g,
handler: function(w)
{
this.lookaheadRegExp.lastIndex = w.matchStart;
var lookaheadMatch = this.lookaheadRegExp.exec(w.source);
if(lookaheadMatch && lookaheadMatch.index == w.matchStart )
{
var tiddler = story.findContainingTiddler(w.output);
if (!tiddler.notes)
tiddler.notes = [];
var title = tiddler.getAttribute("tiddler");
tiddler.notes.pushUnique(lookaheadMatch[1]);
var pos = tiddler.notes.indexOf(lookaheadMatch[1]) + 1;
createTiddlyButton(w.output,pos,lookaheadMatch[1],function(){var x=document.getElementById(title+"ftn"+pos);window.scrollTo(0,ensureVisible(x)+(ensureVisible(x)<findScrollY()?(findWindowHeight()-x.offsetHeight):0));return false;},"ftnlink",title+"ftnlink"+pos);
w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;
}
}
});
old_footnotes_refreshTiddler = Story.prototype.refreshTiddler;
Story.prototype.refreshTiddler = function(title,template,force)
{
var tiddler = old_footnotes_refreshTiddler.apply(this,arguments);
if (tiddler.notes && tiddler.notes.length)
{
var holder = createTiddlyElement(null,"div",null,"footnoteholder");
var list = createTiddlyElement(holder,"ol",title+"footnoteholder");
for (var i=0; i<tiddler.notes.length; i++)
{
var ftn = createTiddlyElement(list,"li",title+"ftn"+(i+1),"footnote");
wikify(tiddler.notes[i]+" ",ftn);
createTiddlyButton(ftn," ^","back",function(){window.scrollTo(0,ensureVisible(document.getElementById(this.parentNode.id.replace("ftn","ftnlink"))));return false;},"ftnbklink");
}
var count = tiddler.childNodes.length;
for (var j=0; j<count; j++){
if(hasClass(tiddler.childNodes[j],"viewer")){
var viewer = tiddler.childNodes[j];
}
}
viewer.appendChild(holder);
tiddler.notes = [];
}
return tiddler;
};
setStylesheet(
".tiddler a.ftnlink {vertical-align: super; font-size: 0.8em; color:red;}\n"+
".tiddler a.ftnlink:hover, .tiddler .footnoteholder a.ftnbklink:hover{color:#fff;background:red;}\n"+
".tiddler div.footnoteholder{margin:1.8em 1.0em; padding:0.1em 1.0em 0.1em 1.0em ;border-left: 1px solid #ccc;}"+
".tiddler footnoteholder ol {font-size: 0.9em; line-height: 1.2em;}\n"+
".tiddler .footnoteholder li.footnote {margin: 0 0 5px 0;}\n"+
".tiddler .footnoteholder a.ftnbklink{color:red;}\n","FootNotesStyles");
//!END-PLUGIN-CODE
// %/
<<myComment>>
----
~~:::::__Fri Jun 25 2010 21:38:29 GMT-0400 (Eastern Daylight Time)__:::::~~
^^(__KennyZ Wrote:__)^^ Changed to: Footnotes show up as tooltips as well as appear at the bottom.
----
~~:::::__Fri Jun 25 2010 21:38:50 GMT-0400 (Eastern Daylight Time)__:::::~~
^^(__KennyZ Wrote:__)^^ can't upload to tiddlyspot.com when footnotesplugin is turned on... need to compare try the original.
----
~~:::::__Tue Jun 29 2010 19:50:19 GMT-0400 (Eastern Daylight Time)__:::::~~
^^(__KennyZ Wrote:__)^^ Now I can upload, but seems to conflict with TrashPlugin.
//{{{
function getExternalText(url){
if(window.Components && window.netscape && window.netscape.security && document.location.protocol.indexOf("http") == -1)
window.netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
this.xmlhttp = null;
if ( window.XMLHttpRequest ) this.xmlhttp = new XMLHttpRequest();
else if ( window.ActiveXObject ) {
try { // Works well in IE Browser's
xmlhttp= new ActiveXObject("Microsoft.XMLHTTP");
} catch( e ) {
xmlhttp= new ActiveXObject("Msxml2.XMLHTTP");
}
}
try{ // in case bad feeds
this.xmlhttp.open("GET", url, false); // wait till finish
this.xmlhttp.send(null);
}
catch(e) {
alert('Could Not Process Feed URL: ' + url);
}
return this.xmlhttp.responseText;
}
function getQuoteOfTheDay(){
url="http://img.tfd.com/daily/quote.js";
text=getExternalText(url);
text=text.substring(22,text.indexOf("</table>';"));
return "<html>"+text+"</table></html>";
}
//}}}
My personal collection of plugins and memo on editing ~TiddlyWiki. Most changes made to plugins are logged.
<<option chkDisableTabsBar>> Disable the tabs bar
[[How to's|howto]]
/***
<<history>>
|''Name:''|HistoryPlugin|
|''Description:''|Add history or revision control to any individual tiddler.|
|''Author:''|MartinBudden, TonyGarnockJones, and Kenny Z|
|''Source:''|http://cooltool.tiddlyspot.com/#HistoryPlugin|
|''Dependencies:''|[[json2]] [[graph]] [[fs]] [[Draw]] [[diff]]|
|''CodeRepository:''|[[HistoryPluginRequired.zip|http://cooltool.tiddlyspot.com/#HistoryPluginRequired.zip]],|
|''Version:''|0.0.1|
|''Status:''|Alpha|
|''Date:''|July 3, 2010|
|''Comments:''|[[The original code|http://homepages.kcbbs.gen.nz/tonyg/projects/synchrotron.html]] keeps track of changes to the entire TW. I changed it so each tiddler has its own repository. This gives it that timeline or "history" functionality I was going for.|
|''License:''|[[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]] |
|''~CoreVersion:''|2.6|
!!Description
Add history or revision control to any individual tiddler. Be able to check for changes in different revisions.
!!Usage
#Import
#Save & Reload
#Add {{{<<history>>}}} to any tiddler.
#Click commit button after writing first draft.
!Todo
*Find and remove rogue revision repositories.
!!Code
***/
//{{{
if(!version.extensions.HistoryPlugin) {
version.extensions.HistoryPlugin= {installed:true};
config.macros.history={
canvis: [],
init: function(){
config.shadowTiddlers.StyleSheetForHistory = this.css;
setStylesheet(store.getTiddlerText("StyleSheetForHistory",this.css),"history");
},
handler: function(place,macroName,params,wikifier,paramString,tiddler){
var rev = new Revision(tiddler);
var div=createTiddlyElement(place,'div',null,'history');
DrawDvcs.tiddlyRenderRepository(div,rev.repo,rev);
createTiddlyElement(div,'br');
if(rev.dirty)
createTiddlyButton(div,"commit","Commit the change",function(){rev.commit()});
if(this.canvis[rev.inode])
createTiddlyButton(div,"canvis","Temporary unsaved changes",
function(){
if(rev.dirty){ //clone & swap
temp = config.macros.history.copy(tiddler.text,tiddler.fields.hist_uuid);
tiddler.text=config.macros.history.canvis[rev.inode].text;
tiddler.fields.hist_uuid=config.macros.history.canvis[rev.inode].uuid;
config.macros.history.canvis[rev.inode]=temp;
}else{
tiddler.text = config.macros.history.canvis[rev.inode].text;
tiddler.fields.hist_uuid = config.macros.history.canvis[rev.inode].uuid;
config.macros.history.canvis[rev.inode] = null;
}
story.refreshTiddler(tiddler.title,null,true);
});
return false;
},
copy: function(text,uuid){
t={}; t.text=text; t.uuid=uuid; return t;
},
css: "div.history{float:right; margin:4px;}\n\
div.repository{line-height:0px;white-space:nowrap;}\n\
.revision.selected{background-color:blue;color:white;}\n\
.revision.modified{background-color:red;color:white;}\n",
//.revision.aParent{background-color:#00cc00;color:white;}\n", // NEVER USED
};
// draw diagram of revision paths
DrawDvcs.tiddlyRenderRepository = function(place,repo,revStore) {
var para=createTiddlyElement(place,'div',null,'repository');
var ordering = DrawDvcs.renderRepository(repo);
for (var i = 0; i < ordering.length; i++){
var item = ordering[i];
var rev = repo.lookupRev(item.revId);
var pictures = item.pictures;
for (var j = 0; j < pictures.length; j++) {
img=createTiddlyElement(para,'img',null,'repoImg');
img.src = config.macros.history.images[pictures[j]];
}
var summary=((rev.metadata||{}).subject)||"Untitled";
var btnCss='revision'; var btnTxt='Checkout';
if(revStore.fs.directParent==item.revId){
if(revStore.dirty) btnCss+=' modified';
else btnCss+=' selected';
btnTxt='Revert';
}//else if(revStore.fs.additionalParent == item.revId) btnCss+=' aParent'; // NEVER HAPPENS
var s=createTiddlyButton(para,summary,btnTxt,revisionClicked,btnCss);
s.revisionId=item.revId; s.revStore=revStore;
createTiddlyElement(para,'br');
}
};
// called when a revision path is clicked
function revisionClicked(event) {
var e = (event || window.event);
var revId = e.target.revisionId;
var revStore = e.target.revStore;
revStore.checkout(revId);
return false;
};
// object holding revisions
function Revision(tiddler){
this.repo = new Dvcs.Repository();
this.fs = this.repo.update(null);
this.tiddler = tiddler;
this.inode = tiddler.fields.hist_inode;
this.uuid = tiddler.fields.hist_uuid;
this.dirty=false;
this.loadRepo();
this.hasChanged();
return this;
};
// convert data saved in tiddler into repo
Revision.prototype.loadRepo = function(){
var repoText = store.getTiddlerText("repo_"+this.inode,null);
if (repoText){
this.repo.importRevisions(eval(repoText));
this.fs=this.repo.update(this.uuid);
}else{
var id=this.fs.createFile();
while(store.tiddlerExists("repo_"+id)){
id=this.fs.createFile();
}
this.inode = this.tiddler.fields.hist_inode = id;
}
};
// save changes into repo
Revision.prototype.commit = function(){
if(!this.dirty)return;
note = prompt("Note this commit: ").substr(0,40); // error if null and returns.
this.fs.setProp(this.inode,"title",this.tiddler.title);
this.fs.setProp(this.inode,"text",this.tiddler.text);
this.fs.setProp(this.inode,"modifier",this.tiddler.modifier);
this.fs.setProp(this.inode,"modified",this.tiddler.modified.getTime());
tags=[];for(i=0;i<this.tiddler.tags.length;i++)
tags.push(String.encodeTiddlyLink(this.tiddler.tags[i]));
this.fs.setProp(this.inode,"tags",tags.join(' '));
this.fs.anyDirty=true;
uuid = this.repo.commit(this.fs,{subject: note});
this.uuid = this.tiddler.fields.hist_uuid = uuid;
this.fs = this.repo.update(uuid);
this.saveRepo();
story.refreshTiddler(this.tiddler.title,null,true);
};
//save repo into a tiddler
Revision.prototype.saveRepo = function(){
title = "repo_"+this.inode;
repoText = uneval(this.repo.exportRevisions());
text = '//{{{\n'+repoText+'\n//}}}\n';
tags = ['excludeLists','excludeSearch','repository'];
store.saveTiddler(title,title,text,this.tiddler.title,new Date(),tags);
autoSaveChanges();
};
//get diff between current text and data in repo
Revision.prototype.hasChanged = function(){
// check text body
txt = Crypto.hexSha1Str(this.tiddler.text);
src = Crypto.hexSha1Str(this.fs.getProp(this.inode,"text",""));
if(txt!=src)return this.dirty=true;
// check title
txt = Crypto.hexSha1Str(this.tiddler.title);
src = Crypto.hexSha1Str(this.fs.getProp(this.inode,"title",""));
return this.dirty=(txt!=src);
};
// take out data from repo
Revision.prototype.checkout = function(uuid){
if(this.dirty){
if(config.macros.history.canvis[this.inode])
if(!confirm("Any uncommitted work would be lost. Are you sure?"))
return false;
config.macros.history.canvis[this.inode]=
config.macros.history.copy(this.tiddler.text,this.uuid);
}
this.uuid = this.tiddler.fields.hist_uuid = uuid;
this.fs = this.repo.update(this.uuid);
thisTitle=this.tiddler.title;
title=this.fs.getProp(this.inode,"title",thisTitle);
text=this.fs.getProp(this.inode,"text","");
who=this.fs.getProp(this.inode,"modifier","UNKNOWN");
when=this.fs.getProp(this.inode,"modified",new Date().getTime());
date=new Date(); date.setTime(parseInt(when));
tags=this.fs.getProp(this.inode,"tags",' ').readBracketedList();
if(title != thisTitle){
for(i=1,s=title;store.tiddlerExists(title);i++){
title=s+' ('+i+')';
}
story.closeTiddler(thisTitle,false,false);
store.saveTiddler(thisTitle,title,text,who,date,tags,this.tiddler.fields);
story.displayTiddler(null,title);
}else this.tiddler.set(null,text,who,date,tags);
story.refreshTiddler(title,null,true);
return true;
};
config.macros.history.images = {
"blob_0.png": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH2AYFChQyYckycwAAAIdJREFUOI3tkjEKwzAMRV+6CnwmjTpFl1yshwnkLp5TNP4u9tJ2cWsohTzQIqEnGwlO/ooFuAIbcG+xtdzyiewGyMzk7nJ3mZkAtdqQdAUUEcpMdTJTEdGl64hwL6Wo1qpnaq0qpQjYR4RHRLzIOu2Vx7vGy8iUb5j+5elLmX42XTrtsE9+yANzZprVJVS76gAAAABJRU5ErkJggg=="
,"blob_1.png": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH2AYFChQyYckycwAAAJZJREFUOI3tkjEOAjEMBPdoLflNLv0KmvsYjznpep7h+lAqtDROAwiSUwQFjLRNooxieYE2zpm3HBqFzfyg8BUTgCOABcA1s+TZtEd2AkARoZnRzCgiBMC865LOAOjuLKWwUkqhu1fp3CNcVZURwXsigqpKAGuPcHP3B1klf7k9e/ixLQ8fefhShtemSmuxL5ndxf7zRW4Gj5yRa/KFewAAAABJRU5ErkJggg=="
,"blob_10.png": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH2AYFChQyYckycwAAAKVJREFUOI3tkrEJwzAQRZ/AnUCQQoOkSaFKpaZI48UyhgcwuMkk6oPKn0ZuEhliYzABP7jmjv/gpIOTv8IAd2AEXrXG2jNbZA9A1lrFGBVjlLVWgOpslbQHlFJSKUUzpRSllGZpv0Y4OeeUc9YnOWc55wRMrWAHPBv9awgB7/3XwHtPCIFhGG6tbAdcGsJf3scsZJtsXnmJ3T9l97OZpbsd9smBvAHQ9YOCh41JCAAAAABJRU5ErkJggg=="
,"blob_11.png": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH2AYFChQyYckycwAAALVJREFUOI3tkjEKAjEQRd/KdoGARQ5iY5EqZU5hsxfzGDnAwjZWHiO9pJKxSRrNanZZsNAHv5lhHmQy0MY15yO7RmEzPyh8RwecgBG454y51q2RnQFRSolzTpxzopQSQHJvkXQAxHsvKSUppJTEe1+kwxLhpLWWGKM8E2MUrbUAU22wBy6V+sFaizHmpWGMwVpLCOFYm+2BfUXYsp9uZrbK6ifPsfmnbH42RVoO+5az+rD/fJEHZB6FPnyuglsAAAAASUVORK5CYII="
,"blob_12.png": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH2AYFChQyYckycwAAAJxJREFUOI3tkjEKAyEUBceQThByI8t/ijR7sRxmYZtUewzrBKvlpdHGFIkbm8AOvEZlvuKDg7/CAVdgBp4lc1lze2Q3QN57xRgVY5T3XoDKXpd0AmRmyjmrknOWmVXp1CNcQghKKaklpaQQgoClR/gwszdZpdxyA+5tzj1TGhxw+fbw8CcP/5ThtanSWuytZHexW9aSj5x+nXQIeQEBLaCqFSFpfQAAAABJRU5ErkJggg=="
,"blob_13.png": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH2AYFChQyYckycwAAAJ5JREFUOI3tlDEKAyEQRZ8hnSDkRpZzijR7sRxmYZtUOYZ1wGr5abQxkGiQNMmD3zjyVGYQ+riVvOXQKezmB4WvcMAZWIG9ZC1r7hPZBZD3XjFGxRjlvRegUhuSLoDMTDlnVXLOMrMqXUaEWwhBKSW1pJQUQhCwjQjvZvYkq5Rb7sC1zXHklAYHnHo3T3/y9KZMH5sqnTbYLf/v64vCB5RHomZlltYsAAAAAElFTkSuQmCC"
,"blob_14.png": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH2AYFChQyYckycwAAALJJREFUOI3tkjEOwiAUhr+abiQkDhzExYGJkVO49GIegwM06eLkMdgNk3kusFQaLXYx6Ze85b38HwEe7PwVHXABRuCRa8y9rkV2BUQpJc45cc6JUkoAybNV0gEQ772klKSQUhLvfZEOa4ST1lpijDInxihaawGmWrAHbpX+yVqLMeZtYIzBWksI4VzL9sCxIvzmfbqFbJXmKy+x+adsvjZFWhb7mat5sefcc33k8OtJu5AXRsKFPuF7sfwAAAAASUVORK5CYII="
,"blob_15.png": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH2AYFChQyYckycwAAALVJREFUOI3tlLENwyAQRR+ROySkFAySJgUVJVOk8WIZwwNYcpMqY7AAVXRpoHFwgi0rTfKka+70nwScgDbuuT5yaBQ284PCdyjgAozAI9eYe2qL7AqI1lq89+K9F621AJJnq6Q9ICEESSlJIaUkIYQi7dcIJ2OMxBhlToxRjDECTLVgB9wq/ZNzDmvty8Bai3OOYRjOtWwHHCvClvtRC9kqm4+8xO6PsvvaFOluiz3n/319UfgE2dyG+rvKV2wAAAAASUVORK5CYII="
,"blob_2.png": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH2AYFChQyYckycwAAAJNJREFUOI3tkjEKAjEQRd+CXSDgjaacU9jsxTzMwjaeJPVKKvk2SaMRiQZE2Ae/mZBHZjKw81dMwAlYgGvJUmrTJ7IzoBCCzExmphCCAJWzLukMyN2Vc1Yl5yx3r9K5R7jGGJVS0iMpJcUYBayvLl8aubn7k6xSXrm1ZAfg2Kh3D/0dX7XcYvinDF+bKh222Ds/5A5/457uDkGvZQAAAABJRU5ErkJggg=="
,"blob_3.png": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH2AYFChQyYckycwAAAKNJREFUOI3tkr0KwjAYRU/FLRDwjTJ+T+HSF/NhCl2cfIzMSqZyXZJFo01rwUEP3OULOeTnQhuXnFl2jcJmflD4jg44AgMw5Qx51q2RnQA55xRCUAhBzjkBymuLpD0gM1NKSYWUksysSPslwtF7rxijHokxynsvYHy1+VzJZGZPskI+5bUm2wOHynzxo8/x0ZVrbP4pm9emSEuxbzmri/3ni9wBEwygqo8e4tAAAAAASUVORK5CYII="
,"blob_4.png": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH2AYFChQyYckycwAAAJVJREFUOI3tkjEKwzAMRX+6CnQmjTpFl1yshwlk7zE0p2gqv4u8pIXi1EtpH/zFxs82+sCfr2ICcAawALhVllqbjsguACgiNDOaGUWEAFh7XdIZAN2dmclGZtLdm3TuEa6qyojgnoigqhLA2iPc3P1J1qhXbq8Onnpu+YThXx4+lOG1adJW7HvlcLH3XCtvGT7lHxQ+AOkknJHNxLgkAAAAAElFTkSuQmCC"
,"blob_5.png": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH2AYFChQyYckycwAAAJZJREFUOI3tlDEKwzAMRX+6CnQmjTpFl1yshwlk7zE0BzSV38Ve0tLaxWRpHmix8MPiCwNt3Et95dIobOYPhZ+YAFwBLAAepZZyNv0iuwGgiNDMaGYUEQJg6XVJZwB0d2YmK5lJd6/SuUe4qiojgnsigqpKAGuPcHP3F1mlvHJ7d/GwlIePPDyU4WtTpcMWe8/5fR0ofAJ8TZ5N0sDKDwAAAABJRU5ErkJggg=="
,"blob_6.png": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH2AYFChQyYckycwAAAJ9JREFUOI3tkrEKwyAURU9KN0HoHzm+r+iSH+vHBLJ0ymc4tziF20WX1BJMshRy4C5PPD71wclf0QF3YADeOUOudVtkD0DOOYUQFEKQc06A8lqTtAdkZkopqZBSkpkVad8iHL33ijFqSYxR3nsB46/Nz0pmM/uSFXKXr5rsCtwq9eZHX2PXlWsc/imHj02RlsGeczYP9pIpZ5XL3pNOIR/1oaCqrqJp9wAAAABJRU5ErkJggg=="
,"blob_7.png": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH2AYFChQyYckycwAAAKNJREFUOI3tlLEKwjAURU/FLRDwjzK+r3Dpj/kxhS5O/YzMQqZyXZKlRttocdEDd3khh7zkEdjGlLPKYaNwMz8ofEUHnIEBmHOGXOvekV0AOecUQlAIQc45AcprTdIekJkppaRCSklmVqR9i3D03ivGqCUxRnnvBYzPNl8rmc3sQVbIp7zVZEfgVKk3X/oaH7VcY/dH2X1sinS3wV7y/76+KLwDiMqiZru+wK0AAAAASUVORK5CYII="
,"blob_8.png": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH2AYFChQyYckycwAAAJBJREFUOI3tkjEKAjEQRV/ALjDgjaacU9jsxTzMwjaeJLWSSr5N0qyNkYAI++A3yfAyYQYO/ooEXIAVeLSs7Sx9I7sCyjnL3eXuyjkLULsbki6AIkK1VnVqrYqILl1GhJuZqZSiPaUUmZmAbUR4j4g3Wad1+QRu+5xGXtmRgPOnxdO/PH0o09emS6ct9sEPeQGLYJ7ucs6fnQAAAABJRU5ErkJggg=="
,"blob_9.png": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH2AYFChQyYckycwAAAJ9JREFUOI3tkjEKAyEUBceQThByI8t/ijR7sRxmYZtUOYZ1gtXy0mizgUQXIUUy8BqV8YsP2riVfOTQKGzmB4XvcMAZmIG1ZC5rbo/sAsh7rxijYozy3gtQ2euSToDMTDlnVXLOMrMqnXqESwhBKSVtSSkphCBg6RHezexFVilTrsB1m2PPLRsccGo9PPzJwz9leG2qtBb7UbK72H++yBMeiaCqdfixnAAAAABJRU5ErkJggg=="
,"slide_l.png": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH2AYFChQyYckycwAAADFJREFUOI1jYBgFo2AYAkYqmsXMwMAQSE3DVjEwMPyntmGrqG0Y86hho4YhQBixhgEAQRwWyV5wCkoAAAAASUVORK5CYII="
,"slide_m.png": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH2AYFChQyYckycwAAAE9JREFUOI3t0zEKgDAMBdAHvaJ6yF5SByuIgxUasEP+FggPQhLeU1CxY+30dnPHaqsTS6wlFBOIFSycHxCBXZMO57mDUGye60jsZwy2r9gB/Z0tlT2EWtcAAAAASUVORK5CYII="
,"slide_r.png": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH2AYFChQyYckycwAAADpJREFUOI3t06ENACAMRcFLmJElWRIEFSgwVaTP/aQ5V+41DEz0x+2zExuxCyssSsVkY+wPSMOq6ssWvM8WywislYYAAAAASUVORK5CYII="
,"stick_0.png": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH2AYFChQyYckycwAAABVJREFUOI1jYBgFo2AUjIJRMAqoAwAGVAAB8lwiXwAAAABJRU5ErkJggg=="
,"stick_1.png": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH2AYFChQyYckycwAAACNJREFUOI1jYCAOXIJigoCJSAOJBqMGjho4auCogaMGDhUDAZwOAcsorz0zAAAAAElFTkSuQmCC"
,"stick_10.png": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH2AYFChQyYckycwAAAJVJREFUOI3t07sJAlEQRuHPt2IgC4Z2YGIJlmBPYgOmYgkbiLGhmX2YrqkgGuw1MViXe41kTzIMDId/BoaGhj+khUuiY4QJxuh1kSWIMgxD/8QjRjTALggKbLCIDKWPU5AdMY0VvdkH2RbtVNkyyA7opMrgjJsfrAlzZbr1t8G6d1iFmscm+iTHXfkIldRNOMNVuXYlL+XfFT2H2O6WAAAAAElFTkSuQmCC"
,"stick_11.png": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH2AYFChQyYckycwAAALVJREFUOI3t0ztuAkEMgOEvYQkQChQpp6DikrkALcohUOrcgIqCjj5FilDQ8UixlngosN5su780Gllj/bLHMjmWcSp5TArTtMJW+A8esEjkjeNe/fE2wAhDdAu8JISduM9zBxH3Iz5in3DhcvV6mIXgB2+YZEXXwid8huwDr3VF18L3kE01HOgS65DNnf60kXCLjYo2s2X38axs9btRacGXst3a07zFBgflItwl23KBnbLKu/wCR20gpGTSl3wAAAAASUVORK5CYII="
,"stick_12.png": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH2AYFChQyYckycwAAANNJREFUOI3t07FKA0EQgOHvoijaxuBDaCEEe5uUwUeyEDurtEHfwECQlNopCKnsrUJqFcFCQs7i5sgVeuxhJ/nLnZl/d2ZY1qz5h2SYYo5nTPCEvIHjAKc4xj684DMkeYj7CaITPFbqvjArgy10cYmPSLjGzg+ibQwj5w0XOKq7uYObKLjHbiW2hbuI3WIvoRMUsx1UXlpyFWeD6KoRGUYh6ClmlmOMjaaykjZeFcN/wLsGbf7GmdUmz/8qg8OKsHabqbSwwFIx11o2E4TLEGYSftA3PXkxeOJzoewAAAAASUVORK5CYII="
,"stick_13.png": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH2AYFChQyYckycwAAANtJREFUOI3t07FKA0EQBuDvTlG0VfEhtAgEe19AfCQLsbNKK/oGCiIpYykEUtlrI9YqooVFziJzuEg896JlftjmduZj9+aOvNzG+jVlJpidOTgHZ8giRng0+XD7GKJqYWxhHzvYhDu8B1IFvPetadqfsoubpO8DD/VmiS6O8RoFZ1iZAi7jJGqecYRO0xU2cB4N11hNwCUMYu8K601QmgK95KQ1eBrPemYYaIGLAO5N3nWFSyy0xeqs4QlvsV60uOZPOfA1ycO/YrCdgI3TzE2JcYDFf4ACHOcUfgK/fDpV7BBCtAAAAABJRU5ErkJggg=="
,"stick_14.png": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH2AYFChQyYckycwAAAM1JREFUOI3t0rFKA0EQgOFvY2KMFiKat7AQ8gI2PpeF2FmlFX0DA2Jtuvg4apAYCHpnkbl4CDnvsJP81c7O7r8z7LBhwz8kYYYF5phG3IQe9rGHTgpZO+QifsZ7DdEBdiLO8VkkWxjgCm+RvI1LP+niOs684hInVS/3cRcXxtgt5bbxGLkHHP3SxYqEYanSgpvYG0ZXjUgYheAMp7G+x1ZTWcEhXvCEieUU1G5zHedRWY6Lv8rguCSs/M26tPCBzPesrqVdQ5iFMFlWWckXLE8s0STxUmsAAAAASUVORK5CYII="
,"stick_15.png": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH2AYFChQyYckycwAAAOFJREFUOI3t071KA0EQwPHfnt9aiKidTyApBB/QQuys0oq+gYJY60NYpItVaj+QKAgmFpmTNcTcGtv8Ydmdm50/c8wdZdzHaqQqFBYzF86FM5DQxwfe8RLxOPuxdybk1rCJDSylkC2GXMSPeMuK9mLvjYm2sBrxEJ91ssIhTvEayYso4uevt4KzuPOMExxM6PybXVxGwR3WM+EybiN3g51popyEdtZpLTyPZ20zDDThKgQP6Mb5Ggt/ldVs48lo8n2jr6D4NX/jKDob4vi/MmhlwqnTLKXCIISp4W4xg1iNfAH/IDYHUEEa4gAAAABJRU5ErkJggg=="
,"stick_2.png": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH2AYFChQyYckycwAAACRJREFUOI1jYBgFo2AYAkYGBoYz1DSQhYGBQZCaBo6CUTAsAQAO/gDjGameSwAAAABJRU5ErkJggg=="
,"stick_3.png": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH2AYFChQyYckycwAAAD9JREFUOI1jYCAOXIJigoCJSAOJBqMGjhpIBmBkYGA4Q4Q6LSh9jZBCFgYGBkEiDGSG0sSoJQqMZr1RA4eUgQCBQAVfOGtUugAAAABJRU5ErkJggg=="
,"stick_4.png": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH2AYFChQyYckycwAAAJBJREFUOI3tzjEOAUEYBeBvV0UrEncQlTOoROJGLqByADdYjV6pUumVEp1C0KEwiUZiYqaSfcmfaV6+edSp84dpYIsRerjhkIruccUj3A7jVLTEADOcA7xAMxWGDqqArtHKgRaYey/NkgLLgA5zoW2csMkFwtRrZT+mXEZ0qvBOfl306dMLVrHlb7njiG4M+ATgfRo0TB7IrwAAAABJRU5ErkJggg=="
,"stick_5.png": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH2AYFChQyYckycwAAAKJJREFUOI3t0zEKwjAYgNFncVBX8RZunsObOYgH8Aa6uboLTu66CS4iKDqpdWgKxaWh7dgPsoVHEvIT1yGs0pJIMLoWbMEKdbHHWfZxN9ghrYMe8QpIGuDp357oSclLMMEMjwAv0a8KFhthFdAtBnVB6GBROGltMEfXAT01AcIQNzxjwbJ/eMVc9o69WkcrNJZd+9IUmOCDe+zmsr54y6aqtB8W9CgIIj5T8QAAAABJRU5ErkJggg=="
,"stick_6.png": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH2AYFChQyYckycwAAAI9JREFUOI3tzjEOAVEUheFvJhpakdiEyhr0dmQDqlmAHYxGr7QWFREZkilQeKKRePFeJfM3997k5L+Hjo4/pECDFlecwp0kbNELu3AfcEkRl5hiiTPuWKGfIn0xQh2kWwxySAtU3k2zUGAdpLNc0iGO2OUSwsKz5SQmXEZk6jDnvzb69LTBJjb8jRv2GMcIHzSiGs7D32QGAAAAAElFTkSuQmCC"
,"stick_7.png": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH2AYFChQyYckycwAAALBJREFUOI3t1D1qAkEUwPGfi4WmFbucIKTzmimCB/AGegQPYZEylYWNhigqLH4V84RFAjtkt/QPw5thHn/efJLHIlotRaYwm6fwKfwHHexR4ojfGD/yFvErR1iiG30x3uBQyXuNuMyttMAIH9jhign6MZ/99P5iiGlI53hpKiQtf1yptLHwLp2F9LsNIQzwI518K9/XGp/SPvYalVbhXVr2qi1hgTO2ucl1XHCSLn8tN1MaJxupl4lMAAAAAElFTkSuQmCC"
,"stick_8.png": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH2AYFChQyYckycwAAAJNJREFUOI3t0yEOwkAQRuEPSOACJBhugMHgewO4U8MFsIQjVBA0Ei6CwILFFLGLQdBmt4r0JZs1k5d/JjP09Pwhgw4cC6yxwixHVOCKOr4XbimiCfZR8sAWy9RUY5yj7IRpqujDIcp2GObKiig7YpQrgwueOmiTsBo1yqbCtnPYxL9KTfRNJexZ4yG0TTjHXWj7J2/dMhe9PX35ywAAAABJRU5ErkJggg=="
,"stick_9.png": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH2AYFChQyYckycwAAAKNJREFUOI3t0zEOAUEUBuAPG0QtcQiNRu8GTuUCWnEIUWsdQK/SKBS20Iig2NFssLNWuX8y3cyX9+dliMsunMI0I8Ho1GAN/pDkD8YQU4wxiH307qdMsMUjnCsOv4AdLAJyxgyjWCgPtrEJ2Br9slAeXAZsruJCd9gHbIVWFewFXpAqqBk7dhc9WdVTpdFCjrK6pbf5KSnuaBRdjK2c4Cab8muerVAjt5zCDvoAAAAASUVORK5CYII="
};
} //# end of 'install only once'
//}}}
!about
This zip includes: [[json2]], [[graph]], [[fs]], [[diff]], [[Draw]]
**//Draw was renamed from draw//
!usage
{{{[[HistoryPluginRequired.zip|HistoryPluginRequired.zip]]}}}
[[HistoryPluginRequired.zip|HistoryPluginRequired.zip]]
!notes
attached by FileDropPlugin
!type
application/x-zip-compressed
!file
!url
!hiddenData
/%
!data
data:application/x-zip-compressed;base64,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
!endHiddenData
%/
<<myComment>>
----
~~:::::__Sun Jul 04 2010 20:33:22 GMT-0400 (Eastern Daylight Time)__:::::~~
^^(__KennyZ Wrote:__)^^ pseudocode for finding rogue tiddlers
for each tiddler that contains the tag "repositor"
get the modifier,
if modifier exists NOT in store,
remove repo tiddler
/***
|''Name:''|abego.IncludePlugin|
|''Version:''|1.0.1 (2007-04-30)|
|''Type:''|plugin|
|''Source:''|http://tiddlywiki.abego-software.de/#IncludePlugin|
|''Author:''|Udo Borkowski (ub [at] abego-software [dot] de)|
|''Documentation:''|[[IncludePlugin Documentation|http://tiddlywiki.abego-software.de/#%5B%5BIncludePlugin%20Documentation%5D%5D]]|
|''Community:''|([[del.icio.us|http://del.icio.us/post?url=http://tiddlywiki.abego-software.de/index.html%23IncludePlugin]]) ([[Support|http://groups.google.com/group/TiddlyWiki]])|
|''Copyright:''|© 2007 [[abego Software|http://www.abego-software.de]]|
|''Licence:''|[[BSD open source license (abego Software)|http://www.abego-software.de/legal/apl-v10.html]]|
|''~CoreVersion:''|2.1.3|
|''Browser:''|Firefox 1.5.0.9 or better; Internet Explorer 6.0|
{{{<<include [url:] tiddlyWikiPath [delay: delayDuration] [hide: hideFlag]>>}}}
|[[IncludeList]] | [[IncludeState]] |
***/
/***
This plugin's source code is compressed (and hidden). Use this [[link|http://tiddlywiki.abego-software.de/archive/IncludePlugin/Plugin-Include-src.1.0.0.js]] to get the readable source code.
***/
///%
if(!window.abego){window.abego={};}var invokeLater=function(_1,_2,_3){return abego.invokeLater?abego.invokeLater(_1,_2,_3):setTimeout(_1,_2);};abego.loadFile=function(_4,_5,_6){var _7=function(_8,_9,_a,_b,_c){return _8?_5(_a,_b,_9):_5(undefined,_b,_9,"Error loading %0".format([_b]));};if(_4.search(/^((http(s)?)|(file)):/)!=0){if(_4.search(/^((.\:\\)|(\\\\)|(\/))/)==0){_4="file://"+_4;}else{var _d=document.location.toString();var i=_d.lastIndexOf("/");_4=_d.substr(0,i+1)+_4;}_4=_4.replace(/\\/mg,"/");}loadRemoteFile(_4,_7,_6);};abego.loadTiddlyWikiStore=function(_f,_10,_11,_12){var _13=function(_14,_15){if(_12){_12(_14,"abego.loadTiddlyWikiStore",_15,_f,_11);}};var _16=function(_17,_18){var _19=_18.indexOf(startSaveArea);var _1a=_18.indexOf("<!--POST-BODY-END--"+">");var _1b=_18.lastIndexOf(endSaveArea,_1a==-1?_18.length:_1a);if((_19==-1)||(_1b==-1)){return config.messages.invalidFileError.format([_f]);}var _1c="<html><body>"+_18.substring(_19,_1b+endSaveArea.length)+"</body></html>";var _1d=document.createElement("iframe");_1d.style.display="none";document.body.appendChild(_1d);var doc=_1d.document;if(_1d.contentDocument){doc=_1d.contentDocument;}else{if(_1d.contentWindow){doc=_1d.contentWindow.document;}}doc.open();doc.writeln(_1c);doc.close();var _1f=doc.getElementById("storeArea");_17.loadFromDiv(_1f,"store");_1d.parentNode.removeChild(_1d);return null;};var _20=function(_21){_13("Error when loading %0".format([_f]),"Failed");_10(undefined,_f,_11,_21);return _21;};var _22=function(_23){_13("Loaded %0".format([_f]),"Done");_10(_23,_f,_11);return null;};var _24=function(_25,_26,_27,_28){if(_25===undefined){_20(_28);return;}_13("Processing %0".format([_f]),"Processing");var _29=config.messages.invalidFileError;config.messages.invalidFileError="The file '%0' does not appear to be a valid TiddlyWiki file";try{var _2a=new TiddlyWiki();var _2b=_16(_2a,_25);if(_2b){_20(_2b);}else{_22(_2a);}}catch(ex){_20(exceptionText(ex));}finally{config.messages.invalidFileError=_29;}};_13("Start loading %0".format([_f]),"Started");abego.loadFile(_f,_24,_11);};(function(){if(abego.TiddlyWikiIncluder){return;}var _2c="waiting";var _2d="loading";var _2e=1000;var _2f=-200;var _30=-100;var _31=-300;var _32;var _33=[];var _34={};var _35=[];var _36;var _37=[];var _38;var _39=function(){if(_32===undefined){_32=config.options.chkUseInclude===undefined||config.options.chkUseInclude;}return _32;};var _3a=function(url){return "No include specified for %0".format([url]);};var _3c=function(){var _3d=_35;_35=[];if(_3d.length){for(var i=0;i<_37.length;i++){_37[i](_3d);}}};var _3f;var _40=function(){if(_36!==undefined){clearInterval(_36);}_3f=0;var _41=function(){abego.TiddlyWikiIncluder.sendProgress("","","Done");};_36=setInterval(function(){_3f++;if(_3f<=10){return;}clearInterval(_36);_36=undefined;abego.TiddlyWikiIncluder.sendProgress("Refreshing...","","");refreshDisplay();invokeLater(_41,0,_2f);},1);};var _42=function(_43){var _44;for(var i=0;i<_33.length;i++){var _46=abego.TiddlyWikiIncluder.getStore(_33[i]);if(_46&&(_44=_43(_46,_33[i]))){return _44;}}};var _47=function(){if(!window.store){return invokeLater(_47,100);}var _48=store.fetchTiddler;store.fetchTiddler=function(_49){var t=_48.apply(this,arguments);if(t){return t;}if(config.shadowTiddlers[_49]!==undefined){return undefined;}if(_49==config.macros.newTiddler.title){return undefined;}return _42(function(_4b,url){var t=_4b.fetchTiddler(_49);if(t){t.includeURL=url;}return t;});};if(_33.length){_40();}};var _4e=function(){if(!window.store){return invokeLater(_4e,100);}var _4f=store.getTiddlerText("IncludeList");if(_4f){wikify(_4f,document.createElement("div"));}};var _50=function(_51){var _52=function(){var _53=store.forEachTiddler;var _54=function(_55){var _56={};var _57;var _58=function(_59,_5a){if(_56[_59]){return;}_56[_59]=1;if(_57){_5a.includeURL=_57;}_55.apply(this,arguments);};_53.call(store,_58);for(var n in config.shadowTiddlers){_56[n]=1;}_56[config.macros.newTiddler.title]=1;_42(function(_5c,url){_57=url;_5c.forEachTiddler(_58);});};store.forEachTiddler=_54;try{return _51.apply(this,arguments);}finally{store.forEachTiddler=_53;}};return _52;};var _5e=function(_5f,_60){return _5f[_60]=_50(_5f[_60]);};abego.TiddlyWikiIncluder={};abego.TiddlyWikiIncluder.setProgressFunction=function(_61){_38=_61;};abego.TiddlyWikiIncluder.getProgressFunction=function(_62){return _38;};abego.TiddlyWikiIncluder.sendProgress=function(_63,_64,_65){if(_38){_38.apply(this,arguments);}};abego.TiddlyWikiIncluder.onError=function(url,_67){displayMessage("Error when including '%0':\n%1".format([url,_67]));};abego.TiddlyWikiIncluder.hasPendingIncludes=function(){for(var i=0;i<_33.length;i++){var _69=abego.TiddlyWikiIncluder.getState(_33[i]);if(_69==_2c||_69==_2d){return true;}}return false;};abego.TiddlyWikiIncluder.getIncludes=function(){return _33.slice();};abego.TiddlyWikiIncluder.getState=function(url){var s=_34[url];if(!s){return _3a(url);}return typeof s=="string"?s:null;};abego.TiddlyWikiIncluder.getStore=function(url){var s=_34[url];if(!s){return _3a(url);}return s instanceof TiddlyWiki?s:null;};abego.TiddlyWikiIncluder.include=function(url,_6f){if(!_39()||_34[url]){return;}var _70=this;_33.push(url);_34[url]=_2c;var _71=function(_72,_73,_74,_75){if(_72===undefined){_34[url]=_75;_70.onError(url,_75);return;}_34[url]=_72;_35.push(url);invokeLater(_3c);};var _76=function(){_34[url]=_2d;abego.loadTiddlyWikiStore(url,_71,null,_38);};if(_6f){invokeLater(_76,_6f);}else{_76();}};abego.TiddlyWikiIncluder.forReallyEachTiddler=function(_77){var _78=function(){store.forEachTiddler(_77);};_50(_78).call(store);};abego.TiddlyWikiIncluder.getFunctionUsingForReallyEachTiddler=_50;abego.TiddlyWikiIncluder.useForReallyEachTiddler=_5e;abego.TiddlyWikiIncluder.addListener=function(_79){_37.push(_79);};abego.TiddlyWikiIncluder.addListener(_40);if(config.options.chkUseInclude===undefined){config.options.chkUseInclude=true;}config.shadowTiddlers.AdvancedOptions+="\n<<option chkUseInclude>> Include ~TiddlyWikis (IncludeList | IncludeState | [[help|http://tiddlywiki.abego-software.de/#%5B%5BIncludePlugin%20Documentation%5D%5D]])\n^^(Reload this ~TiddlyWiki to make changes become effective)^^";config.shadowTiddlers.IncludeState="<<includeState>>";var _7a=function(e,_7c,_7d){if(!anim||!abego.ShowAnimation){e.style.display=_7c?"block":"none";return;}anim.startAnimating(new abego.ShowAnimation(e,_7c,_7d));};abego.TiddlyWikiIncluder.getDefaultProgressFunction=function(){setStylesheet(".includeProgressState{\n"+"background-color:#FFCC00;\n"+"position:absolute;\n"+"right:0.2em;\n"+"top:0.2em;\n"+"width:7em;\n"+"padding-left:0.2em;\n"+"padding-right:0.2em\n"+"}\n","abegoInclude");var _7e=function(){var e=document.createElement("div");e.className="includeProgressState";e.style.display="none";document.body.appendChild(e);return e;};var _80=_7e();var _81=function(_82){removeChildren(_80);createTiddlyText(_80,_82);_7a(_80,true,0);};var _83=function(){invokeLater(function(){_7a(_80,false,_2e);},100,_30);};var _84=function(_85,_86,_87,url,_89){if(_87=="Done"||_87=="Failed"){_83();return;}if(_86=="abego.loadTiddlyWikiStore"){_3f=0;if(_87=="Processing"){_81("Including...");}}else{_81(_85);}};return _84;};abego.TiddlyWikiIncluder.setProgressFunction(abego.TiddlyWikiIncluder.getDefaultProgressFunction());config.macros.include={};config.macros.include.handler=function(_8a,_8b,_8c,_8d,_8e,_8f){_8c=_8e.parseParams("url",null,true,false,true);var _90=parseInt(getParam(_8c,"delay","0"));var _91=_8c[0]["url"];var _92=getFlag(_8c,"hide",false);if(!_92){createTiddlyText(createTiddlyElement(_8a,"code"),_8d.source.substring(_8d.matchStart,_8d.nextMatch));}for(var i=0;_91&&i<_91.length;i++){abego.TiddlyWikiIncluder.include(_91[i],_90);}};config.macros.includeState={};config.macros.includeState.handler=function(_94,_95,_96,_97,_98,_99){var _9a=function(){var s="";var _9c=abego.TiddlyWikiIncluder.getIncludes();if(!_9c.length){return "{{noIncludes{\nNo includes or 'include' is disabled (see AdvancedOptions)\n}}}\n";}s+="|!Address|!State|\n";for(var i=0;i<_9c.length;i++){var inc=_9c[i];s+="|{{{"+inc+"}}}|";var t=abego.TiddlyWikiIncluder.getState(inc);s+=t?"{{{"+t+"}}}":"included";s+="|\n";}s+="|includeState|k\n";return s;};var _a0=function(){removeChildren(div);wikify(_9a(),div);if(abego.TiddlyWikiIncluder.hasPendingIncludes()){invokeLater(_a0,500,_31);}};var div=createTiddlyElement(_94,"div");invokeLater(_a0,0,_31);};var _a2=Tiddler.prototype.isReadOnly;Tiddler.prototype.isReadOnly=function(){return _a2.apply(this,arguments)||this.isIncluded();};Tiddler.prototype.isIncluded=function(){return this.includeURL!=undefined;};Tiddler.prototype.getIncludeURL=function(){return this.includeURL;};var _a3={getMissingLinks:1,getOrphans:1,getTags:1,reverseLookup:1,updateTiddlers:1};for(var n in _a3){_5e(TiddlyWiki.prototype,n);}var _a5=function(){if(abego.IntelliTagger){_5e(abego.IntelliTagger,"assistTagging");}};var _a6=function(){if(config.macros.forEachTiddler){_5e(config.macros.forEachTiddler,"findTiddlers");}};_47();invokeLater(_4e,100);invokeLater(_a5,100);invokeLater(_a6,100);})();
//%/
//s = config.macros.attach.encodeBase64("TEXT");
Title of Tiddler: <<option txtMyTiddlerTitleToDebug>> <<option chkMyAlertDebugger>>Alert?
<script show>
createTiddlyButton(place,"refresh","",function(){story.refreshTiddler("InlineJavascriptFactory",null,true);});
var co=config.options;
if(!co.chkMyAlertDebugger)co.chkMyAlertDebugger=false;
var text=store.getTiddlerText(co.txtMyTiddlerTitleToDebug,"CAN'T FIND TIDDLER");
//------Custom Functions------------------------
function myURIDecoder(str){
return str.replace("\x3c","<").replace("\x3e",">").replace("\x3d","=").replace("\x22","\"").replace("\x26",";");
}
//------CODE HERE-----------------------
//-------------------------------------
text= myURIDecoder(text);
if(config.options.chkMyAlertDebugger) prompt("text: ",text);
</script>
/***
|Name|InlineJavascriptPlugin|
|Source|http://www.TiddlyTools.com/#InlineJavascriptPlugin|
|Documentation|http://www.TiddlyTools.com/#InlineJavascriptPluginInfo|
|Version|1.9.5|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|Insert Javascript executable code directly into your tiddler content.|
''Call directly into TW core utility routines, define new functions, calculate values, add dynamically-generated TiddlyWiki-formatted output'' into tiddler content, or perform any other programmatic actions each time the tiddler is rendered.
!!!!!Revisions
<<<
2009.04.11 [1.9.5] pass current tiddler object into wrapper code so it can be referenced from within 'onclick' scripts
2009.02.26 [1.9.4] in $(), handle leading '#' on ID for compatibility with JQuery syntax
|please see [[InlineJavascriptPluginInfo|http://www.TiddlyTools.com/#InlineJavascriptPluginInfo]] for additional revision details|
2005.11.08 [1.0.0] initial release
<<<
/%
!!!!!Code
***/
//{{{
version.extensions.InlineJavascriptPlugin= {major: 1, minor: 9, revision: 5, date: new Date(2009,4,11)};
config.formatters.push( {
name: "inlineJavascript",
match: "\\<script",
lookahead: "\\<script(?: src=\\\"((?:.|\\n)*?)\\\")?(?: label=\\\"((?:.|\\n)*?)\\\")?(?: title=\\\"((?:.|\\n)*?)\\\")?(?: key=\\\"((?:.|\\n)*?)\\\")?( show)?\\>((?:.|\\n)*?)\\</script\\>",
handler: function(w) {
var lookaheadRegExp = new RegExp(this.lookahead,"mg");
lookaheadRegExp.lastIndex = w.matchStart;
var lookaheadMatch = lookaheadRegExp.exec(w.source)
if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
var src=lookaheadMatch[1];
var label=lookaheadMatch[2];
var tip=lookaheadMatch[3];
var key=lookaheadMatch[4];
var show=lookaheadMatch[5];
var code=lookaheadMatch[6];
if (src) { // external script library
var script = document.createElement("script"); script.src = src;
document.body.appendChild(script); document.body.removeChild(script);
}
if (code) { // inline code
if (show) // display source in tiddler
wikify("{{{\n"+lookaheadMatch[0]+"\n}}}\n",w.output);
if (label) { // create 'onclick' command link
var link=createTiddlyElement(w.output,"a",null,"tiddlyLinkExisting",wikifyPlainText(label));
var fixup=code.replace(/document.write\s*\(/gi,'place.bufferedHTML+=(');
link.code="function _out(place,tiddler){"+fixup+"\n};_out(this,this.tiddler);"
link.tiddler=w.tiddler;
link.onclick=function(){
this.bufferedHTML="";
try{ var r=eval(this.code);
if(this.bufferedHTML.length || (typeof(r)==="string")&&r.length)
var s=this.parentNode.insertBefore(document.createElement("span"),this.nextSibling);
if(this.bufferedHTML.length)
s.innerHTML=this.bufferedHTML;
if((typeof(r)==="string")&&r.length) {
wikify(r,s,null,this.tiddler);
return false;
} else return r!==undefined?r:false;
} catch(e){alert(e.description||e.toString());return false;}
};
link.setAttribute("title",tip||"");
var URIcode='javascript:void(eval(decodeURIComponent(%22(function(){try{';
URIcode+=encodeURIComponent(encodeURIComponent(code.replace(/\n/g,' ')));
URIcode+='}catch(e){alert(e.description||e.toString())}})()%22)))';
link.setAttribute("href",URIcode);
link.style.cursor="pointer";
if (key) link.accessKey=key.substr(0,1); // single character only
}
else { // run script immediately
var fixup=code.replace(/document.write\s*\(/gi,'place.innerHTML+=(');
var c="function _out(place,tiddler){"+fixup+"\n};_out(w.output,w.tiddler);";
try { var out=eval(c); }
catch(e) { out=e.description?e.description:e.toString(); }
if (out && out.length) wikify(out,w.output,w.highlightRegExp,w.tiddler);
}
}
w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;
}
}
} )
//}}}
// // Backward-compatibility for TW2.1.x and earlier
//{{{
if (typeof(wikifyPlainText)=="undefined") window.wikifyPlainText=function(text,limit,tiddler) {
if(limit > 0) text = text.substr(0,limit);
var wikifier = new Wikifier(text,formatter,null,tiddler);
return wikifier.wikifyPlain();
}
//}}}
// // GLOBAL FUNCTION: $(...) -- 'shorthand' convenience syntax for document.getElementById()
//{{{
if (typeof($)=='undefined') { function $(id) { return document.getElementById(id.replace(/^#/,'')); } }
//}}}
//%/
/***
|''Name:''|LaunchApplicationPlugin|
|''Author:''|Lyall Pearce|
|''Source:''|http://www.Remotely-Helpful.com/TiddlyWiki/LaunchApplication.html|
|''License:''|[[Creative Commons Attribution-Share Alike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]]|
|''Version:''|1.4.0|
|''~CoreVersion:''|2.3.0|
|''Requires:''| |
|''Overrides:''| |
|''Description:''|Launch an application from within TiddlyWiki using a button|
!!!!!Usage
<<<
{{{<<LaunchApplication "buttonLabel" "tooltip" "application" ["arguments" ...]>>}}}
{{{<<LaunchApplicationButton "buttonLabel" "tooltip" "application" ["arguments" ...]>>}}}
{{{<<LaunchApplicationLink "buttonLabel" "tooltip" "application" ["arguments" ...]>>}}}
* buttonLabel is anything you like
* tooltip is anything you like
* application is a path to the executable (which is Operating System dependant)
* arguments is any command line arguments the application requires.
* You must supply relative path from the location of the TiddlyWiki OR a fully qualified path
* Forward slashes works fine for Windows
{{{<<LaunchApplication...>>}}} functions the same as {{{<<LaunchApplicationButton...>>}}}
eg.
{{{
<<LaunchApplicationButton "Emacs" "Linux Emacs" "file:///usr/bin/emacs">>
}}}
<<LaunchApplicationButton "Emacs" "Linux Emacs" "file:///usr/bin/emacs">>
{{{
<<LaunchApplicationLink "LocalProgram" "Program relative to Tiddly html file" "localDir/bin/emacs">>
}}}
<<LaunchApplicationLink "LocalProgram" "Program relative to Tiddly html file" "localDir/bin/emacs">>
{{{
<<LaunchApplicationButton "Open Notepad" "Text Editing" "file:///e:/Windows/notepad.exe">>
}}}
<<LaunchApplicationButton "Open Notepad" "Text Editing" "file:///e:/Windows/notepad.exe">>
{{{
<<LaunchApplicationLink "C Drive" "Folder" "file:///c:/">>
}}}
<<LaunchApplicationLink "C Drive" "Folder" "file:///c:/">>
!!!!!Revision History
* 1.1.0 - leveraged some tweaks from from Bradly Meck's version (http://bradleymeck.tiddlyspot.com/#LaunchApplicationPlugin) and the example text.
* 1.2.0 - Make launching work in Linux too and use displayMessage() to give diagnostics/status info.
* 1.3.0 - execute programs relative to TiddlyWiki html file plus fix to args for firefox.
* 1.3.1 - parameters to the macro are properly parsed, allowing dynamic paramters using {{{ {{javascript}} }}} notation.
* 1.4.0 - updated core version and fixed empty tooltip and added launch link capability
<<<
***/
//{{{
version.extensions.LaunchApplication = {major: 1, minor: 4, revision: 0, date: new Date(2007,12,29)};
config.macros.LaunchApplication = {};
config.macros.LaunchApplicationButton = {};
config.macros.LaunchApplicationLink = {};
function LaunchApplication(appToLaunch,appParams) {
if(! appToLaunch)
return;
var tiddlyBaseDir = self.location.pathname.substring(0,self.location.pathname.lastIndexOf("\\")+1);
if(!tiddlyBaseDir || tiddlyBaseDir == "") {
tiddlyBaseDir = self.location.pathname.substring(0,self.location.pathname.lastIndexOf("/")+1);
}
// if Returns with a leading slash, we don't want that.
if(tiddlyBaseDir.substring(0,1) == "/") {
tiddlyBaseDir = tiddlyBaseDir.substring(1);
}
if(appToLaunch.indexOf("file:///") == 0) // windows would have C:\ as the resulting file
{
tiddlyBaseDir = "";
appToLaunch = appToLaunch.substring(8);
}
if (config.browser.isIE) {
// want where the tiddly is actually located, excluding tiddly html file
var theShell = new ActiveXObject("WScript.Shell");
if(theShell) {
// the app name may have a directory component, need that too
// as we want to start with current working dir as the location
// of the app.
var appDir = appToLaunch.substring(0, appToLaunch.lastIndexOf("\\"));
if(! appDir || appDir == "") {
appDir = appToLaunch.substring(0, appToLaunch.lastIndexOf("/"));
}
appParams = appParams.length > 0 ? " \""+appParams.join("\" \"")+"\"" : "";
try {
theShell.CurrentDirectory = decodeURI(tiddlyBaseDir + appDir);
var commandString = ('"' +decodeURI(tiddlyBaseDir+appToLaunch) + '" ' + appParams);
pluginInfo.log.push(commandString);
theShell.run(commandString);
} catch (e) {
displayMessage("LaunchApplication cannot locate/execute file '"+tiddlyBaseDir+appToLaunch+"'");
return;
}
} else {
displayMessage("LaunchApplication failed to create ActiveX component WScript.Shell");
}
} else { // Not IE
// want where the tiddly is actually located, excluding tiddly html file
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
var launchString;
try { // try linux/unix format
launchString = decodeURI(tiddlyBaseDir+appToLaunch);
file.initWithPath(launchString);
} catch (e) {
try { // leading slash on tiddlyBaseDir
launchString = decodeURI("/"+tiddlyBaseDir+appToLaunch);
file.initWithPath(launchString);
} catch (e) {
try { // try windows format
launchString = decodeURI(appToLaunch).replace(/\//g,"\\");
file.initWithPath(launchString);
} catch (e) {
try { // try windows format
launchString = decodeURI(tiddlyBaseDir+appToLaunch).replace(/\//g,"\\");
file.initWithPath(launchString);
} catch (e) {
displayMessage("LaunchApplication cannot locate file '"+launchString+"' : "+e);
return;
} // try windows mode
} // try windows mode
}; // try with leading slash in tiddlyBaseDir
}; // try linux/unix mode
try {
if (file.isFile() && file.isExecutable()) {
displayMessage("LaunchApplication executing '"+launchString+"' "+appParams.join(" "));
var process = Components.classes['@mozilla.org/process/util;1'].createInstance(Components.interfaces.nsIProcess);
process.init(file);
process.run(false, appParams, appParams.length);
}
else
{
displayMessage("LaunchApplication launching '"+launchString+"' "+appParams.join(" "));
file.launch(); // No args available with this option
}
} catch (e) {
displayMessage("LaunchApplication cannot execute/launch file '"+launchString+"'");
}
}
};
config.macros.LaunchApplication.handler = function (place,macroName,params,wikifier,paramString,tiddler) {
// 0=ButtonText, 1=toolTip, 2=AppToLaunch, 3...AppParameters
if (params[0] && (params[1] || params[1] == "") && params[2]) {
var theButton = createTiddlyButton(place, getParam(params,"buttonText",params[0]), getParam(params,"toolTip",params[1]), onClickLaunchApplication);
theButton.setAttribute("appToLaunch", getParam(params,"appToLaunch",params[2]));
params.splice(0,3);
theButton.setAttribute("appParameters", params.join(" "));
return;
}
}
config.macros.LaunchApplicationButton.handler = function (place,macroName,params,wikifier,paramString,tiddler) {
config.macros.LaunchApplication.handler (place,macroName,params,wikifier,paramString,tiddler);
}
config.macros.LaunchApplicationLink.handler = function (place,macroName,params,wikifier,paramString,tiddler) {
// 0=ButtonText, 1=toolTip, 2=AppToLaunch, 3...AppParameters
if (params[0] && (params[1] || params[1] == "") && params[2]) {
//var theLink = createExternalLink(place, getParam(params,"buttonText",params[0]));
var theLink = createTiddlyButton(place, getParam(params,"buttonText",params[0]), getParam(params,"toolTip",params[1]), onClickLaunchApplication,"link");
theLink.setAttribute("appToLaunch", getParam(params,"appToLaunch",params[2]));
params.splice(0,3);
theLink.setAttribute("appParameters", params.join(" "));
return;
}
}
function onClickLaunchApplication(e) {
var theAppToLaunch = this.getAttribute("appToLaunch");
var theAppParams = this.getAttribute("appParameters").readMacroParams();
LaunchApplication(theAppToLaunch,theAppParams);
}
//}}}
/***
|''Name:''|LaunchApplicationPluginGUI|
|''Description:''|GUI front-end for LaunchApplicationPlugin|
|''Author:''|Kenny Z|
|''Source:''|http://cooltool.tiddlyspot.com/#LaunchApplicationPluginGUI|
|''CodeRepository:''| |
|''Version:''|0.0.1|
|''Status:''|Beta|
|''Date:''|Jan 26, 2010|
|''Comments:''||
|''License:''|[[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]] |
|''~CoreVersion:''|2.6|
!!Description
This is a GUI front-end for the Launch Application Plugin.
!!Usage
#Import
#Save & Reload
!!Code
***/
//{{{
// adds to backstage task (insert before built-in 'importTask')
if (config.tasks) { // for TW2.2b or above
config.tasks.LinkProgramTask = {
text: "LinkProgram",
tooltip: "just testing...",
content: "<<LaunchApplicationPluginGUI>>"
}
config.backstageTasks.splice(config.backstageTasks.indexOf("importTask"),0,"LinkProgramTask");
}
setStylesheet("#fileLoc {width:50%;}\n","LAPGUISytle");
config.macros.LaunchApplicationPluginGUI = {
handler: function(place, macro, params){
var queueSelector = createTiddlyElement(place,"div",null,"queueSelector");
createTiddlyText(queueSelector, "Location: ");
if (config.browser.isGecko) { // FF3 FIXUP
var fileLoc = createTiddlyElement(queueSelector,"input");
fileLoc.setAttribute("id","fileLoc");
fileLoc.setAttribute("name","fileLoc");
fileLoc.setAttribute("type","text");
//fileLoc.setAttribute("style","width:60%");
var btnFixSource = createTiddlyElement(queueSelector,"input");
btnFixSource.setAttribute("type","button");
btnFixSource.setAttribute("value","Choose...");
btnFixSource.setAttribute("onclick","config.macros.LaunchApplicationPluginGUI.askForFilename(document.getElementById('fileLoc'));");
}
else{
// For IE/Opera: Don't work on opera either, it just creates a fake path....
// var fileLoc = createTiddlyElement(queueSelector,"input");
// fileLoc.setAttribute("type","file");
// fileLoc.setAttribute("name","fileLoc");
// fileLoc.setAttribute("id","fileLoc");
// fileLoc.setAttribute("style","width:60%");
var fileLoc = createTiddlyElement(queueSelector,"input");
fileLoc.setAttribute("type","text");
fileLoc.setAttribute("value","browser not supported");
}
var butAddQueue = createTiddlyElement(queueSelector,"input");
butAddQueue.setAttribute("type","button");
butAddQueue.setAttribute("name","butAddQueue");
butAddQueue.setAttribute("value", "Add Link");
butAddQueue.setAttribute("onclick","config.macros.LaunchApplicationPluginGUI.addLink();");
},
addLink: function(){
//Adds link to queue
var tagName = "LinkedProgram";
var btnTip = "";
var fileLoc = document.getElementById('fileLoc').value.replace(/\\/g,'/').trim();
var fileName = fileLoc.substr(fileLoc.lastIndexOf('/')+1);
if (fileLoc == ""){ alert('You must enter all the details'); return;}
var queueTxt = '<<LaunchApplicationButton "'+fileName+'" "'+btnTip+'" "file:///'+fileLoc+'">>';
if(prompt('title: '+fileName,queueTxt)){
if(!store.tiddlerExists(fileName)) {
store.saveTiddler(fileName,fileName,queueTxt,config.options.txtUserName, null, tagName);
autoSaveChanges();
displayMessage("Success: Tiddler created");
story.displayTiddler("top", fileName, DEFAULT_VIEW_TEMPLATE);
}else displayMessage("Fail: Tiddler already exists");
}else displayMessage("Fail: Canceled by user");
},
askForFilename: function(target) {
if (target.value == ""){
var path=getLocalPath(document.location.href);
var p=path.lastIndexOf("/"); if (p==-1) p=path.lastIndexOf("\\"); // Unix or Windows
if (p!=-1) path=path.substr(0,p+1); // remove filename, leave trailing slash
}
else{
var path = target.value;
}
var file="";
var result=window.mozAskForFilename(null,path,file,true); // FF3 FIXUP ONLY
if (target && result.length) // set target field and trigger handling
{ target.value=result; target.onchange(); }
return result;
}
};
//}}}
<<myComment>>
Comment of: [[LaunchApplicationPluginGUI]]
----
~~:::::__Sat Jun 26 2010 14:24:14 GMT-0400 (Eastern Daylight Time)__:::::~~
^^(__KennyZ Wrote:__)^^ Did I write this?
----
~~:::::__Sat Jun 26 2010 14:24:28 GMT-0400 (Eastern Daylight Time)__:::::~~
^^(__KennyZ Wrote:__)^^ To DO: fix overwrite problem.
----
~~:::::__Sat Jun 26 2010 14:40:33 GMT-0400 (Eastern Daylight Time)__:::::~~
^^(__KennyZ Wrote:__)^^ Fixed ow problem. Added autosave check, and helpful msgs.
Edit shadow tiddler [[TabTimeline]]
__syntax:__
:{{{<<timeline "" #>>}}}
Where # is the number of tiddlers to be shown.
/***
|!Name:| ''@@font-size(large):font-variant(small-caps):~ListAuthorPlugin@@'' |
|!Version:|1.0.1|
|!Location|http://gwsyzygy.googlepages.com/creator.html#ListAuthorPlugin|
|!Author:|GregWalker |
|!Type:|Macro Extension |
|!Requires|~TW2.x|
!Description
<<<
It's a macro for listing by creator or modifier.
<<<
!Examples
|!Source|!Output|h
|{{{<<listByAuthor>>}}}|//lists all tiddlers grouped by creator//|
|{{{<<listByAuthor modifier>>}}}|//lists all tiddlers grouped by modifier//|
|{{{<<listByAuthor creator SomeUser>>}}}|//lists all tiddlers created by ''SomeUser''//|
|{{{<<listByAuthor creator currentUser>>}}}|//lists all tiddlers created by the current user//|
!History
* 13-Jun-06, version 1.0.1, Added support for DisplayTiddlerGlyphsPlugin
* 21-Mar-06, version 1.0.0, initial version
!Code
***/
/*{{{*/
version.extensions.ListAuthorPlugin = { major: 1, minor: 0, revision: 1,
date: new Date(2006,6,13),
source: "http://gwsyzygy.googlepages.com/creator.html#ListAuthorPlugin"
};
config.macros.listByAuthor = {};
config.macros.listByAuthor.handler = function(place,macroName,params)
{
var field = params[0] ? params[0] : "creator";
var filter = params[1]=="currentUser" ? config.options.txtUserName : params[1];
// sort by title first, then by author to end up with author then title.
var tiddlers = store.reverseLookup("tags","excludeLists",false,"title");
tiddlers.sort(function (a,b) {if(a[field] == b[field]) return(0); else return (a[field] < b[field]) ? -1 : +1; });
var lastAuthor = "";
for(var t=0; t<tiddlers.length; t++)
{
var tiddler = tiddlers[t];
var theAuthor = tiddler[field];
if(filter==null || theAuthor==filter)
{
if(theAuthor != lastAuthor)
{
var theAuthorList = document.createElement("ul");
place.appendChild(theAuthorList);
if(filter==null)
createTiddlyElement(theAuthorList,"li",null,"listTitle",tiddler[field]);
lastAuthor = theAuthor;
}
var theAuthorListItem = createTiddlyElement(theAuthorList,"li",null,"listLink",null);
if (config.macros.displayTiddlerGlyphs)
{
config.macros.displayTiddlerGlyphs.createGlyphsElement(theAuthorListItem,tiddler,1);
}
theAuthorListItem.appendChild(createTiddlyLink(place,tiddler.title,true));
}
}
}
/*}}}*/
/***
This plugin is released under the [[Creative Commons Attribution 2.5 License|http://creativecommons.org/licenses/by/2.5/]]
***/
/***
|''Name:''|LoadRemoteFileThroughProxy (previous LoadRemoteFileHijack)|
|''Description:''|When the TiddlyWiki file is located on the web (view over http) the content of [[SiteProxy]] tiddler is added in front of the file url. If [[SiteProxy]] does not exist "/proxy/" is added. |
|''Version:''|1.1.0|
|''Date:''|mar 17, 2007|
|''Source:''|http://tiddlywiki.bidix.info/#LoadRemoteFileHijack|
|''Author:''|BidiX (BidiX (at) bidix (dot) info)|
|''License:''|[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D ]]|
|''~CoreVersion:''|2.2.0|
***/
//{{{
version.extensions.LoadRemoteFileThroughProxy = {
major: 1, minor: 1, revision: 0,
date: new Date("mar 17, 2007"),
source: "http://tiddlywiki.bidix.info/#LoadRemoteFileThroughProxy"};
if (!window.bidix) window.bidix = {}; // bidix namespace
if (!bidix.core) bidix.core = {};
bidix.core.loadRemoteFile = loadRemoteFile;
loadRemoteFile = function(url,callback,params)
{
var isHttp = document.location.toString().substr(0,4) == "http";
if (isHttp && (url.substr(0,4) == "http")){
var proxy = store.getTiddlerText("SiteProxy", "");
if(proxy==""){
url = url.replace(/^http:\/\//i,'');
proxy = "http://cooltool.tiddlyspot.com/proxy/";
}
url = proxy + url;
}
return bidix.core.loadRemoteFile(url,callback,params);
};
//}}}
!<<QOTD Lotto inline 1000>><<QOTD Lotto inline 1000>><<QOTD Lotto inline 1000>>/%
----
1
----
2
----
3
----
4
----
5
----
6
----
7
----
8
----
9
----
0
----
%/
//[[Home|http://sites.google.com/site/yaup00/Home]]//
//[[contact]]//
//[[To Do List]]//
!!!Debug
[[eval()]]
[[print_r()]]
[[print_r2]]
[[EchoMacro]]
[[InlineJavascriptFactory]]
!!!Logging Script
[[QuickLog]]
[[QAFlashMaker]]
[[QuickNote]]
!!!Plugins
[[My Plugins]]
[[Modified Plugins]]
!!!Docs
[[TiddlyWiki Dev Notes]]
[[Samples]]
[[RSS Feeds]]
[[ExamplePlugin]]
|[[ArchivePlugin]] |Changed archival folder to file name instead of just "archive"|
|[[AttachFilePlugin]] |Hide !data section now.|
|[[FileDropPlugin]] |Fixes some bugs.|
|[[FootnotesPlugin]] |Footnote shows up as tooltip and at the bottom.|
|[[RSSReaderPlugin]] |Put in a limit to the number of feeds shown.|
|[[QuoteOfTheDayPlugin]] |Fixed recursion problem.|
|[[TrashPlugin]]|Delete tiddlers and restore them.|
|Plugin|Description|Demo|
|[[WordCountPlugin]] |Like wc in Unix.|[[Demo|wordCount.png]]|
|[[ReadOnlyPlugin]] |Makes tiddlers read only.|[[Demo|readOnly.png]]|
|[[CopyPlugin]] |Copy one tiddler to another name. Good for backing up.|
|[[MyCommentPlugin]] ||
|[[SessionManagerPlugin]]|Auto save and reload sessions on restart. Save and reload any session manually.|
|[[BugMeNotExitingPlugin]] |Exit quickly without being bugged.|
|[[ClearChangeCountPlugin]]|Clears the change count|[[Demo|clearChangeCount.png]]|
|[[LaunchApplicationPluginGUI]] |Front end for LaunchApplicationPlugin. Adds a command to the backstage.|
|[[UndoChangeBySyncPlugin]] |Downloads files from the server no matter what.|
|[[WebReadOnlyPlugin]]||
|[[ExportCommandPlugin]]|Adds export button to the toolbar|[[Demo|exportCommandPlugin.png]]|
|[[HistoryPlugin]]|Add history or revision control to any individual tiddler.|[[Demo|historyPluginSample]]|
|[[TagEditPlugin]]|Adds a button on the toolbar command to edit tags quickly.|
|[[RenameTiddlerPlugin]]|Adds a button on the toolbar command to rename tiddlers quickly.|
/***
|''Name:''|MyCommentPlugin|
|''Description:''|Metadata for your data|
|''Author:''|Kenny Z|
|''Source:''|http://cooltool.tiddlyspot.com/#MyCommentPlugin|
|''CodeRepository:''| |
|''Version:''|0.0.1|
|''Status:''|Beta|
|''Date:''|June 25, 2010|
|''Comments:''||
|''License:''|[[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]] |
|''~CoreVersion:''|2.6|
!!Description
Add comments to your tiddlers. Metadata for your data.
!!Usage
Add "{{{myComment}}}" to [[ToolbarCommands]] in the ~ViewToolbar slice.
!!Code
***/
//{{{
if(!version.extensions.myComment) {
version.extensions.basicCopy = {installed:true};
config.commands.myComment = {
text: "comment",
tooltip: "Comments on this tiddler",
handler: function(event,src,title) {
var tags = ["comment","excludeLists"];
var cTitle = title + "_comment";
if(!store.tiddlerExists(cTitle)){
if(confirm("No Comment. Would you like to create one?")){
var text = '<<myComment>>\n';
var when = new Date();
store.saveTiddler(null,cTitle,text,title,when,tags,null,true,when,title);
store.setTiddlerTag(title,1,"commented" );
// Notify Commented tiddler
store.addNotification(cTitle,function(cTitle){
if(!store.tiddlerExists(cTitle)){
store.setTiddlerTag(title ,0,"commented" );
store.resetTiddler(title); // clear change count
}
});
// Notify comment tiddler
store.addNotification(title,function(title){
if(!store.tiddlerExists(title)){
store.setTiddlerTag(cTitle ,0,"comment");
store.setTiddlerTag(cTitle ,1,"commentRogue");
displayMessage(cTitle+" tagged as commentRogue.");
}
});
store.resetTiddler(title); // clear change count
autoSaveChanges();
}else{
return;
}
}
story.displayTiddler(null,cTitle,null,true,true);
return false;
},
};
config.macros.myComment= {
DEFAULT_COMMENT_TEMPLATE: '{{{\n<html><form class="comment" \
style="display:inline;margin:0;padding:0;white-space:nowrap;" action="#" \
onsubmit="var dom= document.getElementById(\'TEXTAREAID\'); \
cooltool.comment.postComment(\'TEXTAREAID\',dom); dom.focus()"> \
<input type="reset" value="Clear" style="width:4em" onclick="this.form.TEXTAREAID.focus()" /> \
<input type="button" value="Post" style="width:4em" onclick="this.form.onsubmit();this.form.onsubmit();" /> \
<a href="#" onclick="cooltool.comment.clearComment(\'TEXTAREAID\');" >Clear List</a><br /> \
<textarea id="TEXTAREAID" rows="3" style="width:80%" onkeydown="if(event.keyCode == 16) isShift =true; \
if(isShift==true && event.keyCode == 13){this.form.onsubmit();this.form.onsubmit();return false;}" \
onkeyup="isShift=false"></textarea></form></html>\n}}}',
// I make double onsubmit() because it doesn't seem to set focus back to textarea.
init: function(){
config.shadowTiddlers.CommentTemplate = config.macros.myComment.DEFAULT_COMMENT_TEMPLATE;
},
handler: function(place,macroName,params,wikifier,paramString,tiddler) {
if(tiddler.creator && tiddler.modifier != tiddler.creator){
tiddler.set(null,null,tiddler.creator); // Ensures a link back to topic.
story.refreshTiddler(tiddler.title,DEFAULT_VIEW_TEMPLATE,true);
} // saving not necessary
var text = store.getTiddlerText("CommentTemplate",config.macros.myComment.DEFAULT_COMMENT_TEMPLATE);
text = text.substring(4,text.length-4).replace(/TEXTAREAID/gm,tiddler.title);
wikify(text,place);
},
};
if(!window.cooltool) window.cooltool={};
if(!cooltool.comment) cooltool.comment={};
cooltool.comment.postComment = function(title,text){
var tiddler = store.getTiddler(title);
var when=new Date();
var who=config.options.txtUserName;
if((text=text.value.replace(/^\s+|\s+$/g, ''))=='') return;
tiddler.text+='\n----\n~~:::::__'+when+'__:::::~~\n^^(__'+who+' Wrote:__)^^ '+text;
//store.saveTiddler(title,title,text,tiddler.modifier,when);
story.refreshTiddler(title,DEFAULT_VIEW_TEMPLATE,true);
store.dirty=true; autoSaveChanges();
};
cooltool.comment.clearComment = function(title){
if(confirm('Clear this list and start over?')) {
store.getTiddler(title).text='<<myComment>>\n';
//store.saveTiddler(title,title,text);
story.refreshTiddler(title,null,true);
store.dirty=true; autoSaveChanges();
}
};
} //# end of 'install only once'
//}}}
<<myComment>>
----
~~:::::__Mon Jun 28 2010 14:06:31 GMT-0400 (Eastern Daylight Time)__:::::~~
^^(__KennyZ Wrote:__)^^ Removed delete hijack function and use notifications instead.
/***
|''Name:''|NoTagsPlugin|
|''Description:''|Find tiddlers without a tags|
|''Author:''|Kenny Z|
|''Source:''|http://cooltool.tiddlyspot.com/#NoTagsPlugin|
|''CodeRepository:''| |
|''Version:''|0.0.1|
|''Status:''|Alpha|
|''Date:''|July 1, 2010|
|''Comments:''| |
|''License:''|[[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]] |
|''~CoreVersion:''|2.6|
!!Description
Ever forget to put a tag on your tiddlers and can't seem to locate it? NoTagsPlugin looks for tiddlers without a tag.
!!Usage
#Import
#Save & Reload
#Add {{{<<noTags>>}}} to [[TabTags]].
!!Code
***/
//{{{
if(!version.extensions.NoTagsPlugin) {
version.extensions.NoTagsPlugin= {installed:true};
config.macros.noTags = {
text: 'noTags',
tooltip: "Show tiddlers with no tags",
list: null,
handler: function(place,macroName,params){
this.list = this.getNoTags();
var info = getTiddlyLinkInfo(this.text);
var ul = createTiddlyElement(place,"ul");
var li = createTiddlyElement(ul,"li");
var btn = createTiddlyButton(li,this.text+ " ("+ this.list.length + ")",
this.tooltip.format([this.text]),this.onClickNoTag,info.classes);
},
getNoTags: function(){
var results = [];
store.forEachTiddler(function(title,tiddler) {
if(tiddler.tags.length==0){
results.push(title);
}
});
results.sort(function(a,b) {return a[0].toLowerCase() < b[0].toLowerCase() ? -1 : (a[0].toLowerCase() == b[0].toLowerCase() ? 0 : +1);});
return results;
},
onClickNoTag: function(ev){
var e = ev || window.event;
var popup = Popup.create(this);
addClass(popup,"taggedTiddlerList");
var tag = "";
if(popup) {
var titles = config.macros.noTags.list;
var lingo = config.views.wikified.tag;
if(titles.length > 0) {
var openAll = createTiddlyButton(createTiddlyElement(popup,"li"),lingo.openAllText.format([tag]),lingo.openAllTooltip,config.macros.noTags.onClickTagOpenAll);
createTiddlyElement(createTiddlyElement(popup,"li",null,"listBreak"),"div");
for(r=0; r<titles.length; r++) {
createTiddlyLink(createTiddlyElement(popup,"li"),titles[r],true);
}
} else {
createTiddlyElement(popup,"li",null,"disabled",lingo.popupNone.format([tag]));
}
}
Popup.show(); e.cancelBubble = true;
if(e.stopPropagation) e.stopPropagation();
return false;
},
onClickTagOpenAll: function(ev){
story.displayTiddlers(null,config.macros.noTags.list,null,false,false);
return false;
},
};
} //# end of 'install only once'
//}}}
<!--{{{-->
<div class='header' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>
<div class='headerShadow'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
<div class='headerForeground'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
<div id='searchBar' macro='search'></div>
</div>
<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>
<div id='sidebar'>
<div id='toggleSideBar' macro='toggleSideBar'></div>
<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
</div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlersBar' refresh='none' ondblclick='config.macros.tiddlersBar.onTiddlersBarAction(event)'></div>
<div id='tiddlerDisplay'></div>
</div>
<!--}}}-->
/***
|''Name:''|PasswordOptionPlugin|
|''Description:''|Extends TiddlyWiki options with non encrypted password option.|
|''Version:''|1.0.2|
|''Date:''|Apr 19, 2007|
|''Source:''|http://tiddlywiki.bidix.info/#PasswordOptionPlugin|
|''Author:''|BidiX (BidiX (at) bidix (dot) info)|
|''License:''|[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D ]]|
|''~CoreVersion:''|2.2.0 (Beta 5)|
***/
//{{{
version.extensions.PasswordOptionPlugin = {
major: 1, minor: 0, revision: 2,
date: new Date("Apr 19, 2007"),
source: 'http://tiddlywiki.bidix.info/#PasswordOptionPlugin',
author: 'BidiX (BidiX (at) bidix (dot) info',
license: '[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D]]',
coreVersion: '2.2.0 (Beta 5)'
};
config.macros.option.passwordCheckboxLabel = "Save this password on this computer";
config.macros.option.passwordInputType = "password"; // password | text
setStylesheet(".pasOptionInput {width: 11em;}\n","passwordInputTypeStyle");
merge(config.macros.option.types, {
'pas': {
elementType: "input",
valueField: "value",
eventName: "onkeyup",
className: "pasOptionInput",
typeValue: config.macros.option.passwordInputType,
create: function(place,type,opt,className,desc) {
// password field
config.macros.option.genericCreate(place,'pas',opt,className,desc);
// checkbox linked with this password "save this password on this computer"
config.macros.option.genericCreate(place,'chk','chk'+opt,className,desc);
// text savePasswordCheckboxLabel
place.appendChild(document.createTextNode(config.macros.option.passwordCheckboxLabel));
},
onChange: config.macros.option.genericOnChange
}
});
merge(config.optionHandlers['chk'], {
get: function(name) {
// is there an option linked with this chk ?
var opt = name.substr(3);
if (config.options[opt])
saveOptionCookie(opt);
return config.options[name] ? "true" : "false";
}
});
merge(config.optionHandlers, {
'pas': {
get: function(name) {
if (config.options["chk"+name]) {
return encodeCookie(config.options[name].toString());
} else {
return "";
}
},
set: function(name,value) {config.options[name] = decodeCookie(value);}
}
});
// need to reload options to load passwordOptions
loadOptionsCookie();
/*
if (!config.options['pasPassword'])
config.options['pasPassword'] = '';
merge(config.optionsDesc,{
pasPassword: "Test password"
});
*/
//}}}
/%
!info
Supermemo QA Format
{{{<<tiddler QAFlashMaker with: Worklog_YYYY-0MM-0DD "worklog">>}}}
<<tiddler QAFlashMaker with: Worklog_YYYY-0MM-0DD "worklog">>
//Shortcut: Press {{{SHIFT}}} + {{{ENTER}}} to save.//
!end
!show
<html><form class="QAFlashMaker" style="display:inline;margin:0;padding:0;white-space:nowrap;"
action="#" onsubmit="function save(){
var when=new Date();
var title=when.formatString('$1');
if((temp=quest.value.replace(/^\s+|\s+$/g, ''))=='') return;
var text='Q: '+temp.replace(/\n+/g, '<BR />');
temp=ans.value.replace(/^\s+|\s+$/g, '');
text +='\nA: '+temp.replace(/^\s+|\s+$/g, '').replace(/\n+/g, '<BR />');
if(!store.tiddlerExists(title)){
var tagz=tags.value.readBracketedList();
store.saveTiddler(title,title,text,config.options.txtUserName,when,tagz);
story.displayTiddler(null,title);
}else{
store.getTiddler(title).text += '\n\n' + text;
store.dirty=true;
story.refreshTiddler(title,DEFAULT_VIEW_TEMPLATE,true);
}
autoSaveChanges();
quest.value=''; ans.value=''; quest.focus();
}; save()">
<input type="text" disabled value="Question:" style="width:45%" />
<input type="text" disabled value="Answer: " style="width:45%" />
<br />
<textarea name="quest" rows="5" cols="60" style="width:45%" onkeydown="
if(event.keyCode == 16) isShift =true;
if(isShift==true && event.keyCode == 13){ this.form.onsubmit(); return false;}
" onkeyup="isShift=false"></textarea>
<textarea name="ans" rows="5" cols="60" style="width:45%" onkeydown="
if(event.keyCode == 16) isShift =true;
if(isShift==true && event.keyCode == 13){ this.form.onsubmit(); return false;}
" onkeyup="isShift=false"></textarea>
<br />
<input type=hidden name="tags" value="$2" />
<input type=reset value="Clear" style="width:4em" onclick="this.form.quest.focus()" />
<input type=button value="Post" style="width:4em" onclick="this.form.onsubmit()" />
</form></html>
!end
%/<<tiddler {{'QAFlashMaker##'+('$1'=='$'+'1'?'info':'show')}} with: [[$1]] {{'$2'!='$'+'2'?'$2':''}}>>
<<myComment>>
----
~~:::::__Fri Jun 25 2010 20:57:55 GMT-0400 (Eastern Daylight Time)__:::::~~
^^(__KennyZ Wrote:__)^^ Same as QuickLog, added key binding(shift+enter) and auto focus.
----
~~:::::__Sat Jun 26 2010 14:15:54 GMT-0400 (Eastern Daylight Time)__:::::~~
^^(__KennyZ Wrote:__)^^ added autosave check
/%
!info
Note: Changes are not saved.
{{{<<tiddler QuickLog with: Title_YYYY-0MM-0DD "tagname" "singleLine" "separator" "timeStamp">>}}}
{{{<<tiddler QuickLog with: Worklog_YYYY-0MM-0DD "worklog" "checked" "" "checked">>}}}
<<tiddler QuickLog with: Worklog_YYYY-0MM-0DD "worklog" "" "" "">>
//Shortcut: Press {{{SHIFT}}} + {{{ENTER}}} to save.//
!end
!show
<html>
<form class="QuickLog" name="$1" style="display:inline;margin:0;padding:0;white-space:nowrap;"
action="#" onsubmit="function save(){
var when=new Date();
var title=when.formatString('$1');
var tags='$2';
var who=config.options.txtUserName;
var text=txt.value.replace(/^\s+|\s+$/g, ''); if(text=='') return;
if(singleLine.checked) text=text.replace(/\s+/gm, ' ');
if(timeStamp.checked) text='~~:::::__'+when+'__:::::~~\n'+text;
if(!store.tiddlerExists(title)){
if(includeForm.checked)
text='<<tiddler QuickLog with: '+title+' '+tags+' \'$3\' \'$4\' \'$5\'>>\n!\n' + text;
store.saveTiddler(title,title,text,who,when,tags);
story.displayTiddler(null,title);
}else{
var tiddler = store.getTiddler(title);
if(separator.checked) tiddler.text += '\n----';
tiddler.text += '\n'+ text;
//store.saveTiddler(title,title,text,who,when,tags);
store.dirty=true;
story.refreshTiddler(title,DEFAULT_VIEW_TEMPLATE,true);
}
autoSaveChanges(); txt.value=''; txt.focus();
}; save();">
<input type=reset value="Clear" style="width:4em" onclick="this.form.txt.focus()" />
<input type=button value="Post" style="width:4em" onclick="this.form.onsubmit();" />
<span title="Single Line"><input type="checkbox" name="singleLine" $3>SL</input></span>
<span title="Separator"><input type="checkbox" name="separator" $4>HR</input></span>
<span title="Time Stamp"><input type="checkbox" name="timeStamp" $5>TS</input></span>
<span title="Include Form"><input type="checkbox" name="includeForm" $6>IF</input></span><br />
<textarea name="txt" rows="5" cols="60" style="width:90%" onkeydown="
if(event.keyCode == 16) isShift =true;
if(isShift==true && event.keyCode == 13){ this.form.onsubmit(); return false;}
" onkeyup="isShift=false"></textarea>
</form></html>
!end
%/<<tiddler {{'QuickLog##'+('$1'=='$'+'1'?'info':'show')}} with: [[$1]] {{'$2'!='$'+'2'?'$2':''}} {{'$3'!='$'+'3'?'$3':''}} {{'$4'!='$'+'4'?'$4':''}} {{'$5'!='$'+'5'?'$5':''}} {{'$6'!='$'+'6'?'$6':''}}>>
<<myComment>>
----
~~:::::__Fri Jun 25 2010 20:53:00 GMT-0400 (Eastern Daylight Time)__:::::~~
^^(__KennyZ Wrote:__)^^ added tooltips, made checkboxes smaller, more screen realestate.
----
~~:::::__Fri Jun 25 2010 20:53:21 GMT-0400 (Eastern Daylight Time)__:::::~~
^^(__KennyZ Wrote:__)^^ Added keybinding for textarea. Couldn't override ctrl+enter, so I made it shift + enter instead.
----
~~:::::__Fri Jun 25 2010 20:54:33 GMT-0400 (Eastern Daylight Time)__:::::~~
^^(__KennyZ Wrote:__)^^ set focus back to textarea each time you make a post. However this doesn't seem to work when embedded with the document. Maybe because of the refresh?
----
~~:::::__Sat Jun 26 2010 14:16:08 GMT-0400 (Eastern Daylight Time)__:::::~~
^^(__KennyZ Wrote:__)^^ added autosave check
/%
!info
Example:
<<<
{{{<<tiddler QuickNote with: YYYY-0MM-0DD_0hh.0mm.0ss "quicknote journal">>}}}
<<tiddler QuickNote with: YYYY-0MM-0DD_0hh.0mm.0ss "quicknote journal">>
<<<
----
|Name|QuickNote|
|Source|http://www.TiddlyTools.com/#QuickNote|
|Version|1.0.1|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|transclusion|
|Description|create quick notes using timestamp as tiddler titles|
Usage:
<<<
in tiddler content:
{{{
<<tiddler QuickNote with: format "tag [[tag with spaces]] tag tag"...>>
}}}
in PageTemplate (added to story column):
{{{
<div id='displayArea'>
<div id='messageArea'></div>
<div macro='tiddler QuickNote with: format "tag [[tag with spaces]] tag tag"'></div>
<div id='tiddlerDisplay'></div>
</div>
}}}
where ''format'' specifies a TiddlyWiki date format string (e.g. """YYYY0MM0DD0hh0mm0ss""") that is used to generate a unique tiddler title for each new note that is created, by combining the TW username with a //timestamp// for the current time and ''tag tag tag'' are //optional// tag values to add to the newly created notes.
<<<
!end
!show
<html><nowiki><form class="quickNote" style="display:inline;margin:0;padding:0;white-space:nowrap;">
<input type=text id="quickNoteTitle" disabled value="" title="title for new tiddler" style="width:37%">
<input type=text name="tags" value="$2" title="tags for new tiddler" style="width:37%">
<input type=button value="Clear" style="width:6%" onclick="this.form.txt.value='';">
<input type=button value="Post" style="width:6%" onclick="
var who=config.options.txtUserName;
var when=new Date();
var title=when.formatString('$1');
// var title=prompt('The new tiddler title will be:\n\n',who+when.formatString('$1'));
// if (!title) return;
var msg=config.messages.overwriteWarning.format([title]);
if (store.tiddlerExists(title) && !confirm(msg)) return;
var text=this.form.txt.value;
if(text.replace(/^\s+|\s+$/g, '')=='') return;
var tags=this.form.tags.value.readBracketedList();
store.saveTiddler(title,title,text,who,when,tags,{});
story.displayTiddler(null,title);
this.form.txt.value='';
"><br><textarea name="txt" rows="5" cols="60" style="width:90%"></textarea>
</form></html><<tiddler {{
window.quickNoteTick=function() {
var e=document.getElementById('quickNoteTitle'); if (!e) return;
e.value='next title: '+new Date().formatString('$1');
window.setTimeout('window.quickNoteTick()',1000);
};
window.quickNoteTick()
'';}}>>
!end
%/<<tiddler {{'QuickNote##'+('$1'=='$'+'1'?'info':'show')}} with: [[$1]] {{'$2'!='$'+'2'?'$2':''}}>>
/***
|Name|QuoteOfTheDayPlugin|
|Source|http://www.TiddlyTools.com/#QuoteOfTheDayPlugin|
|Documentation|http://www.TiddlyTools.com/#QuoteOfTheDayPluginInfo|
|Version|1.4.1|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|Display a randomly selected "quote of the day" from a list defined in a separate tiddler|
!!!!!Revisions
<<<
2008.03.21 [1.4.1] in showNextItem(), corrected handling for random selection so that //initial// index value will randomized correctly instead of always showing first item, even when randomizing. Thanks to Riccardo Gherardi for finding this.
| Please see [[QuoteOfTheDayPluginInfo]] for previous revision details |
2005.10.21 [1.0.0] Initial Release. Based on a suggestion by M.Russula
<<<
!Example
//Click on quote://
:<<QOTD sample_quote norandom inline>>
!Usage
<<<
{{{<<QOTD tiddlername norandom noclick inline cookie:cookiename delay>>}}}
* ''tiddlername'' is the name of a tiddler containing your list of quotes, each separated by a horizontal line (use {{{----}}} on a line by itself).
* Each time the macro is rendered it will display a different quotation, selected at random from the specified tiddler. To display quotes in the sequence in which they occur in the tiddler, you can use the ''norandom'' keyword.
* When using ''norandom'', you can also specify an optional ''cookie:cookiename'' parameter which will be used to track the //index// of the next quote to be displayed, so that each subsequent rendering of the macro can continue the sequence of quotes as entered in the source tiddler, even in between browser sessions.
* By default, clicking on the rendered quote will select and display another random quote. Use the optional ''noclick'' keyword parameter to disable this "onClick" handling.
* By default, a clickable or timed quote will be displayed insider a 'slider' panel, so that standard TW animation effects will be used. However, slider panels are always rendered as "block-level" content, forcing a newline both before and after the slider panel. Use the ''inline'' keyword parameter to bypass this side-effect and display a clickable/timed quote without automatically adding surrounding linebreaks.
* The quote can also be refreshed automatically, by specifying a numeric ''delay'' parameter (in milliseconds) which enables a countdown timer. When the mouse is over the quote, the timer is automatically stopped. Moving the mouse away from the quote content restarts the timer.
<<<
!Code
***/
//{{{
version.extensions.QuoteOfTheDayPlugin= {major: 1, minor: 4, revision: 1, date: new Date(2008,3,21)};
config.macros.QOTD = {
clickTooltip: "click to view another item",
timerTooltip: "auto-timer stopped... 'mouseout' to restart timer",
timerClickTooltip: "auto-timer stopped... click to view another item, or 'mouseout' to restart timer",
handler:
function(place,macroName,params) {
var tid=params.shift(); // source tiddler containing HR-separated quotes
var p=params.shift();
var click=true; // allow click for next item
var inline=false; // wrap in slider for animation effect
var random=true; // pick an item at random (default for "quote of the day" usage)
var folder=false; // use local filesystem folder list
var cookie=""; // default to no cookie
var next=0; // default to first item (or random item)
while (p) {
if (p.toLowerCase()=="noclick") var click=false;
if (p.toLowerCase()=="inline") var inline=true;
if (p.toLowerCase()=="norandom") var random=false;
if (p.toLowerCase().substr(0,7)=="cookie:") var cookie='cookie_'+p.substr(7);
if (!isNaN(p)) var delay=p;
p=params.shift();
}
if ((click||delay) && !inline) {
var panel = createTiddlyElement(null,"div",null,"sliderPanel");
panel.style.display="none";
place.appendChild(panel);
var here=createTiddlyElement(panel,click?"a":"span",null,"QOTD");
}
else
var here=createTiddlyElement(place,click?"a":"span",null,"QOTD");
here.id=(new Date()).convertToYYYYMMDDHHMMSSMMM()+Math.random().toString(); // unique ID
// get items from tiddler or file list
var list=store.getTiddlerText(tid,"");
if (!list||!list.length) { // not a tiddler... maybe an image directory?
var list=this.getImageFileList(tid);
if (!list.length) { // maybe relative path... fixup and try again
var h=document.location.href;
var p=getLocalPath(decodeURIComponent(h.substr(0,h.lastIndexOf("/")+1)));
var list=this.getImageFileList(p+tid);
}
return false; // MOVED HERE
}
//if (!list||!list.length) return false; // no contents... nothing to display!
here.setAttribute("list",list);
if (delay) here.setAttribute("delay",delay);
here.setAttribute("random",random);
here.setAttribute("cookie",cookie);
if (click) {
here.title=this.clickTooltip
if (!inline) here.style.display="block";
here.setAttribute("href","javascript:;");
here.onclick=function(event)
{ config.macros.QOTD.showNextItem(this); }
}
if (store.tiddlerExists(cookie)){
t=store.getTiddler(cookie);
next=parseInt(t.text);
}
here.setAttribute("nextItem",next);
config.macros.QOTD.showNextItem(here);
if (delay) {
here.title=click?this.timerClickTooltip:this.timerTooltip
here.onmouseover=function(event)
{ clearTimeout(this.ticker); };
here.onmouseout=function(event)
{ this.ticker=setTimeout("config.macros.QOTD.tick('"+this.id+"')",this.getAttribute("delay")); };
here.ticker=setTimeout("config.macros.QOTD.tick('"+here.id+"')",delay);
}
},
tick: function(id) {
var here=document.getElementById(id); if (!here) return;
config.macros.QOTD.showNextItem(here);
here.ticker=setTimeout("config.macros.QOTD.tick('"+id+"')",here.getAttribute("delay"));
},
showNextItem:
function (here) {
// hide containing slider panel (if any)
var p=here.parentNode;
if (p.className=="sliderPanel") p.style.display = "none"
// get a new quote
var index=here.getAttribute("nextItem");
var items=here.getAttribute("list").split(/\n-{4,}\n/img);
if (index<0||index>=items.length) index=0;
if (here.getAttribute("random")=="true") index=Math.floor(Math.random()*items.length);
var txt=items[index];
// fixes recursion problem if macro is embedded into quote file.
if(/<<QOTD .+>>/gm.test(txt)){
txt=items[index = (++index>=items.length) ? 0 : index].replace(/<<QOTD .+>>/gm,'@~ERROR-index='+index+'@');
//if by itself and no other text or two qotd macros side by side, it freezes, so I used replace here.
}else if(txt=='%/') txt=items[index = (++index>=items.length) ? 0 : index]
// re-render quote display element, and advance index counter
removeChildren(here); wikify(txt,here);
here.setAttribute("nextItem",++index);
var cookie=here.getAttribute("cookie");
if (cookie.length) {
store.saveTiddler(cookie,cookie,index.toString(),config.options.txtUserName,(new Date()),'cookie excludeLists',{});
}
// redisplay slider panel (if any)
if (p.className=="sliderPanel") {
if(anim && config.options.chkAnimate)
anim.startAnimating(new Slider(p,true,false,"none"));
else p.style.display="block";
}
},
getImageFileList: function(cwd) { // returns HR-separated list of image files
function isImage(fn) {
var ext=fn.substr(fn.length-3,3).toLowerCase();
return ext=="jpg"||ext=="gif"||ext=="png";
}
var files=[];
if (config.browser.isIE) {
cwd=cwd.replace(/\//g,"\\");
// IE uses ActiveX to read filesystem info
var fso = new ActiveXObject("Scripting.FileSystemObject");
if(!fso.FolderExists(cwd)) return [];
var dir=fso.GetFolder(cwd);
for(var f=new Enumerator(dir.Files); !f.atEnd(); f.moveNext())
if (isImage(f.item().path)) files.push("[img[%0]]".format(["file:///"+f.item().path.replace(/\\/g,"/")]));
} else {
// FireFox (mozilla) uses "components" to read filesystem info
// get security access
if(!window.Components) return;
try { netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); }
catch(e) { alert(e.description?e.description:e.toString()); return []; }
// open/validate directory
var file=Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
try { file.initWithPath(cwd); } catch(e) { return []; }
if (!file.exists() || !file.isDirectory()) { return []; }
var folder=file.directoryEntries;
while (folder.hasMoreElements()) {
var f=folder.getNext().QueryInterface(Components.interfaces.nsILocalFile);
if (f instanceof Components.interfaces.nsILocalFile)
if (isImage(f.path)) files.push("[img[%0]]".format(["file:///"+f.path.replace(/\\/g,"/")]));
}
}
return files.join("\n----\n");
}
}
//}}}
<<myComment>>
----
~~:::::__Fri Jun 25 2010 21:40:38 GMT-0400 (Eastern Daylight Time)__:::::~~
^^(__KennyZ Wrote:__)^^ Change to: use tiddler to keep count instead of using cookies.
{{{
if (cookie.length) {
store.saveTiddler(cookie,cookie,index.toString(),config.options.txtUserName,(new Date()),'cookie excludeLists',{});
}
}}}
----
~~:::::__Fri Jun 25 2010 21:42:15 GMT-0400 (Eastern Daylight Time)__:::::~~
^^(__KennyZ Wrote:__)^^ If macro is embeded into quote file, it will call itself recursively and freeze the browser.
{{{if(/<<QOTD .+>>/gm.test(txt)) txt=items[++index>=items.length?0:index];}}}
this fixes if random and embedded qotd macro tag
----
~~:::::__Fri Jun 25 2010 21:42:37 GMT-0400 (Eastern Daylight Time)__:::::~~
^^(__KennyZ Wrote:__)^^ Code change: use regex instead of string matching.
{{{var items=here.getAttribute("list").split(/\n-{4,}\n/img);}}}
----
~~:::::__Fri Jun 25 2010 21:46:11 GMT-0400 (Eastern Daylight Time)__:::::~~
^^(__KennyZ Wrote:__)^^ If there are more than one <<QOTD>> tags embedded into the same quote file, it seems to freeze the browser. This is a temp workaround. I really like to line them up against each other.
{{{
// fixes recursion problem if macro is embedded into quote file.
if(/<<QOTD .+>>/gm.test(txt)){
txt=items[index = (++index>=items.length) ? 0 : index].replace(/<<QOTD .+>>/gm,'@~ERROR-index='+index+'@');
//if by itself and no other text or two qotd macros side by side, it freezes, so I used replace here.
}
}}}
----
~~:::::__Sun Jun 27 2010 22:00:44 GMT-0400 (Eastern Daylight Time)__:::::~~
^^(__KennyZ Wrote:__)^^ added: {{{else if(txt=='%/') txt=items[index = (++index>=items.length) ? 0 : index]}}} so /%...%/ comment tags could be skipped, thus hidding the quotes in an embedded document.
<<rssFeedUpdateAllButton>>
<<rssReader asHtml http://tiddlywiki.bidix.info/index.xml 1>>
<<rssReader asHtml http://feeds.feedburner.com/brainyquote/QUOTEBR 1>>
<<rssReader asHtml http://www.thefreedictionary.com/_/WoD/rss.aspx 1 >>
<<rssReader asHtml http://feeds.urbandictionary.com/UrbanWordOfTheDay 1 >>
<<rssReader asHtml http://feeds.dilbert.com/DilbertDailyStrip 1 >>
<<rssReader asHtml http://rss.news.yahoo.com/rss/sports 5>>
/***
|''Name:''|RSSReaderPlugin|
|''Description:''|This plugin provides a RSSReader for TiddlyWiki|
|''Version:''|1.1.2|
|''Date:''|2008-09-02|
|''Source:''|http://tiddlywiki.bidix.info/#RSSReaderPlugin|
|''Documentation:''|http://tiddlywiki.bidix.info/#RSSReaderPluginDoc|
|''Author:''|BidiX (BidiX (at) bidix (dot) info)|
|''Credit:''|BramChen for RssNewsMacro|
|''[[License]]:''|[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D ]]|
|''~CoreVersion:''|2.2.0|
|''OptionalRequires:''|http://www.tiddlytools.com/#NestedSlidersPlugin|
!Examples
{{{<<rssFeedUpdateAllButton>>}}}
<<rssFeedUpdateAllButton>>
'''{{{<<rssReader asDesc|asHtml rssUrl [limit] ['filtering string']>>}}}'''
{{{<<rssReader asHtml http://www.thefreedictionary.com/_/WoD/rss.aspx>>}}}
{{{<<rssReader asHtml http://feeds.urbandictionary.com/UrbanWordOfTheDay 1>>}}}
!My Changes:
*added a limit so that it just shows n number of feeds instead of the entire list each time.
*added a universal clear cache button function.
- - code hidden - -
***/
//{{{
version.extensions.RSSReaderPlugin = {
major: 1, minor: 1, revision: 2,
date: new Date("2008-09-02"),
source: "http://TiddlyWiki.bidix.info/#RSSReaderPlugin",
author: "BidiX",
coreVersion: '2.2.0'
};
config.macros.rssReader = {
dateFormat: "DDD, DD MMM YYYY",
itemStyle: "display: block;border: 1px solid black;padding: 5px;margin: 5px;", //useed '@@'+itemStyle+itemText+'@@'
msg:{
permissionDenied: "Permission to read preferences was denied.",
noRSSFeed: "No RSS Feed at this address %0",
urlNotAccessible: " Access to %0 is not allowed"
},
cache: [], // url => XMLHttpRequest.responseXML
desc: "noDesc",
limit: null,
handler: function(place,macroName,params,wikifier,paramString,tiddler) {
var desc = params[0];
var feedURL = params[1];
var limit = params[2];
var toFilter = (params[3] ? true : false);
var filterString = (toFilter?(params[3].substr(0,1) == ' '? tiddler.title:params[3]):'');
var place = createTiddlyElement(place, "div", "RSSReader");
//wikify("^^<<rssFeedUpdate "+feedURL+" [[" + tiddler.title + "]]>>^^\n",place);
if (this.cache[feedURL]) {
this.displayRssFeed(this.cache[feedURL], place, feedURL, desc, limit, toFilter, filterString);
}
else {
var r = loadRemoteFile(feedURL,config.macros.rssReader.processResponse, [place, desc, limit, toFilter, filterString]);
if (typeof r == "string")
displayMessage(r);
}
},
// callback for loadRemoteFile
// params : [place, desc, toFilter, filterString]
processResponse: function(status, params, responseText, url, xhr) { // feedURL, place, desc, toFilter, filterString) {
if (window.netscape){
try {
if (document.location.protocol.indexOf("http") == -1) {
netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
}
}
catch (e) { displayMessage(e.description?e.description:e.toString()); }
}
if (xhr.status == 404)
{
displayMessage(config.macros.rssReader.noRSSFeed.format([url]));
return;
}
if (!status)
{
displayMessage(config.macros.rssReader.noRSSFeed.format([url]));
return;
}
if (xhr.responseXML) {
// response is interpreted as XML
config.macros.rssReader.cache[url] = xhr.responseXML;
config.macros.rssReader.displayRssFeed(xhr.responseXML, params[0], url, params[1], params[2], params[3], params[4]);
}
else {
if (responseText.substr(0,5) == "<?xml") {
// response exists but not return as XML -> try to parse it
var dom = (new DOMParser()).parseFromString(responseText, "text/xml");
if (dom) {
// parsing successful so use it
config.macros.rssReader.cache[url] = dom;
config.macros.rssReader.displayRssFeed(dom, params[0], url, params[1], params[2], params[3], params[4]);
return;
}
}
// no XML display as html
wikify("<html>" + responseText + "</html>", params[0]);
displayMessage(config.macros.rssReader.msg.noRSSFeed.format([url]));
}
},
// explore down the DOM tree
displayRssFeed: function(xml, place, feedURL, desc, limit, toFilter, filterString){
// Channel
var chanelNode = xml.getElementsByTagName('channel').item(0);
var chanelTitleElement = (chanelNode ? chanelNode.getElementsByTagName('title').item(0) : null);
var chanelTitle = "";
if ((chanelTitleElement) && (chanelTitleElement.firstChild))
chanelTitle = chanelTitleElement.firstChild.nodeValue;
var chanelLinkElement = (chanelNode ? chanelNode.getElementsByTagName('link').item(0) : null);
var chanelLink = "";
if (chanelLinkElement)
chanelLink = chanelLinkElement.firstChild.nodeValue;
var titleTxt = "!![["+chanelTitle+"|"+chanelLink+"]]\n";
var title = createTiddlyElement(place,"div",null,"ChanelTitle",null);
wikify(titleTxt,title);
// ItemList
var itemList = xml.getElementsByTagName('item');
var article = createTiddlyElement(place,"ul",null,null,null);
var lastDate;
var re;
if(!limit) limit = itemList.length;
else limit = Math.min(itemList.length,limit);
if (toFilter)
re = new RegExp(filterString.escapeRegExp());
for (var i=0; i<limit; i++){
var titleElm = itemList[i].getElementsByTagName('title').item(0);
var titleText = (titleElm ? titleElm.firstChild.nodeValue : '');
if (toFilter && ! titleText.match(re)) {
continue;
}
var descText = '';
descElem = itemList[i].getElementsByTagName('description').item(0);
if (descElem){
try{
for (var ii=0; ii<descElem.childNodes.length; ii++) {
descText += descElem.childNodes[ii].nodeValue;
}
}
catch(e){}
descText = descText.replace(/<br \/>/g,'\n');
if (desc == "asHtml")
descText = "<html>"+descText+"</html>";
}
var linkElm = itemList[i].getElementsByTagName("link").item(0);
var linkURL = linkElm.firstChild.nodeValue;
var pubElm = itemList[i].getElementsByTagName('pubDate').item(0);
var pubDate;
if (!pubElm) {
pubElm = itemList[i].getElementsByTagName('date').item(0); // for del.icio.us
if (pubElm) {
pubDate = pubElm.firstChild.nodeValue;
pubDate = this.formatDateString(this.dateFormat, pubDate);
}
else {
pubDate = '0';
}
}
else {
pubDate = (pubElm ? pubElm.firstChild.nodeValue : 0);
pubDate = this.formatDate(this.dateFormat, pubDate);
}
titleText = titleText.replace(/\[|\]/g,'');
var rssText = '*'+'[[' + titleText + '|' + linkURL + ']]' + '' ;
if ((desc != "noDesc") && descText){
rssText = rssText.replace(/\n/g,' ');
descText = '@@'+this.itemStyle+descText + '@@\n';
if (version.extensions.nestedSliders){
descText = '+++[...]' + descText + '===';
}
rssText = rssText + descText;
}
var story;
if ((lastDate != pubDate) && ( pubDate != '0')) {
story = createTiddlyElement(article,"li",null,"RSSItem",pubDate);
lastDate = pubDate;
}
else {
lastDate = pubDate;
}
story = createTiddlyElement(article,"div",null,"RSSItem",null);
wikify(rssText,story);
}
},
formatDate: function(template, date){
var dateString = new Date(date);
// template = template.replace(/hh|mm|ss/g,'');
return dateString.formatString(template);
},
formatDateString: function(template, date){
var dateString = new Date(date.substr(0,4), date.substr(5,2) - 1, date.substr(8,2));
return dateString.formatString(template);
}
};
config.macros.rssFeedUpdate = {
label: "Update",
prompt: "Clear the cache and redisplay this RssFeed",
handler: function(place,macroName,params) {
var feedURL = params[0];
var tiddlerTitle = params[1];
createTiddlyButton(place, this.label, this.prompt,
function () {
if (config.macros.rssReader.cache[feedURL]) {
config.macros.rssReader.cache[feedURL] = null;
}
story.refreshTiddler(tiddlerTitle,null, true);
return false;});
}
};
config.macros.rssFeedUpdateAllButton = {
label: "Update Feeds",
prompt: "Clear the cache and redisplay this RssFeed",
handler: function(place) {
createTiddlyButton(place, this.label, this.prompt,
function () {
config.macros.rssReader.cache=[];
story.refreshAllTiddlers();
return false;
}
);
}
};
//}}}
//%/
/***
|''Name:''|ReadOnlyPlugin|
|''Description:''|Makes tiddlers tagged readOnly read only.|
|''Author:''|Kenny Z|
|''Source:''|http://cooltool.tiddlyspot.com/#ReadOnlyPlugin|
|''CodeRepository:''| |
|''Version:''|0.0.1|
|''Status:''|Beta|
|''Date:''|June 28, 2010|
|''Comments:''| |
|''License:''|[[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]] |
|''~CoreVersion:''|2.6|
!!Description
Makes tiddlers tagged readOnly uneditable.
!!Usage
#Import
#Save & Reload
#Add "readOnlyTiddler" to [[ToolbarCommands]]
**Click "readOnly" command to tag it readOnly, CTRL+click to untag it.
!!Configuration
<<option chkHideReadOnlyButton>> Hide readOnly command in read only tiddlers?
!!Code
***/
//{{{
if(!version.extensions.ReadOnlyPlugin) {
version.extensions.ReadOnlyPlugin= {installed:true};
if(!config.options.chkHideReadOnlyButton)
config.options.chkHideReadOnlyButton=true;
config.commands.readOnlyTiddler = {
text: "read only",
tooltip: "Make this tiddler read only.",
warning: 'Make this "Read Only", are you sure?',
handler: function(event,src,title) {
if(!event.ctrlKey && confirm(this.warning)){
store.setTiddlerTag(title,1,"readOnly");
}else if(event.ctrlKey){
store.setTiddlerTag(title,0,"readOnly");
}
return false;
},
};
if(!window.cooltool) window.cooltool={};
if(!cooltool.readOnly) cooltool.readOnly={};
//}}}
/***
!!!!Hijacked getTemplateForTiddler
***/
//{{{
cooltool.readOnly.ori_getTemplate = Story.prototype.getTemplateForTiddler;
Story.prototype.getTemplateForTiddler=function(title,template,tiddler){
var t=cooltool.readOnly.ori_getTemplate(title,template,tiddler);
if(tiddler.tags.contains("readOnly")){
t=t.replace(/(edit|delete)Tiddler/g,"");
if(config.options.chkHideReadOnlyButton)
t=t.replace(/readOnlyTiddler/g,"");
}
return t;
};
} //# end of 'install only once'
//}}}
<<myComment>>
----
~~:::::__Mon Jun 28 2010 22:25:36 GMT-0400 (Eastern Daylight Time)__:::::~~
^^(__KennyZ Wrote:__)^^
Two possible ways of implementing this:
*config.commands.editTiddler.handler
*Story.prototype.getTemplateForTiddler
----
~~:::::__Sun Jul 04 2010 00:24:08 GMT-0400 (Eastern Daylight Time)__:::::~~
^^(__KennyZ Wrote:__)^^ This way works too, but you can still go into view mode.
//{{{
ori_getTemplate = Story.prototype.getTemplateForTiddler;
Story.prototype.getTemplateForTiddler=function(title,template,tiddler){
var t=ori_getTemplate(title,template,tiddler);
if(tiddler.tags.contains("readOnly")){
readOnly= true;
}
else readOnly=false;
return t;
};
//}}}
/***
|Name|RearrangeTiddlersPlugin|
|Source|http://www.TiddlyTools.com/#RearrangeTiddlersPlugin|
|Version|2.0.0|
|Author|Eric Shulman|
|OriginalAuthor|Joe Raii|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|drag tiddlers by title to re-order story column display|
adapted from: http://www.cs.utexas.edu/~joeraii/dragn/#Draggable
changes by ELS:
* hijack refreshTiddler() instead of overridding createTiddler()
* find title element by className instead of elementID
* set cursor style via code instead of stylesheet
* set tooltip help text
* set tiddler "position:relative" when starting drag event, restore saved value when drag ends
* update 2006.08.07: use getElementsByTagName("*") to find title element, even when it is 'buried' deep in tiddler DOM elements (due to custom template usage)
* update 2007.03.01: use apply() to invoke hijacked core function
* update 2008.01.13: only hijack core function once. (allows for dynamic loading of plugin via bookmarklet)
* update 2008.10.19: added onclick popup menu with 'move to top' and 'move to bottom' commands
***/
///%
if (Story.prototype.rearrangeTiddlersHijack_refreshTiddler===undefined) {
Story.prototype.rearrangeTiddlersHijack_refreshTiddler = Story.prototype.refreshTiddler;
Story.prototype.refreshTiddler = function(title,template)
{
this.rearrangeTiddlersHijack_refreshTiddler.apply(this,arguments);
var theTiddler = document.getElementById(this.idPrefix + title); if (!theTiddler) return;
var theHandle;
var children=theTiddler.getElementsByTagName("*");
for (var i=0; i<children.length; i++) if (hasClass(children[i],"title")) { theHandle=children[i]; break; }
if (!theHandle) return theTiddler;
Drag.init(theHandle, theTiddler, 0, 0, null, null);
theHandle.style.cursor="move";
theHandle.title="drag title to re-arrange tiddlers, click for more options..."
theTiddler.onDrag = function(x,y,myElem) {
if (this.style.position!="relative")
{ this.savedstyle=this.style.position; this.style.position="relative"; }
y = myElem.offsetTop;
var next = myElem.nextSibling;
var prev = myElem.previousSibling;
if (next && y + myElem.offsetHeight > next.offsetTop + next.offsetHeight/2) {
myElem.parentNode.removeChild(myElem);
next.parentNode.insertBefore(myElem, next.nextSibling);//elems[pos+1]);
myElem.style["top"] = -next.offsetHeight/2+"px";
}
if (prev && y < prev.offsetTop + prev.offsetHeight/2) {
myElem.parentNode.removeChild(myElem);
prev.parentNode.insertBefore(myElem, prev);
myElem.style["top"] = prev.offsetHeight/2+"px";
}
};
theTiddler.onDragEnd = function(x,y,myElem) {
myElem.style["top"] = "0px";
if (this.savedstyle!=undefined)
this.style.position=this.savedstyle;
};
theHandle.onclick=function(ev) {
ev=ev||window.event;
var p=Popup.create(this); if (!p) return;
// REQUIRES "Collapse Plugins"
// config.commands.collapseOthers.handler(ev,this,title);
config.commands.toggleTiddler.handler(ev,this,title);
// DISABLED
/**************************************************************************
var b=createTiddlyButton(createTiddlyElement(p,"li"),
"\u25B2 move to top of column ","move this tiddler to the top of the story column",
function() {
var t=story.getTiddler(this.getAttribute("tid"));
t.parentNode.insertBefore(t,t.parentNode.firstChild); // move to top of column
window.scrollTo(0,ensureVisible(t));
return false;
});
b.setAttribute("tid",title);
var b=createTiddlyButton(createTiddlyElement(p,"li"),
"\u25BC move to bottom of column ","move this tiddler to the bottom of the story column",
function() {
var t=story.getTiddler(this.getAttribute("tid"));
t.parentNode.insertBefore(t,null); // move to bottom of column
window.scrollTo(0,ensureVisible(t));
return false;
});
b.setAttribute("tid",title);
Popup.show();
ev.cancelBubble=true; if (ev.stopPropagation) ev.stopPropagation(); return(false);
****************************************************************************/
};
return theTiddler;
}
}
/**************************************************
* dom-drag.js
* 09.25.2001
* www.youngpup.net
**************************************************
* 10.28.2001 - fixed minor bug where events
* sometimes fired off the handle, not the root.
**************************************************/
var Drag = {
obj:null,
init:
function(o, oRoot, minX, maxX, minY, maxY) {
o.onmousedown = Drag.start;
o.root = oRoot && oRoot != null ? oRoot : o ;
if (isNaN(parseInt(o.root.style.left))) o.root.style.left="0px";
if (isNaN(parseInt(o.root.style.top))) o.root.style.top="0px";
o.minX = typeof minX != 'undefined' ? minX : null;
o.minY = typeof minY != 'undefined' ? minY : null;
o.maxX = typeof maxX != 'undefined' ? maxX : null;
o.maxY = typeof maxY != 'undefined' ? maxY : null;
o.root.onDragStart = new Function();
o.root.onDragEnd = new Function();
o.root.onDrag = new Function();
},
start:
function(e) {
var o = Drag.obj = this;
e = Drag.fixE(e);
var y = parseInt(o.root.style.top);
var x = parseInt(o.root.style.left);
o.root.onDragStart(x, y, Drag.obj.root);
o.lastMouseX = e.clientX;
o.lastMouseY = e.clientY;
if (o.minX != null) o.minMouseX = e.clientX - x + o.minX;
if (o.maxX != null) o.maxMouseX = o.minMouseX + o.maxX - o.minX;
if (o.minY != null) o.minMouseY = e.clientY - y + o.minY;
if (o.maxY != null) o.maxMouseY = o.minMouseY + o.maxY - o.minY;
document.onmousemove = Drag.drag;
document.onmouseup = Drag.end;
Drag.obj.root.style["z-index"] = "10";
return false;
},
drag:
function(e) {
e = Drag.fixE(e);
var o = Drag.obj;
var ey = e.clientY;
var ex = e.clientX;
var y = parseInt(o.root.style.top);
var x = parseInt(o.root.style.left);
var nx, ny;
if (o.minX != null) ex = Math.max(ex, o.minMouseX);
if (o.maxX != null) ex = Math.min(ex, o.maxMouseX);
if (o.minY != null) ey = Math.max(ey, o.minMouseY);
if (o.maxY != null) ey = Math.min(ey, o.maxMouseY);
nx = x + (ex - o.lastMouseX);
ny = y + (ey - o.lastMouseY);
Drag.obj.root.style["left"] = nx + "px";
Drag.obj.root.style["top"] = ny + "px";
Drag.obj.lastMouseX = ex;
Drag.obj.lastMouseY = ey;
Drag.obj.root.onDrag(nx, ny, Drag.obj.root);
return false;
},
end:
function() {
document.onmousemove = null;
document.onmouseup = null;
Drag.obj.root.style["z-index"] = "0";
Drag.obj.root.onDragEnd(parseInt(Drag.obj.root.style["left"]), parseInt(Drag.obj.root.style["top"]), Drag.obj.root);
Drag.obj = null;
},
fixE:
function(e) {
if (typeof e == 'undefined') e = window.event;
if (typeof e.layerX == 'undefined') e.layerX = e.offsetX;
if (typeof e.layerY == 'undefined') e.layerY = e.offsetY;
return e;
}
};
//%/
/***
|''Name:''|RenameTiddlerPlugin|
|''Description:''|Renames tiddlers quickly|
|''Author:''|Kenny Z|
|''Source:''|http://cooltool.tiddlyspot.com/#RenameTiddlerPlugin|
|''Dependencies:''||
|''CodeRepository:''| |
|''Version:''|0.0.1|
|''Status:''|Alpha|
|''Date:''|July 6, 2010|
|''Comments:''| |
|''License:''|[[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]] |
|''~CoreVersion:''|2.6|
!!Description
Adds a button on the toolbar command to rename tiddlers quickly.
!!Usage
#Import
#Save & Reload
#Add {{{renameTiddler}}} to [[ToolbarCommands]] in the ~ViewToolbar slice.
!!Code
***/
//{{{
if(!version.extensions.RenameTiddlerPlugin) {
version.extensions.RenameTiddlerPlugin={installed:true};
config.commands.renameTiddler= {
text: "rename",
tooltip: "Rename Tiddler",
readOnlyText: "",
readOnlyTooltip: "",
handler: function(event,src,title) {
var tiddler=store.getTiddler(title);
var ans=prompt("Enter new title: ",title);
story.closeTiddler(title,false,false);
store.deleteTiddler(title);
tiddler.set(ans);
//store.saveTiddler(title,ans,tiddler.text,who,date,tags,this.tiddler.fields);
store.addTiddler(tiddler); store.notify(title,true); store.notify(ans,true);
store.dirty=true; store.setDirty(title,true); autoSaveChanges();
story.displayTiddler(null,ans);
return false;
},
};
} //# end of 'install only once'
//}}}
/***
|''Name:''|SQLQueryPlugin|
|''Version:''|0.1|
|''Source''|http://jackparke.googlepages.com/jtw.html#SQLQueryPlugin ([[del.icio.us|http://del.icio.us/post?url=http://jackparke.googlepages.com/jtw.html%23SQLQueryPlugin]])|
|''Author:''|[[Jack]]|
!Description
Query a SQL database (defined in [[SQLConfig]]) and display results in a tiddler. See [[SQLExamples]].
See http://www.connectionstrings.com for connection strings examples.
!Usage
{{{<<SQLQuery sql:"SELECT * FROM Products">>}}}
!Example
{{{<<SQLQuery sql:"SELECT TOP 10 ProductID, ProductName FROM Products">>}}}
<<SQLQuery sql:"SELECT TOP 10 ProductID, ProductName FROM Products">>
{{{<<SQLQuery sql:"SELECT TOP 10 au_id, au_lname, au_fname FROM Authors" connection:pubs>>}}}
<<SQLQuery sql:"SELECT TOP 10 au_id, au_lname, au_fname FROM Authors" connection:pubs>>
!Advanced Usage
{{{<<SQLQuery sql:"SELECT * FROM Products" connection:pubs rowstart:"*" colsep:"," rowend:{{\n}} headerstart:!>>}}}
!Configuration
Define all database connection strings (ADO) in the [[SQLConfig]] tiddler.
Example:
{{{
Northwind: DRIVER={SQL Server};SERVER=(local);DATABASE=Northwind;
pubs: DRIVER={SQL Server};SERVER=(local);DATABASE=pubs;
CompanyContacts: DRIVER={SQL Server};SERVER=MyCompanyServer;DATABASE=Contacts;UID=sa;pwd=admin;
}}}
!Code
***/
//{{{
version.extensions.SQLQuery= {major: 0, minor: 1, revision: 0, date: new Date("Aug 23, 2007")};
config.macros.SQLQuery= {};
//config.shadowTiddlers.SQLConfig = 'Connection1: DRIVER={SQL Server};SERVER=(local);DATABASE=Northwind;';
config.macros.SQLQuery.handler = function(place,macroName,params,wikifier,paramString,tiddler) {
var parameters = paramString.parseParams('name',null,true);
var pSQL = parameters[0]['sql']?parameters[0]['sql'][0]:-1;
if (!pSQL) return false;
var Connection = parameters[0]['connection']?parameters[0]['connection'][0]:'Connection1';
var SQLConnection = store.getTiddlerText('SQLConfig::' + Connection)
if (!SQLConnection) return wikify('Please configure this connection \'' + Connection + '\' in [[SQLConfig]]!', place, null, tiddler);
var RowStart = parameters[0]['rowstart']?parameters[0]['rowstart'][0]:'|';
var ColSep = parameters[0]['colsep']?parameters[0]['colsep'][0]:'|';
var RowEnd = parameters[0]['rowend']?parameters[0]['rowend'][0]:'|\n';
var HeaderStart = parameters[0]['headerstart']?parameters[0]['headerstart'][0]:'!~';
try {
var strResult = sql_DBQuery(SQLConnection, pSQL, RowStart, ColSep, RowEnd, HeaderStart, 'No results')
wikify(strResult,place, null, tiddler)
} catch (err) {
wikify('Error ' + err.message,place, null, tiddler)
}
}
function sql_DBQuery(ConnStr, SQL, RowStart, ColSep, RowEnd, HeaderStart, NoData) {
var Conn = new ActiveXObject('ADODB.Connection');
Conn.open(ConnStr);
var RS = Conn.execute(SQL);
var strOut='';
if (!RS.eof) {
strOut += RowStart;
for (var i=0; i < RS.Fields.Count; i++) {
strOut += HeaderStart + RS.Fields(i).name.toString() + (i<RS.Fields.Count-1?ColSep:'');
}
strOut += RowEnd;
while (!RS.eof) {
strOut += RowStart;
for (var i=0; i < RS.Fields.Count; i++) {
strOut += RS.Fields(i).Value.toString() + (i<RS.Fields.Count-1?ColSep:'');
}
strOut += RowEnd;
RS.MoveNext
}
} else {
strOut = NoData;
}
return strOut;
RS.close()
Conn.close()
}
//}}}
!Fold Headings Plugin:
!!!Word Count
[img[wordCount.png]]
!!!Read Only Plugin
[img[readOnly.png]]
!!!ClearChangeCountPlugin
[img[clearChangeCount.png]]
!!!ExportCommandPlugin
[img[exportCommandPlugin.png]]
!!!AttachFilePlugin - Hidden Data section
[img[EmbeddedHiddenData.png]]
!!!sectio opened, with option to close
AAAAA AAAAAAAAAAA AAAAAAA AAAAAAAAAAAA AAAAAAAAAAA AAAAAAA AAAAAAAAAAAA AAAAAAAAAAA AAAAAAA AAAAAAAAAAAA AAAAAAAAAAA AAAAAAA AAAAAAAAAAAA AAAAAAAAAAA AAAAAAA AAAAAAAAAAAA AAAAAAAAAAA AAAAAAA AAAAAAAAAAAA AAAAAAAAAAA AAAAAAA AAAAAAA
AAAAA AAAAAAAAAAA AAAAAAA AAAAAAAAAAAA AAAAAAAAAAA AAAAAAA AAAAAAAAAAAA AAAAAAAAAAA AAAAAAA AAAAAAAAAAAA AAAAAAAAAAA AAAAAAA AAAAAAA<<foldHeadings opened>>
!!!section folded, with option to open
AAAAA AAAAAAAAAAA AAAAAAA AAAAAAAAAAAA AAAAAAAAAAA AAAAAAA AAAAAAAAAAAA AAAAAAAAAAA AAAAAAA AAAAAAAAAAAA AAAAAAAAAAA AAAAAAA AAAAAAAAAAAA AAAAAAAAAAA AAAAAAA AAAAAAAAAAAA AAAAAAAAAAA AAAAAAA AAAAAAAAAAAA AAAAAAAAAAA AAAAAAA AAAAAAA
AAAAA AAAAAAAAAAA AAAAAAA AAAAAAAAAAAA AAAAAAAAAAA AAAAAAA AAAAAAAAAAAA AAAAAAAAAAA AAAAAAA AAAAAAAAAAAA AAAAAAAAAAA AAAAAAA AAAAAAA
AAAAA AAAAAAAAAAA AAAAAAA AAAAAAAAAAAA AAAAAAAAAAA AAAAAAA AAAAAAAAAAAA AAAAAAAAAAA AAAAAAA AAAAAAAAAAAA AAAAAAAAAAA AAAAAAA AAAAAAAAAAAA AAAAAAAAAAA AAAAAAA AAAAAAAAAAAA AAAAAAAAAAA AAAAAAA AAAAAAAAAAAA AAAAAAAAAAA AAAAAAA AAAAAAAAAAAA AAAAAAAAAAA AAAAAAA AAAAAAAAAAAA AAAAAAAAAAA AAAAAAA AAAAAAAAAAAA AAAAAAAAAAA AAAAAAA AAAAAAAAAAAA AAAAAAAAAAA AAAAAAA AAAAAAA
AAAAA AAAAAAAAAAA AAAAAAA AAAAAAAAAAAA AAAAAAAAAAA AAAAAAA AAAAAAAAAAAA AAAAAAAAAAA AAAAAAA AAAAAAAAAAAA AAAAAAAAAAA AAAAAAA AAAAAAAAAAAA AAAAAAAAAAA AAAAAAA AAAAAAAAAAAA AAAAAAAAAAA AAAAAAA AAAAAAAAAAAA AAAAAAAAAAA AAAAAAA AAAAAAAAAAAA AAAAAAAAAAA AAAAAAA AAAAAAAAAAAA AAAAAAAAAAA AAAAAAA AAAAAAAAAAAA AAAAAAAAAAA AAAAAAA AAAAAAAAAAAA AAAAAAAAAAA AAAAAAA AAAAAAAAAAAA AAAAAAAAAAA AAAAAAA AAAAAAAAAAAA AAAAAAAAAAA AAAAAAA AAAAAAAAAAAA AAAAAAAAAAA AAAAAAA AAAAAAA
AAAAA AAAAAAAAAAA AAAAAAA AAAAAAAAAAAA AAAAAAAAAAA AAAAAAA AAAAAAAAAAAA AAAAAAAAAAA AAAAAAA AAAAAAAAAAAA AAAAAAAAAAA AAAAAAA AAAAAAAAAAAA AAAAAAAAAAA AAAAAAA AAAAAAAAAAAA AAAAAAAAAAA AAAAAAA AAAAAAAAAAAA AAAAAAAAAAA AAAAAAA AAAAAAAAAAAA AAAAAAAAAAA AAAAAAA AAAAAAAAAAAA AAAAAAAAAAA AAAAAAA AAAAAAAAAAAA AAAAAAAAAAA AAAAAAA AAAAAAAAAAAA AAAAAAAAAAA AAAAAAA AAAAAAA
AAAAA AAAAAAAAAAA AAAAAAA AAAAAAAAAAAA AAAAAAAAAAA AAAAAAA AAAAAAAAAAAA AAAAAAAAAAA AAAAAAA AAAAAAAAAAAA AAAAAAAAAAA AAAAAAA AAAAAAAAAAAA AAAAAAAAAAA AAAAAAA AAAAAAAAAAAA AAAAAAAAAAA AAAAAAA AAAAAAAAAAAA AAAAAAAAAAA AAAAAAA AAAAAAAAAAAA AAAAAAAAAAA AAAAAAA AAAAAAAAAAAA AAAAAAAAAAA AAAAAAA AAAAAAAAAAAA AAAAAAAAAAA AAAAAAA AAAAAAA
<<foldHeadings closed>>
!SyntaxHighlighter
!!!Java
<code java>
public void printHello(){
System.out.println("Hello World");
}
</code>
!!!Python
<code python>
print "Hello, World!"
</code>
!Calendar
<<calendar thismonth>>
!AnnotationPlugin
Mouse over, the text below:
* ((banana(the best fruit in the world)))
* ((banana(^ the best fruit in the world)))
!FootnotesPlugin
''Try clicking on the red numbers, in the paragraphs below, to see the footnotes.
Lorem ipsum dolor sit amet, consectetuer adipiscing elit```This is my first footnote```. Duis eleifend. Phasellus id orci. Suspendisse quis elit pharetra arcu fringilla vulputate. Nullam et orci. In vel dolor quis eros euismod vehicula. Ut elementum egestas nibh. Sed at urna non lectus```You can have as many footnotes as you like``` accuconvallis blandit```Clicking on a footnote link, takes you to the footnote```.
Aliquam erat volutpat. Nam congue. eget sem sollicitudin auctor```Footnotes are numbered automatically```. Donec hendrerit, lorem id tincidunt bibendum, dolor dui dignissim velit, eu aliquet dolor sapien tincidunt nunc. Duis condimentum leo laoreet nibh. Proin in lacus quis ante lacinia vestibulum. Mauris turpis. Donec elementum lacinia turpis. Donec enim diam, feugiat id, feugiat gravida, mollis non, magna```Each footnote, has a back button, to take you to where you came from```.
!ExternalTiddlersPlugin
:{{{<<tiddler ' fileTiddlyWiki.html#"My Tiddly Title" ' >>}}}
/***
|''Name:''|SessionManagerPlugin|
|''Description:''|Manage Your Sessions|
|''Author:''|Kenny Z|
|''Source:''|http://cooltool.tiddlyspot.com/#SessionManagerPlugin|
|''CodeRepository:''| |
|''Version:''|0.0.1|
|''Status:''|Alpha|
|''Date:''|June 29, 2010|
|''Comments:''| |
|''License:''|[[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]] |
|''~CoreVersion:''|2.6|
!!Description
Manages your sessions.
*Store your last opened tiddlers in a cookie and reopen them on restart.
*Save and reload any session manually.
!!Usage
#Import
#Save & Reload
<<<
{{{<<session>>}}} OR {{{<<session tiddlerName sectionTitle>>}}}
__example:__
{{{<<session mySessions memo>>}}} This will look for !memo in the mySessions tiddler.
<<session>>
<<<
!!Configuration
<<option chkDoNotAutoLoadSession>> Don't Auto load last session.
!!To do
Make gui front end.
prevent overwriting tiddlers not tagged as session
!!Code
***/
//{{{
if(!version.extensions.SessionManagerPlugin) {
version.extensions.SessionManagerPlugin= {installed:true};
config.macros.session= {
template: '',
handler: function(place,macroName,params,wikifier,paramString,tiddler){
var tid=store.getTiddler(params[0]);
var section=params[1];
//LOAD
createTiddlyButton(place,"Load","",function(){
if(!tid&&!section) { alert("params required"); return;}
cooltool.session.loadSession(tid,section,tiddler.title)});
//SAVE
createTiddlyButton(place,"Save","",function(){
if(!tid&&!section){ alert("params required"); return;}
cooltool.session.saveSession(tid,section)});
//LIST
createTiddlyButton(place,"List","",function(){
if(!tid&&!section){ alert("params required"); return;}
alert(cooltool.session.listSession(tid).join("\n"))});
//wikify(template,'');
},
};
//----------------------------
if(!config.options.chkDoNotAutoLoadSession) config.options.chkDoNotAutoLoadSession=false;
if(!window.cooltool) window.cooltool={};
cooltool.session={
sessionId:('TWS'+escape(document.title).replace(/[^a-z]/ig,'')),
sectionFormat: "\n!%0\n%1",
listSession: function(tiddler){
var list = []; var v;
while(v=/^!.+?\n/gm.exec(tiddler.text)){
list.push(v.toString().replace(/^!+/,''));
}
return list;
},
loadSession: function(tiddler,section,title){
links=store.getTiddlerText(tiddler.title+'##'+section,null);
story.closeAllTiddlers(title); // title of tid to keep open
cooltool.session.displayTiddlers(links);
return true;
},
saveSession: function(tiddler,section){
if(store.getTiddlerText(tiddler.title+'##'+section,null)){
if(!confirm(section+" already exists, overwrite?")) return;
arr=eval("tiddler.text.split(/^!+"+section+"\\n.*/m)");
tiddler.text=arr.join("").replace(/\s+$/,'');
}
value=cooltool.session.getDisplayedTiddlers();
tiddler.text+=this.sectionFormat.format([section,value]);
story.refreshTiddler(tiddler.title,null,true);
store.setDirty(true);
return true;
},
getDisplayedTiddlers: function(){
var links=[];
story.forEachTiddler(function(title,element) {
if(title !="PluginManager")
links.push(String.encodeTiddlyLink(title));
});
return links.join(" ");
},
displayTiddlers: function(str){
var links=str.readBracketedList();
story.displayTiddlers(null,links,null,false,false);
},
};
if(!cooltool.cookie) cooltool.cookie = {
set: function(sKey,sValue,date){
if(!date){
date=new Date();
date.setFullYear(date.getFullYear()+2);
}
document.cookie=sKey+"="+sValue+";expires="+date.toGMTString();
return true;
},
get: function(sKey){
var cookie=document.cookie.split(";");
var sValue=eval("/"+sKey+"=.*?;/.exec(document.cookie)");
sValue=sValue.toString().replace(/^.*?=(.*);/,"$1");
return sValue;
},
};
//--------------------------
// HIJACKED FUNCTIONS
//--------------------------
cooltool.session.oldConfirmExit = confirmExit;
confirmExit = function(){
var links=cooltool.session.getDisplayedTiddlers();
cooltool.cookie.set(cooltool.session.sessionId,links);
return cooltool.session.oldConfirmExit();
};
cooltool.session.oldRestart = restart;
restart = function(){
cooltool.session.oldRestart();
if(story.isEmpty() && !config.options.chkDoNotAutoLoadSession){
var links=cooltool.cookie.get(cooltool.session.sessionId);
cooltool.session.displayTiddlers(links);
}
};
} //# end of 'install only once'
//}}}
<<myComment>>
----
~~:::::__Fri Jul 02 2010 15:05:05 GMT-0400 (Eastern Daylight Time)__:::::~~
^^(__KennyZ Wrote:__)^^ add safty so if user holds down shift key, session would not load or be saved.
<<saveChanges>><<closeAll>><<collapseAll>><<expandAll>><<toggleAll>><<permaview>><<newTiddler>><<newJournal "DD MMM YYYY" "journal">> /%<<slider chkSliderOptionsPanel OptionsPanel "options »" "Change TiddlyWiki advanced options">>%/
<<tabs txtMainTab
"Timeline" "Timeline" TabTimeline
"Tags" "All tags" TabTags
Index Index TabIndex
"More" "More lists" TabMore
>>
[[SyntaxHighlighterStyleSheet]]
/*{{{*/
#toggleSideBar {position:absolute; right:3px; top:-20px;}
#searchBar{position:absolute; right:20px; bottom:5px;}
/*.tabContents { background-color:White !important;}*/
.editor {
font-size: 12pt;
color: #402c74;
font-weight: normal;
padding: 10px 0;
}
.editor input, .editor textarea {
display: block;
font: 14px/130% "Andale Mono", "Monaco", "Lucida Console", "Courier New", monospace;
margin: 0;
border: 1px inset #333;
padding: 2px 0;
background: LightYellow;
}
/*}}}*/
!Download
:[[EMBEDDED FILE|syntaxhighlighterplugin4tiddlywiki]]
!Original Link
http://tiddlywiki.org/wiki/Syntax_Highlighting
!Instructions
Download 'syntaxhighlighterplugin.zip' from: http://www.coolcode.cn/?action=show&id=310 (look for the link near the top of the page) or my mirror: http://dl.getdropbox.com/u/52078/syntaxhighlighterplugin.zip
and extract...
Click the New Tiddler link to the left, and Name the tiddler 'StyleSheetSyntaxHighlighter' Navigate to your unzipped archive and cut and paste the contents of 'SyntaxHighlighter.css' into your new tiddler.
Navigate to the Shadow tiddler 'StyleSheet' and add [[StyleSheetSyntaxHighlighter]]
Add another 'New Tiddler' named 'SyntaxHighlighterPlugin' and paste the contents of 'shPlugin.js' into this tiddler, then tag the tiddler with 'systemConfig'
Finish everything up by copying 'clipboard.swf' to the directory of your TiddlyWiki... Make sure to save your changes, close and reopen your file to activate the plugin.
/***
!Metadata:
|''Name:''|SyntaxHighlighterPlugin|
|''Description:''|Code Syntax Highlighter Plugin for TiddlyWiki.|
|''Version:''|1.1.3|
|''Date:''|Oct 24, 2008|
|''Source:''|http://www.coolcode.cn/show-310-1.html|
|''Author:''|Ma Bingyao (andot (at) ujn (dot) edu (dot) cn)|
|''License:''|[[GNU Lesser General Public License|http://www.gnu.org/licenses/lgpl.txt]]|
|''~CoreVersion:''|2.4.1|
|''Browser:''|Firefox 1.5+; InternetExplorer 6.0; Safari; Opera; Chrome; etc.|
!Syntax:
{{{
<code options>
codes
</code>
}}}
!Examples:
{{{
<code java>
public class HelloWorld {
public static void main(String args[]) {
System.out.println("HelloWorld!");
}
}
</code>
}}}
!Revision History:
|''Version''|''Date''|''Note''|
|1.1.2|Oct 15, 2008|Optimize Highlight|
|1.0.0|Oct 13, 2008|Initial release|
!Code section:
***/
//{{{
var dp={sh:{Toolbar:{},Utils:{},RegexLib:{},Brushes:{},Strings:{AboutDialog:"<html><head><title>About...</title></head><body class=\"dp-about\"><table cellspacing=\"0\"><tr><td class=\"copy\"><p class=\"title\">dp.SyntaxHighlighter</div><div class=\"para\">Version: {V}</p><p><a href=\"http://www.dreamprojections.com/syntaxhighlighter/?ref=about\" target=\"_blank\">http://www.dreamprojections.com/syntaxhighlighter</a></p>©2004-2007 Alex Gorbatchev.</td></tr><tr><td class=\"footer\"><input type=\"button\" class=\"close\" value=\"OK\" onClick=\"window.close()\"/></td></tr></table></body></html>"},ClipboardSwf:null,Version:"1.5.1"}};dp.SyntaxHighlighter=dp.sh;dp.sh.Toolbar.Commands={ExpandSource:{label:"+ expand source",check:function($){return $.collapse},func:function($,_){$.parentNode.removeChild($);_.div.className=_.div.className.replace("collapsed","")}},ViewSource:{label:"view plain",func:function($,_){var A=dp.sh.Utils.FixForBlogger(_.originalCode).replace(/</g,"<"),B=window.open("","_blank","width=750, height=400, location=0, resizable=1, menubar=0, scrollbars=0");B.document.write("<textarea style=\"width:99%;height:99%\">"+A+"</textarea>");B.document.close()}},CopyToClipboard:{label:"copy to clipboard",check:function(){return window.clipboardData!=null||dp.sh.ClipboardSwf!=null},func:function($,A){var B=dp.sh.Utils.FixForBlogger(A.originalCode).replace(/</g,"<").replace(/>/g,">").replace(/&/g,"&");if(window.clipboardData)window.clipboardData.setData("text",B);else if(dp.sh.ClipboardSwf!=null){var _=A.flashCopier;if(_==null){_=document.createElement("div");A.flashCopier=_;A.div.appendChild(_)}_.innerHTML="<embed src=\""+dp.sh.ClipboardSwf+"\" FlashVars=\"clipboard="+encodeURIComponent(B)+"\" width=\"0\" height=\"0\" type=\"application/x-shockwave-flash\"></embed>"}displayMessage("The code is in your clipboard now")}},PrintSource:{label:"print",func:function($,B){var _=document.createElement("IFRAME"),A=null;_.style.cssText="position:absolute;width:0px;height:0px;left:-500px;top:-500px;";document.body.appendChild(_);A=_.contentWindow.document;dp.sh.Utils.CopyStyles(A,window.document);A.write("<div class=\""+B.div.className.replace("collapsed","")+" printing\">"+B.div.innerHTML+"</div>");A.close();_.contentWindow.focus();_.contentWindow.print();alert("Printing...");document.body.removeChild(_)}},About:{label:"?",func:function(_){var A=window.open("","_blank","dialog,width=300,height=150,scrollbars=0"),$=A.document;dp.sh.Utils.CopyStyles($,window.document);$.write(dp.sh.Strings.AboutDialog.replace("{V}",dp.sh.Version));$.close();A.focus()}}};dp.sh.Toolbar.Create=function(B){var A=document.createElement("DIV");A.className="tools";for(var _ in dp.sh.Toolbar.Commands){var $=dp.sh.Toolbar.Commands[_];if($.check!=null&&!$.check(B))continue;A.innerHTML+="<a href=\"#\" onclick=\"dp.sh.Toolbar.Command('"+_+"',this);return false;\">"+$.label+"</a>"}return A};dp.sh.Toolbar.Command=function(_,$){var A=$;while(A!=null&&A.className.indexOf("dp-highlighter")==-1)A=A.parentNode;if(A!=null)dp.sh.Toolbar.Commands[_].func($,A.highlighter)};dp.sh.Utils.CopyStyles=function(A,_){var $=_.getElementsByTagName("link");for(var B=0;B<$.length;B++)if($[B].rel.toLowerCase()=="stylesheet")A.write("<link type=\"text/css\" rel=\"stylesheet\" href=\""+$[B].href+"\"></link>")};dp.sh.Utils.FixForBlogger=function($){return(dp.sh.isBloggerMode==true)?$.replace(/<br\s*\/?>|<br\s*\/?>/gi,"\n"):$};dp.sh.RegexLib={MultiLineCComments:new RegExp("/\\*[\\s\\S]*?\\*/","gm"),SingleLineCComments:new RegExp("//.*$","gm"),SingleLinePerlComments:new RegExp("#.*$","gm"),DoubleQuotedString:new RegExp("\"(?:\\.|(\\\\\\\")|[^\\\"\"\\n])*\"","g"),SingleQuotedString:new RegExp("'(?:\\.|(\\\\\\')|[^\\''\\n])*'","g")};dp.sh.Match=function(_,$,A){this.value=_;this.index=$;this.length=_.length;this.css=A};dp.sh.Highlighter=function(){this.noGutter=false;this.addControls=true;this.collapse=false;this.tabsToSpaces=true;this.wrapColumn=80;this.showColumns=true};dp.sh.Highlighter.SortCallback=function($,_){if($.index<_.index)return-1;else if($.index>_.index)return 1;else if($.length<_.length)return-1;else if($.length>_.length)return 1;return 0};dp.sh.Highlighter.prototype.CreateElement=function(_){var $=document.createElement(_);$.highlighter=this;return $};dp.sh.Highlighter.prototype.GetMatches=function(_,B){var $=0,A=null;while((A=_.exec(this.code))!=null)this.matches[this.matches.length]=new dp.sh.Match(A[0],A.index,B)};dp.sh.Highlighter.prototype.AddBit=function($,A){if($==null||$.length==0)return;var C=this.CreateElement("SPAN");$=$.replace(/ /g," ");$=$.replace(/</g,"<");$=$.replace(/\n/gm," <br>");if(A!=null){if((/br/gi).test($)){var _=$.split(" <br>");for(var B=0;B<_.length;B++){C=this.CreateElement("SPAN");C.className=A;C.innerHTML=_[B];this.div.appendChild(C);if(B+1<_.length)this.div.appendChild(this.CreateElement("BR"))}}else{C.className=A;C.innerHTML=$;this.div.appendChild(C)}}else{C.innerHTML=$;this.div.appendChild(C)}};dp.sh.Highlighter.prototype.IsInside=function(_){if(_==null||_.length==0)return false;for(var A=0;A<this.matches.length;A++){var $=this.matches[A];if($==null)continue;if((_.index>$.index)&&(_.index<$.index+$.length))return true}return false};dp.sh.Highlighter.prototype.ProcessRegexList=function(){for(var $=0;$<this.regexList.length;$++)this.GetMatches(this.regexList[$].regex,this.regexList[$].css)};dp.sh.Highlighter.prototype.ProcessSmartTabs=function(E){var B=E.split("\n"),$="",D=4,A="\t";function _(A,E,_){var B=A.substr(0,E),C=A.substr(E+1,A.length),$="";for(var D=0;D<_;D++)$+=" ";return B+$+C}function C(B,C){if(B.indexOf(A)==-1)return B;var D=0;while((D=B.indexOf(A))!=-1){var $=C-D%C;B=_(B,D,$)}return B}for(var F=0;F<B.length;F++)$+=C(B[F],D)+"\n";return $};dp.sh.Highlighter.prototype.SwitchToList=function(){var C=this.div.innerHTML.replace(/<(br)\/?>/gi,"\n"),B=C.split("\n");if(this.addControls==true)this.bar.appendChild(dp.sh.Toolbar.Create(this));if(this.showColumns){var A=this.CreateElement("div"),_=this.CreateElement("div"),E=10,G=1;while(G<=150)if(G%E==0){A.innerHTML+=G;G+=(G+"").length}else{A.innerHTML+="·";G++}_.className="columns";_.appendChild(A);this.bar.appendChild(_)}for(var G=0,D=this.firstLine;G<B.length-1;G++,D++){var $=this.CreateElement("LI"),F=this.CreateElement("SPAN");$.className=(G%2==0)?"alt":"";F.innerHTML=B[G]+" ";$.appendChild(F);this.ol.appendChild($)}this.div.innerHTML=""};dp.sh.Highlighter.prototype.Highlight=function(C){function A($){return $.replace(/^\s*(.*?)[\s\n]*$/g,"$1")}function $($){return $.replace(/\n*$/,"").replace(/^\n*/,"")}function _(B){var E=dp.sh.Utils.FixForBlogger(B).split("\n"),C=new Array(),D=new RegExp("^\\s*","g"),$=1000;for(var F=0;F<E.length&&$>0;F++){if(A(E[F]).length==0)continue;var _=D.exec(E[F]);if(_!=null&&_.length>0)$=Math.min(_[0].length,$)}if($>0)for(F=0;F<E.length;F++)E[F]=E[F].substr($);return E.join("\n")}function D(A,$,_){return A.substr($,_-$)}var F=0;if(C==null)C="";this.originalCode=C;this.code=$(_(C));this.div=this.CreateElement("DIV");this.bar=this.CreateElement("DIV");this.ol=this.CreateElement("OL");this.matches=new Array();this.div.className="dp-highlighter";this.div.highlighter=this;this.bar.className="bar";this.ol.start=this.firstLine;if(this.CssClass!=null)this.ol.className=this.CssClass;if(this.collapse)this.div.className+=" collapsed";if(this.noGutter)this.div.className+=" nogutter";if(this.tabsToSpaces==true)this.code=this.ProcessSmartTabs(this.code);this.ProcessRegexList();if(this.matches.length==0){this.AddBit(this.code,null);this.SwitchToList();this.div.appendChild(this.bar);this.div.appendChild(this.ol);return}this.matches=this.matches.sort(dp.sh.Highlighter.SortCallback);for(var E=0;E<this.matches.length;E++)if(this.IsInside(this.matches[E]))this.matches[E]=null;for(E=0;E<this.matches.length;E++){var B=this.matches[E];if(B==null||B.length==0)continue;this.AddBit(D(this.code,F,B.index),null);this.AddBit(B.value,B.css);F=B.index+B.length}this.AddBit(this.code.substr(F),null);this.SwitchToList();this.div.appendChild(this.bar);this.div.appendChild(this.ol)};dp.sh.Highlighter.prototype.GetKeywords=function($){return"\\b"+$.replace(/ /g,"\\b|\\b")+"\\b"};dp.sh.BloggerMode=function(){dp.sh.isBloggerMode=true};dp.sh.HighlightAll=function(N,B,K,I,O,E){function A(){var $=arguments;for(var _=0;_<$.length;_++){if($[_]==null)continue;if(typeof($[_])=="string"&&$[_]!="")return $[_]+"";if(typeof($[_])=="object"&&$[_].value!="")return $[_].value+""}return null}function J($,_){for(var A=0;A<_.length;A++)if(_[A]==$)return true;return false}function L(A,B,C){var _=new RegExp("^"+A+"\\[(\\w+)\\]$","gi"),$=null;for(var D=0;D<B.length;D++)if(($=_.exec(B[D]))!=null)return $[1];return C}function C(B,A,_){var $=document.getElementsByTagName(_);for(var C=0;C<$.length;C++)if($[C].getAttribute("name")==A)B.push($[C])}var T=[],P=null,M={},$="innerHTML";C(T,N,"pre");C(T,N,"textarea");if(T.length==0)return;for(var R in dp.sh.Brushes){var F=dp.sh.Brushes[R].Aliases;if(F==null)continue;for(var G=0;G<F.length;G++)M[F[G]]=R}for(G=0;G<T.length;G++){var _=T[G],U=A(_.attributes["class"],_.className,_.attributes["language"],_.language),Q="";if(U==null)continue;U=U.split(":");Q=U[0].toLowerCase();if(M[Q]==null)continue;P=new dp.sh.Brushes[M[Q]]();_.style.display="none";P.noGutter=(B==null)?J("nogutter",U):!B;P.addControls=(K==null)?!J("nocontrols",U):K;P.collapse=(I==null)?J("collapse",U):I;P.showColumns=(E==null)?J("showcolumns",U):E;var D=document.getElementsByTagName("head")[0];if(P.Style&&D){var S=document.createElement("style");S.setAttribute("type","text/css");if(S.styleSheet)S.styleSheet.cssText=P.Style;else{var H=document.createTextNode(P.Style);S.appendChild(H)}D.appendChild(S)}P.firstLine=(O==null)?parseInt(L("firstline",U,1)):O;P.Highlight(_[$]);P.source=_;_.parentNode.insertBefore(P.div,_)}};version.extensions.SyntaxHighLighterPlugin={major:1,minor:1,revision:3,date:new Date(2008,10,24)};dp.sh.ClipboardSwf="clipboard.swf";dp.sh.Highlight=function(_,Q,B,J,H,M,D){function A(){var $=arguments;for(var _=0;_<$.length;_++){if($[_]==null)continue;if(typeof($[_])=="string"&&$[_]!="")return $[_]+"";if(typeof($[_])=="object"&&$[_].value!="")return $[_].value+""}return null}function I($,_){for(var A=0;A<_.length;A++)if(_[A]==$)return true;return false}function K(A,B,C){var _=new RegExp("^"+A+"\\[(\\w+)\\]$","gi"),$=null;for(var D=0;D<B.length;D++)if(($=_.exec(B[D]))!=null)return $[1];return C}var N=null,$="innerHTML";if(this.registered==undefined){var L={};for(var O in dp.sh.Brushes){var E=dp.sh.Brushes[O].Aliases;if(E==null)continue;for(var F=0;F<E.length;F++)L[E[F]]=O}this.registered=L}Q=Q.split(":");language=Q[0].toLowerCase();if(this.registered[language]==null)return;N=new dp.sh.Brushes[this.registered[language]]();_.style.display="none";N.noGutter=(B==null)?I("nogutter",Q):!B;N.addControls=(J==null)?!I("nocontrols",Q):J;N.collapse=(H==null)?I("collapse",Q):H;N.showColumns=(D==null)?I("showcolumns",Q):D;var C=document.getElementsByTagName("head")[0],P=document.getElementById(N.CssClass);if(N.Style&&C&&!P){P=document.createElement("style");P.setAttribute("id",N.CssClass);P.setAttribute("type","text/css");if(P.styleSheet)P.styleSheet.cssText=N.Style;else{var G=document.createTextNode(N.Style);P.appendChild(G)}C.appendChild(P)}N.firstLine=(M==null)?parseInt(K("firstline",Q,1)):M;N.Highlight(_[$]);N.source=_;_.parentNode.insertBefore(N.div,_)};config.formatters.push({name:"SyntaxHighlighter",match:"^<code[\\s]+[^>]+>\\n",element:"pre",handler:function(_){this.lookaheadRegExp=/<code[\s]+([^>]+)>\n((?:^[^\n]*\n)+?)(^<\/code>$\n?)/mg;this.lookaheadRegExp.lastIndex=_.matchStart;var $=this.lookaheadRegExp.exec(_.source);if($&&$.index==_.matchStart){var C=$[1],B=$[2];if(config.browser.isIE)B=B.replace(/\n/g,"\r");var A=createTiddlyElement(_.output,this.element,null,null,B);dp.sh.Highlight(A,C);_.nextMatch=$.index+$[0].length}}});config.formatterHelpers.enclosedTextHelper=function(_){this.lookaheadRegExp.lastIndex=_.matchStart;var $=this.lookaheadRegExp.exec(_.source);if($&&$.index==_.matchStart){var B=$[1];if(config.browser.isIE)B=B.replace(/\n/g,"\r");var A=createTiddlyElement(_.output,this.element,null,null,B);switch(_.matchText){case"/*{{{*/\n":dp.sh.Highlight(A,"css");break;case"//{{{\n":dp.sh.Highlight(A,"js");break;case"<!--{{{-->\n":dp.sh.Highlight(A,"xml");break}_.nextMatch=$.index+$[0].length}};dp.sh.Brushes.AS3=function(){var _="class interface package",$="Array Boolean Date decodeURI decodeURIComponent encodeURI encodeURIComponent escape "+"int isFinite isNaN isXMLName Number Object parseFloat parseInt "+"String trace uint unescape XML XMLList "+"Infinity -Infinity NaN undefined "+"as delete instanceof is new typeof "+"break case catch continue default do each else finally for if in "+"label return super switch throw try while with "+"dynamic final internal native override private protected public static "+"...rest const extends function get implements namespace set "+"import include use "+"AS3 flash_proxy object_proxy "+"false null this true "+"void Null";this.regexList=[{regex:dp.sh.RegexLib.SingleLineCComments,css:"comment"},{regex:dp.sh.RegexLib.MultiLineCComments,css:"blockcomment"},{regex:dp.sh.RegexLib.DoubleQuotedString,css:"string"},{regex:dp.sh.RegexLib.SingleQuotedString,css:"string"},{regex:new RegExp("^\\s*#.*","gm"),css:"preprocessor"},{regex:new RegExp(this.GetKeywords(_),"gm"),css:"definition"},{regex:new RegExp(this.GetKeywords($),"gm"),css:"keyword"},{regex:new RegExp("var","gm"),css:"variable"}];this.CssClass="dp-as";this.Style=".dp-as .comment { color: #009900; font-style: italic; }"+".dp-as .blockcomment { color: #3f5fbf; }"+".dp-as .string { color: #990000; }"+".dp-as .preprocessor { color: #0033ff; }"+".dp-as .definition { color: #9900cc; font-weight: bold; }"+".dp-as .keyword { color: #0033ff; }"+".dp-as .variable { color: #6699cc; font-weight: bold; }"};dp.sh.Brushes.AS3.prototype=new dp.sh.Highlighter();dp.sh.Brushes.AS3.Aliases=["as","actionscript","ActionScript","as3","AS3"];dp.sh.Brushes.Bash=function(){var _="alias bg bind break builtin cd command compgen complete continue "+"declare dirs disown echo enable eval exec exit export fc fg "+"getopts hash help history jobs kill let local logout popd printf "+"pushd pwd read readonly return set shift shopt source "+"suspend test times trap type typeset ulimit umask unalias unset wait",$="case do done elif else esac fi for function if in select then "+"time until while";this.regexList=[{regex:dp.sh.RegexLib.SingleLinePerlComments,css:"comment"},{regex:dp.sh.RegexLib.DoubleQuotedString,css:"string"},{regex:dp.sh.RegexLib.SingleQuotedString,css:"string"},{regex:new RegExp("[()[\\]{}]","g"),css:"delim"},{regex:new RegExp("\\$\\w+","g"),css:"vars"},{regex:new RegExp("\\w+=","g"),css:"vars"},{regex:new RegExp("\\s-\\w+","g"),css:"flag"},{regex:new RegExp(this.GetKeywords(_),"gm"),css:"builtin"},{regex:new RegExp(this.GetKeywords($),"gm"),css:"keyword"}];this.CssClass="dp-bash";this.Style=".dp-bash .builtin {color: maroon; font-weight: bold;}"+".dp-bash .comment {color: gray;}"+".dp-bash .delim {font-weight: bold;}"+".dp-bash .flag {color: green;}"+".dp-bash .string {color: red;}"+".dp-bash .vars {color: blue;}"};dp.sh.Brushes.Bash.prototype=new dp.sh.Highlighter();dp.sh.Brushes.Bash.Aliases=["bash","sh"];dp.sh.Brushes.Batch=function(){var _="APPEND ATTRIB CD CHDIR CHKDSK CHOICE CLS COPY DEL ERASE DELTREE "+"DIR EXIT FC COMP FDISK FIND FORMAT FSUTIL HELP JOIN "+"LABEL LOADFIX MK MKDIR MEM MEMMAKER MORE MOVE MSD PCPARK "+"PRINT RD RMDIR REN SCANDISK SHARE SORT SUBST SYS "+"TIME DATE TREE TRUENAME TYPE UNDELETE VER XCOPY",$="DO ELSE FOR IN CALL CHOICE GOTO SHIFT PAUSE ERRORLEVEL "+"IF NOT EXIST LFNFOR START SETLOCAL ENDLOCAL ECHO SET";this.regexList=[{regex:new RegExp("REM.*$","gm"),css:"comment"},{regex:new RegExp("::.*$","gm"),css:"comment"},{regex:dp.sh.RegexLib.DoubleQuotedString,css:"string"},{regex:dp.sh.RegexLib.SingleQuotedString,css:"string"},{regex:new RegExp("[()[\\]{}]","g"),css:"delim"},{regex:new RegExp("%\\w+%","g"),css:"vars"},{regex:new RegExp("%%\\w+","g"),css:"vars"},{regex:new RegExp("\\w+=","g"),css:"vars"},{regex:new RegExp("@\\w+","g"),css:"keyword"},{regex:new RegExp(":\\w+","g"),css:"keyword"},{regex:new RegExp("\\s/\\w+","g"),css:"flag"},{regex:new RegExp(this.GetKeywords(_),"gm"),css:"builtin"},{regex:new RegExp(this.GetKeywords($),"gm"),css:"keyword"}];this.CssClass="dp-batch";this.Style=".dp-batch .builtin {color: maroon; font-weight: bold;}"+".dp-batch .comment {color: gray;}"+".dp-batch .delim {font-weight: bold;}"+".dp-batch .flag {color: green;}"+".dp-batch .string {color: red;}"+".dp-batch .vars {color: blue;font-weight: bold;}"};dp.sh.Brushes.Batch.prototype=new dp.sh.Highlighter();dp.sh.Brushes.Batch.Aliases=["batch","dos"];dp.sh.Brushes.ColdFusion=function(){this.CssClass="dp-coldfusion";this.Style=".dp-coldfusion { font: 13px \"Courier New\", Courier, monospace; }"+".dp-coldfusion .tag, .dp-coldfusion .tag-name { color: #990033; }"+".dp-coldfusion .attribute { color: #990033; }"+".dp-coldfusion .attribute-value { color: #0000FF; }"+".dp-coldfusion .cfcomments { background-color: #FFFF99; color: #000000; }"+".dp-coldfusion .cfscriptcomments { color: #999999; }"+".dp-coldfusion .keywords { color: #0000FF; }"+".dp-coldfusion .mgkeywords { color: #CC9900; }"+".dp-coldfusion .numbers { color: #ff0000; }"+".dp-coldfusion .strings { color: green; }";this.mgKeywords="setvalue getvalue addresult viewcollection viewstate";this.keywords="var eq neq gt gte lt lte not and or true false "+"abs acos addsoaprequestheader addsoapresponseheader "+"arrayappend arrayavg arrayclear arraydeleteat arrayinsertat "+"arrayisempty arraylen arraymax arraymin arraynew "+"arrayprepend arrayresize arrayset arraysort arraysum "+"arrayswap arraytolist asc asin atn binarydecode binaryencode "+"bitand bitmaskclear bitmaskread bitmaskset bitnot bitor bitshln "+"bitshrn bitxor ceiling charsetdecode charsetencode chr cjustify "+"compare comparenocase cos createdate createdatetime createobject "+"createobject createobject createobject createobject createodbcdate "+"createodbcdatetime createodbctime createtime createtimespan "+"createuuid dateadd datecompare dateconvert datediff dateformat "+"datepart day dayofweek dayofweekasstring dayofyear daysinmonth "+"daysinyear de decimalformat decrementvalue decrypt decryptbinary "+"deleteclientvariable directoryexists dollarformat duplicate encrypt "+"encryptbinary evaluate exp expandpath fileexists find findnocase "+"findoneof firstdayofmonth fix formatbasen generatesecretkey "+"getauthuser getbasetagdata getbasetaglist getbasetemplatepath "+"getclientvariableslist getcontextroot getcurrenttemplatepath "+"getdirectoryfrompath getencoding getexception getfilefrompath "+"getfunctionlist getgatewayhelper gethttprequestdata gethttptimestring "+"getk2serverdoccount getk2serverdoccountlimit getlocale "+"getlocaledisplayname getlocalhostip getmetadata getmetricdata "+"getpagecontext getprofilesections getprofilestring getsoaprequest "+"getsoaprequestheader getsoapresponse getsoapresponseheader "+"gettempdirectory gettempfile gettemplatepath gettickcount "+"gettimezoneinfo gettoken hash hour htmlcodeformat htmleditformat "+"iif incrementvalue inputbasen insert int isarray isbinary isboolean "+"iscustomfunction isdate isdebugmode isdefined isk2serverabroker "+"isk2serverdoccountexceeded isk2serveronline isleapyear islocalhost "+"isnumeric isnumericdate isobject isquery issimplevalue issoaprequest "+"isstruct isuserinrole isvalid isvalid isvalid iswddx isxml "+"isxmlattribute isxmldoc isxmlelem isxmlnode isxmlroot javacast "+"jsstringformat lcase left len listappend listchangedelims listcontains "+"listcontainsnocase listdeleteat listfind listfindnocase listfirst "+"listgetat listinsertat listlast listlen listprepend listqualify "+"listrest listsetat listsort listtoarray listvaluecount "+"listvaluecountnocase ljustify log log10 lscurrencyformat lsdateformat "+"lseurocurrencyformat lsiscurrency lsisdate lsisnumeric lsnumberformat "+"lsparsecurrency lsparsedatetime lsparseeurocurrency lsparsenumber "+"lstimeformat ltrim max mid min minute month monthasstring now "+"numberformat paragraphformat parameterexists parsedatetime pi "+"preservesinglequotes quarter queryaddcolumn queryaddrow querynew "+"querysetcell quotedvaluelist rand randomize randrange refind "+"refindnocase releasecomobject removechars repeatstring replace "+"replacelist replacenocase rereplace rereplacenocase reverse right "+"rjustify round rtrim second sendgatewaymessage setencoding "+"setlocale setprofilestring setvariable sgn sin spanexcluding "+"spanincluding sqr stripcr structappend structclear structcopy "+"structcount structdelete structfind structfindkey structfindvalue "+"structget structinsert structisempty structkeyarray structkeyexists "+"structkeylist structnew structsort structupdate tan timeformat "+"tobase64 tobinary toscript tostring trim ucase urldecode urlencodedformat "+"urlsessionformat val valuelist week wrap writeoutput xmlchildpos "+"xmlelemnew xmlformat xmlgetnodetype xmlnew xmlparse xmlsearch xmltransform "+"xmlvalidate year yesnoformat";this.stringMatches=new Array();this.attributeMatches=new Array()};dp.sh.Brushes.ColdFusion.prototype=new dp.sh.Highlighter();dp.sh.Brushes.ColdFusion.Aliases=["coldfusion","cf"];dp.sh.Brushes.ColdFusion.prototype.ProcessRegexList=function(){function B(_,$){_[_.length]=$}function A(A,$){for(var _=0;_<A.length;_++)if(A[_]==$)return _;return-1}var _=null,$=null;this.GetMatches(new RegExp("\\b(\\d+)","gm"),"numbers");this.GetMatches(new RegExp(this.GetKeywords(this.mgKeywords),"igm"),"mgkeywords");this.GetMatches(dp.sh.RegexLib.SingleLineCComments,"cfscriptcomments");this.GetMatches(dp.sh.RegexLib.MultiLineCComments,"cfscriptcomments");this.GetMatches(new RegExp("(<|<)!---[\\s\\S]*?---(>|>)","gm"),"cfcomments");$=new RegExp("(cfset\\s*)?([:\\w-.]+)\\s*=\\s*(\".*?\"|'.*?')*","gm");while((_=$.exec(this.code))!=null){if(_[1]!=undefined&&_[1]!="")continue;if(_[3]!=undefined&&_[3]!=""&&_[3]!="\"\""&&_[3]!="''"){B(this.matches,new dp.sh.Match(_[2],_.index,"attribute"));B(this.matches,new dp.sh.Match(_[3],_.index+_[0].indexOf(_[3]),"attribute-value"));B(this.stringMatches,_[3]);B(this.attributeMatches,_[2])}}this.GetMatches(new RegExp("(<|<)/*\\?*(?!\\!)|/*\\?*(>|>)","gm"),"tag");$=new RegExp("(?:<|<)/*\\?*\\s*([:\\w-.]+)","gm");while((_=$.exec(this.code))!=null)B(this.matches,new dp.sh.Match(_[1],_.index+_[0].indexOf(_[1]),"tag-name"));$=new RegExp(this.GetKeywords(this.keywords),"igm");while((_=$.exec(this.code))!=null)if(A(this.attributeMatches,_[0])==-1)B(this.matches,new dp.sh.Match(_[0],_.index,"keywords"));$=new RegExp("cfset\\s*.*(\".*?\"|'.*?')","gm");while((_=$.exec(this.code))!=null)if(_[1]!=undefined&&_[1]!=""){B(this.matches,new dp.sh.Match(_[1],_.index+_[0].indexOf(_[1]),"strings"));B(this.stringMatches,_[1])}while((_=dp.sh.RegexLib.DoubleQuotedString.exec(this.code))!=null)if(A(this.stringMatches,_[0])==-1)B(this.matches,new dp.sh.Match(_[0],_.index,"strings"));while((_=dp.sh.RegexLib.SingleQuotedString.exec(this.code))!=null)if(A(this.stringMatches,_[0])==-1)B(this.matches,new dp.sh.Match(_[0],_.index,"strings"))};dp.sh.Brushes.Cpp=function(){var _="ATOM BOOL BOOLEAN BYTE CHAR COLORREF DWORD DWORDLONG DWORD_PTR "+"DWORD32 DWORD64 FLOAT HACCEL HALF_PTR HANDLE HBITMAP HBRUSH "+"HCOLORSPACE HCONV HCONVLIST HCURSOR HDC HDDEDATA HDESK HDROP HDWP "+"HENHMETAFILE HFILE HFONT HGDIOBJ HGLOBAL HHOOK HICON HINSTANCE HKEY "+"HKL HLOCAL HMENU HMETAFILE HMODULE HMONITOR HPALETTE HPEN HRESULT "+"HRGN HRSRC HSZ HWINSTA HWND INT INT_PTR INT32 INT64 LANGID LCID LCTYPE "+"LGRPID LONG LONGLONG LONG_PTR LONG32 LONG64 LPARAM LPBOOL LPBYTE LPCOLORREF "+"LPCSTR LPCTSTR LPCVOID LPCWSTR LPDWORD LPHANDLE LPINT LPLONG LPSTR LPTSTR "+"LPVOID LPWORD LPWSTR LRESULT PBOOL PBOOLEAN PBYTE PCHAR PCSTR PCTSTR PCWSTR "+"PDWORDLONG PDWORD_PTR PDWORD32 PDWORD64 PFLOAT PHALF_PTR PHANDLE PHKEY PINT "+"PINT_PTR PINT32 PINT64 PLCID PLONG PLONGLONG PLONG_PTR PLONG32 PLONG64 POINTER_32 "+"POINTER_64 PSHORT PSIZE_T PSSIZE_T PSTR PTBYTE PTCHAR PTSTR PUCHAR PUHALF_PTR "+"PUINT PUINT_PTR PUINT32 PUINT64 PULONG PULONGLONG PULONG_PTR PULONG32 PULONG64 "+"PUSHORT PVOID PWCHAR PWORD PWSTR SC_HANDLE SC_LOCK SERVICE_STATUS_HANDLE SHORT "+"SIZE_T SSIZE_T TBYTE TCHAR UCHAR UHALF_PTR UINT UINT_PTR UINT32 UINT64 ULONG "+"ULONGLONG ULONG_PTR ULONG32 ULONG64 USHORT USN VOID WCHAR WORD WPARAM WPARAM WPARAM "+"char bool short int __int32 __int64 __int8 __int16 long float double __wchar_t "+"clock_t _complex _dev_t _diskfree_t div_t ldiv_t _exception _EXCEPTION_POINTERS "+"FILE _finddata_t _finddatai64_t _wfinddata_t _wfinddatai64_t __finddata64_t "+"__wfinddata64_t _FPIEEE_RECORD fpos_t _HEAPINFO _HFILE lconv intptr_t "+"jmp_buf mbstate_t _off_t _onexit_t _PNH ptrdiff_t _purecall_handler "+"sig_atomic_t size_t _stat __stat64 _stati64 terminate_function "+"time_t __time64_t _timeb __timeb64 tm uintptr_t _utimbuf "+"va_list wchar_t wctrans_t wctype_t wint_t signed",$="break case catch class const __finally __exception __try "+"const_cast continue private public protected __declspec "+"default delete deprecated dllexport dllimport do dynamic_cast "+"else enum explicit extern if for friend goto inline "+"mutable naked namespace new noinline noreturn nothrow "+"register reinterpret_cast return selectany "+"sizeof static static_cast struct switch template this "+"thread throw true false try typedef typeid typename union "+"using uuid virtual void volatile whcar_t while";this.regexList=[{regex:dp.sh.RegexLib.SingleLineCComments,css:"comment"},{regex:dp.sh.RegexLib.MultiLineCComments,css:"comment"},{regex:dp.sh.RegexLib.DoubleQuotedString,css:"string"},{regex:dp.sh.RegexLib.SingleQuotedString,css:"string"},{regex:new RegExp("^ *#.*","gm"),css:"preprocessor"},{regex:new RegExp(this.GetKeywords(_),"gm"),css:"datatypes"},{regex:new RegExp(this.GetKeywords($),"gm"),css:"keyword"}];this.CssClass="dp-cpp";this.Style=".dp-cpp .datatypes { color: #2E8B57; font-weight: bold; }"};dp.sh.Brushes.Cpp.prototype=new dp.sh.Highlighter();dp.sh.Brushes.Cpp.Aliases=["cpp","c","c++"];dp.sh.Brushes.CSharp=function(){var $="abstract as base bool break byte case catch char checked class const "+"continue decimal default delegate do double else enum event explicit "+"extern false finally fixed float for foreach get goto if implicit in int "+"interface internal is lock long namespace new null object operator out "+"override params private protected public readonly ref return sbyte sealed set "+"short sizeof stackalloc static string struct switch this throw true try "+"typeof uint ulong unchecked unsafe ushort using virtual void while";this.regexList=[{regex:dp.sh.RegexLib.SingleLineCComments,css:"comment"},{regex:dp.sh.RegexLib.MultiLineCComments,css:"comment"},{regex:dp.sh.RegexLib.DoubleQuotedString,css:"string"},{regex:dp.sh.RegexLib.SingleQuotedString,css:"string"},{regex:new RegExp("^\\s*#.*","gm"),css:"preprocessor"},{regex:new RegExp(this.GetKeywords($),"gm"),css:"keyword"}];this.CssClass="dp-c";this.Style=".dp-c .vars { color: #d00; }"};dp.sh.Brushes.CSharp.prototype=new dp.sh.Highlighter();dp.sh.Brushes.CSharp.Aliases=["c#","c-sharp","csharp"];dp.sh.Brushes.CSS=function(){var _="ascent azimuth background-attachment background-color background-image background-position "+"background-repeat background baseline bbox border-collapse border-color border-spacing border-style border-top "+"border-right border-bottom border-left border-top-color border-right-color border-bottom-color border-left-color "+"border-top-style border-right-style border-bottom-style border-left-style border-top-width border-right-width "+"border-bottom-width border-left-width border-width border cap-height caption-side centerline clear clip color "+"content counter-increment counter-reset cue-after cue-before cue cursor definition-src descent direction display "+"elevation empty-cells float font-size-adjust font-family font-size font-stretch font-style font-variant font-weight font "+"height letter-spacing line-height list-style-image list-style-position list-style-type list-style margin-top "+"margin-right margin-bottom margin-left margin marker-offset marks mathline max-height max-width min-height min-width orphans "+"outline-color outline-style outline-width outline overflow padding-top padding-right padding-bottom padding-left padding page "+"page-break-after page-break-before page-break-inside pause pause-after pause-before pitch pitch-range play-during position "+"quotes richness size slope src speak-header speak-numeral speak-punctuation speak speech-rate stemh stemv stress "+"table-layout text-align text-decoration text-indent text-shadow text-transform unicode-bidi unicode-range units-per-em "+"vertical-align visibility voice-family volume white-space widows width widths word-spacing x-height z-index",$="above absolute all always aqua armenian attr aural auto avoid baseline behind below bidi-override black blink block blue bold bolder "+"both bottom braille capitalize caption center center-left center-right circle close-quote code collapse compact condensed "+"continuous counter counters crop cross crosshair cursive dashed decimal decimal-leading-zero default digits disc dotted double "+"embed embossed e-resize expanded extra-condensed extra-expanded fantasy far-left far-right fast faster fixed format fuchsia "+"gray green groove handheld hebrew help hidden hide high higher icon inline-table inline inset inside invert italic "+"justify landscape large larger left-side left leftwards level lighter lime line-through list-item local loud lower-alpha "+"lowercase lower-greek lower-latin lower-roman lower low ltr marker maroon medium message-box middle mix move narrower "+"navy ne-resize no-close-quote none no-open-quote no-repeat normal nowrap n-resize nw-resize oblique olive once open-quote outset "+"outside overline pointer portrait pre print projection purple red relative repeat repeat-x repeat-y rgb ridge right right-side "+"rightwards rtl run-in screen scroll semi-condensed semi-expanded separate se-resize show silent silver slower slow "+"small small-caps small-caption smaller soft solid speech spell-out square s-resize static status-bar sub super sw-resize "+"table-caption table-cell table-column table-column-group table-footer-group table-header-group table-row table-row-group teal "+"text-bottom text-top thick thin top transparent tty tv ultra-condensed ultra-expanded underline upper-alpha uppercase upper-latin "+"upper-roman url visible wait white wider w-resize x-fast x-high x-large x-loud x-low x-slow x-small x-soft xx-large xx-small yellow",A="[mM]onospace [tT]ahoma [vV]erdana [aA]rial [hH]elvetica [sS]ans-serif [sS]erif";this.regexList=[{regex:dp.sh.RegexLib.MultiLineCComments,css:"comment"},{regex:dp.sh.RegexLib.DoubleQuotedString,css:"string"},{regex:dp.sh.RegexLib.SingleQuotedString,css:"string"},{regex:new RegExp("\\#[a-zA-Z0-9]{3,6}","g"),css:"value"},{regex:new RegExp("(-?\\d+)(.\\d+)?(px|em|pt|:|%|)","g"),css:"value"},{regex:new RegExp("!important","g"),css:"important"},{regex:new RegExp(this.GetKeywordsCSS(_),"gm"),css:"keyword"},{regex:new RegExp(this.GetValuesCSS($),"g"),css:"value"},{regex:new RegExp(this.GetValuesCSS(A),"g"),css:"value"}];this.CssClass="dp-css";this.Style=".dp-css .value { color: black; }"+".dp-css .important { color: red; }"};dp.sh.Highlighter.prototype.GetKeywordsCSS=function($){return"\\b([a-z_]|)"+$.replace(/ /g,"(?=:)\\b|\\b([a-z_\\*]|\\*|)")+"(?=:)\\b"};dp.sh.Highlighter.prototype.GetValuesCSS=function($){return"\\b"+$.replace(/ /g,"(?!-)(?!:)\\b|\\b()")+":\\b"};dp.sh.Brushes.CSS.prototype=new dp.sh.Highlighter();dp.sh.Brushes.CSS.Aliases=["css"];dp.sh.Brushes.Delphi=function(){var $="abs addr and ansichar ansistring array as asm begin boolean byte cardinal "+"case char class comp const constructor currency destructor div do double "+"downto else end except exports extended false file finalization finally "+"for function goto if implementation in inherited int64 initialization "+"integer interface is label library longint longword mod nil not object "+"of on or packed pansichar pansistring pchar pcurrency pdatetime pextended "+"pint64 pointer private procedure program property pshortstring pstring "+"pvariant pwidechar pwidestring protected public published raise real real48 "+"record repeat set shl shortint shortstring shr single smallint string then "+"threadvar to true try type unit until uses val var varirnt while widechar "+"widestring with word write writeln xor";this.regexList=[{regex:new RegExp("\\(\\*[\\s\\S]*?\\*\\)","gm"),css:"comment"},{regex:new RegExp("{(?!\\$)[\\s\\S]*?}","gm"),css:"comment"},{regex:dp.sh.RegexLib.SingleLineCComments,css:"comment"},{regex:dp.sh.RegexLib.SingleQuotedString,css:"string"},{regex:new RegExp("\\{\\$[a-zA-Z]+ .+\\}","g"),css:"directive"},{regex:new RegExp("\\b[\\d\\.]+\\b","g"),css:"number"},{regex:new RegExp("\\$[a-zA-Z0-9]+\\b","g"),css:"number"},{regex:new RegExp(this.GetKeywords($),"gm"),css:"keyword"}];this.CssClass="dp-delphi";this.Style=".dp-delphi .number { color: blue; }"+".dp-delphi .directive { color: #008284; }"+".dp-delphi .vars { color: #000; }"};dp.sh.Brushes.Delphi.prototype=new dp.sh.Highlighter();dp.sh.Brushes.Delphi.Aliases=["delphi","pascal"];dp.sh.Brushes.Java=function(){var $="abstract assert boolean break byte case catch char class const "+"continue default do double else enum extends "+"false final finally float for goto if implements import "+"instanceof int interface long native new null "+"package private protected public return "+"short static strictfp super switch synchronized this throw throws true "+"transient try void volatile while";this.regexList=[{regex:dp.sh.RegexLib.SingleLineCComments,css:"comment"},{regex:dp.sh.RegexLib.MultiLineCComments,css:"comment"},{regex:dp.sh.RegexLib.DoubleQuotedString,css:"string"},{regex:dp.sh.RegexLib.SingleQuotedString,css:"string"},{regex:new RegExp("\\b([\\d]+(\\.[\\d]+)?|0x[a-f0-9]+)\\b","gi"),css:"number"},{regex:new RegExp("(?!\\@interface\\b)\\@[\\$\\w]+\\b","g"),css:"annotation"},{regex:new RegExp("\\@interface\\b","g"),css:"keyword"},{regex:new RegExp(this.GetKeywords($),"gm"),css:"keyword"}];this.CssClass="dp-j";this.Style=".dp-j .annotation { color: #646464; }"+".dp-j .number { color: #C00000; }"};dp.sh.Brushes.Java.prototype=new dp.sh.Highlighter();dp.sh.Brushes.Java.Aliases=["java"];dp.sh.Brushes.JScript=function(){var $="abstract boolean break byte case catch char class const continue debugger "+"default delete do double else enum export extends false final finally float "+"for function goto if implements import in instanceof int interface long native "+"new null package private protected public return short static super switch "+"synchronized this throw throws transient true try typeof var void volatile while with";this.regexList=[{regex:dp.sh.RegexLib.SingleLineCComments,css:"comment"},{regex:dp.sh.RegexLib.MultiLineCComments,css:"comment"},{regex:dp.sh.RegexLib.DoubleQuotedString,css:"string"},{regex:dp.sh.RegexLib.SingleQuotedString,css:"string"},{regex:new RegExp("^\\s*#.*","gm"),css:"preprocessor"},{regex:new RegExp(this.GetKeywords($),"gm"),css:"keyword"}];this.CssClass="dp-c"};dp.sh.Brushes.JScript.prototype=new dp.sh.Highlighter();dp.sh.Brushes.JScript.Aliases=["js","jscript","javascript"];dp.sh.Brushes.Lua=function(){var $="break do end else elseif function if local nil not or repeat return and then until while this",_="math\\.\\w+ string\\.\\w+ os\\.\\w+ debug\\.\\w+ io\\.\\w+ error fopen dofile coroutine\\.\\w+ arg getmetatable ipairs loadfile loadlib loadstring longjmp print rawget rawset seek setmetatable assert tonumber tostring";this.regexList=[{regex:new RegExp("--\\[\\[[\\s\\S]*\\]\\]--","gm"),css:"comment"},{regex:new RegExp("--[^\\[]{2}.*$","gm"),css:"comment"},{regex:dp.sh.RegexLib.DoubleQuotedString,css:"string"},{regex:dp.sh.RegexLib.SingleQuotedString,css:"string"},{regex:new RegExp(this.GetKeywords($),"gm"),css:"keyword"},{regex:new RegExp(this.GetKeywords(_),"gm"),css:"func"},];this.CssClass="dp-lua"};dp.sh.Brushes.Lua.prototype=new dp.sh.Highlighter();dp.sh.Brushes.Lua.Aliases=["lua"];dp.sh.Brushes.Mxml=function(){this.CssClass="dp-mxml";this.Style=".dp-mxml .cdata { color: #000000; }"+".dp-mxml .tag { color : #0000ff; }"+".dp-mxml .tag-name { color: #0000ff; }"+".dp-mxml .script { color: green; }"+".dp-mxml .metadata { color: green; }"+".dp-mxml .attribute { color: #000000; }"+".dp-mxml .attribute-value { color: #990000; }"+".dp-mxml .trace { color: #cc6666; }"+".dp-mxml .var { color: #6699cc; }"+".dp-mxml .comment { color: #009900; }"+".dp-mxml .string { color: #990000; }"+".dp-mxml .keyword { color: blue; }"};dp.sh.Brushes.Mxml.prototype=new dp.sh.Highlighter();dp.sh.Brushes.Mxml.Aliases=["mxml"];dp.sh.Brushes.Mxml.prototype.ProcessRegexList=function(){function H(_,$){_[_.length]=$}function B(B,_){var A=0,$=false;for(A=0;A<B.length;A++)if(_.index>B[A].firstIndex&&_.index<B[A].lastIndex)$=true;return $}var $=0,F=null,D=null,A=null,C="",E=new Array(),_="abstract boolean break byte case catch char class const continue debugger "+"default delete do double else enum export extends false final finally float "+"for function goto if implements import in instanceof int interface long native "+"new null package private protected public return short static super switch "+"synchronized this throw throws transient true try typeof var void volatile while with",G=[{regex:dp.sh.RegexLib.SingleLineCComments,css:"comment"},{regex:dp.sh.RegexLib.MultiLineCComments,css:"comment"},{regex:dp.sh.RegexLib.DoubleQuotedString,css:"string"},{regex:dp.sh.RegexLib.SingleQuotedString,css:"string"},{regex:new RegExp("^\\s*#.*","gm"),css:"preprocessor"},{regex:new RegExp(this.GetKeywords("trace"),"gm"),css:"trace"},{regex:new RegExp(this.GetKeywords(_),"gm"),css:"keyword"}];A=new RegExp("<\\!\\[CDATA\\[(.|\\s)*?\\]\\]>","gm");while((F=A.exec(this.code))!=null){C=F[0].substr(0,12);H(this.matches,new dp.sh.Match(C,F.index,"cdata"));C=F[0].substr(12,F[0].length-12-6);for(var I=0;I<G.length;I++)while((D=G[I].regex.exec(C))!=null)H(this.matches,new dp.sh.Match(D[0],F.index+12+D.index,G[I].css));C=F[0].substr(F[0].length-6,6);H(this.matches,new dp.sh.Match(C,F.index+F[0].length-6,"cdata"));E.push({firstIndex:F.index,lastIndex:F.index+F[0].length-1})}this.GetMatches(new RegExp("(<|<)!--\\s*.*?\\s*--(>|>)","gm"),"comments");A=new RegExp("([:\\w-.]+)\\s*=\\s*(\".*?\"|'.*?'|\\w+)*|(\\w+)","gm");while((F=A.exec(this.code))!=null){if(F[1]==null)continue;if(B(E,F))continue;H(this.matches,new dp.sh.Match(F[1],F.index,"attribute"));if(F[2]!=undefined)H(this.matches,new dp.sh.Match(F[2],F.index+F[0].indexOf(F[2]),"attribute-value"))}A=new RegExp("(?:<|<)/*\\?*\\s*([:\\w-.]+)","gm");while((F=A.exec(this.code))!=null){if(B(E,F))continue;C=F[0].substr(4,F[0].length-4);switch(C){case"mx:Script":case"/mx:Script":H(this.matches,new dp.sh.Match(F[0]+">",F.index,"script"));break;case"mx:Metadata":case"/mx:Metadata":H(this.matches,new dp.sh.Match(F[0]+">",F.index,"metadata"));break;default:H(this.matches,new dp.sh.Match(F[0],F.index,"tag-name"));break}}A=new RegExp("\\?>|>|/>","gm");while((F=A.exec(this.code))!=null){if(B(E,F))continue;H(this.matches,new dp.sh.Match(F[0],F.index,"tag"))}};dp.sh.Brushes.Perl=function(){var _="abs accept alarm atan2 bind binmode bless caller chdir chmod chomp chop chown chr chroot close closedir connect cos crypt dbmclose dbmopen defined delete dump each endgrent endhostent endnetent endprotoent endpwent endservent eof exec exists exp fcntl fileno flock fork format formline getc getgrent getgrgid getgrnam gethostbyaddr gethostbyname gethostent getlogin getnetbyaddr getnetbyname getnetent getpeername getpgrp getppid getpriority getprotobyname getprotobynumber getprotoent getpwent getpwnam getpwuid getservbyname getservbyport getservent getsockname getsockopt glob gmtime grep hex import index int ioctl join keys kill lc lcfirst length link listen localtime lock log lstat m map mkdir msgctl msgget msgrcv msgsnd no oct open opendir ord pack pipe pop pos print printf prototype push q qq quotemeta qw qx rand read readdir readline readlink readpipe recv ref rename reset reverse rewinddir rindex rmdir scalar seek seekdir semctl semget semop send setgrent sethostent setnetent setpgrp setpriority setprotoent setpwent setservent setsockopt shift shmctl shmget shmread shmwrite shutdown sin sleep socket socketpair sort splice split sprintf sqrt srand stat study sub substr symlink syscall sysopen sysread sysseek system syswrite tell telldir tie tied time times tr truncate uc ucfirst umask undef unlink unpack unshift untie utime values vec waitpid wantarray warn write qr",$="s select goto die do package redo require return continue for foreach last next wait while use if else elsif eval exit unless switch case",A="my our local";this.regexList=[{regex:dp.sh.RegexLib.SingleLinePerlComments,css:"comment"},{regex:dp.sh.RegexLib.DoubleQuotedString,css:"string"},{regex:dp.sh.RegexLib.SingleQuotedString,css:"string"},{regex:new RegExp("(\\$|@|%)\\w+","g"),css:"vars"},{regex:new RegExp(this.GetKeywords(_),"gmi"),css:"func"},{regex:new RegExp(this.GetKeywords($),"gm"),css:"keyword"},{regex:new RegExp(this.GetKeywords(A),"gm"),css:"declarations"}];this.CssClass="dp-perl"};dp.sh.Brushes.Perl.prototype=new dp.sh.Highlighter();dp.sh.Brushes.Perl.Aliases=["perl"];dp.sh.Brushes.Php=function(){var _="abs acos acosh addcslashes addslashes "+"array_change_key_case array_chunk array_combine array_count_values array_diff "+"array_diff_assoc array_diff_key array_diff_uassoc array_diff_ukey array_fill "+"array_filter array_flip array_intersect array_intersect_assoc array_intersect_key "+"array_intersect_uassoc array_intersect_ukey array_key_exists array_keys array_map "+"array_merge array_merge_recursive array_multisort array_pad array_pop array_product "+"array_push array_rand array_reduce array_reverse array_search array_shift "+"array_slice array_splice array_sum array_udiff array_udiff_assoc "+"array_udiff_uassoc array_uintersect array_uintersect_assoc "+"array_uintersect_uassoc array_unique array_unshift array_values array_walk "+"array_walk_recursive atan atan2 atanh base64_decode base64_encode base_convert "+"basename bcadd bccomp bcdiv bcmod bcmul bindec bindtextdomain bzclose bzcompress "+"bzdecompress bzerrno bzerror bzerrstr bzflush bzopen bzread bzwrite ceil chdir "+"checkdate checkdnsrr chgrp chmod chop chown chr chroot chunk_split class_exists "+"closedir closelog copy cos cosh count count_chars date decbin dechex decoct "+"deg2rad delete ebcdic2ascii echo empty end ereg ereg_replace eregi eregi_replace error_log "+"error_reporting escapeshellarg escapeshellcmd eval exec exit exp explode extension_loaded "+"feof fflush fgetc fgetcsv fgets fgetss file_exists file_get_contents file_put_contents "+"fileatime filectime filegroup fileinode filemtime fileowner fileperms filesize filetype "+"floatval flock floor flush fmod fnmatch fopen fpassthru fprintf fputcsv fputs fread fscanf "+"fseek fsockopen fstat ftell ftok getallheaders getcwd getdate getenv gethostbyaddr gethostbyname "+"gethostbynamel getimagesize getlastmod getmxrr getmygid getmyinode getmypid getmyuid getopt "+"getprotobyname getprotobynumber getrandmax getrusage getservbyname getservbyport gettext "+"gettimeofday gettype glob gmdate gmmktime ini_alter ini_get ini_get_all ini_restore ini_set "+"interface_exists intval ip2long is_a is_array is_bool is_callable is_dir is_double "+"is_executable is_file is_finite is_float is_infinite is_int is_integer is_link is_long "+"is_nan is_null is_numeric is_object is_readable is_real is_resource is_scalar is_soap_fault "+"is_string is_subclass_of is_uploaded_file is_writable is_writeable mkdir mktime nl2br "+"parse_ini_file parse_str parse_url passthru pathinfo readlink realpath rewind rewinddir rmdir "+"round str_ireplace str_pad str_repeat str_replace str_rot13 str_shuffle str_split "+"str_word_count strcasecmp strchr strcmp strcoll strcspn strftime strip_tags stripcslashes "+"stripos stripslashes stristr strlen strnatcasecmp strnatcmp strncasecmp strncmp strpbrk "+"strpos strptime strrchr strrev strripos strrpos strspn strstr strtok strtolower strtotime "+"strtoupper strtr strval substr substr_compare",$="and or xor __FILE__ __LINE__ array as break case "+"cfunction class const continue declare default die do else "+"elseif empty enddeclare endfor endforeach endif endswitch endwhile "+"extends for foreach function include include_once global if "+"new old_function return static switch use require require_once "+"var while __FUNCTION__ __CLASS__ "+"__METHOD__ abstract interface public implements extends private protected throw";this.regexList=[{regex:dp.sh.RegexLib.SingleLineCComments,css:"comment"},{regex:dp.sh.RegexLib.MultiLineCComments,css:"comment"},{regex:dp.sh.RegexLib.DoubleQuotedString,css:"string"},{regex:dp.sh.RegexLib.SingleQuotedString,css:"string"},{regex:new RegExp("\\$\\w+","g"),css:"vars"},{regex:new RegExp(this.GetKeywords(_),"gmi"),css:"func"},{regex:new RegExp(this.GetKeywords($),"gm"),css:"keyword"}];this.CssClass="dp-c"};dp.sh.Brushes.Php.prototype=new dp.sh.Highlighter();dp.sh.Brushes.Php.Aliases=["php"];dp.sh.Brushes.Python=function(){var $="and assert break class continue def del elif else "+"except exec finally for from global if import in is "+"lambda not or pass print raise return try yield while",_="None True False self cls class_";this.regexList=[{regex:dp.sh.RegexLib.SingleLinePerlComments,css:"comment"},{regex:new RegExp("^\\s*@\\w+","gm"),css:"decorator"},{regex:new RegExp("(['\"]{3})([^\\1])*?\\1","gm"),css:"comment"},{regex:new RegExp("\"(?!\")(?:\\.|\\\\\\\"|[^\\\"\"\\n\\r])*\"","gm"),css:"string"},{regex:new RegExp("'(?!')*(?:\\.|(\\\\\\')|[^\\''\\n\\r])*'","gm"),css:"string"},{regex:new RegExp("\\b\\d+\\.?\\w*","g"),css:"number"},{regex:new RegExp(this.GetKeywords($),"gm"),css:"keyword"},{regex:new RegExp(this.GetKeywords(_),"gm"),css:"special"}];this.CssClass="dp-py";this.Style=".dp-py .builtins { color: #ff1493; }"+".dp-py .magicmethods { color: #808080; }"+".dp-py .exceptions { color: brown; }"+".dp-py .types { color: brown; font-style: italic; }"+".dp-py .commonlibs { color: #8A2BE2; font-style: italic; }"};dp.sh.Brushes.Python.prototype=new dp.sh.Highlighter();dp.sh.Brushes.Python.Aliases=["py","python"];dp.sh.Brushes.Ruby=function(){var $="alias and BEGIN begin break case class def define_method defined do each else elsif "+"END end ensure false for if in module new next nil not or raise redo rescue retry return "+"self super then throw true undef unless until when while yield",_="Array Bignum Binding Class Continuation Dir Exception FalseClass File::Stat File Fixnum Fload "+"Hash Integer IO MatchData Method Module NilClass Numeric Object Proc Range Regexp String Struct::TMS Symbol "+"ThreadGroup Thread Time TrueClass";this.regexList=[{regex:dp.sh.RegexLib.SingleLinePerlComments,css:"comment"},{regex:dp.sh.RegexLib.DoubleQuotedString,css:"string"},{regex:dp.sh.RegexLib.SingleQuotedString,css:"string"},{regex:new RegExp(":[a-z][A-Za-z0-9_]*","g"),css:"symbol"},{regex:new RegExp("(\\$|@@|@)\\w+","g"),css:"variable"},{regex:new RegExp(this.GetKeywords($),"gm"),css:"keyword"},{regex:new RegExp(this.GetKeywords(_),"gm"),css:"builtin"}];this.CssClass="dp-rb";this.Style=".dp-rb .symbol { color: #a70; }"+".dp-rb .variable { color: #a70; font-weight: bold; }"};dp.sh.Brushes.Ruby.prototype=new dp.sh.Highlighter();dp.sh.Brushes.Ruby.Aliases=["ruby","rails","ror"];dp.sh.Brushes.Sql=function(){var _="abs avg case cast coalesce convert count current_timestamp "+"current_user day isnull left lower month nullif replace right "+"session_user space substring sum system_user upper user year",$="absolute action add after alter as asc at authorization begin bigint "+"binary bit by cascade char character check checkpoint close collate "+"column commit committed connect connection constraint contains continue "+"create cube current current_date current_time cursor database date "+"deallocate dec decimal declare default delete desc distinct double drop "+"dynamic else end end-exec escape except exec execute false fetch first "+"float for force foreign forward free from full function global goto grant "+"group grouping having hour ignore index inner insensitive insert instead "+"int integer intersect into is isolation key last level load local max min "+"minute modify move name national nchar next no numeric of off on only "+"open option order out output partial password precision prepare primary "+"prior privileges procedure public read real references relative repeatable "+"restrict return returns revoke rollback rollup rows rule schema scroll "+"second section select sequence serializable set size smallint static "+"statistics table temp temporary then time timestamp to top transaction "+"translation trigger true truncate uncommitted union unique update values "+"varchar varying view when where with work",A="all and any between cross in join like not null or outer some";this.regexList=[{regex:new RegExp("--(.*)$","gm"),css:"comment"},{regex:dp.sh.RegexLib.DoubleQuotedString,css:"string"},{regex:dp.sh.RegexLib.SingleQuotedString,css:"string"},{regex:new RegExp(this.GetKeywords(_),"gmi"),css:"func"},{regex:new RegExp(this.GetKeywords(A),"gmi"),css:"op"},{regex:new RegExp(this.GetKeywords($),"gmi"),css:"keyword"}];this.CssClass="dp-sql";this.Style=".dp-sql .func { color: #ff1493; }"+".dp-sql .op { color: #808080; }"};dp.sh.Brushes.Sql.prototype=new dp.sh.Highlighter();dp.sh.Brushes.Sql.Aliases=["sql"];dp.sh.Brushes.Vb=function(){var $="AddHandler AddressOf AndAlso Alias And Ansi As Assembly Auto "+"Boolean ByRef Byte ByVal Call Case Catch CBool CByte CChar CDate "+"CDec CDbl Char CInt Class CLng CObj Const CShort CSng CStr CType "+"Date Decimal Declare Default Delegate Dim DirectCast Do Double Each "+"Else ElseIf End Enum Erase Error Event Exit False Finally For Friend "+"Function Get GetType GoSub GoTo Handles If Implements Imports In "+"Inherits Integer Interface Is Let Lib Like Long Loop Me Mod Module "+"MustInherit MustOverride MyBase MyClass Namespace New Next Not Nothing "+"NotInheritable NotOverridable Object On Option Optional Or OrElse "+"Overloads Overridable Overrides ParamArray Preserve Private Property "+"Protected Public RaiseEvent ReadOnly ReDim REM RemoveHandler Resume "+"Return Select Set Shadows Shared Short Single Static Step Stop String "+"Structure Sub SyncLock Then Throw To True Try TypeOf Unicode Until "+"Variant When While With WithEvents WriteOnly Xor";this.regexList=[{regex:new RegExp("'.*$","gm"),css:"comment"},{regex:dp.sh.RegexLib.DoubleQuotedString,css:"string"},{regex:new RegExp("^\\s*#.*","gm"),css:"preprocessor"},{regex:new RegExp(this.GetKeywords($),"gm"),css:"keyword"}];this.CssClass="dp-vb"};dp.sh.Brushes.Vb.prototype=new dp.sh.Highlighter();dp.sh.Brushes.Vb.Aliases=["vb","vb.net"];dp.sh.Brushes.Xml=function(){this.CssClass="dp-xml";this.Style=".dp-xml .cdata { color: #ff1493; }"+".dp-xml .tag, .dp-xml .tag-name { color: #069; font-weight: bold; }"+".dp-xml .attribute { color: red; }"+".dp-xml .attribute-value { color: blue; }"};dp.sh.Brushes.Xml.prototype=new dp.sh.Highlighter();dp.sh.Brushes.Xml.Aliases=["xml","xhtml","xslt","html","xhtml"];dp.sh.Brushes.Xml.prototype.ProcessRegexList=function(){function B(_,$){_[_.length]=$}var $=0,A=null,_=null;this.GetMatches(new RegExp("(<|<)\\!\\[[\\w\\s]*?\\[(.|\\s)*?\\]\\](>|>)","gm"),"cdata");this.GetMatches(new RegExp("(<|<)!--\\s*.*?\\s*--(>|>)","gm"),"comments");_=new RegExp("([:\\w-.]+)\\s*=\\s*(\".*?\"|'.*?'|\\w+)*|(\\w+)","gm");while((A=_.exec(this.code))!=null){if(A[1]==null)continue;B(this.matches,new dp.sh.Match(A[1],A.index,"attribute"));if(A[2]!=undefined)B(this.matches,new dp.sh.Match(A[2],A.index+A[0].indexOf(A[2]),"attribute-value"))}this.GetMatches(new RegExp("(<|<)/*\\?*(?!\\!)|/*\\?*(>|>)","gm"),"tag");_=new RegExp("(?:<|<)/*\\?*\\s*([:\\w-.]+)","gm");while((A=_.exec(this.code))!=null)B(this.matches,new dp.sh.Match(A[1],A.index+A[0].indexOf(A[1]),"tag-name"))}
//}}}
<<myComment>>
Comment of: [[SyntaxHighlighterPlugin]]
----
~~:::::__Sat Jun 26 2010 17:58:53 GMT-0400 (Eastern Daylight Time)__:::::~~
^^(__KennyZ Wrote:__)^^ Changed: alert("The code is in your clipboard now") TO use displayMessage();
/***
StyleSheet for ~SyntaxHighlighter
***/
/*{{{*/
.dp-highlighter
{
font-family: "Consolas", "Courier New", Courier, mono, serif;
font-size: 12px;
background-color: #E7E5DC;
width: 99%;
overflow: auto;
margin: 18px 0 18px 0 !important;
padding-top: 1px; /* adds a little border on top when controls are hidden */
}
/* clear styles */
.dp-highlighter ol,
.dp-highlighter ol li,
.dp-highlighter ol li span
{
margin: 0;
padding: 0;
border: none;
}
.dp-highlighter a,
.dp-highlighter a:hover
{
background: none;
border: none;
padding: 0;
margin: 0;
}
.dp-highlighter .bar
{
padding-left: 45px;
}
.dp-highlighter.collapsed .bar,
.dp-highlighter.nogutter .bar
{
padding-left: 0px;
}
.dp-highlighter ol
{
list-style: decimal; /* for ie */
background-color: #fff;
margin: 0px 0px 1px 45px !important; /* 1px bottom margin seems to fix occasional Firefox scrolling */
padding: 0px;
color: #5C5C5C;
}
.dp-highlighter.nogutter ol,
.dp-highlighter.nogutter ol li
{
list-style: none !important;
margin-left: 0px !important;
}
.dp-highlighter ol li,
.dp-highlighter .columns div
{
list-style: decimal-leading-zero; /* better look for others, override cascade from OL */
list-style-position: outside !important;
border-left: 3px solid #6CE26C;
background-color: #F8F8F8;
color: #5C5C5C;
padding: 0 3px 0 10px !important;
margin: 0 !important;
line-height: 14px;
}
.dp-highlighter.nogutter ol li,
.dp-highlighter.nogutter .columns div
{
border: 0;
}
.dp-highlighter .columns
{
background-color: #F8F8F8;
color: gray;
overflow: hidden;
width: 100%;
}
.dp-highlighter .columns div
{
padding-bottom: 5px;
}
.dp-highlighter ol li.alt
{
background-color: #FFF;
color: inherit;
}
.dp-highlighter ol li span
{
color: black;
background-color: inherit;
}
/* Adjust some properties when collapsed */
.dp-highlighter.collapsed ol
{
margin: 0px;
}
.dp-highlighter.collapsed ol li
{
display: none;
}
/* Additional modifications when in print-view */
.dp-highlighter.printing
{
border: none;
}
.dp-highlighter.printing .tools
{
display: none !important;
}
.dp-highlighter.printing li
{
display: list-item !important;
}
/* Styles for the tools */
.dp-highlighter .tools
{
padding: 3px 8px 3px 10px;
font: 9px Verdana, Geneva, Arial, Helvetica, sans-serif;
color: silver;
background-color: #f8f8f8;
padding-bottom: 10px;
border-left: 3px solid #6CE26C;
}
.dp-highlighter.nogutter .tools
{
border-left: 0;
}
.dp-highlighter.collapsed .tools
{
border-bottom: 0;
}
.dp-highlighter .tools a
{
font-size: 9px;
color: #a0a0a0;
background-color: inherit;
text-decoration: none;
margin-right: 10px;
}
.dp-highlighter .tools a:hover
{
color: red;
background-color: inherit;
text-decoration: underline;
}
/* About dialog styles */
.dp-about { background-color: #fff; color: #333; margin: 0px; padding: 0px; }
.dp-about table { width: 100%; height: 100%; font-size: 11px; font-family: Tahoma, Verdana, Arial, sans-serif !important; }
.dp-about td { padding: 10px; vertical-align: top; }
.dp-about .copy { border-bottom: 1px solid #ACA899; height: 95%; }
.dp-about .title { color: red; background-color: inherit; font-weight: bold; }
.dp-about .para { margin: 0 0 4px 0; }
.dp-about .footer { background-color: #ECEADB; color: #333; border-top: 1px solid #fff; text-align: right; }
.dp-about .close { font-size: 11px; font-family: Tahoma, Verdana, Arial, sans-serif !important; background-color: #ECEADB; color: #333; width: 60px; height: 22px; }
/* Language specific styles */
.dp-highlighter .comment, .dp-highlighter .comments { color: #008200; background-color: inherit; }
.dp-highlighter .string { color: blue; background-color: inherit; }
.dp-highlighter .keyword { color: #069; font-weight: bold; background-color: inherit; }
.dp-highlighter .preprocessor { color: gray; background-color: inherit; }
/*}}}*/
<<tabs txtTabIndex
Author 'By Author' TabAuthor
Mine 'Created by Me' TabMine
"Tags" "All tags" TabTags
All 'All tiddlers' TabAll>>
Created by me:
<<listByAuthor creator currentUser>>
Modified by me:
<<listByAuthor modifier currentUser>>
<<noTags>><<allTags excludeLists>>
/***
|''Name:''|TagEditPlugin|
|''Description:''|Edit tags quickly|
|''Author:''|Kenny Z|
|''Source:''|http://cooltool.tiddlyspot.com/#TagEditPlugin|
|''Dependencies:''||
|''CodeRepository:''| |
|''Version:''|0.0.1|
|''Status:''|Alpha|
|''Date:''|July 6, 2010|
|''Comments:''| |
|''License:''|[[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]] |
|''~CoreVersion:''|2.6|
!!Description
Adds a button on the toolbar command to edit tags quickly.
!!Usage
#Import
#Save & Reload
#Add {{{tagEdit}}} to [[ToolbarCommands]] in the ~ViewToolbar slice.
!!Code
***/
//{{{
if(!version.extensions.TagEditPlugin) {
version.extensions.TagEditPlugin= {installed:true};
config.commands.tagEdit= {
text: "tags",
tooltip: "Edit Tags",
readOnlyText: "",
readOnlyTooltip: "",
handler: function(event,src,title) {
var tiddler=store.getTiddler(title);
var tags=String.encodeTiddlyLinkList(tiddler.tags);
var ans=prompt("Enter tag: ",tags);
tags = ans.readBracketedList();
tiddler.set(null,null,null,null,tags);
story.refreshTiddler(title,null,true);
return false;
},
};
} //# end of 'install only once'
//}}}
/***
|''Name:''|~TaggerPlugin|
|''Version:''|1.0.1 (2006-06-01)|
|''Source:''|http://tw.lewcid.org//#TaggerPlugin|
|''Author:''|SaqImtiaz|
|''Description:''|Provides a drop down listing current tiddler tags, and allowing toggling of tags.|
|''Documentation:''|[[TaggerPluginDocumentation]]|
|''Source Code:''|[[TaggerPluginSource]]|
|''~TiddlyWiki:''|Version 2.0.8 or better|
!Examples & Usage:
*At it's simplest, using tagger is as simple as {{{<<tagger>>}}} <<tagger>>
**This gives a dropdown with the current tiddler tags, followed by all the tags in the TW.
*You can also use a list of specified tags instead of all tags in the TW, by specifying a source tiddler.
**{{{<<tagger source:TagsDB>>}}} <<tagger source:TagDataBase>>
*You can also display ONLY the current tiddler tags
**{{{<<tagger taglist:false>>}}} <<tagger taglist:false>>
*To exclude tags from the list: {{{<<tagger exclude:"excludeLists Tag2 [[Tag with spaces]]">>}}} <<tagger exclude:"excludeLists Tag2 [[Tag with spaces]]">>
*For a custom button label: {{{<<tagger label:"custom label">>}}} <<tagger label:"custom label">>
*For a custom tooltip: {{{<<tagger tooltip:"custom tooltip">>}}} <<tagger tooltip:"custom tooltip">>
***/
//{{{
config.tagger={
defaults:{
label: 'Tags: ',
tooltip: 'Manage tiddler tags',
taglist: 'true',
excludeTags: '',
notags: 'tiddler has no tags',
aretags: 'current tiddler tags:',
toggletext: 'add tags:'
}
};
config.macros.tagger={};
config.macros.tagger.arrow = (document.all?"▼":"▾"); // the fat one is the only one that works in IE
config.macros.tagger.handler = function(place,macroName,params,wikifier,paramString,tiddler) {
var defaults = config.tagger.defaults;
var nAV = paramString.parseParams('tagman', null, true);
var label = ((nAV[0].label)&&(nAV[0].label[0])!='.')?nAV[0].label[0]+this.arrow: defaults.label+this.arrow;
var tooltip = ((nAV[0].tooltip)&&(nAV[0].tooltip[0])!='.')?nAV[0].tooltip[0]: defaults.tooltip;
var taglist = ((nAV[0].taglist)&&(nAV[0].taglist[0])!='.')?nAV[0].taglist[0]: defaults.taglist;
var exclude = ((nAV[0].exclude)&&(nAV[0].exclude[0])!='.')?(nAV[0].exclude[0]).readBracketedList(): defaults.excludeTags.readBracketedList();
if ((nAV[0].source)&&(nAV[0].source[0])!='.')var source = nAV[0].source[0];
if (source&&!store.getTiddler(source)) return false;
var onclick = function(e) {
if (!e) var e = window.event;
var popup = Popup.create(this);
var tagsarray = store.getTags();
var tags=new Array();
for (var i=0; i<tagsarray.length; i++){
tags.push(tagsarray[i][0]);}
if (source)
{var sourcetiddler=store.getTiddler(source);
tags=sourcetiddler.tags.sort();}
var currentTags = tiddler.tags.sort();
var createButtons=function(text,theTag,tooltipPrefix){
var sp = createTiddlyElement(createTiddlyElement(popup,"li"),"span",null,"tagger");
var theToggle = createTiddlyButton(sp,text,tooltipPrefix+" '"+theTag+"'",taggerOnToggle,"button","toggleButton");
theToggle.setAttribute("tiddler",tiddler.title);
theToggle.setAttribute("tag",theTag);
insertSpacer(sp);
if (window.createTagButton_orig_mptw)
createTagButton_orig_mptw(sp,theTag);
else
createTagButton(sp,theTag);
}
createTiddlyElement(popup,"li",null,"listTitle",(tiddler.tags.length == 0 ? defaults.notags : defaults.aretags));
for (var t=0; t<currentTags.length; t++){
createButtons("[x]",currentTags[t],"remove tag ");
}
createTiddlyElement(createTiddlyElement(popup,"li"),"hr");
if (taglist!='false')
{ createTiddlyElement(popup,"li",null,"listTitle",defaults.toggletext);
for (var i=0; i<tags.length; i++){
if (!tiddler.tags.contains(tags[i])&&!exclude.contains(tags[i]))
{createButtons("[ ]",tags[i],"add tag ");
}
}
createTiddlyElement(createTiddlyElement(popup,"li"),"hr");
}
var newTagButton = createTiddlyButton(createTiddlyElement(popup,"li"),("Create new tag"),null,taggerOnToggle);
newTagButton.setAttribute("tiddler",tiddler.title);
if (source) newTagButton.setAttribute("source",source);
Popup.show(popup,false);
e.cancelBubble = true;
if (e.stopPropagation) e.stopPropagation();
return(false);
};
createTiddlyButton(place,label,tooltip,onclick,"button","taggerDrpBtn");
};
window.taggerOnToggle = function(e) {
var tag = this.getAttribute("tag");
var title = this.getAttribute("tiddler");
var tiddler = store.getTiddler(title);
if (!tag)
{
var newtag=prompt("Enter new tag:","");
if (newtag!=''&&newtag!=null)
{
var tag=newtag;
if (this.getAttribute("source"))
{
var sourcetiddler = store.getTiddler(this.getAttribute("source"));
sourcetiddler.tags.pushUnique(newtag);}
}
else
{return false;};
}
if (!tiddler || !tiddler.tags)
{
store.saveTiddler(title,title,'',config.options.txtUserName,new Date(),tag);
}
else
{if (tiddler.tags.indexOf(tag)==-1)
{
tiddler.tags.push(tag);
}
else if(!newtag)
{
tiddler.tags.splice(tiddler.tags.indexOf(tag),1);
}
store.saveTiddler(tiddler.title,tiddler.title,tiddler.text,tiddler.modifier,tiddler.modified,tiddler.tags);
refreshPageTemplate();
};
story.refreshTiddler(title,null,true);
autoSaveChanges();
return false;
};
setStylesheet(
".tagger a.button {font-weight: bold;display:inline; padding:0px;}\n"+
".tagger #toggleButton {padding-left:2px; padding-right:2px; margin-right:1px; font-size:110%;}\n"+
"#nestedtagger {background:#2E5ADF; border: 1px solid #0331BF;}\n"+
".popup .listTitle {color:#000;}\n"+
"",
"TaggerStyles");
window.lewcidTiddlerSwapTag = function (tiddler, oldTag, newTag){
for (var i = 0; i < tiddler.tags.length; i++)
if (tiddler.tags[i] == oldTag) {
tiddler.tags[i] = newTag;
return true;}
return false;
}
window.lewcidRenameTag = function(e) {
var tag=this.getAttribute("tag");
var newtag=prompt("Rename tag '"+tag+"' to:",tag);
if ((newtag==tag)||(newtag==null)) {return false;}
if(store.tiddlerExists(newtag))
{if(confirm(config.messages.overwriteWarning.format([newtag.toString()])))
story.closeTiddler(newtag,false,false);
else
return null;}
tagged=store.getTaggedTiddlers(tag);
if (tagged.length!=0){
for (var j = 0; j < tagged.length; j++)
lewcidTiddlerSwapTag(tagged[j],tag,newtag);}
if (store.tiddlerExists(tag))
{store.saveTiddler(tag,newtag);}
if (document.getElementById("tiddler"+tag))
{var oldTagTiddler = document.getElementById(story.idPrefix + tag);
var before= story.positionTiddler(oldTagTiddler);
var place = document.getElementById(story.container);
story.closeTiddler(tag,false,false);
story.createTiddler(place,before,newtag,null);
story.saveTiddler(newtag);}
autoSaveChanges();
return false;
}
window.onClickTag=function(e)
{
if (!e) var e = window.event;
var theTarget = resolveTarget(e);
var nested = (!isNested(theTarget));
if ((Popup.stack.length > 1)&&(nested==true)) {Popup.removeFrom(1);}
else if(Popup.stack.length > 0 && nested==false) {Popup.removeFrom(0);};
var theId = (nested==false)? "popup" : "nestedtagger";
var popup = createTiddlyElement(document.body,"ol",theId,"popup",null);
Popup.stack.push({root: this, popup: popup});
var tag = this.getAttribute("tag");
var title = this.getAttribute("tiddler");
if(popup && tag)
{
var tagged = store.getTaggedTiddlers(tag);
var titles = [];
var li,r;
for(r=0;r<tagged.length;r++)
if(tagged[r].title != title)
titles.push(tagged[r].title);
var lingo = config.views.wikified.tag;
if(titles.length > 0)
{
var openAll = createTiddlyButton(createTiddlyElement(popup,"li"),lingo.openAllText.format([tag]),lingo.openAllTooltip,onClickTagOpenAll);
openAll.setAttribute("tag",tag);
createTiddlyElement(createTiddlyElement(popup,"li"),"hr");
for(r=0; r<titles.length; r++)
{
createTiddlyLink(createTiddlyElement(popup,"li"),titles[r],true);
}
}
else
createTiddlyText(createTiddlyElement(popup,"li",null,"disabled"),lingo.popupNone.format([tag]));
createTiddlyElement(createTiddlyElement(popup,"li"),"hr");
var h = createTiddlyLink(createTiddlyElement(popup,"li"),tag,false);
createTiddlyText(h,lingo.openTag.format([tag]));
createTiddlyElement(createTiddlyElement(popup,"li"),"hr");
var renameTagButton = createTiddlyButton(createTiddlyElement(popup,"li"),("Rename tag '"+tag+"'"),null,lewcidRenameTag);
renameTagButton.setAttribute("tag",tag)
}
Popup.show(popup,false);
e.cancelBubble = true;
if (e.stopPropagation) e.stopPropagation();
return(false);
}
if (!window.isNested)
window.isNested = function(e) {
while (e != null) {
var contentWrapper = document.getElementById("contentWrapper");
if (contentWrapper == e) return true;
e = e.parentNode;
}
return false;
};
//}}}
<<myComment>>
----
~~:::::__Fri Jun 25 2010 23:32:28 GMT-0400 (Eastern Daylight Time)__:::::~~
^^(__KennyZ Wrote:__)^^ This plugin did not work w/ tw2.5 or above. I did changed a line to make it work. I changed tags.find() to tags.indexOf() in window.taggerOnToggle function.
* if (tiddler.tags.indexOf(tag)==-1);
* tiddler.tags.splice(tiddler.tags.indexOf(tag),1);
----
~~:::::__Sat Jun 26 2010 16:11:25 GMT-0400 (Eastern Daylight Time)__:::::~~
^^(__KennyZ Wrote:__)^^ CHANGED: {{{if(config.options.chkAutoSave) saveChanges();}}}
TO: {{{autoSaveChanges();}}}
/***
|Name|TextAreaPlugin|
|Source|http://www.TiddlyTools.com/#TextAreaPlugin|
|Documentation|http://www.TiddlyTools.com/#TextAreaPluginInfo|
|Version|2.2.1|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|Adds Find/Again keyboard search, autosize, and 'stretch bar' resize for textarea controls|
!!!!!Documentation
>see [[TextAreaPluginInfo]]
!!!!!Configuration
<<<
<<option chkTextAreaExtensions>> use control-f (find), control-g (find again) inside text area
<<option chkDisableAutoSelect>> place cursor at start of textarea instead of pre-selecting content
<<option chkResizeEditor>> modify shadow EditTemplate to add resizeable text area (and autosize command)
<<<
!!!!!Revisions
<<<
2009.04.08 [2.2.1] added autosizeEditor macro to enable automatic autosizing without using toolbar command
2009.04.06 [2.2.0] added resizeListbox macro definition and adjusted dragbar width calculation.
|please see [[TextAreaPluginInfo]] for additional revision details|
2006.01.22 [1.0.0] Moved from temporary "System Tweaks" tiddler into 'real' TextAreaPlugin tiddler.
<<<
!!!!!Code
***/
//{{{
version.extensions.TextAreaPlugin= {major: 2, minor: 2, revision: 1, date: new Date(2009,4,8)};
if (config.options.chkTextAreaExtensions===undefined) config.options.chkTextAreaExtensions=true;
if (config.options.chkDisableAutoSelect===undefined) config.options.chkDisableAutoSelect=true;
if (config.options.chkResizeEditor===undefined) config.options.chkResizeEditor=true;
// automatically tweak shadow EditTemplate to add "autosizeEditor" toolbar command
if (config.options.chkResizeEditor)
config.shadowTiddlers.EditTemplate=config.shadowTiddlers.EditTemplate.replace(/deleteTiddler/,"deleteTiddler autosizeEditor");
// automatically tweak shadow EditTemplate to add "resizeEditor" macro
if (config.options.chkResizeEditor)
config.shadowTiddlers.EditTemplate+="<span macro='resizeEditor'></span>";
// Put focus in a specified tiddler field
Story.prototype.TextAreaExtensions_focusTiddler=Story.prototype.focusTiddler;
Story.prototype.focusTiddler = function(title,field)
{
this.TextAreaExtensions_focusTiddler.apply(this,arguments); // first call core
var e = this.getTiddlerField(title,field);
if (e && config.options.chkDisableAutoSelect) {
if (e.setSelectionRange) // FF
e.setSelectionRange(0,0);
else if (e.createTextRange) // IE
{ var r=e.createTextRange(); r.collapse(true); r.select(); }
}
if (e && config.options.chkTextAreaExtensions) addKeyDownHandlers(e);
}
//}}}
//{{{
function addKeyDownHandlers(e)
{
// exit if not textarea or element doesn't allow selections
if (e.tagName.toLowerCase()!="textarea"||!e.setSelectionRange||e.initialized) return;
// utility function: exits keydown handler and prevents browser from processing the keystroke
var processed=function(ev) {
ev.cancelBubble=true; // IE4+
try{event.keyCode=0;}catch(e){}; // IE5
if (window.event) ev.returnValue=false; // IE6
if (ev.preventDefault) ev.preventDefault(); // moz/opera/konqueror
if (ev.stopPropagation) ev.stopPropagation(); // all
return false;
}
// capture keydown in edit field
e.saved_onkeydown=e.onkeydown; // save current keydown handler (if any)
e.onkeydown=function(ev) { if (!ev) var ev=window.event;
var key=ev.keyCode;
if (!key) {
var char=event.which?event.which:event.charCode;
if (char==102) key=70;
if (char==103) key=71;
}
// process CTRL-F (find matching text) or CTRL-G (find next match)
if (ev.ctrlKey && (key==70||key==71)) {
// prompt for text to find
var defFind=e.findText?e.findText:e.value.substring(e.selectionStart,e.selectionEnd);
if (key==70||!e.findText||!e.findText.length) // ctrl-f or no saved search text
{ var f=prompt("find:", defFind); e.focus(); if (f) e.findText=f; }
if (!e.findText||!e.findText.length) return processed(ev); // if no search text, exit
// do case-insensitive match with 'wraparound'... if not found, alert and exit
var newstart=e.value.toLowerCase().indexOf(e.findText.toLowerCase(),e.selectionStart+1);
if (newstart==-1) newstart=e.value.toLowerCase().indexOf(e.findText.toLowerCase());
if (newstart==-1) { alert("'"+e.findText+"' not found"); e.focus(); return processed(ev); }
// set new selection, scroll it into view, and report line position in status bar
e.setSelectionRange(newstart,newstart+e.findText.length);
var linecount=e.value.split('\n').length;
var thisline=e.value.substr(0,e.selectionStart).split('\n').length;
e.scrollTop=Math.floor((thisline-1-e.rows/2)*e.scrollHeight/linecount);
window.status="line: "+thisline+"/"+linecount;
return processed(ev);
}
if (e.saved_onkeydown) // call previous keydown handler (if any)
e.saved_onkeydown(ev);
}
e.initialized=true;
}
//}}}
// // 'autosize' toolbar command
//{{{
config.commands.autosizeEditor = {
text: 'autosize',
tooltip: 'automatically adjust the editor height to fit the contents',
text_alt: '\u221Aautosize',
hideReadOnly: false,
handler: function(event,src,title) {
var here=story.findContainingTiddler(src); if (!here) return;
var ta=here.getElementsByTagName('textarea'); if (!ta) return;
for (i=0;i<ta.length;i++) {
// only autosize textareas actually used to edit tiddler fields
if (ta[i].getAttribute("edit")==undefined) continue;
ta[i].button=src;
if (!ta[i].maxed)
config.commands.autosizeEditor.on(ta[i]);
else
config.commands.autosizeEditor.off(ta[i],true);
}
return false;
},
on: function(e) {
if (e.maxed) return; // already autosizing!
if (e.savedheight==undefined)
e.savedheight=e.style.height;
if (e.savedkeyup==undefined) {
e.savedkeyup=e.onkeyup;
e.onkeyup=function(ev) {
if (!ev) var ev=window.event; var e=resolveTarget(ev);
e.style.height=e.scrollHeight+'px';
if (e.savedkeyup) e.savedkeyup();
}
}
// IE reports error: "not implemented" for onkeypress
if (!config.browser.isIE && e.savedkeypress==undefined) {
e.savedkeypress=e.onkeypress;
e.onkeypress=function(ev) {
if (!ev) var ev=window.event; var e=resolveTarget(ev);
if (ev.keyCode==33) { // PGUP
if (window.scrollByPages) window.scrollByPages(-1);
return false;
}
if (ev.keyCode==34) { // PGDN
if (window.scrollByPages) window.scrollByPages(1);
return false;
}
if (e.savedkeypress) e.savedkeypress();
}
}
e.style.height=e.scrollHeight+'px';
if (e.button) e.button.innerHTML=config.commands.autosizeEditor.text_alt;
e.maxed=true;
},
off: function(e,resetHeight) {
if (resetHeight) e.style.height=e.savedheight;
e.onkeyup=e.savedkeyup;
// IE reports error: "not implemented" for onkeypress
if (!config.browser.isIE) e.onkeypress=e.savedkeypress;
if (e.button) e.button.innerHTML=config.commands.autosizeEditor.text;
e.maxed=false;
}
};
config.macros.autosizeEditor={
handler: function(place,macroName,params,wikifier,paramString,tiddler) {
var here=story.findContainingTiddler(place); if (!here) return;
var ta=here.getElementsByTagName('textarea'); if (!ta) return;
for (i=0;i<ta.length;i++) {
// only autosize textareas actually used to edit tiddler fields
if (ta[i].getAttribute("edit")==undefined) continue;
config.commands.autosizeEditor.on(ta[i]);
}
return false;
}
}
//}}}
// // grab-and-stretch handle
//{{{
config.macros.resizeEditor = { // add stretch bar to editor textarea
handler: function(place,macroName,params,wikifier,paramString,tiddler) {
var here=story.findContainingTiddler(place); if (!here) return;
var ta=here.getElementsByTagName('textarea');
if (ta) for (i=0;i<ta.length;i++) {
// only resize tiddler editor textareas
if (ta[i].getAttribute("edit")==undefined) continue;
new window.TextAreaResizer(ta[i]);
}
}
}
config.macros.resizeTiddler = { // add stretch bar to tiddler viewer element
handler: function(place,macroName,params,wikifier,paramString,tiddler) {
var here=story.findContainingTiddler(place); if (!here) return;
var elems=here.getElementsByTagName('div');
if (elems) for (i=0;i<elems.length;i++) if (hasClass(elems[i],'viewer')) break;
if (i<elems.length) new window.TextAreaResizer(elems[i]);
}
}
config.macros.resizeFrame = { // add stretch bar to iframes
handler: function(place,macroName,params,wikifier,paramString,tiddler) {
var here=story.findContainingTiddler(place); if (!here) return;
var fr=here.getElementsByTagName('iframe');
if (fr) for (i=0;i<fr.length;i++) new window.TextAreaResizer(fr[i]);
}
}
config.macros.resizeListbox = { // add stretch bar to listbox controls
handler: function(place,macroName,params,wikifier,paramString,tiddler) {
var here=story.findContainingTiddler(place); if (!here) here=place;
var fr=here.getElementsByTagName('select');
if (fr) for (i=0;i<fr.length;i++) new window.TextAreaResizer(fr[i]);
}
}
// TextAreaResizer script by Jason Johnston (jj@lojjic.net)
// Created August 2003. Use freely, but give me credit.
// adds a handle below textareas that the user can drag with the mouse to resize the textarea.
// MODIFIED by ELS for use with TW
window.TextAreaResizer = function(elt) {
this.element = elt;
this.create();
}
window.TextAreaResizer.prototype = {
create : function() {
var elt = this.element;
var thisRef = this;
var h = this.handle = document.createElement("div");
h.style.height = "3px"; // was 4px... looked too fat!
h.style.overflow = "hidden"; // ELS: force IE to trim height to < 1em
var adjust=elt.nodeName=='textarea'?4:0; // 4 pixels for textarea border edge
// h.style.width=(elt.offsetWidth-adjust)+"px";
h.style.width="auto";
h.style.backgroundColor = "#999"; // ELS: standard mid-tone (dark) gray
h.style.cursor = "s-resize";
h.title = "Drag to resize text box";
h.onmousedown=function(evt){thisRef.dragStart(evt)};
elt.parentNode.insertBefore(h, elt.nextSibling);
},
dragStart : function(evt) {
if (!evt) var evt=window.event;
this.dragStop(evt); // ELS: stop any current drag processing first
var thisRef = this;
this.dragStartY = evt.clientY;
this.dragStartH = this.element.offsetHeight;
document.savedmousemove=document.onmousemove;
document.onmousemove=this.dragMoveHdlr=function(evt){thisRef.dragMove(evt)};
document.savedmouseup=document.onmouseup;
document.onmouseup=this.dragStopHdlr=function(evt){thisRef.dragStop(evt)};
},
dragMove : function(evt) {
if (!evt) var evt=window.event;
// ELS: make sure height is at least 10px
var h=this.dragStartH+evt.clientY-this.dragStartY;
if (h<10) h=10; this.element.style.height=h+"px";
// ELS: match handle to textarea width (which may have changed due to document scrollbars)
// var adjust=this.element.nodeName.toLowerCase()=='textarea'?4:0; // 4 pixels for textarea
// this.handle.style.width=(this.element.offsetWidth-adjust)+"px";
// ELS: when manually resizing, disable autoresizing (without restoring saved height)
if (this.element.maxed!=undefined && this.element.maxed)
config.commands.autosizeEditor.off(this.element,false);
},
dragStop : function(evt) {
if (!evt) var evt=window.event;
document.onmousemove=(document.savedmousemove!=undefined)?document.savedmousemove:null;
document.onmousemove=(document.savedmouseup!=undefined)?document.savedmouseup:null;
},
destroy : function() {
var elt = this.element;
elt.parentNode.removeChild(this.handle);
elt.style.height = "";
}
};
//}}}
/***
|''Name:''|TiddlersBarPlugin|
|''Description:''|A bar to switch between tiddlers through tabs (like browser tabs bar).|
|''Version:''|1.2.5|
|''Date:''|Jan 18,2008|
|''Source:''|http://visualtw.ouvaton.org/VisualTW.html|
|''Author:''|Pascal Collin|
|''License:''|[[BSD open source license|License]]|
|''~CoreVersion:''|2.1.0|
|''Browser:''|Firefox 2.0; InternetExplorer 6.0, others|
!Demos
On [[homepage|http://visualtw.ouvaton.org/VisualTW.html]], open several tiddlers to use the tabs bar.
!Installation
#import this tiddler from [[homepage|http://visualtw.ouvaton.org/VisualTW.html]] (tagged as systemConfig)
#save and reload
#''if you're using a custom [[PageTemplate]]'', add {{{<div id='tiddlersBar' refresh='none' ondblclick='config.macros.tiddlersBar.onTiddlersBarAction(event)'></div>}}} before {{{<div id='tiddlerDisplay'></div>}}}
#optionally, adjust StyleSheetTiddlersBar
!Tips
*Doubleclick on the tiddlers bar (where there is no tab) create a new tiddler.
*Tabs include a button to close {{{x}}} or save {{{!}}} their tiddler.
*By default, click on the current tab close all others tiddlers.
!Configuration options
<<option chkDisableTabsBar>> Disable the tabs bar (to print, by example).
<<option chkHideTabsBarWhenSingleTab >> Automatically hide the tabs bar when only one tiddler is displayed.
<<option txtSelectedTiddlerTabButton>> ''selected'' tab command button.
<<option txtPreviousTabKey>> previous tab access key.
<<option txtNextTabKey>> next tab access key.
!Code
***/
//{{{
config.options.chkDisableTabsBar = config.options.chkDisableTabsBar ? config.options.chkDisableTabsBar : false;
config.options.chkHideTabsBarWhenSingleTab = config.options.chkHideTabsBarWhenSingleTab ? config.options.chkHideTabsBarWhenSingleTab : false;
config.options.txtSelectedTiddlerTabButton = config.options.txtSelectedTiddlerTabButton ? config.options.txtSelectedTiddlerTabButton : "closeOthers";
config.options.txtPreviousTabKey = config.options.txtPreviousTabKey ? config.options.txtPreviousTabKey : "";
config.options.txtNextTabKey = config.options.txtNextTabKey ? config.options.txtNextTabKey : "";
config.macros.tiddlersBar = {
tooltip : "see ",
tooltipClose : "click here to close this tab",
tooltipSave : "click here to save this tab",
promptRename : "Enter tiddler new name",
currentTiddler : "",
previousState : false,
previousKey : config.options.txtPreviousTabKey,
nextKey : config.options.txtNextTabKey,
tabsAnimationSource : null, //use document.getElementById("tiddlerDisplay") if you need animation on tab switching.
handler: function(place,macroName,params) {
var previous = null;
if (config.macros.tiddlersBar.isShown())
story.forEachTiddler(function(title,e){
if (title==config.macros.tiddlersBar.currentTiddler){
var d = createTiddlyElement(null,"span",null,"tab tabSelected");
config.macros.tiddlersBar.createActiveTabButton(d,title);
if (previous && config.macros.tiddlersBar.previousKey) previous.setAttribute("accessKey",config.macros.tiddlersBar.nextKey);
previous = "active";
}
else {
var d = createTiddlyElement(place,"span",null,"tab tabUnselected");
var btn = createTiddlyButton(d,title,config.macros.tiddlersBar.tooltip + title,config.macros.tiddlersBar.onSelectTab);
btn.setAttribute("tiddler", title);
if (previous=="active" && config.macros.tiddlersBar.nextKey) btn.setAttribute("accessKey",config.macros.tiddlersBar.previousKey);
previous=btn;
}
var isDirty =story.isDirty(title);
var c = createTiddlyButton(d,isDirty ?"!":"x",isDirty?config.macros.tiddlersBar.tooltipSave:config.macros.tiddlersBar.tooltipClose, isDirty ? config.macros.tiddlersBar.onTabSave : config.macros.tiddlersBar.onTabClose,"tabButton");
c.setAttribute("tiddler", title);
if (place.childNodes) {
place.insertBefore(document.createTextNode(" "),place.firstChild); // to allow break line here when many tiddlers are open
place.insertBefore(d,place.firstChild);
}
else place.appendChild(d);
})
},
refresh: function(place,params){
removeChildren(place);
config.macros.tiddlersBar.handler(place,"tiddlersBar",params);
if (config.macros.tiddlersBar.previousState!=config.macros.tiddlersBar.isShown()) {
story.refreshAllTiddlers();
if (config.macros.tiddlersBar.previousState) story.forEachTiddler(function(t,e){e.style.display="";});
config.macros.tiddlersBar.previousState = !config.macros.tiddlersBar.previousState;
}
},
isShown : function(){
if (config.options.chkDisableTabsBar) return false;
if (!config.options.chkHideTabsBarWhenSingleTab) return true;
var cpt=0;
story.forEachTiddler(function(){cpt++});
return (cpt>1);
},
selectNextTab : function(){ //used when the current tab is closed (to select another tab)
var previous="";
story.forEachTiddler(function(title){
if (!config.macros.tiddlersBar.currentTiddler) {
story.displayTiddler(null,title);
return;
}
if (title==config.macros.tiddlersBar.currentTiddler) {
if (previous) {
story.displayTiddler(null,previous);
return;
}
else config.macros.tiddlersBar.currentTiddler=""; // so next tab will be selected
}
else previous=title;
});
},
onSelectTab : function(e){
var t = this.getAttribute("tiddler");
if (t) story.displayTiddler(null,t);
return false;
},
onTabClose : function(e){
var t = this.getAttribute("tiddler");
if (t) {
if(story.hasChanges(t) && !readOnly) {
if(!confirm(config.commands.cancelTiddler.warning.format([t])))
return false;
}
story.closeTiddler(t);
}
return false;
},
onTabSave : function(e) {
var t = this.getAttribute("tiddler");
if (!e) e=window.event;
if (t) config.commands.saveTiddler.handler(e,null,t);
return false;
},
onSelectedTabButtonClick : function(event,src,title) {
var t = this.getAttribute("tiddler");
if (!event) event=window.event;
if (t && config.options.txtSelectedTiddlerTabButton && config.commands[config.options.txtSelectedTiddlerTabButton])
config.commands[config.options.txtSelectedTiddlerTabButton].handler(event, src, t);
return false;
},
onTiddlersBarAction: function(event) {
var source = event.target ? event.target.id : event.srcElement.id; // FF uses target and IE uses srcElement;
if (source=="tiddlersBar") story.displayTiddler(null,'New Tiddler',DEFAULT_EDIT_TEMPLATE,false,null,null);
},
createActiveTabButton : function(place,title) {
if (config.options.txtSelectedTiddlerTabButton && config.commands[config.options.txtSelectedTiddlerTabButton]) {
var btn = createTiddlyButton(place, title, config.commands[config.options.txtSelectedTiddlerTabButton].tooltip ,config.macros.tiddlersBar.onSelectedTabButtonClick);
btn.setAttribute("tiddler", title);
}
else
createTiddlyText(place,title);
}
}
story.coreCloseTiddler = story.coreCloseTiddler? story.coreCloseTiddler : story.closeTiddler;
story.coreDisplayTiddler = story.coreDisplayTiddler ? story.coreDisplayTiddler : story.displayTiddler;
story.closeTiddler = function(title,animate,unused) {
if (title==config.macros.tiddlersBar.currentTiddler)
config.macros.tiddlersBar.selectNextTab();
story.coreCloseTiddler(title,false,unused); //disable animation to get it closed before calling tiddlersBar.refresh
var e=document.getElementById("tiddlersBar");
if (e) config.macros.tiddlersBar.refresh(e,null);
}
story.displayTiddler = function(srcElement,tiddler,template,animate,unused,customFields,toggle){
story.coreDisplayTiddler(config.macros.tiddlersBar.tabsAnimationSource,tiddler,template,animate,unused,customFields,toggle);
var title = (tiddler instanceof Tiddler)? tiddler.title : tiddler;
if (config.macros.tiddlersBar.isShown()) {
story.forEachTiddler(function(t,e){
if (t!=title) e.style.display="none";
else e.style.display="";
})
config.macros.tiddlersBar.currentTiddler=title;
}
var e=document.getElementById("tiddlersBar");
if (e) config.macros.tiddlersBar.refresh(e,null);
}
var coreRefreshPageTemplate = coreRefreshPageTemplate ? coreRefreshPageTemplate : refreshPageTemplate;
refreshPageTemplate = function(title) {
coreRefreshPageTemplate(title);
if (config.macros.tiddlersBar) config.macros.tiddlersBar.refresh(document.getElementById("tiddlersBar"));
}
ensureVisible=function (e) {return 0} //disable bottom scrolling (not useful now)
config.shadowTiddlers.StyleSheetTiddlersBar = "/*{{{*/\n";
config.shadowTiddlers.StyleSheetTiddlersBar += "#tiddlersBar .button {border:0}\n";
config.shadowTiddlers.StyleSheetTiddlersBar += "#tiddlersBar .tab {white-space:nowrap}\n";
config.shadowTiddlers.StyleSheetTiddlersBar += "#tiddlersBar {padding : 1em 0.5em 2px 0.5em}\n";
config.shadowTiddlers.StyleSheetTiddlersBar += ".tabUnselected .tabButton, .tabSelected .tabButton {padding : 0 2px 0 2px; margin: 0 0 0 4px;}\n";
config.shadowTiddlers.StyleSheetTiddlersBar += ".tiddler, .tabContents {border:1px [[ColorPalette::TertiaryPale]] solid;}\n";
config.shadowTiddlers.StyleSheetTiddlersBar +="/*}}}*/";
store.addNotification("StyleSheetTiddlersBar", refreshStyles);
config.refreshers.none = function(){return true;}
config.shadowTiddlers.PageTemplate=config.shadowTiddlers.PageTemplate.replace(/<div id='tiddlerDisplay'><\/div>/m,"<div id='tiddlersBar' refresh='none' ondblclick='config.macros.tiddlersBar.onTiddlersBarAction(event)'></div>\n<div id='tiddlerDisplay'></div>");
//}}}
if (config.tasks) { // for TW2.2b or above
config.tasks.uploadTask = {
text: "upload",
tooltip: "upload this tiddlywiki",
content: "<<tiddler TspotSidebar>>"
}
config.backstageTasks.push("uploadTask");
}
!!To get a tiddler's title
{{{title = this.getAttribute("title"); }}}
or
{{{story.findContainingTiddler(place).getAttribute("tiddler");}}}
{{{story.findContainingTiddler(this).getAttribute("tiddler");}}}
!!Setting tags
{{{ if (tiddler.tags.contains( "systemConfig" )) }}}
{{{ store.setTiddlerTag( title,1,"systemConfigDisable" ); }}}
!!Method overriding in js
{{{
cooltool.comment.orig_deleteTiddlerHandler = config.commands.deleteTiddler.handler;
config.commands.deleteTiddler.handler = function(event,src,title) {
alert("del");
return cooltool.comment.orig_deleteTiddlerHandler.apply(this,arguments);
};
}}}
!!Template Const
*DEFAULT_VIEW_TEMPLATE
*DEFAULT_EDIT_TEMPLATE
!!Install once version
{{{
if(!version.extensions.wordCount) {
version.extensions.wordCount= {installed:true};
//CODE HERE
};
}}}
!!Namespace
if(!window.cooltool) window.cooltool={};
if(!cooltool.XXXXXXX) cooltool.XXXXXXXX={};
!!Encode/Parsing tags
{{{ "string".readBracketedList(); }}}
{{{String.encodeTiddlyLink(tiddler.tags);}}}
{{{String.encodeTiddlyLinkList(tiddler.tags);}}}
!!Set dirty
{{{store.dirty=true;}}}
{{{store.setDirty(true);}}}
!!Autosave Chk
{{{autoSaveChanges();}}}
{{{if(config.options.chkAutoSave) saveChanges();}}}
!!Set style sheet
setStylesheet(strCSS,strDOM_ID);
!!create shadow tiddlers
config.shadowTiddlers.NAME="CODE";
config.commands.timeStamp = {
text: "time stamp",
tooltip: "Adds a timestamp",
handler: function(event,src,title) {
store.getTiddler(title).text += new Date();
story.refreshTiddler(title,null,true);
return false;
},
};
http://soloport.tiddlyspot.com/#CustomizationsPlugin
/*{{{*/
function getMessageDiv() {
var msgArea = document.getElementById("messageArea");
if (!msgArea)
return null;
// "close" link code was here (JOS) //
msgArea.style.display = "block";
setTimeout("clearMessage();",5000); // ms (JOS)
return createTiddlyElement(msgArea,"div");
}
/*}}}*/
<<tiddler QuickLog with: "To Do List" worklog '' '' ''>>
!
TODO:
#rewire sync-out to export plugin
#make a view collapse lock.
#yyencode & compression for file attach
#cron - backup, export,
#fix linkprogram
#add savelist to eval()
#char freq counter
#insert symbol btn
#fix edit sect plugin
----
if tab plugin is on, don't use rearrange and collapse plugin.
if(!chkDisableTabsBar){ // allow rearrange&collapse
}
----
/***
|Name|ToggleSideBarMacro|
|Created by|SaqImtiaz|
|Location|http://tw.lewcid.org/#ToggleSideBarMacro|
|Version|1.0|
|Requires|~TW2.x|
!Description:
Provides a button for toggling visibility of the SideBar. You can choose whether the SideBar should initially be hidden or displayed.
!Demo
<<toggleSideBar "Toggle Sidebar">>
!Usage:
{{{<<toggleSideBar>>}}} <<toggleSideBar>>
additional options:
{{{<<toggleSideBar label tooltip show/hide>>}}} where:
label = custom label for the button,
tooltip = custom tooltip for the button,
show/hide = use one or the other, determines whether the sidebar is shown at first or not.
(default is to show the sidebar)
You can add it to your tiddler toolbar, your MainMenu, or where you like really.
If you are using a horizontal MainMenu and want the button to be right aligned, put the following in your StyleSheet:
{{{ .HideSideBarButton {float:right;} }}}
!History
*23-07-06: version 1.0: completely rewritten, now works with custom stylesheets too, and easier to customize start behaviour.
*20-07-06: version 0.11
*27-04-06: version 0.1: working.
!Code
***/
//{{{
config.macros.toggleSideBar={};
config.macros.toggleSideBar.settings={
styleHide : "#sidebarOptions, #sidebarTabs {display:none;}\n"+"#contentWrapper #displayArea { margin-right: 1em;}\n"+"",
styleShow : " ",
arrow1: "«",
arrow2: "»"
};
config.macros.toggleSideBar.handler=function (place,macroName,params,wikifier,paramString,tiddler)
{
var tooltip= params[1]||'toggle sidebar';
var mode = (params[2] && params[2]=="hide")? "hide":"show";
var arrow = (mode == "hide")? this.settings.arrow1:this.settings.arrow2;
var label= (params[0]&¶ms[0]!='.')?params[0]+" "+arrow:arrow;
var theBtn = createTiddlyButton(place,label,tooltip,this.onToggleSideBar,"button HideSideBarButton");
if (mode == "hide")
{
(document.getElementById("sidebar")).setAttribute("toggle","hide");
setStylesheet(this.settings.styleHide,"ToggleSideBarStyles");
}
};
config.macros.toggleSideBar.onToggleSideBar = function(){
var sidebar = document.getElementById("sidebar");
var settings = config.macros.toggleSideBar.settings;
if (sidebar.getAttribute("toggle")=='hide')
{
setStylesheet(settings.styleShow,"ToggleSideBarStyles");
sidebar.setAttribute("toggle","show");
this.firstChild.data= (this.firstChild.data).replace(settings.arrow1,settings.arrow2);
}
else
{
setStylesheet(settings.styleHide,"ToggleSideBarStyles");
sidebar.setAttribute("toggle","hide");
this.firstChild.data= (this.firstChild.data).replace(settings.arrow2,settings.arrow1);
}
return false;
}
setStylesheet(".HideSideBarButton .button {font-weight:bold; padding: 0 5px;}\n","ToggleSideBarButtonStyles");
//}}}
|~ViewToolbar|closeTiddler closeOthers deleteTiddler myComment > +editTiddler wordCount basicCopy readOnlyTiddler fields syncing permalink references exportTiddler timeStamp renameTiddler tagEdit jump collapseOthers|
|~EditToolbar|saveTiddler -cancelTiddler deleteTiddler|
/***
|''Name:''|TrashPlugin|
|''Description:''|Trash bin for ~TikiWiki|
|''Version:''|1.1.1 (June 28, 2010) |
|''Source:''|http://cooltool.tiddlyspot.com/#TrashPlugin|
|''Author:''|Ido Magal, Kenny Z|
|''Licence:''|[[BSD open source license]]|
|''CoreVersion:''|2.6|
|''Browser:''|??|
!!Description
This plugin provides trash bin functionality. Instead of being permanently removed, deleted tiddlers are tagged with "Trash."
*Empty the trash by clicking on the <<emptyTrash>> button in the [[Trash]] tiddler.
*To restore a tiddler, click the "restore" command on the toolbar.
*Shortcuts:
**Holding down CTRL while clicking on "delete" or "restore" will bypass the trash bin.
**Holding down ALT while clicking on "delete" or "restore" will bring up [[Trash]].
!!Configuration
/%--<<option chkAutoEmptyTrashbin>> Automatically Empty Trash?--
Retain trash in trashbin for <<option txtDaysToKeepInTrashbin>> days. //0 to retain all.// %/
New trash are tagged as: <<option txtTrashTags>>
!!!Installation instructions
#Import
#Save and reload your wiki.
!!!Uninstallation instructions
#Empty the [[Trash]] ( <<emptyTrash>> )
#Delete this tiddler.
!!!Revision history
* V1.1.1 (June 28, 2010) added restore functionality, isolated trash by rename.
!!!To Do
* Make trash keep only n days worth of garbage.
!!Code
***/
//{{{
if(!version.extensions.TrashPlugin) {
version.extensions.TrashPlugin = {installed:true};
//if(!config.options.chkAutoEmptyTrashbin) config.options.chkAutoEmptyTrashbin = false;
if(!config.options.txtTrashKeepDays) config.options.txtDaysToKeepInTrashbin = 0;
if(!config.options.txtTrashTags)
config.options.txtTrashTags = "excludeLists excludeMissing excludeSearch";
config.macros.emptyTrash = {
label: "empty trash",
tooltip: "Delete items tagged as %0 that are older than %1 days old",
handler: function(place,macroName,params,wikifier,paramString,tiddler){
var namedParams = (paramString.parseParams(daysOld))[0];
var daysOld = namedParams['daysOld'] ? namedParams['daysOld'][0] : 0; // default
var buttonTitle = namedParams['title'] ? namedParams['title'][0] : this.label;
createTiddlyButton(place,buttonTitle,this.tooltip.format([cooltool.trashBin.tag,daysOld]),
cooltool.trashBin.emptyTrash(daysOld));
return false;
},
};
if(!window.cooltool) window.cooltool={};
if(!cooltool.trashBin) cooltool.trashBin={};
cooltool.trashBin = {
tag: "Trash",
movedMsg: "'%0' sent to trash bin",
emptyMsg: "The trash bin is empty.",
restoredMsg: "'%0' restored.",
noneToDelMsg: "There are no items in the trash older than %0 days.",
confirmMsg: "The following tiddlers will be deleted:\n\n'%0'\n\nIs it OK to proceed?",
deletedMsg: "Deleted '%0', ",
makeTrashBinMsg: "Trash bin created.",
emptyTrash: function(daysOld){
return function()
{
//daysOld = daysOld || config.options.txtDaysToKeepInTrashbin;
var statusMsg = '';
var collected = [];
var compareDate = new Date();
compareDate.setDate(compareDate.getDate()-daysOld);
store.forEachTiddler(function(title,tiddler){
if (tiddler.tags.contains(cooltool.trashBin.tag)
&& tiddler.modified < compareDate )
{ collected.push(title); }
});
if ( collected.length == 0 ){
if(daysOld==0) statusMsg=(cooltool.trashBin.emptyMsg);
else statusMsg=(cooltool.trashBin.emptyMsg.format( [daysOld] ) );
}
else{ // if trash to del
if (confirm(cooltool.trashBin.confirmMsg.format([collected.join("', '")])))
{
for(var i=0;i<collected.length;i++){ // remove -------------------------------------
story.closeTiddler(collected[i],false,false);
store.removeTiddler(collected[i]);
statusMsg+=(cooltool.trashBin.deletedMsg.format([collected[i]]));
} // ^^^couldn't get DM to NL nor <br />
store.setDirty( true );
}
}
cooltool.trashBin.removeTrashBin(); // remove Trash tiddler if no trash remains
displayMessage(statusMsg);
}
},
createTrashBin: function(){
if (!store.tiddlerExists(this.tag)){
store.saveTiddler(this.tag,this.tag,"<<emptyTrash>>","TrashPlugin",new Date());
return(cooltool.trashBin.makeTrashBinMsg);
}
},
removeTrashBin: function(){
if(store.getTaggedTiddlers(this.tag).length==0){
story.closeTiddler(this.tag,true,false);
store.removeTiddler(this.tag);
store.setDirty( true );
}else
story.refreshTiddler(this.tag,false,true );
},
banishTrash: function(tiddler,title){
// STORE THE Original Tags and info as fields
store.setValue(tiddler,"trash.tags",String.encodeTiddlyLinkList(tiddler.tags));
store.setValue(tiddler,"trash.title",tiddler.title);
store.setValue(tiddler,"trash.modifier",tiddler.modifier);
store.setValue(tiddler,"trash.modified",tiddler.modified.getTime());
// CHANGE THE MODIFIED DATE AND TAGS
var when = new Date();
var newTitle = title + "_Trash("+when.getTime()+")"
var tags=config.options.txtTrashTags+" [["+this.tag+"]]".readBracketedList();
//save tiddler w/ new title, tags, etc... and notify/setDirty.
store.deleteTiddler(title);
tiddler.set(newTitle,null,config.options.txtUserName,when,tags);
store.addTiddler(tiddler); store.notify(title,true); store.notify(newTitle,true);
store.dirty=true; store.setDirty(title,true); autoSaveChanges();
return cooltool.trashBin.movedMsg.format([title]);
},
restoreTrash: function(tiddler,title){
// Restore the original Tags and info
var oldTitle=store.getValue(tiddler,"trash.title");
var who=store.getValue(tiddler,"trash.modifier");
var tags=store.getValue(tiddler,"trash.tags").readBracketedList();
var when = new Date(parseInt(store.getValue(tiddler,"trash.modified")));
// ERROR CHECKING HERE
if(store.tiddlerExists(oldTitle)){
if(!confirm(oldTitle+" already exists, overwrite it?"))
return "Error: Tiddler already exists";
cooltool.trashBin.banishTrash(store.fetchTiddler(oldTitle),oldTitle);
}
// as of now, if any value is undefined or error, it will halt here w/o err msgs.
// Clear fields
delete tiddler.fields['trash.title'];
delete tiddler.fields['trash.tags'];
delete tiddler.fields['trash.modifier'];
delete tiddler.fields['trash.modified'];
//save tiddler w/ new title, tags, etc... and notify/setDirty.
store.deleteTiddler(title);
tiddler.set(oldTitle,null,who,when,tags);
store.addTiddler(tiddler); store.notify(title,true); store.notify(oldTitle,true);
store.dirty=true; store.setDirty(title,true); autoSaveChanges();
story.displayTiddler(null,oldTitle);
return cooltool.trashBin.restoredMsg.format([oldTitle]);
},
}
config.commands.restoreTiddler ={
text: "restore",
tooltip: "Restore this tiddler from trash bin",
handler: function( event,src,title ){
config.commands.deleteTiddler.handler(event,src,title);
},
};
////////////////// hijack delete command
cooltool.trashBin.disposeTiddler=config.commands.deleteTiddler.handler;
config.commands.deleteTiddler.handler = function( event,src,title ){
var tag = cooltool.trashBin.tag;
if(event.altKey){ // Display trash bin on alt click
if(store.tiddlerExists(tag))story.displayTiddler(null,tag);
else alert(cooltool.trashBin.emptyMsg);
} // if tiddler exists (i.e., not a NEW, unsaved tiddler in edit mode) and not bypassing Trash (holding CTRL key)
else if(store.tiddlerExists(title) && !event.ctrlKey){
// if Trashbin doesn't exist, create it and they will come...
cooltool.trashBin.createTrashBin();
var tiddler=store.fetchTiddler(title);
story.closeTiddler(title,true,event.shiftKey); // closing first is better.
if(!tiddler.tags.contains(tag)){ // if not trash BANISH, else RESTORE
statusMsg=cooltool.trashBin.banishTrash(tiddler,title);
}else{ // restore
statusMsg=cooltool.trashBin.restoreTrash(tiddler,title);
}
displayMessage(statusMsg);
}else {
cooltool.trashBin.disposeTiddler.apply(this,arguments)
}
story.refreshTiddler(tag,null,true);
return false;
};
//Hijacked getTemplateForTiddler
cooltool.trashBin.ori_getTemplate = Story.prototype.getTemplateForTiddler;
Story.prototype.getTemplateForTiddler=function(title,template,tiddler){
var t=cooltool.trashBin.ori_getTemplate(title,template,tiddler);
if(tiddler.tags.contains(cooltool.trashBin.tag)){
t=t.replace(/(deleteTiddler)/g,"restoreTiddler");
}
return t;
};
} //# end of 'install only once'
//}}}
<<myComment>>
Comment of: [[TrashPlugin]]
----
~~:::::__Sun Jun 27 2010 23:49:25 GMT-0400 (Eastern Daylight Time)__:::::~~
^^(__KennyZ Wrote:__)^^ Had a tiddler with alert() on and when being sent to Trash, the page refreshed each time a tag is set. Also an alert pops up each time its refreshed. Code changed to close the tiddler first before changing tags. Saw a significant improvement in speed.
----
~~:::::__Mon Jun 28 2010 02:04:42 GMT-0400 (Eastern Daylight Time)__:::::~~
^^(__KennyZ Wrote:__)^^
Made modifications the deleteTiddler.handler function:
*original data kept in fields
*tiddler given new info, so its isolated from TW
*modifier is "Trash" (puuuhaaha...)
*modified is trashed date.
----
~~:::::__Mon Jun 28 2010 15:41:51 GMT-0400 (Eastern Daylight Time)__:::::~~
^^(__KennyZ Wrote:__)^^ Changes:
*moved most functions to the cooltool namespace.
*added restore runctionality.
If alt+delete, brings up trash bin.
If viewing trash, delete command will change to restore command. But ctrl+del will still del it.
----
~~:::::__Tue Jun 29 2010 18:26:06 GMT-0400 (Eastern Daylight Time)__:::::~~
^^(__KennyZ Wrote:__)^^ Added safety when restoring tiddler with existing title.
/***
Description: Contains the stuff you need to use Tiddlyspot
Note, you also need UploadPlugin, PasswordOptionPlugin and LoadRemoteFileThroughProxy
from http://tiddlywiki.bidix.info for a complete working Tiddlyspot site.
***/
//{{{
// edit this if you are migrating sites or retrofitting an existing TW
config.tiddlyspotSiteId = 'cooltool';
// make it so you can by default see edit controls via http
config.options.chkHttpReadOnly = false;
window.readOnly = false; // make sure of it (for tw 2.2)
window.showBackstage = true; // show backstage too
// disable autosave in d3
if (window.location.protocol != "file:")
config.options.chkGTDLazyAutoSave = false;
// tweak shadow tiddlers to add upload button, password entry box etc
with (config.shadowTiddlers) {
SiteUrl = 'http://'+config.tiddlyspotSiteId+'.tiddlyspot.com';
SideBarOptions = SideBarOptions.replace(/(<<saveChanges>>)/,"$1<<tiddler TspotSidebar>>");
OptionsPanel = OptionsPanel.replace(/^/,"<<tiddler TspotOptions>>");
}
// create some shadow tiddler content
merge(config.shadowTiddlers,{
'TspotOptions':[
"tiddlyspot password:",
"<<option pasUploadPassword>>",
""
].join("\n"),
'TspotControls':[
"| tiddlyspot password:|<<option pasUploadPassword>>|",
"| site management:|<<upload http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/store.cgi index.html . . " + config.tiddlyspotSiteId + ">>//(requires tiddlyspot password)//<br>[[control panel|http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/controlpanel]], [[download (go offline)|http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/download]]|",
"| links:|[[tiddlyspot.com|http://tiddlyspot.com/]], [[FAQs|http://faq.tiddlyspot.com/]], [[blog|http://tiddlyspot.blogspot.com/]], email [[support|mailto:support@tiddlyspot.com]] & [[feedback|mailto:feedback@tiddlyspot.com]], [[donate|http://tiddlyspot.com/?page=donate]]|"
].join("\n"),
'WelcomeToTiddlyspot':[
"This document is a ~TiddlyWiki from tiddlyspot.com. A ~TiddlyWiki is an electronic notebook that is great for managing todo lists, personal information, and all sorts of things.",
"",
"@@font-weight:bold;font-size:1.3em;color:#444; //What now?// @@ Before you can save any changes, you need to enter your password in the form below. Then configure privacy and other site settings at your [[control panel|http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/controlpanel]] (your control panel username is //" + config.tiddlyspotSiteId + "//).",
"<<tiddler TspotControls>>",
"See also GettingStarted.",
"",
"@@font-weight:bold;font-size:1.3em;color:#444; //Working online// @@ You can edit this ~TiddlyWiki right now, and save your changes using the \"save to web\" button in the column on the right.",
"",
"@@font-weight:bold;font-size:1.3em;color:#444; //Working offline// @@ A fully functioning copy of this ~TiddlyWiki can be saved onto your hard drive or USB stick. You can make changes and save them locally without being connected to the Internet. When you're ready to sync up again, just click \"upload\" and your ~TiddlyWiki will be saved back to tiddlyspot.com.",
"",
"@@font-weight:bold;font-size:1.3em;color:#444; //Help!// @@ Find out more about ~TiddlyWiki at [[TiddlyWiki.com|http://tiddlywiki.com]]. Also visit [[TiddlyWiki.org|http://tiddlywiki.org]] for documentation on learning and using ~TiddlyWiki. New users are especially welcome on the [[TiddlyWiki mailing list|http://groups.google.com/group/TiddlyWiki]], which is an excellent place to ask questions and get help. If you have a tiddlyspot related problem email [[tiddlyspot support|mailto:support@tiddlyspot.com]].",
"",
"@@font-weight:bold;font-size:1.3em;color:#444; //Enjoy :)// @@ We hope you like using your tiddlyspot.com site. Please email [[feedback@tiddlyspot.com|mailto:feedback@tiddlyspot.com]] with any comments or suggestions."
].join("\n"),
'TspotSidebar':[
"<<upload http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/store.cgi index.html . . " + config.tiddlyspotSiteId + ">><html><a href='http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/download' class='button'>download</a></html>"
].join("\n")
});
//}}}
tiddlyspot password:
<<option pasUploadPassword>>
<<upload http://cooltool.tiddlyspot.com/store.cgi index.html . . cooltool>><html><a href='http://cooltool.tiddlyspot.com/download' class='button'>download</a></html>
/***
<<<
|Name|UndoChangeBySyncPlugin|
|Source|http://cooltool.tiddlyspot.com#UndoChangeBySyncPlugin|
|Documentation||
|Version|0.01|
|Author|Kenny Z|
|License|Plubic Domain|
|~CoreVersion|2.6|
|Type|plugin|
|Description|Always download server version while synchronizing|
<<<
!Usage:
#Import
#Save and reload
!Code:
***/
//{{{
FileAdaptor.prototype.putTiddler = function(tiddler,context,userParams,callback){
callback= function(context,syncItem) {
if(syncItem) {
var msg= {text: "Overwrote local version", display:null, className:'gotFromServer'}
var tiddler = context.tiddler;
store.saveTiddler(tiddler.title,tiddler.title,tiddler.text,tiddler.modifier,tiddler.modified,tiddler.tags,tiddler.fields,true,tiddler.created);
syncItem.syncStatus = msg;
config.macros.sync.updateSyncStatus(syncItem);
}
};
return userParams.adaptor.getTiddler(tiddler.title,context,userParams,callback);
};
//}}}
| 22/06/2010 18:48:41 | YourName | [[cooltool.html|file:///S:/APPZ/TiddlyWiki/cooltool.html]] | [[store.cgi|http://cooltool.tiddlyspot.com/store.cgi]] | . | [[index.html | http://cooltool.tiddlyspot.com/index.html]] | . |
| 28/06/2010 23:14:57 | KennyZ | [[cooltool.html|file:///S:/APPZ/TiddlyWiki/cooltool.html]] | [[store.cgi|http://cooltool.tiddlyspot.com/store.cgi]] | . | [[index.html | http://cooltool.tiddlyspot.com/index.html]] | . | ok |
| 29/06/2010 16:39:34 | KennyZ | [[cooltool.html|file:///S:/APPZ/TiddlyWiki/cooltool.html#]] | [[store.cgi|http://cooltool.tiddlyspot.com/store.cgi]] | . | [[index.html | http://cooltool.tiddlyspot.com/index.html]] | . | ok |
| 29/06/2010 16:40:04 | YourName | [[cooltool.html|file:///S:/APPZ/TiddlyWiki/cooltool.html#]] | [[store.cgi|http://cooltool.tiddlyspot.com/store.cgi]] | . | [[index.html | http://cooltool.tiddlyspot.com/index.html]] | . | ok |
| 29/06/2010 18:44:55 | KennyZ | [[cooltool.html|file:///S:/APPZ/TiddlyWiki/cooltool.html]] | [[store.cgi|http://cooltool.tiddlyspot.com/store.cgi]] | . | [[index.html | http://cooltool.tiddlyspot.com/index.html]] | . | ok |
| 29/06/2010 18:49:53 | KennyZ | [[cooltool.html|file:///S:/APPZ/TiddlyWiki/cooltool.html]] | [[store.cgi|http://cooltool.tiddlyspot.com/store.cgi]] | . | [[index.html | http://cooltool.tiddlyspot.com/index.html]] | . | ok |
| 29/06/2010 19:44:02 | YourName | [[cooltool.html|file:///S:/APPZ/TiddlyWiki/cooltool.html]] | [[store.cgi|http://cooltool.tiddlyspot.com/store.cgi]] | . | [[index.html | http://cooltool.tiddlyspot.com/index.html]] | . | ok |
| 29/06/2010 19:50:30 | KennyZ | [[cooltool.html|file:///S:/APPZ/TiddlyWiki/cooltool.html]] | [[store.cgi|http://cooltool.tiddlyspot.com/store.cgi]] | . | [[index.html | http://cooltool.tiddlyspot.com/index.html]] | . | ok |
| 04/07/2010 17:59:04 | KennyZ | [[cooltool.html|file:///S:/APPZ/TiddlyWiki/cooltool.html#HistoryPluginRequired.zip]] | [[store.cgi|http://cooltool.tiddlyspot.com/store.cgi]] | . | [[index.html | http://cooltool.tiddlyspot.com/index.html]] | . | ok |
| 05/07/2010 00:52:16 | KennyZ | [[cooltool.html|file:///S:/APPZ/TiddlyWiki/cooltool.html]] | [[store.cgi|http://cooltool.tiddlyspot.com/store.cgi]] | . | [[index.html | http://cooltool.tiddlyspot.com/index.html]] | . | ok |
| 12/07/2010 19:22:55 | KennyZ | [[cooltool.html|file:///S:/APPZ/TiddlyWiki/cooltool.html]] | [[store.cgi|http://cooltool.tiddlyspot.com/store.cgi]] | . | [[index.html | http://cooltool.tiddlyspot.com/index.html]] | . |
/***
|''Name:''|UploadPlugin|
|''Description:''|Save to web a TiddlyWiki|
|''Version:''|4.1.3|
|''Date:''|Feb 24, 2008|
|''Source:''|http://tiddlywiki.bidix.info/#UploadPlugin|
|''Documentation:''|http://tiddlywiki.bidix.info/#UploadPluginDoc|
|''Author:''|BidiX (BidiX (at) bidix (dot) info)|
|''License:''|[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D ]]|
|''~CoreVersion:''|2.2.0|
|''Requires:''|PasswordOptionPlugin|
***/
//{{{
version.extensions.UploadPlugin = {
major: 4, minor: 1, revision: 3,
date: new Date("Feb 24, 2008"),
source: 'http://tiddlywiki.bidix.info/#UploadPlugin',
author: 'BidiX (BidiX (at) bidix (dot) info',
coreVersion: '2.2.0'
};
//
// Environment
//
if (!window.bidix) window.bidix = {}; // bidix namespace
bidix.debugMode = false; // true to activate both in Plugin and UploadService
//
// Upload Macro
//
config.macros.upload = {
// default values
defaultBackupDir: '', //no backup
defaultStoreScript: "store.php",
defaultToFilename: "index.html",
defaultUploadDir: ".",
authenticateUser: true // UploadService Authenticate User
};
config.macros.upload.label = {
promptOption: "Save and Upload this TiddlyWiki with UploadOptions",
promptParamMacro: "Save and Upload this TiddlyWiki in %0",
saveLabel: "save to web",
saveToDisk: "save to disk",
uploadLabel: "upload"
};
config.macros.upload.messages = {
noStoreUrl: "No store URL in parmeters or options",
usernameOrPasswordMissing: "Username or password missing"
};
config.macros.upload.handler = function(place,macroName,params) {
if (readOnly)
return;
var label;
if (document.location.toString().substr(0,4) == "http")
label = this.label.saveLabel;
else
label = this.label.uploadLabel;
var prompt;
if (params[0]) {
prompt = this.label.promptParamMacro.toString().format([this.destFile(params[0],
(params[1] ? params[1]:bidix.basename(window.location.toString())), params[3])]);
} else {
prompt = this.label.promptOption;
}
createTiddlyButton(place, label, prompt, function() {config.macros.upload.action(params);}, null, null, this.accessKey);
};
config.macros.upload.action = function(params)
{
// for missing macro parameter set value from options
if (!params) params = {};
var storeUrl = params[0] ? params[0] : config.options.txtUploadStoreUrl;
var toFilename = params[1] ? params[1] : config.options.txtUploadFilename;
var backupDir = params[2] ? params[2] : config.options.txtUploadBackupDir;
var uploadDir = params[3] ? params[3] : config.options.txtUploadDir;
var username = params[4] ? params[4] : config.options.txtUploadUserName;
var password = config.options.pasUploadPassword; // for security reason no password as macro parameter
// for still missing parameter set default value
if ((!storeUrl) && (document.location.toString().substr(0,4) == "http"))
storeUrl = bidix.dirname(document.location.toString())+'/'+config.macros.upload.defaultStoreScript;
if (storeUrl.substr(0,4) != "http")
storeUrl = bidix.dirname(document.location.toString()) +'/'+ storeUrl;
if (!toFilename)
toFilename = bidix.basename(window.location.toString());
if (!toFilename)
toFilename = config.macros.upload.defaultToFilename;
if (!uploadDir)
uploadDir = config.macros.upload.defaultUploadDir;
if (!backupDir)
backupDir = config.macros.upload.defaultBackupDir;
// report error if still missing
if (!storeUrl) {
alert(config.macros.upload.messages.noStoreUrl);
clearMessage();
return false;
}
if (config.macros.upload.authenticateUser && (!username || !password)) {
alert(config.macros.upload.messages.usernameOrPasswordMissing);
clearMessage();
return false;
}
bidix.upload.uploadChanges(false,null,storeUrl, toFilename, uploadDir, backupDir, username, password);
return false;
};
config.macros.upload.destFile = function(storeUrl, toFilename, uploadDir)
{
if (!storeUrl)
return null;
var dest = bidix.dirname(storeUrl);
if (uploadDir && uploadDir != '.')
dest = dest + '/' + uploadDir;
dest = dest + '/' + toFilename;
return dest;
};
//
// uploadOptions Macro
//
config.macros.uploadOptions = {
handler: function(place,macroName,params) {
var wizard = new Wizard();
wizard.createWizard(place,this.wizardTitle);
wizard.addStep(this.step1Title,this.step1Html);
var markList = wizard.getElement("markList");
var listWrapper = document.createElement("div");
markList.parentNode.insertBefore(listWrapper,markList);
wizard.setValue("listWrapper",listWrapper);
this.refreshOptions(listWrapper,false);
var uploadCaption;
if (document.location.toString().substr(0,4) == "http")
uploadCaption = config.macros.upload.label.saveLabel;
else
uploadCaption = config.macros.upload.label.uploadLabel;
wizard.setButtons([
{caption: uploadCaption, tooltip: config.macros.upload.label.promptOption,
onClick: config.macros.upload.action},
{caption: this.cancelButton, tooltip: this.cancelButtonPrompt, onClick: this.onCancel}
]);
},
options: [
"txtUploadUserName",
"pasUploadPassword",
"txtUploadStoreUrl",
"txtUploadDir",
"txtUploadFilename",
"txtUploadBackupDir",
"chkUploadLog",
"txtUploadLogMaxLine"
],
refreshOptions: function(listWrapper) {
var opts = [];
for(i=0; i<this.options.length; i++) {
var opt = {};
opts.push();
opt.option = "";
n = this.options[i];
opt.name = n;
opt.lowlight = !config.optionsDesc[n];
opt.description = opt.lowlight ? this.unknownDescription : config.optionsDesc[n];
opts.push(opt);
}
var listview = ListView.create(listWrapper,opts,this.listViewTemplate);
for(n=0; n<opts.length; n++) {
var type = opts[n].name.substr(0,3);
var h = config.macros.option.types[type];
if (h && h.create) {
h.create(opts[n].colElements['option'],type,opts[n].name,opts[n].name,"no");
}
}
},
onCancel: function(e)
{
backstage.switchTab(null);
return false;
},
wizardTitle: "Upload with options",
step1Title: "These options are saved in cookies in your browser",
step1Html: "<input type='hidden' name='markList'></input><br>",
cancelButton: "Cancel",
cancelButtonPrompt: "Cancel prompt",
listViewTemplate: {
columns: [
{name: 'Description', field: 'description', title: "Description", type: 'WikiText'},
{name: 'Option', field: 'option', title: "Option", type: 'String'},
{name: 'Name', field: 'name', title: "Name", type: 'String'}
],
rowClasses: [
{className: 'lowlight', field: 'lowlight'}
]}
};
//
// upload functions
//
if (!bidix.upload) bidix.upload = {};
if (!bidix.upload.messages) bidix.upload.messages = {
//from saving
invalidFileError: "The original file '%0' does not appear to be a valid TiddlyWiki",
backupSaved: "Backup saved",
backupFailed: "Failed to upload backup file",
rssSaved: "RSS feed uploaded",
rssFailed: "Failed to upload RSS feed file",
emptySaved: "Empty template uploaded",
emptyFailed: "Failed to upload empty template file",
mainSaved: "Main TiddlyWiki file uploaded",
mainFailed: "Failed to upload main TiddlyWiki file. Your changes have not been saved",
//specific upload
loadOriginalHttpPostError: "Can't get original file",
aboutToSaveOnHttpPost: 'About to upload on %0 ...',
storePhpNotFound: "The store script '%0' was not found."
};
bidix.upload.uploadChanges = function(onlyIfDirty,tiddlers,storeUrl,toFilename,uploadDir,backupDir,username,password)
{
var callback = function(status,uploadParams,original,url,xhr) {
if (!status) {
displayMessage(bidix.upload.messages.loadOriginalHttpPostError);
return;
}
if (bidix.debugMode)
alert(original.substr(0,500)+"\n...");
// Locate the storeArea div's
var posDiv = locateStoreArea(original);
if((posDiv[0] == -1) || (posDiv[1] == -1)) {
alert(config.messages.invalidFileError.format([localPath]));
return;
}
bidix.upload.uploadRss(uploadParams,original,posDiv);
};
if(onlyIfDirty && !store.isDirty())
return;
clearMessage();
// save on localdisk ?
if (document.location.toString().substr(0,4) == "file") {
var path = document.location.toString();
var localPath = getLocalPath(path);
saveChanges();
}
// get original
var uploadParams = new Array(storeUrl,toFilename,uploadDir,backupDir,username,password);
var originalPath = document.location.toString();
// If url is a directory : add index.html
if (originalPath.charAt(originalPath.length-1) == "/")
originalPath = originalPath + "index.html";
var dest = config.macros.upload.destFile(storeUrl,toFilename,uploadDir);
var log = new bidix.UploadLog();
log.startUpload(storeUrl, dest, uploadDir, backupDir);
displayMessage(bidix.upload.messages.aboutToSaveOnHttpPost.format([dest]));
if (bidix.debugMode)
alert("about to execute Http - GET on "+originalPath);
var r = doHttp("GET",originalPath,null,null,username,password,callback,uploadParams,null);
if (typeof r == "string")
displayMessage(r);
return r;
};
bidix.upload.uploadRss = function(uploadParams,original,posDiv)
{
var callback = function(status,params,responseText,url,xhr) {
if(status) {
var destfile = responseText.substring(responseText.indexOf("destfile:")+9,responseText.indexOf("\n", responseText.indexOf("destfile:")));
displayMessage(bidix.upload.messages.rssSaved,bidix.dirname(url)+'/'+destfile);
bidix.upload.uploadMain(params[0],params[1],params[2]);
} else {
displayMessage(bidix.upload.messages.rssFailed);
}
};
// do uploadRss
if(config.options.chkGenerateAnRssFeed) {
var rssPath = uploadParams[1].substr(0,uploadParams[1].lastIndexOf(".")) + ".xml";
var rssUploadParams = new Array(uploadParams[0],rssPath,uploadParams[2],'',uploadParams[4],uploadParams[5]);
var rssString = generateRss();
// no UnicodeToUTF8 conversion needed when location is "file" !!!
if (document.location.toString().substr(0,4) != "file")
rssString = convertUnicodeToUTF8(rssString);
bidix.upload.httpUpload(rssUploadParams,rssString,callback,Array(uploadParams,original,posDiv));
} else {
bidix.upload.uploadMain(uploadParams,original,posDiv);
}
};
bidix.upload.uploadMain = function(uploadParams,original,posDiv)
{
var callback = function(status,params,responseText,url,xhr) {
var log = new bidix.UploadLog();
if(status) {
// if backupDir specified
if ((params[3]) && (responseText.indexOf("backupfile:") > -1)) {
var backupfile = responseText.substring(responseText.indexOf("backupfile:")+11,responseText.indexOf("\n", responseText.indexOf("backupfile:")));
displayMessage(bidix.upload.messages.backupSaved,bidix.dirname(url)+'/'+backupfile);
}
var destfile = responseText.substring(responseText.indexOf("destfile:")+9,responseText.indexOf("\n", responseText.indexOf("destfile:")));
displayMessage(bidix.upload.messages.mainSaved,bidix.dirname(url)+'/'+destfile);
store.setDirty(false);
log.endUpload("ok");
} else {
alert(bidix.upload.messages.mainFailed);
displayMessage(bidix.upload.messages.mainFailed);
log.endUpload("failed");
}
};
// do uploadMain
var revised = bidix.upload.updateOriginal(original,posDiv);
bidix.upload.httpUpload(uploadParams,revised,callback,uploadParams);
};
bidix.upload.httpUpload = function(uploadParams,data,callback,params)
{
var localCallback = function(status,params,responseText,url,xhr) {
url = (url.indexOf("nocache=") < 0 ? url : url.substring(0,url.indexOf("nocache=")-1));
if (xhr.status == 404)
alert(bidix.upload.messages.storePhpNotFound.format([url]));
if ((bidix.debugMode) || (responseText.indexOf("Debug mode") >= 0 )) {
alert(responseText);
if (responseText.indexOf("Debug mode") >= 0 )
responseText = responseText.substring(responseText.indexOf("\n\n")+2);
} else if (responseText.charAt(0) != '0')
alert(responseText);
if (responseText.charAt(0) != '0')
status = null;
callback(status,params,responseText,url,xhr);
};
// do httpUpload
var boundary = "---------------------------"+"AaB03x";
var uploadFormName = "UploadPlugin";
// compose headers data
var sheader = "";
sheader += "--" + boundary + "\r\nContent-disposition: form-data; name=\"";
sheader += uploadFormName +"\"\r\n\r\n";
sheader += "backupDir="+uploadParams[3] +
";user=" + uploadParams[4] +
";password=" + uploadParams[5] +
";uploaddir=" + uploadParams[2];
if (bidix.debugMode)
sheader += ";debug=1";
sheader += ";;\r\n";
sheader += "\r\n" + "--" + boundary + "\r\n";
sheader += "Content-disposition: form-data; name=\"userfile\"; filename=\""+uploadParams[1]+"\"\r\n";
sheader += "Content-Type: text/html;charset=UTF-8" + "\r\n";
sheader += "Content-Length: " + data.length + "\r\n\r\n";
// compose trailer data
var strailer = new String();
strailer = "\r\n--" + boundary + "--\r\n";
data = sheader + data + strailer;
if (bidix.debugMode) alert("about to execute Http - POST on "+uploadParams[0]+"\n with \n"+data.substr(0,500)+ " ... ");
var r = doHttp("POST",uploadParams[0],data,"multipart/form-data; ;charset=UTF-8; boundary="+boundary,uploadParams[4],uploadParams[5],localCallback,params,null);
if (typeof r == "string")
displayMessage(r);
return r;
};
// same as Saving's updateOriginal but without convertUnicodeToUTF8 calls
bidix.upload.updateOriginal = function(original, posDiv)
{
if (!posDiv)
posDiv = locateStoreArea(original);
if((posDiv[0] == -1) || (posDiv[1] == -1)) {
alert(config.messages.invalidFileError.format([localPath]));
return;
}
var revised = original.substr(0,posDiv[0] + startSaveArea.length) + "\n" +
store.allTiddlersAsHtml() + "\n" +
original.substr(posDiv[1]);
var newSiteTitle = getPageTitle().htmlEncode();
revised = revised.replaceChunk("<title"+">","</title"+">"," " + newSiteTitle + " ");
revised = updateMarkupBlock(revised,"PRE-HEAD","MarkupPreHead");
revised = updateMarkupBlock(revised,"POST-HEAD","MarkupPostHead");
revised = updateMarkupBlock(revised,"PRE-BODY","MarkupPreBody");
revised = updateMarkupBlock(revised,"POST-SCRIPT","MarkupPostBody");
return revised;
};
//
// UploadLog
//
// config.options.chkUploadLog :
// false : no logging
// true : logging
// config.options.txtUploadLogMaxLine :
// -1 : no limit
// 0 : no Log lines but UploadLog is still in place
// n : the last n lines are only kept
// NaN : no limit (-1)
bidix.UploadLog = function() {
if (!config.options.chkUploadLog)
return; // this.tiddler = null
this.tiddler = store.getTiddler("UploadLog");
if (!this.tiddler) {
this.tiddler = new Tiddler();
this.tiddler.title = "UploadLog";
this.tiddler.text = "| !date | !user | !location | !storeUrl | !uploadDir | !toFilename | !backupdir | !origin |";
this.tiddler.created = new Date();
this.tiddler.modifier = config.options.txtUserName;
this.tiddler.modified = new Date();
store.addTiddler(this.tiddler);
}
return this;
};
bidix.UploadLog.prototype.addText = function(text) {
if (!this.tiddler)
return;
// retrieve maxLine when we need it
var maxLine = parseInt(config.options.txtUploadLogMaxLine,10);
if (isNaN(maxLine))
maxLine = -1;
// add text
if (maxLine != 0)
this.tiddler.text = this.tiddler.text + text;
// Trunck to maxLine
if (maxLine >= 0) {
var textArray = this.tiddler.text.split('\n');
if (textArray.length > maxLine + 1)
textArray.splice(1,textArray.length-1-maxLine);
this.tiddler.text = textArray.join('\n');
}
// update tiddler fields
this.tiddler.modifier = config.options.txtUserName;
this.tiddler.modified = new Date();
store.addTiddler(this.tiddler);
// refresh and notifiy for immediate update
story.refreshTiddler(this.tiddler.title);
store.notify(this.tiddler.title, true);
};
bidix.UploadLog.prototype.startUpload = function(storeUrl, toFilename, uploadDir, backupDir) {
if (!this.tiddler)
return;
var now = new Date();
var text = "\n| ";
var filename = bidix.basename(document.location.toString());
if (!filename) filename = '/';
text += now.formatString("0DD/0MM/YYYY 0hh:0mm:0ss") +" | ";
text += config.options.txtUserName + " | ";
text += "[["+filename+"|"+location + "]] |";
text += " [[" + bidix.basename(storeUrl) + "|" + storeUrl + "]] | ";
text += uploadDir + " | ";
text += "[[" + bidix.basename(toFilename) + " | " +toFilename + "]] | ";
text += backupDir + " |";
this.addText(text);
};
bidix.UploadLog.prototype.endUpload = function(status) {
if (!this.tiddler)
return;
this.addText(" "+status+" |");
};
//
// Utilities
//
bidix.checkPlugin = function(plugin, major, minor, revision) {
var ext = version.extensions[plugin];
if (!
(ext &&
((ext.major > major) ||
((ext.major == major) && (ext.minor > minor)) ||
((ext.major == major) && (ext.minor == minor) && (ext.revision >= revision))))) {
// write error in PluginManager
if (pluginInfo)
pluginInfo.log.push("Requires " + plugin + " " + major + "." + minor + "." + revision);
eval(plugin); // generate an error : "Error: ReferenceError: xxxx is not defined"
}
};
bidix.dirname = function(filePath) {
if (!filePath)
return;
var lastpos;
if ((lastpos = filePath.lastIndexOf("/")) != -1) {
return filePath.substring(0, lastpos);
} else {
return filePath.substring(0, filePath.lastIndexOf("\\"));
}
};
bidix.basename = function(filePath) {
if (!filePath)
return;
var lastpos;
if ((lastpos = filePath.lastIndexOf("#")) != -1)
filePath = filePath.substring(0, lastpos);
if ((lastpos = filePath.lastIndexOf("/")) != -1) {
return filePath.substring(lastpos + 1);
} else
return filePath.substring(filePath.lastIndexOf("\\")+1);
};
bidix.initOption = function(name,value) {
if (!config.options[name])
config.options[name] = value;
};
//
// Initializations
//
// require PasswordOptionPlugin 1.0.1 or better
bidix.checkPlugin("PasswordOptionPlugin", 1, 0, 1);
// styleSheet
setStylesheet('.txtUploadStoreUrl, .txtUploadBackupDir, .txtUploadDir {width: 22em;}',"uploadPluginStyles");
//optionsDesc
merge(config.optionsDesc,{
txtUploadStoreUrl: "Url of the UploadService script (default: store.php)",
txtUploadFilename: "Filename of the uploaded file (default: in index.html)",
txtUploadDir: "Relative Directory where to store the file (default: . (downloadService directory))",
txtUploadBackupDir: "Relative Directory where to backup the file. If empty no backup. (default: ''(empty))",
txtUploadUserName: "Upload Username",
pasUploadPassword: "Upload Password",
chkUploadLog: "do Logging in UploadLog (default: true)",
txtUploadLogMaxLine: "Maximum of lines in UploadLog (default: 10)"
});
// Options Initializations
bidix.initOption('txtUploadStoreUrl','');
bidix.initOption('txtUploadFilename','');
bidix.initOption('txtUploadDir','');
bidix.initOption('txtUploadBackupDir','');
bidix.initOption('txtUploadUserName','');
bidix.initOption('pasUploadPassword','');
bidix.initOption('chkUploadLog',true);
bidix.initOption('txtUploadLogMaxLine','10');
// Backstage
merge(config.tasks,{
uploadOptions: {text: "upload", tooltip: "Change UploadOptions and Upload", content: '<<uploadOptions>>'}
});
config.backstageTasks.push("uploadOptions");
//}}}
<!--{{{-->
<span class='title' macro='view title'></span>
<span class='subtitle'><span macro='view modifier link'></span>, <span macro='view modified date'></span> (<span macro='message views.wikified.createdPrompt'></span> <span macro='view created date'></span>)</span>
<div><span class='toolbar' macro='toolbar [[ToolbarCommands::ViewToolbar]]'></span></div>
<div class='tagging' macro='tagging'></div>
<div class='tagged'>
<div macro='tagger'></div>
<div macro='tags'></div>
</div>
<!-- For DiscussionPlugin / CommentPlugin
<div class='viewer' macro='tabs txtDiscussionTab Page Page CurrentTiddler {{var c=0; if(place) var h=story.findContainingTiddler(place); if(h) c=config.macros.discussion.countComments(h.getAttribute("tiddler")); "Discussion"+(c?" ("+c+")":"")}} Discussion DiscussionTiddler'></div>
-->
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
<div class='toolbar' macro='toolbar toggleTiddler'></div>
<br /><br />
<!--}}}-->
/***
|''Name:''|WebReadOnlyPlugin|
|''Description:''|Make ~TiddlyWikis readonly over the web|
|''Author:''|Kenny Z|
|''Source:''|http://cooltool.tiddlyspot.com/#WebReadOnlyPlugin|
|''CodeRepository:''| |
|''Version:''|0.0.1|
|''Status:''|Beta|
|''Date:''|June 20, 2010|
|''Comments:''| |
|''License:''|[[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]] |
|''~CoreVersion:''|2.6|
!!Description
Make ~TiddlyWikis readonly over the web
!!Usage
#Import
#Save & Reload
!!Code
***/
//{{{
if (document.location.toString().substr(0,4).toLowerCase() == "http"){
showBackstage = false;
readOnly = true;
// toolbar
store.saveTiddler(null,"ToolbarCommands","|~ViewToolbar|closeTiddler closeOthers permalink references jump +collapseOthers|\n|~EditToolbar||");
function confirmExit(){ // disable confirm exit
hadConfirmExit = true;
return;
};
}
//}}}
//{{{
if(window.location.protocol == "file:"){
config.options.chkDisableTabsBar = false;
config.options.chkDisableWikiLinks = true;
config.options.chkSaveBackups = false;
//config.options.chkAutoSave = false;
//config.options.chkRegExpSearch = false;
//config.options.chkCaseSensitiveSearch = false;
//config.options.chkIncrementalSearch = true;
//config.options.chkAnimate = true;
//config.options.chkGenerateAnRssFeed = false;
//config.options.chkSaveEmptyTemplate = false;
//config.options.chkOpenInNewWindow = true;
//config.options.chkToggleLinks = false;
//config.options.chkHttpReadOnly = true;
//config.options.chkForceMinorUpdate = false;
//config.options.chkConfirmDelete = true;
config.options.chkInsertTabs = true;
config.options.chkUsePreForStorage = true; //Whethertouse<pre>formatforstorage
//config.options.chkDisplayInstrumentation = false;
//config.options.txtBackupFolder = "";
//config.options.txtEditorFocus = "text";
//config.options.txtMainTab = "tabTimeline";
//config.options.txtMoreTab = "moreTabAll";
config.options.txtMaxEditRows = "40";
//config.options.txtFileSystemCharSet = "UTF-8";
config.options.txtTheme = "";
config.options.txtUserName="KennyZ";
}
//}}}
/***
|''Name:''|WordCountPlugin|
|''Description:''|wc in unix|
|''Author:''|Kenny Z|
|''Source:''|http://cooltool.tiddlyspot.com/#WordCountPlugin|
|''CodeRepository:''| |
|''Version:''|0.0.1|
|''Status:''|Alpha|
|''Date:''|June 25, 2010|
|''Comments:''||
|''License:''|[[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]] |
|''~CoreVersion:''|2.6|
!!Description
Count the number of words.
!!Usage
Add "{{{wordCount}}}" to [[ToolbarCommands]] in the ~ViewToolbar slice.
!!Configuration
Max recursive tiddler text level to follow: <<option txtRecursiveTiddlerTextLevel>> (e.g. If a tiddler includes {{{[[linked tiddler]]}}})
!!Code
***/
//{{{
if(!config.options.txtRecursiveTiddlerTextLevel)
config.options.txtRecursiveTiddlerTextLevel = 0;
if(!version.extensions.wordCount) {
version.extensions.wordCount= {installed:true};
config.commands.wordCount= {
text: "wc",
tooltip: "Word Count",
sep: '\n',
handler: function(event,src,title) {
var txt= store.getRecursiveTiddlerText(title,'',config.options.txtRecursiveTiddlerTextLevel);
var list = [];
list.push('Bytes: '+wc.getBytes(txt));
list.push('Words (online): '+txt.split(/\s+/gim).length);
//list.push('Characters : '+wc.getBytes(txt.replace(/\r|\n/gim,'')) // NL not a character
// +', '+wc.getBytes(txt.replace(/\s+/gim,'')) +'(no spaces)');
list.push('UTF-8 Characters : '+txt.replace(/\r|\n/gim,'').length // NL not a character
+', '+txt.replace(/\s+/gim,'').length+'(no spaces)');
var arr=txt.split(/\n/gm);
list.push('Lines: '+ arr.length +', '+wc.nonblankLines(arr)+'(nonblank)');
list.push('Chars on longest line: '+ wc.longestLine(arr));
list.push('Chars on shortest nonblank line: '+ wc.shortestNonblankLine(arr));
list.push('SHA-1 hash of text:\n\t'+store.getTiddler(title).generateFingerprint());
alert(list.join(wc.sep)); // Display
},
getBytes: function(str){
var count= 0;
for(var i=0; i<str.length;i++){
c = str.charCodeAt(i);
if(c<128) count++;
else if((c>191)&&(c<224)) count +=2;
else count+=3;
}
return count;
},
longestLine: function(arr){
var max = 0;
for(var i=0; i< arr.length; i++){
if(max < arr[i].length) max = arr[i].length;
}
return max;
},
shortestNonblankLine: function(arr){
var min = Number.MAX_VALUE;
for(var i=0; i< arr.length; i++){
if((wc.trim(arr[i]) !='')&&(min > arr[i].length)) min = arr[i].length;
}
return min;
},
nonblankLines: function(arr){
var count=0;
for(var i=0; i< arr.length; i++){
if(wc.trim(arr[i])!='') count++;
}
return count;
},
trim: function(txt){
return txt.replace(/^\s+|\s+$/g,'');
},
};
var wc = config.commands.wordCount;
} //# end of 'install only once'
//}}}
/***
|''Name:''|YourSearchPlugin|
|''Version:''|2.1.3 (2008-04-16)|
|''Source:''|http://tiddlywiki.abego-software.de/#YourSearchPlugin|
|''Author:''|UdoBorkowski (ub [at] abego-software [dot] de)|
|''Licence:''|[[BSD open source license (abego Software)|http://www.abego-software.de/legal/apl-v10.html]]|
|''Copyright:''|© 2005-2008 [[abego Software|http://www.abego-software.de]]|
|''~CoreVersion:''|2.1.0|
|''Community:''|[[del.icio.us|http://del.icio.us/post?url=http://tiddlywiki.abego-software.de/index.html%23YourSearchPlugin]]|
|''Browser:''|Firefox 1.0.4+; Firefox 1.5; ~InternetExplorer 6.0|
!About YourSearch
YourSearch gives you a bunch of new features to simplify and speed up your daily searches in TiddlyWiki. It seamlessly integrates into the standard TiddlyWiki search: just start typing into the 'search' field and explore!
For more information see [[Help|YourSearch Help]].
!Compatibility
This plugin requires TiddlyWiki 2.1.
Check the [[archive|http://tiddlywiki.abego-software.de/archive]] for ~YourSearchPlugins supporting older versions of TiddlyWiki.
!Source Code
***/
/***
This plugin's source code is compressed (and hidden). Use this [[link|http://tiddlywiki.abego-software.de/archive/YourSearchPlugin/Plugin-YourSearch-src.2.1.3.js]] to get the readable source code.
***/
///%
if(!version.extensions.YourSearchPlugin){version.extensions.YourSearchPlugin={major:2,minor:1,revision:3,source:"http://tiddlywiki.abego-software.de/#YourSearchPlugin",licence:"[[BSD open source license (abego Software)|http://www.abego-software.de/legal/apl-v10.html]]",copyright:"Copyright (c) abego Software GmbH, 2005-2008 (www.abego-software.de)"};if(!window.abego){window.abego={};}
if(!Array.forEach){Array.forEach=function(_1,_2,_3){for(var i=0,len=_1.length;i<len;i++){_2.call(_3,_1[i],i,_1);}};Array.prototype.forEach=function(_5,_6){for(var i=0,len=this.length;i<len;i++){_5.call(_6,this[i],i,this);}};}
abego.toInt=function(s,_9){if(!s){return _9;}
var n=parseInt(s);return(n==NaN)?_9:n;};abego.createEllipsis=function(_b){var e=createTiddlyElement(_b,"span");e.innerHTML="…";};abego.shallowCopy=function(_d){if(!_d){return _d;}
var _e={};for(var n in _d){_e[n]=_d[n];}
return _e;};abego.copyOptions=function(_10){return!_10?{}:abego.shallowCopy(_10);};abego.countStrings=function(_11,s){if(!s){return 0;}
var len=s.length;var n=0;var _15=0;while(1){var i=_11.indexOf(s,_15);if(i<0){return n;}
n++;_15=i+len;}
return n;};abego.getBracedText=function(_17,_18,_19){if(!_18){_18=0;}
var re=/\{([^\}]*)\}/gm;re.lastIndex=_18;var m=re.exec(_17);if(m){var s=m[1];var _1d=abego.countStrings(s,"{");if(!_1d){if(_19){_19.lastIndex=re.lastIndex;}
return s;}
var len=_17.length;for(var i=re.lastIndex;i<len&&_1d;i++){var c=_17.charAt(i);if(c=="{"){_1d++;}else{if(c=="}"){_1d--;}}}
if(!_1d){if(_19){_19.lastIndex=i-1;}
return _17.substring(m.index+1,i-1);}}};abego.select=function(_21,_22,_23,_24){if(!_24){_24=[];}
_21.forEach(function(t){if(_22.call(_23,t)){_24.push(t);}});return _24;};abego.consumeEvent=function(e){if(e.stopPropagation){e.stopPropagation();}
if(e.preventDefault){e.preventDefault();}
e.cancelBubble=true;e.returnValue=true;};abego.TiddlerFilterTerm=function(_27,_28){if(!_28){_28={};}
var _29=_27;if(!_28.textIsRegExp){_29=_27.escapeRegExp();if(_28.fullWordMatch){_29="\\b"+_29+"\\b";}}
var _2a=new RegExp(_29,"m"+(_28.caseSensitive?"":"i"));this.tester=new abego.MultiFieldRegExpTester(_2a,_28.fields,_28.withExtendedFields);};abego.TiddlerFilterTerm.prototype.test=function(_2b){return this.tester.test(_2b);};abego.parseNewTiddlerCommandLine=function(s){var m=/(.*?)\.(?:\s+|$)([^#]*)(#.*)?/.exec(s);if(!m){m=/([^#]*)()(#.*)?/.exec(s);}
if(m){var r;if(m[3]){var s2=m[3].replace(/#/g,"");r=s2.parseParams("tag");}else{r=[[]];}
var _30=m[2]?m[2].trim():"";r.push({name:"text",value:_30});r[0].text=[_30];return{title:m[1].trim(),params:r};}else{return{title:s.trim(),params:[[]]};}};abego.parseTiddlerFilterTerm=function(_31,_32,_33){var re=/\s*(?:(?:\{([^\}]*)\})|(?:(=)|([#%!])|(?:(\w+)\s*\:(?!\/\/))|(?:(?:("(?:(?:\\")|[^"])+")|(?:\/((?:(?:\\\/)|[^\/])+)\/)|(\w+\:\/\/[^\s]+)|([^\s\)\-\"]+)))))/mg;var _35={"!":"title","%":"text","#":"tags"};var _36={};var _37;re.lastIndex=_32;while(1){var i=re.lastIndex;var m=re.exec(_31);if(!m||m.index!=i){throw"Word or String literal expected";}
if(m[1]){var _3a={};var _3b=abego.getBracedText(_31,0,_3a);if(!_3b){throw"Invalid {...} syntax";}
var f=Function("tiddler","return ("+_3b+");");return{func:f,lastIndex:_3a.lastIndex,markRE:null};}
if(m[2]){_37=true;}else{if(m[3]){_36[_35[m[3]]]=1;}else{if(m[4]){_36[m[4]]=1;}else{var _3d=m[6];var _3e=m[5]?window.eval(m[5]):m[6]?m[6]:m[7]?m[7]:m[8];var _33=abego.copyOptions(_33);_33.fullWordMatch=_37;_33.textIsRegExp=_3d;var _3f=[];for(var n in _36){_3f.push(n);}
if(_3f.length==0){_33.fields=_33.defaultFields;}else{_33.fields=_3f;_33.withExtendedFields=false;}
var _41=new abego.TiddlerFilterTerm(_3e,_33);var _42=_3d?_3e:_3e.escapeRegExp();if(_42&&_37){_42="\\b"+_42+"\\b";}
return{func:function(_43){return _41.test(_43);},lastIndex:re.lastIndex,markRE:_42?"(?:"+_42+")":null};}}}}};abego.BoolExp=function(s,_45,_46){this.s=s;var _47=_46&&_46.defaultOperationIs_OR;var _48=/\s*(?:(\-|not)|(\())/gi;var _49=/\s*\)/g;var _4a=/\s*(?:(and|\&\&)|(or|\|\|))/gi;var _4b=/\s*[^\)\s]/g;var _4c=/\s*(\-|not)?(\s*\()?/gi;var _4d;var _4e=function(_4f){_4c.lastIndex=_4f;var m=_4c.exec(s);var _51;var _52;if(m&&m.index==_4f){_4f+=m[0].length;_51=m[1];if(m[2]){var e=_4d(_4f);_49.lastIndex=e.lastIndex;if(!_49.exec(s)){throw"Missing ')'";}
_52={func:e.func,lastIndex:_49.lastIndex,markRE:e.markRE};}}
if(!_52){_52=_45(s,_4f,_46);}
if(_51){_52.func=(function(f){return function(_55){return!f(_55);};})(_52.func);_52.markRE=null;}
return _52;};_4d=function(_56){var _57=_4e(_56);while(1){var l=_57.lastIndex;_4a.lastIndex=l;var m=_4a.exec(s);var _5a;var _5b;if(m&&m.index==l){_5a=!m[1];_5b=_4e(_4a.lastIndex);}else{try{_5b=_4e(l);}
catch(e){return _57;}
_5a=_47;}
_57.func=(function(_5c,_5d,_5e){return _5e?function(_5f){return _5c(_5f)||_5d(_5f);}:function(_60){return _5c(_60)&&_5d(_60);};})(_57.func,_5b.func,_5a);_57.lastIndex=_5b.lastIndex;if(!_57.markRE){_57.markRE=_5b.markRE;}else{if(_5b.markRE){_57.markRE=_57.markRE+"|"+_5b.markRE;}}}};var _61=_4d(0);this.evalFunc=_61.func;if(_61.markRE){this.markRegExp=new RegExp(_61.markRE,_46.caseSensitive?"mg":"img");}};abego.BoolExp.prototype.exec=function(){return this.evalFunc.apply(this,arguments);};abego.BoolExp.prototype.getMarkRegExp=function(){return this.markRegExp;};abego.BoolExp.prototype.toString=function(){return this.s;};abego.MultiFieldRegExpTester=function(re,_63,_64){this.re=re;this.fields=_63?_63:["title","text","tags"];this.withExtendedFields=_64;};abego.MultiFieldRegExpTester.prototype.test=function(_65){var re=this.re;for(var i=0;i<this.fields.length;i++){var s=store.getValue(_65,this.fields[i]);if(typeof s=="string"&&re.test(s)){return this.fields[i];}}
if(this.withExtendedFields){return store.forEachField(_65,function(_69,_6a,_6b){return typeof _6b=="string"&&re.test(_6b)?_6a:null;},true);}
return null;};abego.TiddlerQuery=function(_6c,_6d,_6e,_6f,_70){if(_6e){this.regExp=new RegExp(_6c,_6d?"mg":"img");this.tester=new abego.MultiFieldRegExpTester(this.regExp,_6f,_70);}else{this.expr=new abego.BoolExp(_6c,abego.parseTiddlerFilterTerm,{defaultFields:_6f,caseSensitive:_6d,withExtendedFields:_70});}
this.getQueryText=function(){return _6c;};this.getUseRegExp=function(){return _6e;};this.getCaseSensitive=function(){return _6d;};this.getDefaultFields=function(){return _6f;};this.getWithExtendedFields=function(){return _70;};};abego.TiddlerQuery.prototype.test=function(_71){if(!_71){return false;}
if(this.regExp){return this.tester.test(_71);}
return this.expr.exec(_71);};abego.TiddlerQuery.prototype.filter=function(_72){return abego.select(_72,this.test,this);};abego.TiddlerQuery.prototype.getMarkRegExp=function(){if(this.regExp){return"".search(this.regExp)>=0?null:this.regExp;}
return this.expr.getMarkRegExp();};abego.TiddlerQuery.prototype.toString=function(){return(this.regExp?this.regExp:this.expr).toString();};abego.PageWiseRenderer=function(){this.firstIndexOnPage=0;};merge(abego.PageWiseRenderer.prototype,{setItems:function(_73){this.items=_73;this.setFirstIndexOnPage(0);},getMaxPagesInNavigation:function(){return 10;},getItemsCount:function(_74){return this.items?this.items.length:0;},getCurrentPageIndex:function(){return Math.floor(this.firstIndexOnPage/this.getItemsPerPage());},getLastPageIndex:function(){return Math.floor((this.getItemsCount()-1)/this.getItemsPerPage());},setFirstIndexOnPage:function(_75){this.firstIndexOnPage=Math.min(Math.max(0,_75),this.getItemsCount()-1);},getFirstIndexOnPage:function(){this.firstIndexOnPage=Math.floor(this.firstIndexOnPage/this.getItemsPerPage())*this.getItemsPerPage();return this.firstIndexOnPage;},getLastIndexOnPage:function(){return Math.min(this.getFirstIndexOnPage()+this.getItemsPerPage()-1,this.getItemsCount()-1);},onPageChanged:function(_76,_77){},renderPage:function(_78){if(_78.beginRendering){_78.beginRendering(this);}
try{if(this.getItemsCount()){var _79=this.getLastIndexOnPage();var _7a=-1;for(var i=this.getFirstIndexOnPage();i<=_79;i++){_7a++;_78.render(this,this.items[i],i,_7a);}}}
finally{if(_78.endRendering){_78.endRendering(this);}}},addPageNavigation:function(_7c){if(!this.getItemsCount()){return;}
var _7d=this;var _7e=function(e){if(!e){var e=window.event;}
abego.consumeEvent(e);var _80=abego.toInt(this.getAttribute("page"),0);var _81=_7d.getCurrentPageIndex();if(_80==_81){return;}
var _82=_80*_7d.getItemsPerPage();_7d.setFirstIndexOnPage(_82);_7d.onPageChanged(_80,_81);};var _83;var _84=this.getCurrentPageIndex();var _85=this.getLastPageIndex();if(_84>0){_83=createTiddlyButton(_7c,"Previous","Go to previous page (Shortcut: Alt-'<')",_7e,"prev");_83.setAttribute("page",(_84-1).toString());_83.setAttribute("accessKey","<");}
for(var i=-this.getMaxPagesInNavigation();i<this.getMaxPagesInNavigation();i++){var _87=_84+i;if(_87<0){continue;}
if(_87>_85){break;}
var _88=(i+_84+1).toString();var _89=_87==_84?"currentPage":"otherPage";_83=createTiddlyButton(_7c,_88,"Go to page %0".format([_88]),_7e,_89);_83.setAttribute("page",(_87).toString());}
if(_84<_85){_83=createTiddlyButton(_7c,"Next","Go to next page (Shortcut: Alt-'>')",_7e,"next");_83.setAttribute("page",(_84+1).toString());_83.setAttribute("accessKey",">");}}});abego.LimitedTextRenderer=function(){var _8a=40;var _8b=4;var _8c=function(_8d,_8e,_8f){var n=_8d.length;if(n==0){_8d.push({start:_8e,end:_8f});return;}
var i=0;for(;i<n;i++){var _92=_8d[i];if(_92.start<=_8f&&_8e<=_92.end){var r;var _94=i+1;for(;_94<n;_94++){r=_8d[_94];if(r.start>_8f||_8e>_92.end){break;}}
var _95=_8e;var _96=_8f;for(var j=i;j<_94;j++){r=_8d[j];_95=Math.min(_95,r.start);_96=Math.max(_96,r.end);}
_8d.splice(i,_94-i,{start:_95,end:_96});return;}
if(_92.start>_8f){break;}}
_8d.splice(i,0,{start:_8e,end:_8f});};var _98=function(_99){var _9a=0;for(var i=0;i<_99.length;i++){var _9c=_99[i];_9a+=_9c.end-_9c.start;}
return _9a;};var _9d=function(c){return(c>="a"&&c<="z")||(c>="A"&&c<="Z")||c=="_";};var _9f=function(s,_a1){if(!_9d(s[_a1])){return null;}
for(var i=_a1-1;i>=0&&_9d(s[i]);i--){}
var _a3=i+1;var n=s.length;for(i=_a1+1;i<n&&_9d(s[i]);i++){}
return{start:_a3,end:i};};var _a5=function(s,_a7,_a8){var _a9;if(_a8){_a9=_9f(s,_a7);}else{if(_a7<=0){return _a7;}
_a9=_9f(s,_a7-1);}
if(!_a9){return _a7;}
if(_a8){if(_a9.start>=_a7-_8b){return _a9.start;}
if(_a9.end<=_a7+_8b){return _a9.end;}}else{if(_a9.end<=_a7+_8b){return _a9.end;}
if(_a9.start>=_a7-_8b){return _a9.start;}}
return _a7;};var _aa=function(s,_ac){var _ad=[];if(_ac){var _ae=0;var n=s.length;var _b0=0;do{_ac.lastIndex=_ae;var _b1=_ac.exec(s);if(_b1){if(_ae<_b1.index){var t=s.substring(_ae,_b1.index);_ad.push({text:t});}
_ad.push({text:_b1[0],isMatch:true});_ae=_b1.index+_b1[0].length;}else{_ad.push({text:s.substr(_ae)});break;}}while(true);}else{_ad.push({text:s});}
return _ad;};var _b3=function(_b4){var _b5=0;for(var i=0;i<_b4.length;i++){if(_b4[i].isMatch){_b5++;}}
return _b5;};var _b7=function(s,_b9,_ba,_bb,_bc){var _bd=Math.max(Math.floor(_bc/(_bb+1)),_8a);var _be=Math.max(_bd-(_ba-_b9),0);var _bf=Math.min(Math.floor(_ba+_be/3),s.length);var _c0=Math.max(_bf-_bd,0);_c0=_a5(s,_c0,true);_bf=_a5(s,_bf,false);return{start:_c0,end:_bf};};var _c1=function(_c2,s,_c4){var _c5=[];var _c6=_b3(_c2);var pos=0;for(var i=0;i<_c2.length;i++){var t=_c2[i];var _ca=t.text;if(t.isMatch){var _cb=_b7(s,pos,pos+_ca.length,_c6,_c4);_8c(_c5,_cb.start,_cb.end);}
pos+=_ca.length;}
return _c5;};var _cc=function(s,_ce,_cf){var _d0=_cf-_98(_ce);while(_d0>0){if(_ce.length==0){_8c(_ce,0,_a5(s,_cf,false));return;}else{var _d1=_ce[0];var _d2;var _d3;if(_d1.start==0){_d2=_d1.end;if(_ce.length>1){_d3=_ce[1].start;}else{_8c(_ce,_d2,_a5(s,_d2+_d0,false));return;}}else{_d2=0;_d3=_d1.start;}
var _d4=Math.min(_d3,_d2+_d0);_8c(_ce,_d2,_d4);_d0-=(_d4-_d2);}}};var _d5=function(_d6,s,_d8,_d9,_da){if(_d9.length==0){return;}
var _db=function(_dc,s,_de,_df,_e0){var t;var _e2;var pos=0;var i=0;var _e5=0;for(;i<_de.length;i++){t=_de[i];_e2=t.text;if(_df<pos+_e2.length){_e5=_df-pos;break;}
pos+=_e2.length;}
var _e6=_e0-_df;for(;i<_de.length&&_e6>0;i++){t=_de[i];_e2=t.text.substr(_e5);_e5=0;if(_e2.length>_e6){_e2=_e2.substr(0,_e6);}
if(t.isMatch){createTiddlyElement(_dc,"span",null,"marked",_e2);}else{createTiddlyText(_dc,_e2);}
_e6-=_e2.length;}
if(_e0<s.length){abego.createEllipsis(_dc);}};if(_d9[0].start>0){abego.createEllipsis(_d6);}
var _e7=_da;for(var i=0;i<_d9.length&&_e7>0;i++){var _e9=_d9[i];var len=Math.min(_e9.end-_e9.start,_e7);_db(_d6,s,_d8,_e9.start,_e9.start+len);_e7-=len;}};this.render=function(_eb,s,_ed,_ee){if(s.length<_ed){_ed=s.length;}
var _ef=_aa(s,_ee);var _f0=_c1(_ef,s,_ed);_cc(s,_f0,_ed);_d5(_eb,s,_ef,_f0,_ed);};};(function(){function alertAndThrow(msg){alert(msg);throw msg;}
if(version.major<2||(version.major==2&&version.minor<1)){alertAndThrow("YourSearchPlugin requires TiddlyWiki 2.1 or newer.\n\nCheck the archive for YourSearch plugins\nsupporting older versions of TiddlyWiki.\n\nArchive: http://tiddlywiki.abego-software.de/archive");}
abego.YourSearch={};var _f2;var _f3;var _f4=function(_f5){_f2=_f5;};var _f6=function(){return _f2?_f2:[];};var _f7=function(){return _f2?_f2.length:0;};var _f8=4;var _f9=10;var _fa=2;var _fb=function(s,re){var m=s.match(re);return m?m.length:0;};var _ff=function(_100,_101){var _102=_101.getMarkRegExp();if(!_102){return 1;}
var _103=_100.title.match(_102);var _104=_103?_103.length:0;var _105=_fb(_100.getTags(),_102);var _106=_103?_103.join("").length:0;var _107=_100.title.length>0?_106/_100.title.length:0;var rank=_104*_f8+_105*_fa+_107*_f9+1;return rank;};var _109=function(_10a,_10b,_10c,_10d,_10e,_10f){_f3=null;var _110=_10a.reverseLookup("tags",_10f,false);try{var _111=[];if(config.options.chkSearchInTitle){_111.push("title");}
if(config.options.chkSearchInText){_111.push("text");}
if(config.options.chkSearchInTags){_111.push("tags");}
_f3=new abego.TiddlerQuery(_10b,_10c,_10d,_111,config.options.chkSearchExtendedFields);}
catch(e){return[];}
var _112=_f3.filter(_110);var _113=abego.YourSearch.getRankFunction();for(var i=0;i<_112.length;i++){var _115=_112[i];var rank=_113(_115,_f3);_115.searchRank=rank;}
if(!_10e){_10e="title";}
var _117=function(a,b){var _11a=a.searchRank-b.searchRank;if(_11a==0){if(a[_10e]==b[_10e]){return(0);}else{return(a[_10e]<b[_10e])?-1:+1;}}else{return(_11a>0)?-1:+1;}};_112.sort(_117);return _112;};var _11b=80;var _11c=50;var _11d=250;var _11e=50;var _11f=25;var _120=10;var _121="yourSearchResult";var _122="yourSearchResultItems";var _123;var _124;var _125;var _126;var _127;var _128=function(){if(version.extensions.YourSearchPlugin.styleSheetInited){return;}
version.extensions.YourSearchPlugin.styleSheetInited=true;setStylesheet(store.getTiddlerText("YourSearchStyleSheet"),"yourSearch");};var _129=function(){return _124!=null&&_124.parentNode==document.body;};var _12a=function(){if(_129()){document.body.removeChild(_124);}};var _12b=function(e){_12a();var _12d=this.getAttribute("tiddlyLink");if(_12d){var _12e=this.getAttribute("withHilite");var _12f=highlightHack;if(_12e&&_12e=="true"&&_f3){highlightHack=_f3.getMarkRegExp();}
story.displayTiddler(this,_12d);highlightHack=_12f;}
return(false);};var _130=function(){if(!_125){return;}
var root=_125;var _132=findPosX(root);var _133=findPosY(root);var _134=root.offsetHeight;var _135=_132;var _136=_133+_134;var _137=findWindowWidth();if(_137<_124.offsetWidth){_124.style.width=(_137-100)+"px";_137=findWindowWidth();}
var _138=_124.offsetWidth;if(_135+_138>_137){_135=_137-_138-30;}
if(_135<0){_135=0;}
_124.style.left=_135+"px";_124.style.top=_136+"px";_124.style.display="block";};var _139=function(){if(_124){window.scrollTo(0,ensureVisible(_124));}
if(_125){window.scrollTo(0,ensureVisible(_125));}};var _13a=function(){_130();_139();};var _13b;var _13c;var _13d=new abego.PageWiseRenderer();var _13e=function(_13f){this.itemHtml=store.getTiddlerText("YourSearchItemTemplate");if(!this.itemHtml){alertAndThrow("YourSearchItemTemplate not found");}
this.place=document.getElementById(_122);if(!this.place){this.place=createTiddlyElement(_13f,"div",_122);}};merge(_13e.prototype,{render:function(_140,_141,_142,_143){_13b=_143;_13c=_141;var item=createTiddlyElement(this.place,"div",null,"yourSearchItem");item.innerHTML=this.itemHtml;applyHtmlMacros(item,null);refreshElements(item,null);},endRendering:function(_145){_13c=null;}});var _146=function(){if(!_124||!_125){return;}
var html=store.getTiddlerText("YourSearchResultTemplate");if(!html){html="<b>Tiddler YourSearchResultTemplate not found</b>";}
_124.innerHTML=html;applyHtmlMacros(_124,null);refreshElements(_124,null);var _148=new _13e(_124);_13d.renderPage(_148);_13a();};_13d.getItemsPerPage=function(){var n=(config.options.chkPreviewText)?abego.toInt(config.options.txtItemsPerPageWithPreview,_120):abego.toInt(config.options.txtItemsPerPage,_11f);return(n>0)?n:1;};_13d.onPageChanged=function(){_146();};var _14a=function(){if(_125==null||!config.options.chkUseYourSearch){return;}
if((_125.value==_123)&&_123&&!_129()){if(_124&&(_124.parentNode!=document.body)){document.body.appendChild(_124);_13a();}else{abego.YourSearch.onShowResult(true);}}};var _14b=function(){_12a();_124=null;_123=null;};var _14c=function(self,e){while(e!=null){if(self==e){return true;}
e=e.parentNode;}
return false;};var _14f=function(e){if(e.target==_125){return;}
if(e.target==_126){return;}
if(_124&&_14c(_124,e.target)){return;}
_12a();};var _151=function(e){if(e.keyCode==27){_12a();}};addEvent(document,"click",_14f);addEvent(document,"keyup",_151);var _153=function(text,_155,_156){_123=text;_f4(_109(store,text,_155,_156,"title","excludeSearch"));abego.YourSearch.onShowResult();};var _157=function(_158,_159,_15a,_15b,_15c,_15d){_128();_123="";var _15e=null;var _15f=function(txt){if(config.options.chkUseYourSearch){_153(txt.value,config.options.chkCaseSensitiveSearch,config.options.chkRegExpSearch);}else{story.search(txt.value,config.options.chkCaseSensitiveSearch,config.options.chkRegExpSearch);}
_123=txt.value;};var _161=function(e){_15f(_125);return false;};var _163=function(e){if(!e){var e=window.event;}
_125=this;switch(e.keyCode){case 13:if(e.ctrlKey&&_127&&_129()){_127.onclick.apply(_127,[e]);}else{_15f(this);}
break;case 27:if(_129()){_12a();}else{this.value="";clearMessage();}
break;}
if(String.fromCharCode(e.keyCode)==this.accessKey||e.altKey){_14a();}
if(this.value.length<3&&_15e){clearTimeout(_15e);}
if(this.value.length>2){if(this.value!=_123){if(!config.options.chkUseYourSearch||config.options.chkSearchAsYouType){if(_15e){clearTimeout(_15e);}
var txt=this;_15e=setTimeout(function(){_15f(txt);},500);}}else{if(_15e){clearTimeout(_15e);}}}
if(this.value.length==0){_12a();}};var _166=function(e){this.select();clearMessage();_14a();};var args=_15c.parseParams("list",null,true);var _169=getFlag(args,"buttonAtRight");var _16a=getParam(args,"sizeTextbox",this.sizeTextbox);var btn;if(!_169){btn=createTiddlyButton(_158,this.label,this.prompt,_161);}
var txt=createTiddlyElement(_158,"input",null,null,null);if(_15a[0]){txt.value=_15a[0];}
txt.onkeyup=_163;txt.onfocus=_166;txt.setAttribute("size",_16a);txt.setAttribute("accessKey",this.accessKey);txt.setAttribute("autocomplete","off");if(config.browser.isSafari){txt.setAttribute("type","search");txt.setAttribute("results","5");}else{txt.setAttribute("type","text");}
if(_169){btn=createTiddlyButton(_158,this.label,this.prompt,_161);}
_125=txt;_126=btn;};var _16d=function(){_12a();var _16e=_f6();var n=_16e.length;if(n){var _170=[];for(var i=0;i<n;i++){_170.push(_16e[i].title);}
story.displayTiddlers(null,_170);}};var _172=function(_173,_174,_175,_176){invokeMacro(_173,"option",_174,_175,_176);var elem=_173.lastChild;var _178=elem.onclick;elem.onclick=function(e){var _17a=_178.apply(this,arguments);_146();return _17a;};return elem;};var _17b=function(s){var _17d=["''","{{{","}}}","//","<<<","/***","***/"];var _17e="";for(var i=0;i<_17d.length;i++){if(i!=0){_17e+="|";}
_17e+="("+_17d[i].escapeRegExp()+")";}
return s.replace(new RegExp(_17e,"mg"),"").trim();};var _180=function(){var i=_13b;return(i>=0&&i<=9)?(i<9?(i+1):0):-1;};var _182=new abego.LimitedTextRenderer();var _183=function(_184,s,_186){_182.render(_184,s,_186,_f3.getMarkRegExp());};var _187=TiddlyWiki.prototype.saveTiddler;TiddlyWiki.prototype.saveTiddler=function(_188,_189,_18a,_18b,_18c,tags,_18e){_187.apply(this,arguments);_14b();};var _18f=TiddlyWiki.prototype.removeTiddler;TiddlyWiki.prototype.removeTiddler=function(_190){_18f.apply(this,arguments);_14b();};config.macros.yourSearch={label:"yourSearch",prompt:"Gives access to the current/last YourSearch result",handler:function(_191,_192,_193,_194,_195,_196){if(_193.length==0){return;}
var name=_193[0];var func=config.macros.yourSearch.funcs[name];if(func){func(_191,_192,_193,_194,_195,_196);}},tests:{"true":function(){return true;},"false":function(){return false;},"found":function(){return _f7()>0;},"previewText":function(){return config.options.chkPreviewText;}},funcs:{itemRange:function(_199){if(_f7()){var _19a=_13d.getLastIndexOnPage();var s="%0 - %1".format([_13d.getFirstIndexOnPage()+1,_19a+1]);createTiddlyText(_199,s);}},count:function(_19c){createTiddlyText(_19c,_f7().toString());},query:function(_19d){if(_f3){createTiddlyText(_19d,_f3.toString());}},version:function(_19e){var t="YourSearch %0.%1.%2".format([version.extensions.YourSearchPlugin.major,version.extensions.YourSearchPlugin.minor,version.extensions.YourSearchPlugin.revision]);var e=createTiddlyElement(_19e,"a");e.setAttribute("href","http://tiddlywiki.abego-software.de/#YourSearchPlugin");e.innerHTML="<font color=\"black\" face=\"Arial, Helvetica, sans-serif\">"+t+"<font>";},copyright:function(_1a1){var e=createTiddlyElement(_1a1,"a");e.setAttribute("href","http://www.abego-software.de");e.innerHTML="<font color=\"black\" face=\"Arial, Helvetica, sans-serif\">© 2005-2008 <b><font color=\"red\">abego</font></b> Software<font>";},newTiddlerButton:function(_1a3){if(_f3){var r=abego.parseNewTiddlerCommandLine(_f3.getQueryText());var btn=config.macros.newTiddler.createNewTiddlerButton(_1a3,r.title,r.params,"new tiddler","Create a new tiddler based on search text. (Shortcut: Ctrl-Enter; Separators: '.', '#')",null,"text");var _1a6=btn.onclick;btn.onclick=function(){_12a();_1a6.apply(this,arguments);};_127=btn;}},linkButton:function(_1a7,_1a8,_1a9,_1aa,_1ab,_1ac){if(_1a9<2){return;}
var _1ad=_1a9[1];var text=_1a9<3?_1ad:_1a9[2];var _1af=_1a9<4?text:_1a9[3];var _1b0=_1a9<5?null:_1a9[4];var btn=createTiddlyButton(_1a7,text,_1af,_12b,null,null,_1b0);btn.setAttribute("tiddlyLink",_1ad);},closeButton:function(_1b2,_1b3,_1b4,_1b5,_1b6,_1b7){var _1b8=createTiddlyButton(_1b2,"close","Close the Search Results (Shortcut: ESC)",_12a);},openAllButton:function(_1b9,_1ba,_1bb,_1bc,_1bd,_1be){var n=_f7();if(n==0){return;}
var _1c0=n==1?"open tiddler":"open all %0 tiddlers".format([n]);var _1c1=createTiddlyButton(_1b9,_1c0,"Open all found tiddlers (Shortcut: Alt-O)",_16d);_1c1.setAttribute("accessKey","O");},naviBar:function(_1c2,_1c3,_1c4,_1c5,_1c6,_1c7){_13d.addPageNavigation(_1c2);},"if":function(_1c8,_1c9,_1ca,_1cb,_1cc,_1cd){if(_1ca.length<2){return;}
var _1ce=_1ca[1];var _1cf=(_1ce=="not");if(_1cf){if(_1ca.length<3){return;}
_1ce=_1ca[2];}
var test=config.macros.yourSearch.tests[_1ce];var _1d1=false;try{if(test){_1d1=test(_1c8,_1c9,_1ca,_1cb,_1cc,_1cd)!=_1cf;}else{_1d1=(!eval(_1ce))==_1cf;}}
catch(ex){}
if(!_1d1){_1c8.style.display="none";}},chkPreviewText:function(_1d2,_1d3,_1d4,_1d5,_1d6,_1d7){var _1d8=_1d4.slice(1).join(" ");var elem=_172(_1d2,"chkPreviewText",_1d5,_1d7);elem.setAttribute("accessKey","P");elem.title="Show text preview of found tiddlers (Shortcut: Alt-P)";return elem;}}};config.macros.foundTiddler={label:"foundTiddler",prompt:"Provides information on the tiddler currently processed on the YourSearch result page",handler:function(_1da,_1db,_1dc,_1dd,_1de,_1df){var name=_1dc[0];var func=config.macros.foundTiddler.funcs[name];if(func){func(_1da,_1db,_1dc,_1dd,_1de,_1df);}},funcs:{title:function(_1e2,_1e3,_1e4,_1e5,_1e6,_1e7){if(!_13c){return;}
var _1e8=_180();var _1e9=_1e8>=0?"Open tiddler (Shortcut: Alt-%0)".format([_1e8.toString()]):"Open tiddler";var btn=createTiddlyButton(_1e2,null,_1e9,_12b,null);btn.setAttribute("tiddlyLink",_13c.title);btn.setAttribute("withHilite","true");_183(btn,_13c.title,_11b);if(_1e8>=0){btn.setAttribute("accessKey",_1e8.toString());}},tags:function(_1eb,_1ec,_1ed,_1ee,_1ef,_1f0){if(!_13c){return;}
_183(_1eb,_13c.getTags(),_11c);},text:function(_1f1,_1f2,_1f3,_1f4,_1f5,_1f6){if(!_13c){return;}
_183(_1f1,_17b(_13c.text),_11d);},field:function(_1f7,_1f8,_1f9,_1fa,_1fb,_1fc){if(!_13c){return;}
var name=_1f9[1];var len=_1f9.length>2?abego.toInt(_1f9[2],_11e):_11e;var v=store.getValue(_13c,name);if(v){_183(_1f7,_17b(v),len);}},number:function(_200,_201,_202,_203,_204,_205){var _206=_180();if(_206>=0){var text="%0)".format([_206.toString()]);createTiddlyElement(_200,"span",null,"shortcutNumber",text);}}}};var opts={chkUseYourSearch:true,chkPreviewText:true,chkSearchAsYouType:true,chkSearchInTitle:true,chkSearchInText:true,chkSearchInTags:true,chkSearchExtendedFields:true,txtItemsPerPage:_11f,txtItemsPerPageWithPreview:_120};for(var n in opts){if(config.options[n]==undefined){config.options[n]=opts[n];}}
config.shadowTiddlers.AdvancedOptions+="\n<<option chkUseYourSearch>> Use 'Your Search' //([[more options|YourSearch Options]]) ([[help|YourSearch Help]])// ";config.shadowTiddlers["YourSearch Help"]="!Field Search\nWith the Field Search you can restrict your search to certain fields of a tiddler, e.g"+" only search the tags or only the titles. The general form is //fieldname//'':''//textToSearch// (e."+"g. {{{title:intro}}}). In addition one-character shortcuts are also supported for the standard field"+"s {{{title}}}, {{{text}}} and {{{tags}}}:\n|!What you want|!What you type|!Example|\n|Search ''titles "+"only''|start word with ''!''|{{{!jonny}}} (shortcut for {{{title:jonny}}})|\n|Search ''contents/text "+"only''|start word with ''%''|{{{%football}}} (shortcut for {{{text:football}}})|\n|Search ''tags only"+"''|start word with ''#''|{{{#Plugin}}} (shortcut for {{{tags:Plugin}}})|\n\nUsing this feature you may"+" also search the extended fields (\"Metadata\") introduced with TiddlyWiki 2.1, e.g. use {{{priority:1"+"}}} to find all tiddlers with the priority field set to \"1\".\n\nYou may search a word in more than one"+" field. E.g. {{{!#Plugin}}} (or {{{title:tags:Plugin}}} in the \"long form\") finds tiddlers containin"+"g \"Plugin\" either in the title or in the tags (but does not look for \"Plugin\" in the text). \n\n!Boole"+"an Search\nThe Boolean Search is useful when searching for multiple words.\n|!What you want|!What you "+"type|!Example|\n|''All words'' must exist|List of words|{{{jonny jeremy}}} (or {{{jonny and jeremy}}}"+")|\n|''At least one word'' must exist|Separate words by ''or''|{{{jonny or jeremy}}}|\n|A word ''must "+"not exist''|Start word with ''-''|{{{-jonny}}} (or {{{not jonny}}})|\n\n''Note:'' When you specify two"+" words, separated with a space, YourSearch finds all tiddlers that contain both words, but not neces"+"sarily next to each other. If you want to find a sequence of word, e.g. '{{{John Brown}}}', you need"+" to put the words into quotes. I.e. you type: {{{\"john brown\"}}}.\n\nUsing parenthesis you may change "+"the default \"left to right\" evaluation of the boolean search. E.g. {{{not (jonny or jeremy)}}} finds"+" all tiddlers that contain neither \"jonny\" nor \"jeremy. In contrast to this {{{not jonny or jeremy}}"+"} (i.e. without parenthesis) finds all tiddlers that either don't contain \"jonny\" or that contain \"j"+"eremy\".\n\n!'Exact Word' Search\nBy default a search result all matches that 'contain' the searched tex"+"t. E.g. if you search for {{{Task}}} you will get all tiddlers containing 'Task', but also '~Complet"+"edTask', '~TaskForce' etc.\n\nIf you only want to get the tiddlers that contain 'exactly the word' you"+" need to prefix it with a '='. E.g. typing '=Task' will find the tiddlers that contain the word 'Tas"+"k', ignoring words that just contain 'Task' as a substring.\n\n!~CaseSensitiveSearch and ~RegExpSearch"+"\nThe standard search options ~CaseSensitiveSearch and ~RegExpSearch are fully supported by YourSearc"+"h. However when ''~RegExpSearch'' is on Filtered and Boolean Search are disabled.\n\nIn addition you m"+"ay do a \"regular expression\" search even with the ''~RegExpSearch'' set to false by directly enterin"+"g the regular expression into the search field, framed with {{{/.../}}}. \n\nExample: {{{/m[ae][iy]er/"+"}}} will find all tiddlers that contain either \"maier\", \"mayer\", \"meier\" or \"meyer\".\n\n!~JavaScript E"+"xpression Filtering\nIf you are familiar with JavaScript programming and know some TiddlyWiki interna"+"ls you may also use JavaScript expression for the search. Just enter a JavaScript boolean expression"+" into the search field, framed with {{{ { ... } }}}. In the code refer to the variable tiddler and e"+"valuate to {{{true}}} when the given tiddler should be included in the result. \n\nExample: {{{ { tidd"+"ler.modified > new Date(\"Jul 4, 2005\")} }}} returns all tiddler modified after July 4th, 2005.\n\n!Com"+"bined Search\nYou are free to combine the various search options. \n\n''Examples''\n|!What you type|!Res"+"ult|\n|{{{!jonny !jeremy -%football}}}|all tiddlers with both {{{jonny}}} and {{{jeremy}}} in its tit"+"les, but no {{{football}}} in content.|\n|{{{#=Task}}}|All tiddlers tagged with 'Task' (the exact wor"+"d). Tags named '~CompletedTask', '~TaskForce' etc. are not considered.|\n\n!Access Keys\nYou are encour"+"aged to use the access keys (also called \"shortcut\" keys) for the most frequently used operations. F"+"or quick reference these shortcuts are also mentioned in the tooltip for the various buttons etc.\n\n|"+"!Key|!Operation|\n|{{{Alt-F}}}|''The most important keystroke'': It moves the cursor to the search in"+"put field so you can directly start typing your query. Pressing {{{Alt-F}}} will also display the pr"+"evious search result. This way you can quickly display multiple tiddlers using \"Press {{{Alt-F}}}. S"+"elect tiddler.\" sequences.|\n|{{{ESC}}}|Closes the [[YourSearch Result]]. When the [[YourSearch Resul"+"t]] is already closed and the cursor is in the search input field the field's content is cleared so "+"you start a new query.|\n|{{{Alt-1}}}, {{{Alt-2}}},... |Pressing these keys opens the first, second e"+"tc. tiddler from the result list.|\n|{{{Alt-O}}}|Opens all found tiddlers.|\n|{{{Alt-P}}}|Toggles the "+"'Preview Text' mode.|\n|{{{Alt-'<'}}}, {{{Alt-'>'}}}|Displays the previous or next page in the [[Your"+"Search Result]].|\n|{{{Return}}}|When you have turned off the 'as you type' search mode pressing the "+"{{{Return}}} key actually starts the search (as does pressing the 'search' button).|\n\n//If some of t"+"hese shortcuts don't work for you check your browser if you have other extensions installed that alr"+"eady \"use\" these shortcuts.//";config.shadowTiddlers["YourSearch Options"]="|>|!YourSearch Options|\n|>|<<option chkUseYourSearch>> Use 'Your Search'|\n|!|<<option chkPreviewText"+">> Show Text Preview|\n|!|<<option chkSearchAsYouType>> 'Search As You Type' Mode (No RETURN required"+" to start search)|\n|!|Default Search Filter:<<option chkSearchInTitle>>Title ('!') <<option chk"+"SearchInText>>Text ('%') <<option chkSearchInTags>>Tags ('#') <<option chkSearchExtendedFiel"+"ds>>Extended Fields<html><br><font size=\"-2\">The fields of a tiddlers that are searched when you don"+"'t explicitly specify a filter in the search text <br>(Explictly specify fields using one or more '!"+"', '%', '#' or 'fieldname:' prefix before the word/text to find).</font></html>|\n|!|Number of items "+"on search result page: <<option txtItemsPerPage>>|\n|!|Number of items on search result page with pre"+"view text: <<option txtItemsPerPageWithPreview>>|\n";config.shadowTiddlers["YourSearchStyleSheet"]="/***\n!~YourSearchResult Stylesheet\n***/\n/*{{{*/\n.yourSearchResult {\n\tposition: absolute;\n\twidth: 800"+"px;\n\n\tpadding: 0.2em;\n\tlist-style: none;\n\tmargin: 0;\n\n\tbackground: #ffd;\n\tborder: 1px solid DarkGra"+"y;\n}\n\n/*}}}*/\n/***\n!!Summary Section\n***/\n/*{{{*/\n.yourSearchResult .summary {\n\tborder-bottom-width:"+" thin;\n\tborder-bottom-style: solid;\n\tborder-bottom-color: #999999;\n\tpadding-bottom: 4px;\n}\n\n.yourSea"+"rchRange, .yourSearchCount, .yourSearchQuery {\n\tfont-weight: bold;\n}\n\n.yourSearchResult .summary ."+"button {\n\tfont-size: 10px;\n\n\tpadding-left: 0.3em;\n\tpadding-right: 0.3em;\n}\n\n.yourSearchResult .summa"+"ry .chkBoxLabel {\n\tfont-size: 10px;\n\n\tpadding-right: 0.3em;\n}\n\n/*}}}*/\n/***\n!!Items Area\n***/\n/*{{{*"+"/\n.yourSearchResult .marked {\n\tbackground: none;\n\tfont-weight: bold;\n}\n\n.yourSearchItem {\n\tmargin-to"+"p: 2px;\n}\n\n.yourSearchNumber {\n\tcolor: #808080;\n}\n\n\n.yourSearchTags {\n\tcolor: #008000;\n}\n\n.yourSearc"+"hText {\n\tcolor: #808080;\n\tmargin-bottom: 6px;\n}\n\n/*}}}*/\n/***\n!!Footer\n***/\n/*{{{*/\n.yourSearchFoote"+"r {\n\tmargin-top: 8px;\n\tborder-top-width: thin;\n\tborder-top-style: solid;\n\tborder-top-color: #999999;"+"\n}\n\n.yourSearchFooter a:hover{\n\tbackground: none;\n\tcolor: none;\n}\n/*}}}*/\n/***\n!!Navigation Bar\n***/"+"\n/*{{{*/\n.yourSearchNaviBar a {\n\tfont-size: 16px;\n\tmargin-left: 4px;\n\tmargin-right: 4px;\n\tcolor: bla"+"ck;\n\ttext-decoration: underline;\n}\n\n.yourSearchNaviBar a:hover {\n\tbackground-color: none;\n}\n\n.yourSe"+"archNaviBar .prev {\n\tfont-weight: bold;\n\tcolor: blue;\n}\n\n.yourSearchNaviBar .currentPage {\n\tcolor: #"+"FF0000;\n\tfont-weight: bold;\n\ttext-decoration: none;\n}\n\n.yourSearchNaviBar .next {\n\tfont-weight: bold"+";\n\tcolor: blue;\n}\n/*}}}*/\n";config.shadowTiddlers["YourSearchResultTemplate"]="<!--\n{{{\n-->\n<span macro=\"yourSearch if found\">\n<!-- The Summary Header ============================"+"================ -->\n<table class=\"summary\" border=\"0\" width=\"100%\" cellspacing=\"0\" cellpadding=\"0\">"+"<tbody>\n <tr>\n\t<td align=\"left\">\n\t\tYourSearch Result <span class=\"yourSearchRange\" macro=\"yourSearc"+"h itemRange\"></span>\n\t\t of <span class=\"yourSearchCount\" macro=\"yourSearch count\"></span>\n"+"\t\tfor <span class=\"yourSearchQuery\" macro=\"yourSearch query\"></span>\n\t</td>\n\t<td class=\"yourSea"+"rchButtons\" align=\"right\">\n\t\t<span macro=\"yourSearch chkPreviewText\"></span><span class=\"chkBoxLabel"+"\">preview text</span>\n\t\t<span macro=\"yourSearch newTiddlerButton\"></span>\n\t\t<span macro=\"yourSearch openAllButton\"></span>\n\t\t<span macro=\"yourSearch lin"+"kButton 'YourSearch Options' options 'Configure YourSearch'\"></span>\n\t\t<span macro=\"yourSearch linkB"+"utton 'YourSearch Help' help 'Get help how to use YourSearch'\"></span>\n\t\t<span macro=\"yourSearch clo"+"seButton\"></span>\n\t</td>\n </tr>\n</tbody></table>\n\n<!-- The List of Found Tiddlers ================="+"=========================== -->\n<div id=\"yourSearchResultItems\" itemsPerPage=\"25\" itemsPerPageWithPr"+"eview=\"10\"></div>\n\n<!-- The Footer (with the Navigation) ==========================================="+"= -->\n<table class=\"yourSearchFooter\" border=\"0\" width=\"100%\" cellspacing=\"0\" cellpadding=\"0\"><tbody"+">\n <tr>\n\t<td align=\"left\">\n\t\tResult page: <span class=\"yourSearchNaviBar\" macro=\"yourSearch naviBar"+"\"></span>\n\t</td>\n\t<td align=\"right\"><span macro=\"yourSearch version\"></span>, <span macro=\"yourSearc"+"h copyright\"></span>\n\t</td>\n </tr>\n</tbody></table>\n<!-- end of the 'tiddlers found' case ========="+"================================== -->\n</span>\n\n\n<!-- The \"No tiddlers found\" case ================="+"========================== -->\n<span macro=\"yourSearch if not found\">\n<table class=\"summary\" border="+"\"0\" width=\"100%\" cellspacing=\"0\" cellpadding=\"0\"><tbody>\n <tr>\n\t<td align=\"left\">\n\t\tYourSearch Resu"+"lt: No tiddlers found for <span class=\"yourSearchQuery\" macro=\"yourSearch query\"></span>.\n\t</td>\n\t<t"+"d class=\"yourSearchButtons\" align=\"right\">\n\t\t<span macro=\"yourSearch newTiddlerButton\"></span>\n\t\t<span macro=\"yourSearch linkButton 'YourSearch Options'"+" options 'Configure YourSearch'\"></span>\n\t\t<span macro=\"yourSearch linkButton 'YourSearch Help' help"+" 'Get help how to use YourSearch'\"></span>\n\t\t<span macro=\"yourSearch closeButton\"></span>\n\t</td>\n <"+"/tr>\n</tbody></table>\n</span>\n\n\n<!--\n}}}\n-->\n";config.shadowTiddlers["YourSearchItemTemplate"]="<!--\n{{{\n-->\n<span class='yourSearchNumber' macro='foundTiddler number'></span>\n<span class='yourSea"+"rchTitle' macro='foundTiddler title'/></span> - \n<span class='yourSearchTags' macro='found"+"Tiddler field tags 50'/></span>\n<span macro=\"yourSearch if previewText\"><div class='yourSearchText' macro='fo"+"undTiddler field text 250'/></div></span>\n<!--\n}}}\n-->";config.shadowTiddlers["YourSearch"]="<<tiddler [[YourSearch Help]]>>";config.shadowTiddlers["YourSearch Result"]="The popup-like window displaying the result of a YourSearch query.";config.macros.search.handler=_157;var _20a=function(){if(config.macros.search.handler!=_157){alert("Message from YourSearchPlugin:\n\n\nAnother plugin has disabled the 'Your Search' features.\n\n\nYou may "+"disable the other plugin or change the load order of \nthe plugins (by changing the names of the tidd"+"lers)\nto enable the 'Your Search' features.");}};setTimeout(_20a,5000);abego.YourSearch.getStandardRankFunction=function(){return _ff;};abego.YourSearch.getRankFunction=function(){return abego.YourSearch.getStandardRankFunction();};abego.YourSearch.getCurrentTiddler=function(){return _13c;};abego.YourSearch.closeResult=function(){_12a();};abego.YourSearch.getFoundTiddlers=function(){return _f2;};abego.YourSearch.getQuery=function(){return _f3;};abego.YourSearch.onShowResult=function(_20b){highlightHack=_f3?_f3.getMarkRegExp():null;if(!_20b){_13d.setItems(_f6());}
if(!_124){_124=createTiddlyElement(document.body,"div",_121,"yourSearchResult");}else{if(_124.parentNode!=document.body){document.body.appendChild(_124);}}
_146();highlightHack=null;};})();}
//%/
!usage
{{{[img[clearChangeCount.png]]}}}
[img[clearChangeCount.png]]
!notes
attached by FileDropPlugin
!type
image/png
!file
!url
!hiddenData
/%
!data
data:image/png;base64,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
!endHiddenData
%/
Type the text for 'New Tiddler'
/%:^^Mailto:^^ [img[mailator.png]] [[Or By Contact Form|http://whspr.me/2s9]] %/
<html>
<iframe src="http://spreadsheets.google.com/embeddedform?formkey=cmh2UW5INHI2eGVsU20xZFMwaTR1X0E6MA.." width="760" height="800" frameborder="0" marginheight="0" marginwidth="0">Loading...</iframe>
</html>
// Copyright (c) 2006, 2008 Tony Garnock-Jones <tonyg@lshift.net>
// Copyright (c) 2006, 2008 LShift Ltd. <query@lshift.net>
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation files
// (the "Software"), to deal in the Software without restriction,
// including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software,
// and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
//
// The above copyright notice and this permission notice shall be
// included in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
// BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
Diff = {
longest_common_subsequence: function(file1, file2) {
/* Text diff algorithm following Hunt and McIlroy 1976.
* J. W. Hunt and M. D. McIlroy, An algorithm for differential file
* comparison, Bell Telephone Laboratories CSTR #41 (1976)
* http://www.cs.dartmouth.edu/~doug/
*
* Expects two arrays of strings.
*/
var equivalenceClasses;
var file2indices;
var newCandidate;
var candidates;
var line;
var c, i, j, jX, r, s;
equivalenceClasses = {};
for (j = 0; j < file2.length; j++) {
line = file2[j];
if (equivalenceClasses[line]) {
equivalenceClasses[line].push(j);
} else {
equivalenceClasses[line] = [j];
}
}
candidates = [{file1index: -1,
file2index: -1,
chain: null}];
for (i = 0; i < file1.length; i++) {
line = file1[i];
file2indices = equivalenceClasses[line] || [];
r = 0;
c = candidates[0];
for (jX = 0; jX < file2indices.length; jX++) {
j = file2indices[jX];
for (s = 0; s < candidates.length; s++) {
if ((candidates[s].file2index < j) &&
((s == candidates.length - 1) ||
(candidates[s + 1].file2index > j)))
break;
}
if (s < candidates.length) {
newCandidate = {file1index: i,
file2index: j,
chain: candidates[s]};
if (r == candidates.length) {
candidates.push(c);
} else {
candidates[r] = c;
}
r = s + 1;
c = newCandidate;
if (r == candidates.length) {
break; // no point in examining further (j)s
}
}
}
candidates[r] = c;
}
// At this point, we know the LCS: it's in the reverse of the
// linked-list through .chain of
// candidates[candidates.length - 1].
return candidates[candidates.length - 1];
},
diff_comm: function(file1, file2) {
// We apply the LCS to build a "comm"-style picture of the
// differences between file1 and file2.
var result = [];
var tail1 = file1.length;
var tail2 = file2.length;
var common = {common: []};
function processCommon() {
if (common.common.length) {
common.common.reverse();
result.push(common);
common = {common: []};
}
}
for (var candidate = Diff.longest_common_subsequence(file1, file2);
candidate !== null;
candidate = candidate.chain)
{
var different = {file1: [], file2: []};
while (--tail1 > candidate.file1index) {
different.file1.push(file1[tail1]);
}
while (--tail2 > candidate.file2index) {
different.file2.push(file2[tail2]);
}
if (different.file1.length || different.file2.length) {
processCommon();
different.file1.reverse();
different.file2.reverse();
result.push(different);
}
if (tail1 >= 0) {
common.common.push(file1[tail1]);
}
}
processCommon();
result.reverse();
return result;
},
diff_patch: function(file1, file2) {
// We apply the LCD to build a JSON representation of a
// diff(1)-style patch.
var result = [];
var tail1 = file1.length;
var tail2 = file2.length;
function chunkDescription(file, offset, length) {
var chunk = [];
for (var i = 0; i < length; i++) {
chunk.push(file[offset + i]);
}
return {offset: offset,
length: length,
chunk: chunk};
}
for (var candidate = Diff.longest_common_subsequence(file1, file2);
candidate !== null;
candidate = candidate.chain)
{
var mismatchLength1 = tail1 - candidate.file1index - 1;
var mismatchLength2 = tail2 - candidate.file2index - 1;
tail1 = candidate.file1index;
tail2 = candidate.file2index;
if (mismatchLength1 || mismatchLength2) {
result.push({file1: chunkDescription(file1,
candidate.file1index + 1,
mismatchLength1),
file2: chunkDescription(file2,
candidate.file2index + 1,
mismatchLength2)});
}
}
result.reverse();
return result;
},
invert_patch: function(patch) {
// Takes the output of Diff.diff_patch(), and inverts the
// sense of it, so that it can be applied to file2 to give
// file1 rather than the other way around.
for (var i = 0; i < patch.length; i++) {
var chunk = patch[i];
var tmp = chunk.file1;
chunk.file1 = chunk.file2;
chunk.file2 = tmp;
}
},
patch: function (file, patch) {
// Applies a patch to a file.
//
// Given file1 and file2, Diff.patch(file1,
// Diff.diff_patch(file1, file2)) should give file2.
var result = [];
var commonOffset = 0;
function copyCommon(targetOffset) {
while (commonOffset < targetOffset) {
result.push(file[commonOffset]);
commonOffset++;
}
}
for (var chunkIndex = 0; chunkIndex < patch.length; chunkIndex++) {
var chunk = patch[chunkIndex];
copyCommon(chunk.file1.offset);
for (var lineIndex = 0; lineIndex < chunk.file2.length; lineIndex++) {
result.push(chunk.file2.chunk[lineIndex]);
}
commonOffset += chunk.file1.length;
}
copyCommon(file.length);
return result;
},
diff_indices: function(file1, file2) {
// We apply the LCS to give a simple representation of the
// offsets and lengths of mismatched chunks in the input
// files. This is used by diff3_merge_indices below.
var result = [];
var tail1 = file1.length;
var tail2 = file2.length;
for (var candidate = Diff.longest_common_subsequence(file1, file2);
candidate !== null;
candidate = candidate.chain)
{
var mismatchLength1 = tail1 - candidate.file1index - 1;
var mismatchLength2 = tail2 - candidate.file2index - 1;
tail1 = candidate.file1index;
tail2 = candidate.file2index;
if (mismatchLength1 || mismatchLength2) {
result.push({file1: [tail1 + 1, mismatchLength1],
file2: [tail2 + 1, mismatchLength2]});
}
}
result.reverse();
return result;
},
diff3_merge_indices: function (a, o, b) {
// Given three files, A, O, and B, where both A and B are
// independently derived from O, returns a fairly complicated
// internal representation of merge decisions it's taken. The
// interested reader may wish to consult
//
// Sanjeev Khanna, Keshav Kunal, and Benjamin C. Pierce. "A
// Formal Investigation of Diff3." In Arvind and Prasad,
// editors, Foundations of Software Technology and Theoretical
// Computer Science (FSTTCS), December 2007.
//
// (http://www.cis.upenn.edu/~bcpierce/papers/diff3-short.pdf)
var i;
var m1 = Diff.diff_indices(o, a);
var m2 = Diff.diff_indices(o, b);
var hunks = [];
function addHunk(h, side) {
hunks.push([h.file1[0], side, h.file1[1], h.file2[0], h.file2[1]]);
}
for (i = 0; i < m1.length; i++) { addHunk(m1[i], 0); }
for (i = 0; i < m2.length; i++) { addHunk(m2[i], 2); }
hunks.sort();
var result = [];
var commonOffset = 0;
function copyCommon(targetOffset) {
if (targetOffset > commonOffset) {
result.push([1, commonOffset, targetOffset - commonOffset]);
commonOffset = targetOffset;
}
}
for (var hunkIndex = 0; hunkIndex < hunks.length; hunkIndex++) {
var firstHunkIndex = hunkIndex;
var hunk = hunks[hunkIndex];
var regionLhs = hunk[0];
var regionRhs = regionLhs + hunk[2];
while (hunkIndex < hunks.length - 1) {
var maybeOverlapping = hunks[hunkIndex + 1];
var maybeLhs = maybeOverlapping[0];
if (maybeLhs >= regionRhs) break;
regionRhs = maybeLhs + maybeOverlapping[2];
hunkIndex++;
}
copyCommon(regionLhs);
if (firstHunkIndex == hunkIndex) {
if (hunk[4] > 0) {
result.push([hunk[1], hunk[3], hunk[4]]);
}
} else {
var regions = [a.length, -1, regionLhs, regionRhs, b.length, -1];
for (i = firstHunkIndex; i <= hunkIndex; i++) {
var side = hunks[i][1];
var lhs = hunks[i][3];
var rhs = lhs + hunks[i][4];
var ri = side * 2;
regions[ri] = Math.min(lhs, regions[ri]);
regions[ri+1] = Math.max(rhs, regions[ri+1]);
}
result.push([-1,
regions[0], regions[1] - regions[0],
regions[2], regions[3] - regions[2],
regions[4], regions[5] - regions[4]]);
}
commonOffset = regionRhs;
}
copyCommon(o.length);
return result;
},
diff3_merge: function (a, o, b, excludeFalseConflicts) {
// Applies the output of Diff.diff3_merge_indices to actually
// construct the merged file; the returned result alternates
// between "ok" and "conflict" blocks.
var result = [];
var files = [a, o, b];
var indices = Diff.diff3_merge_indices(a, o, b);
var okLines = [];
function flushOk() {
if (okLines) {
result.push({ok: okLines});
}
okLines = [];
}
function pushOk(xs) {
for (var j = 0; j < xs.length; j++) {
okLines.push(xs[j]);
}
}
function isTrueConflict(rec) {
if (rec[2] != rec[6]) return true;
var aoff = rec[1];
var boff = rec[5];
for (var j = 0; j < rec[2]; j++) {
if (a[j + aoff] != b[j + boff]) return true;
}
return false;
}
for (var i = 0; i < indices.length; i++) {
var x = indices[i];
var side = x[0];
if (side == -1) {
if (excludeFalseConflicts && !isTrueConflict(x)) {
pushOk(files[0].slice(x[1], x[1] + x[2]));
} else {
flushOk();
result.push({conflict: {a: a.slice(x[1], x[1] + x[2]),
aIndex: x[1],
o: o.slice(x[3], x[3] + x[4]),
oIndex: x[3],
b: b.slice(x[5], x[5] + x[6]),
bIndex: x[5]}});
}
} else {
pushOk(files[side].slice(x[1], x[1] + x[2]));
}
}
flushOk();
return result;
}
};
Enter any javascript reference and click ''eval'' to get its value:
<html><form class="eval" style="display:inline;margin:0;padding:0;white-space:nowrap;"
action="#" onsubmit="(document.getElementById('output').innerHTML) =
('\n<p>' + eval(document.getElementById('input').value) + '</p>')">
<input type=text id="input" style="width:90%" value="document.cookie;"
onkeydown="if(event.keyCode==13){this.form.onsubmit(); return false;}" /><br />
<input type=reset value="Clear" style="width:4em" onclick="
document.getElementById('output').innerHTML='';this.form.input.focus()" />
<input type=button value="X" style="width:2em" onclick="
document.getElementById('output').innerHTML='';this.form.input.focus()" />
<input type=button value="eval" style="width:4em" onclick="this.form.onsubmit()" />
</form><div id='output' style="background-color:WhiteSmoke !important;"></div></html>
!usage
{{{[img[exportCommandPlugin.png]]}}}
[img[exportCommandPlugin.png]]
!notes
attached by FileDropPlugin
!type
image/png
!file
!url
!hiddenData
/%
!data
data:image/png;base64,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
!endHiddenData
%/
// Copyright (c) 2008 Tony Garnock-Jones <tonyg@lshift.net>
// Copyright (c) 2008 LShift Ltd. <query@lshift.net>
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation files
// (the "Software"), to deal in the Software without restriction,
// including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software,
// and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
//
// The above copyright notice and this permission notice shall be
// included in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
// BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
var Dvcs = {
_debugMode: false,
Util: {
random_hex_string: function(n) {
var digits = "0123456789abcdef";
var result = "";
for (var i = 0; i < n; i++) {
result = result + digits[Math.floor(Math.random() * 16)];
}
return result;
},
random_uuid: function() {
if (Dvcs._debugMode) {
return Dvcs.Util.random_hex_string(8);
} else {
return [Dvcs.Util.random_hex_string(8),
Dvcs.Util.random_hex_string(4),
"4" + Dvcs.Util.random_hex_string(3),
((Math.floor(Math.random() * 256) & ~64) | 128).toString(16) +
Dvcs.Util.random_hex_string(2),
Dvcs.Util.random_hex_string(12)].join("-");
}
},
dict_union: function(s1, s2) {
var result = {};
var k;
for (k in s2) { result[k] = s2[k]; }
for (k in s1) { result[k] = s1[k]; }
return result;
},
dict_difference: function(s1, s2) {
var result = {};
var k;
for (k in s1) { result[k] = s1[k]; }
for (k in s2) { delete result[k]; }
return result;
},
dict_to_set: function(d) {
for (var k in d) { d[k] = 1; }
return d;
},
deepCopy: function(obj) {
// Courtesy of
// http://keithdevens.com/weblog/archive/2007/Jun/07/javascript.clone
//
// Does not handle recursive structures.
if (obj === null || typeof(obj) != 'object') {
return obj;
}
var temp = obj.constructor();
for (var key in obj) {
temp[key] = Dvcs.Util.deepCopy(obj[key]);
}
return temp;
}
},
Mergers: {
simpleScalarMerger: function(v1, v0, v2) {
if (v1 == v2) return [{ok: v1}];
if (v1 == v0) return [{ok: v2}];
if (v2 == v0) return [{ok: v1}];
return [{conflict: {a: v1, o: v0, b: v2}}];
},
simpleTextualMerger: function(v1, v0, v2) {
return Diff.diff3_merge(v1, v0, v2, true);
},
Defaults: {}
},
Checkout: function(directParent, additionalParent, currentBranch) {
this.inodes = {};
this.directParent = directParent;
this.additionalParent = additionalParent;
this.dirty = {};
this.anyDirty = false;
this.currentBranch = currentBranch;
},
Repository: function() {
this.bodies = {};
this.revisions = {};
this.children = {};
}
};
Dvcs.Mergers.Defaults["text"] = Dvcs.Mergers.simpleTextualMerger;
Dvcs.Checkout.prototype.setDirty = function(uuid) {
this.dirty[uuid] = uuid;
this.anyDirty = true;
}
Dvcs.Checkout.prototype.createFile = function() {
var uuid = Dvcs.Util.random_uuid();
if (Dvcs._debugMode) { uuid = "inode-" + uuid; }
this.inodes[uuid] = {};
this.setDirty(uuid);
return uuid;
};
Dvcs.Checkout.prototype.deleteFile = function(uuid) {
if (!this.inodes[uuid]) return false;
delete this.inodes[uuid];
this.anyDirty = true;
return true;
};
Dvcs.Checkout.prototype.fileExists = function(uuid) {
return !!(this.inodes[uuid]);
};
Dvcs.Checkout.prototype.hasProp = function(uuid, prop) {
var inode = this.inodes[uuid];
if (!inode) return null;
return (inode[prop] !== undefined);
}
Dvcs.Checkout.prototype.getProp = function(uuid, prop, defaultValue) {
var inode = this.inodes[uuid];
if (!inode) return null;
var v = inode[prop];
if (v === undefined) {
return defaultValue;
} else {
return Dvcs.Util.deepCopy(v);
}
};
Dvcs.Checkout.prototype.setProp = function(uuid, prop, value) {
var inode = this.inodes[uuid];
if (!inode) return false;
inode[prop] = value;
this.setDirty(uuid);
return true;
};
Dvcs.Checkout.prototype.clearProp = function(uuid, prop) {
var inode = this.inodes[uuid];
if (!inode) return null;
if (inode[prop] !== undefined) {
delete inode[prop];
this.setDirty(uuid);
}
return true;
}
Dvcs.Checkout.prototype.forEachProp = function(uuid, f) {
var inode = this.inodes[uuid];
if (!inode) return null;
for (var prop in inode) {
f(prop, inode[prop]);
}
}
Dvcs.Checkout.prototype.forEachFile = function(f) {
for (var uuid in this.inodes) {
f(uuid);
}
};
Dvcs.Checkout.prototype.getBranch = function() {
return this.currentBranch;
};
Dvcs.Checkout.prototype.setBranch = function(newBranch) {
this.currentBranch = newBranch;
};
Dvcs.Checkout.prototype.clone = function() {
var result = new Dvcs.Checkout(this.directParent,
this.additionalParent,
this.currentBranch);
result.inodes = Dvcs.Util.deepCopy(this.inodes);
return result;
};
Dvcs.Repository.prototype.resolveRevId = function(revId) {
if (this.revisions[revId]) {
return revId;
} else {
return this.branchTip(revId);
}
};
Dvcs.Repository.prototype.lookupRev = function(revId, shouldResolve) {
var candidate = this.revisions[revId];
if (!candidate && (shouldResolve !== false)) {
// shouldResolve is an optional parameter, hence the odd test in the line above
candidate = this.revisions[this.branchTip(revId)];
}
return candidate
|| { alive: {},
dead: {},
changed: [],
branch: null,
timestamp: 0,
metadata: null,
directParent: null,
additionalParent: null };
};
Dvcs.Repository.prototype.getMetadata = function(revId, shouldResolve) {
return this.lookupRev(revId, shouldResolve).metadata;
};
Dvcs.Repository.prototype.getBody = function(revRecord, aliveInodeId) {
var bodyId = revRecord.alive[aliveInodeId];
if (!bodyId) return {};
return Dvcs.Util.deepCopy(this.bodies[bodyId]);
};
Dvcs.Repository.prototype.update = function(unresolvedRevId) {
var revId = this.resolveRevId(unresolvedRevId);
var rev = this.revisions[revId];
if (!rev) {
if (unresolvedRevId === null) {
// meaning "default branch". We only get here if the user
// asked for the default branch and there are currently no
// commits at all in the repo. Hand back an empty
// checkout.
return new Dvcs.Checkout(null, null, null);
} else {
// Couldn't find what the user asked for.
return null;
}
}
var fs = new Dvcs.Checkout(revId, null, rev.branch);
for (var inode in rev.alive) {
fs.inodes[inode] = this.getBody(rev, inode);
}
return fs;
};
Dvcs.Repository.prototype.commit = function(fs, metadata) {
if (!fs.anyDirty) {
return null;
}
var directParentRev = this.lookupRev(fs.directParent);
var additionalParentRev = this.lookupRev(fs.additionalParent);
var oldAlive = Dvcs.Util.dict_union(directParentRev.alive, additionalParentRev.alive);
var oldDead = Dvcs.Util.dict_union(directParentRev.dead, additionalParentRev.dead);
var newChanged = [];
var newAlive = {};
for (var inodeId in fs.inodes) {
if (fs.dirty[inodeId]) {
var newBodyId = Dvcs.Util.random_uuid();
if (Dvcs._debugMode) { newBodyId = "body-" + newBodyId; }
this.bodies[newBodyId] = Dvcs.Util.deepCopy(fs.inodes[inodeId]);
newAlive[inodeId] = newBodyId;
newChanged.push(inodeId);
} else {
newAlive[inodeId] = oldAlive[inodeId];
}
}
var newDead = Dvcs.Util.dict_to_set(Dvcs.Util.dict_union(oldDead,
Dvcs.Util.dict_difference(oldAlive,
newAlive)));
var rev = { alive: newAlive,
dead: newDead,
changed: newChanged,
branch: fs.getBranch(),
timestamp: (new Date()).getTime(),
metadata: metadata,
directParent: fs.directParent,
additionalParent: fs.additionalParent };
var newRevId = Dvcs.Util.random_uuid();
if (Dvcs._debugMode) { newRevId = "rev-" + newRevId; }
this.recordRevision(newRevId, rev);
fs.directParent = newRevId;
fs.additionalParent = null;
fs.dirty = {};
fs.anyDirty = false;
return newRevId;
};
Dvcs.Repository.prototype.lookupParents = function (revId) {
var r = this.lookupRev(revId);
var result = [];
if (r.directParent) result.push(r.directParent);
if (r.additionalParent) result.push(r.additionalParent);
return result;
};
Dvcs.Repository.prototype.canMerge = function(r1, r2) {
var $elf = this;
function lookupParents(revId) { return $elf.lookupParents(revId); }
var ancestorRevId = Graph.least_common_ancestor(lookupParents, r1, r2);
return !(r1 == ancestorRevId || r2 == ancestorRevId);
}
Dvcs.Repository.prototype.merge = function(r1, r2) {
var rev1 = this.lookupRev(r1);
var rev2 = this.lookupRev(r2);
var $elf = this;
function lookupParents(revId) { return $elf.lookupParents(revId); }
var ancestorRevId = Graph.least_common_ancestor(lookupParents, r1, r2);
var ancestorRev = this.lookupRev(ancestorRevId, false);
if (r1 == ancestorRevId || r2 == ancestorRevId) {
return null;
}
var fs = this.update(r1);
fs.additionalParent = r2;
fs.anyDirty = true;
var conflicts = [];
for (var deadInode in rev2.dead) {
fs.deleteFile(deadInode);
}
for (var aliveInode in rev2.alive) {
if (fs.fileExists(aliveInode)) {
if (ancestorRev.alive[aliveInode] != rev1.alive[aliveInode] ||
ancestorRev.alive[aliveInode] != rev2.alive[aliveInode])
{
// It has a different body from the ancestor in one or
// both of the revs being merged.
var body0 = this.getBody(ancestorRev, aliveInode);
var body1 = fs.inodes[aliveInode];
var body2 = this.getBody(rev2, aliveInode);
this.mergeBodies(body1, body0, body2,
function (mergedBody) {
fs.inodes[aliveInode] = mergedBody;
fs.setDirty(aliveInode);
},
function (partialResult, conflictDetails) {
conflicts.push({inode: aliveInode,
partialResult: partialResult,
conflictDetails: conflictDetails});
});
} else {
// It is unchanged. Leave it alone.
}
} else if (!rev1.dead[aliveInode]) {
fs.inodes[aliveInode] = this.getBody(rev2, aliveInode);
fs.setDirty(aliveInode);
}
}
return {files: fs, conflicts: conflicts, ancestor: ancestorRevId};
};
Dvcs.Repository.prototype.lookupMerger = function(prop) {
return Dvcs.Mergers.Defaults[prop] || Dvcs.Mergers.simpleScalarMerger;
};
Dvcs.Repository.prototype.mergeBodies = function(bThis, bBase, bOther, kSuccess, kConflict) {
var props = Dvcs.Util.dict_union(bThis, bOther);
var bResult = {};
var failures = {};
var haveConflicts = false;
for (var prop in props) {
var merger = this.lookupMerger(prop);
var mergedPropValue = merger(bThis[prop], bBase[prop], bOther[prop]);
if (mergedPropValue.length == 1 && mergedPropValue[0].ok) {
bResult[prop] = mergedPropValue[0].ok;
} else {
failures[prop] = mergedPropValue;
haveConflicts = true;
}
}
if (haveConflicts) {
return kConflict(bResult, failures);
} else {
return kSuccess(bResult);
}
};
Dvcs.Repository.prototype.recordRevision = function(newRevId, rev) {
var $elf = this;
function addChild(parentId) {
if (parentId === null) return;
if (!$elf.children[parentId]) {
$elf.children[parentId] = [newRevId];
} else {
$elf.children[parentId].push(newRevId);
}
}
this.revisions[newRevId] = rev;
addChild(rev.directParent);
addChild(rev.additionalParent);
};
Dvcs.Repository.prototype.exportRevisions = function(revIds) {
if (revIds) {
var revs = {};
for (var i = 0; i < revIds; i++) {
var rev = this.revisions[revIds[i]];
if (rev) revs[revIds[i]] = rev;
}
var bodies = {};
for (var revId in revs) {
var alive = revs[revId].alive;
for (var inodeId in alive) {
var bodyId = alive[inodeId];
bodies[bodyId] = this.bodies[bodyId];
}
}
return {revisions: revs, bodies: bodies};
} else {
// Shortcut for all revisions. Be warned: shares structure!
return {revisions: this.revisions, bodies: this.bodies};
}
};
Dvcs.Repository.prototype.importRevisions = function(e) {
var stats = {
bodyCount: 0,
bodyDups: 0,
revCount: 0,
revDups: 0
};
for (var bodyId in e.bodies) {
if (!this.bodies[bodyId]) {
this.bodies[bodyId] = e.bodies[bodyId];
stats.bodyCount++;
} else {
stats.bodyDups++;
}
}
for (var revId in e.revisions) {
if (!this.revisions[revId]) {
this.recordRevision(revId, e.revisions[revId]);
stats.revCount++;
} else {
stats.revDups++;
}
}
return stats;
};
Dvcs.Repository.prototype.allRevisions = function() {
return Dvcs.Util.dict_to_set(this.revisions);
};
Dvcs.Repository.prototype.branchHeads = function(branch) {
var result = [];
for (var revId in this.revisions) {
var rev = this.revisions[revId];
if (rev.branch == branch) {
var hasChildrenWithinBranch = false;
var kids = this.children[revId] || [];
for (var i = 0; i < kids.length; i++) {
if (this.revisions[kids[i]].branch == branch) {
hasChildrenWithinBranch = true;
break;
}
}
if (!hasChildrenWithinBranch) {
result.push(revId);
}
}
}
return result;
};
Dvcs.Repository.prototype.branchTip = function(branch) {
var newestHead = null;
var newestRev = null;
var branchHeads = this.branchHeads(branch);
for (var i = 0; i < branchHeads.length; i++) {
var id = branchHeads[i];
var rev = this.lookupRev(id);
if (newestHead === null || newestRev.timestamp < rev.timestamp) {
newestHead = id;
newestRev = rev;
}
}
return newestHead;
};
Dvcs.Repository.prototype.allBranches = function() {
var branches = {};
for (var revId in this.revisions) {
var rev = this.revisions[revId];
var branch = rev.branch;
var branchRecord = branches[branch];
if (!branchRecord) {
branchRecord = { active: false, heads: [] };
branches[branch] = branchRecord;
}
var hasChildrenWithinBranch = false;
var kids = this.children[revId] || [];
for (var i = 0; i < kids.length; i++) {
if (this.revisions[kids[i]].branch == branch) {
hasChildrenWithinBranch = true;
break;
}
}
if (!hasChildrenWithinBranch) {
branchRecord.heads.push(revId);
if (kids.length === 0) {
branchRecord.active = true;
}
}
}
return branches;
};
Dvcs.Repository.prototype.childlessRevisions = function() {
var result = [];
for (var revId in this.revisions) {
var kids = this.children[revId] || [];
if (kids.length === 0) {
result.push(revId);
}
}
var revs = this.revisions;
result.sort(function (r1, r2) { return revs[r2].timestamp - revs[r1].timestamp; });
return result;
};
Dvcs.Repository.prototype.fileRevisions = function(uuid) {
var result = {};
for (var revId in this.revisions) {
var rev = this.revisions[revId];
for (var i = rev.changed.length - 1; i >= 0; i--) {
if (uuid == rev.changed[i]) {
result[revId] = rev;
break;
}
}
}
return result;
};
// Copyright (c) 2008 Tony Garnock-Jones <tonyg@lshift.net>
// Copyright (c) 2008 LShift Ltd. <query@lshift.net>
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation files
// (the "Software"), to deal in the Software without restriction,
// including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software,
// and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
//
// The above copyright notice and this permission notice shall be
// included in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
// BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
Graph = {
_foreach: function(arr, f) {
for (var i = 0; i < arr.length; i++) {
f(arr[i]);
}
},
least_common_ancestor: function(parentsFun, leafId1, leafId2) {
/* This is a pretty crude approximation. Since we're working
with DAGs, rather than trees, it may not return the very very
least common ancestor. */
var potentialMatches = {};
function augmentPotentialMatches(nodeId) {
if (!potentialMatches[nodeId]) {
potentialMatches[nodeId] = nodeId;
Graph._foreach(parentsFun(nodeId), augmentPotentialMatches);
}
}
augmentPotentialMatches(leafId2);
var searchOrder = [leafId1];
function queueForExamination(nodeId) {
searchOrder.push(nodeId);
}
while (searchOrder.length) {
var candidateId = searchOrder.shift();
if (potentialMatches[candidateId]) {
return candidateId;
} else {
Graph._foreach(parentsFun(candidateId), queueForExamination);
}
}
return null; // no LCA found.
}
};
<<history>>First Draft:
This is the first draft. lalalalalala
==================================================================>>>>>>>>>> ''LOOK!!''
/*
http://www.JSON.org/json2.js
2008-06-08
Public Domain.
NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.
See http://www.JSON.org/js.html
This file creates a global JSON object containing two methods: stringify
and parse.
JSON.stringify(value, replacer, space)
value any JavaScript value, usually an object or array.
replacer an optional parameter that determines how object
values are stringified for objects without a toJSON
method. It can be a function or an array.
space an optional parameter that specifies the indentation
of nested structures. If it is omitted, the text will
be packed without extra whitespace. If it is a number,
it will specify the number of spaces to indent at each
level. If it is a string (such as '\t' or ' '),
it contains the characters used to indent at each level.
This method produces a JSON text from a JavaScript value.
When an object value is found, if the object contains a toJSON
method, its toJSON method will be called and the result will be
stringified. A toJSON method does not serialize: it returns the
value represented by the name/value pair that should be serialized,
or undefined if nothing should be serialized. The toJSON method
will be passed the key associated with the value, and this will be
bound to the object holding the key.
For example, this would serialize Dates as ISO strings.
Date.prototype.toJSON = function (key) {
function f(n) {
// Format integers to have at least two digits.
return n < 10 ? '0' + n : n;
}
return this.getUTCFullYear() + '-' +
f(this.getUTCMonth() + 1) + '-' +
f(this.getUTCDate()) + 'T' +
f(this.getUTCHours()) + ':' +
f(this.getUTCMinutes()) + ':' +
f(this.getUTCSeconds()) + 'Z';
};
You can provide an optional replacer method. It will be passed the
key and value of each member, with this bound to the containing
object. The value that is returned from your method will be
serialized. If your method returns undefined, then the member will
be excluded from the serialization.
If the replacer parameter is an array, then it will be used to
select the members to be serialized. It filters the results such
that only members with keys listed in the replacer array are
stringified.
Values that do not have JSON representaions, such as undefined or
functions, will not be serialized. Such values in objects will be
dropped; in arrays they will be replaced with null. You can use
a replacer function to replace those with JSON values.
JSON.stringify(undefined) returns undefined.
The optional space parameter produces a stringification of the
value that is filled with line breaks and indentation to make it
easier to read.
If the space parameter is a non-empty string, then that string will
be used for indentation. If the space parameter is a number, then
then indentation will be that many spaces.
Example:
text = JSON.stringify(['e', {pluribus: 'unum'}]);
// text is '["e",{"pluribus":"unum"}]'
text = JSON.stringify(['e', {pluribus: 'unum'}], null, '\t');
// text is '[\n\t"e",\n\t{\n\t\t"pluribus": "unum"\n\t}\n]'
text = JSON.stringify([new Date()], function (key, value) {
return this[key] instanceof Date ?
'Date(' + this[key] + ')' : value;
});
// text is '["Date(---current time---)"]'
JSON.parse(text, reviver)
This method parses a JSON text to produce an object or array.
It can throw a SyntaxError exception.
The optional reviver parameter is a function that can filter and
transform the results. It receives each of the keys and values,
and its return value is used instead of the original value.
If it returns what it received, then the structure is not modified.
If it returns undefined then the member is deleted.
Example:
// Parse the text. Values that look like ISO date strings will
// be converted to Date objects.
myData = JSON.parse(text, function (key, value) {
var a;
if (typeof value === 'string') {
a =
/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value);
if (a) {
return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],
+a[5], +a[6]));
}
}
return value;
});
myData = JSON.parse('["Date(09/09/2001)"]', function (key, value) {
var d;
if (typeof value === 'string' &&
value.slice(0, 5) === 'Date(' &&
value.slice(-1) === ')') {
d = new Date(value.slice(5, -1));
if (d) {
return d;
}
}
return value;
});
This is a reference implementation. You are free to copy, modify, or
redistribute.
This code should be minified before deployment.
See http://javascript.crockford.com/jsmin.html
USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD THIRD PARTY
CODE INTO YOUR PAGES.
*/
/*jslint evil: true */
/*global JSON */
/*members "", "\b", "\t", "\n", "\f", "\r", "\"", JSON, "\\", call,
charCodeAt, getUTCDate, getUTCFullYear, getUTCHours, getUTCMinutes,
getUTCMonth, getUTCSeconds, hasOwnProperty, join, lastIndex, length,
parse, propertyIsEnumerable, prototype, push, replace, slice, stringify,
test, toJSON, toString
*/
if (!this.JSON) {
// Create a JSON object only if one does not already exist. We create the
// object in a closure to avoid global variables.
JSON = function () {
function f(n) {
// Format integers to have at least two digits.
return n < 10 ? '0' + n : n;
}
Date.prototype.toJSON = function (key) {
return this.getUTCFullYear() + '-' +
f(this.getUTCMonth() + 1) + '-' +
f(this.getUTCDate()) + 'T' +
f(this.getUTCHours()) + ':' +
f(this.getUTCMinutes()) + ':' +
f(this.getUTCSeconds()) + 'Z';
};
var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
escapeable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
gap,
indent,
meta = { // table of character substitutions
'\b': '\\b',
'\t': '\\t',
'\n': '\\n',
'\f': '\\f',
'\r': '\\r',
'"' : '\\"',
'\\': '\\\\'
},
rep;
function quote(string) {
// If the string contains no control characters, no quote characters, and no
// backslash characters, then we can safely slap some quotes around it.
// Otherwise we must also replace the offending characters with safe escape
// sequences.
escapeable.lastIndex = 0;
return escapeable.test(string) ?
'"' + string.replace(escapeable, function (a) {
var c = meta[a];
if (typeof c === 'string') {
return c;
}
return '\\u' + ('0000' +
(+(a.charCodeAt(0))).toString(16)).slice(-4);
}) + '"' :
'"' + string + '"';
}
function str(key, holder) {
// Produce a string from holder[key].
var i, // The loop counter.
k, // The member key.
v, // The member value.
length,
mind = gap,
partial,
value = holder[key];
// If the value has a toJSON method, call it to obtain a replacement value.
if (value && typeof value === 'object' &&
typeof value.toJSON === 'function') {
value = value.toJSON(key);
}
// If we were called with a replacer function, then call the replacer to
// obtain a replacement value.
if (typeof rep === 'function') {
value = rep.call(holder, key, value);
}
// What happens next depends on the value's type.
switch (typeof value) {
case 'string':
return quote(value);
case 'number':
// JSON numbers must be finite. Encode non-finite numbers as null.
return isFinite(value) ? String(value) : 'null';
case 'boolean':
case 'null':
// If the value is a boolean or null, convert it to a string. Note:
// typeof null does not produce 'null'. The case is included here in
// the remote chance that this gets fixed someday.
return String(value);
// If the type is 'object', we might be dealing with an object or an array or
// null.
case 'object':
// Due to a specification blunder in ECMAScript, typeof null is 'object',
// so watch out for that case.
if (!value) {
return 'null';
}
// Make an array to hold the partial results of stringifying this object value.
gap += indent;
partial = [];
// If the object has a dontEnum length property, we'll treat it as an array.
if (typeof value.length === 'number' &&
!(value.propertyIsEnumerable('length'))) {
// The object is an array. Stringify every element. Use null as a placeholder
// for non-JSON values.
length = value.length;
for (i = 0; i < length; i += 1) {
partial[i] = str(i, value) || 'null';
}
// Join all of the elements together, separated with commas, and wrap them in
// brackets.
v = partial.length === 0 ? '[]' :
gap ? '[\n' + gap +
partial.join(',\n' + gap) + '\n' +
mind + ']' :
'[' + partial.join(',') + ']';
gap = mind;
return v;
}
// If the replacer is an array, use it to select the members to be stringified.
if (rep && typeof rep === 'object') {
length = rep.length;
for (i = 0; i < length; i += 1) {
k = rep[i];
if (typeof k === 'string') {
v = str(k, value, rep);
if (v) {
partial.push(quote(k) + (gap ? ': ' : ':') + v);
}
}
}
} else {
// Otherwise, iterate through all of the keys in the object.
for (k in value) {
if (Object.hasOwnProperty.call(value, k)) {
v = str(k, value, rep);
if (v) {
partial.push(quote(k) + (gap ? ': ' : ':') + v);
}
}
}
}
// Join all of the member texts together, separated with commas,
// and wrap them in braces.
v = partial.length === 0 ? '{}' :
gap ? '{\n' + gap +
partial.join(',\n' + gap) + '\n' +
mind + '}' :
'{' + partial.join(',') + '}';
gap = mind;
return v;
}
}
// Return the JSON object containing the stringify, parse, and quote methods.
return {
stringify: function (value, replacer, space) {
// The stringify method takes a value and an optional replacer, and an optional
// space parameter, and returns a JSON text. The replacer can be a function
// that can replace values, or an array of strings that will select the keys.
// A default replacer method can be provided. Use of the space parameter can
// produce text that is more easily readable.
var i;
gap = '';
indent = '';
if (space) {
// If the space parameter is a number, make an indent string containing that
// many spaces.
if (typeof space === 'number') {
for (i = 0; i < space; i += 1) {
indent += ' ';
}
// If the space parameter is a string, it will be used as the indent string.
} else if (typeof space === 'string') {
indent = space;
}
}
// If there is a replacer, it must be a function or an array.
// Otherwise, throw an error.
rep = replacer;
if (replacer && typeof replacer !== 'function' &&
(typeof replacer !== 'object' ||
typeof replacer.length !== 'number')) {
throw new Error('JSON.stringify');
}
// Make a fake root object containing our value under the key of ''.
// Return the result of stringifying the value.
return str('', {'': value});
},
parse: function (text, reviver) {
// The parse method takes a text and an optional reviver function, and returns
// a JavaScript value if the text is a valid JSON text.
var j;
function walk(holder, key) {
// The walk method is used to recursively walk the resulting structure so
// that modifications can be made.
var k, v, value = holder[key];
if (value && typeof value === 'object') {
for (k in value) {
if (Object.hasOwnProperty.call(value, k)) {
v = walk(value, k);
if (v !== undefined) {
value[k] = v;
} else {
delete value[k];
}
}
}
}
return reviver.call(holder, key, value);
}
// Parsing happens in four stages. In the first stage, we replace certain
// Unicode characters with escape sequences. JavaScript handles many characters
// incorrectly, either silently deleting them, or treating them as line endings.
cx.lastIndex = 0;
if (cx.test(text)) {
text = text.replace(cx, function (a) {
return '\\u' + ('0000' +
(+(a.charCodeAt(0))).toString(16)).slice(-4);
});
}
// In the second stage, we run the text against
// regular expressions that look for non-JSON patterns. We are especially
// concerned with '()' and 'new' because they can cause invocation, and '='
// because it can cause mutation. But just to be safe, we want to reject all
// unexpected forms.
// We split the second stage into 4 regexp operations in order to work around
// crippling inefficiencies in IE's and Safari's regexp engines. First we
// replace all backslash pairs with '@' (a non-JSON character). Second, we
// replace all simple value tokens with ']' characters. Third, we delete all
// open brackets that follow a colon or comma or that begin the text. Finally,
// we look to see that the remaining characters are only whitespace or ']' or
// ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval.
if (/^[\],:{}\s]*$/.test(text.replace(/\\["\\\/bfnrtu]/g, '@').
replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']').
replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
// In the third stage we use the eval function to compile the text into a
// JavaScript structure. The '{' operator is subject to a syntactic ambiguity
// in JavaScript: it can begin a block or an object literal. We wrap the text
// in parens to eliminate the ambiguity.
j = eval('(' + text + ')');
// In the optional fourth stage, we recursively walk the new structure, passing
// each name/value pair to a reviver function for possible transformation.
return typeof reviver === 'function' ?
walk({'': j}, '') : j;
}
// If the text is not JSON parseable, then a SyntaxError is thrown.
throw new SyntaxError('JSON.parse');
}
};
}();
}
!usage
{{{[img[mailator.png]]}}}
[img[mailator.png]]
!notes
attached by FileDropPlugin
!type
image/png
!file
!url
!hiddenData
/%
!data
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKcAAAATCAYAAAD1TR2PAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAMeSURBVGhD7ZiBtasgDIa7T+dxEDdwAgZxECfoBg7C408JhggUe20PvuI5ntuLEmLy8Sd6s/3oEWg0ArdG/epu9QjYDmeHoNkIdDibTU13rMPZGWg2Au3A+ZisvTl3bkOzwfqeY4s1g7HL9xZscqUEnA9r72747mCRx6DGZgcRweTPmW/285PXCjGA/WDjw7HijVC13mrncbDDwOdo5/UT/gFIti3hlOPvrntN2DNw3h2c7nSc0cHJDMC6rEYKJ/8HnHruKzVUc97NQc08ehY8X8VmWGc7BmDYOBI9WPNRWTsbprPt1QT67/fk4ZwcUIOXlsklc3JJDXB6dWTlQcKjawpOrcLab9hnpaU1PawAiMensFOeYEllZj9pXu4abzJsFOU//IFyRz5YuxivZIvZlHOc7eoKrqG/OLSyOoU1c6S2Y5Da/b0b5FotuazLccwf7SiUvMb2YoTys9/ymeRmw4bEGlQp0q1FZI8fIGfvUHxiMPJwPpBAJNLBArgiADEsy7qAcQeIUk05Lwe0hofUju1olZWgFa7tbAjlhE+7DeSgoMAraHxyF8OJewKzlXpVhkl9M/0jgcCQ18IpVPst29hP2ifhc8km2AGEwWcPU8kewflefApwuoWhaCjRUC0JpwaVlY7ETQKCci/BzUl9Cio5r9A2sOqRiifaA+5lpTLqfpgqAyvzFnAD4hD4IG+bYq6z8UCmgi9hjEtqpDpQp8Nw6kRva9XZ9oCpvgRzaSjaMPt8rbNTVd10A9icvSSc+fjIFctwQjVZsTScu56TYTqj59SQleCUGyA1L7U5VFl/pZwSIPoNIEvKmQm+TuJbypmBs9p2hXIqZQSQAb5TlPMUOAXHWi1lnwglit7WFRBUyksvRUeVU/WVh78UHOs5KTnUg4l+LyjFEeVM9KenKWfJNqqx7zurek5uNZ75j+Ak4RU9bFXPmVf7uG162XPmSm8r46U3+5Pf+pNv663E4f/3o52P8NWx/iKc5NPz01H4zqlfBqr97jcejcAF4Tz6iP3+q0agw3nVzP2A3x3OH0jyVR+xw3nVzP2A3/8AiaG0lpwAsI8AAAAASUVORK5CYII=
!endHiddenData
%/
var a=['a','b'];
var b=JSON.stringify(a);
typeof a
typeof b
var c = JSON.parse(b);
typeof c
//Passes through eval(), so may not work on some functions.// [[print_r2]]
<html>
<form class="eval" style="display:inline;margin:0;padding:0;white-space:nowrap;"
action="#" onsubmit="
//print_r( obj, maxLevel, maxStringLength, boolSkipMethodsAndFunctions, separator, startLevel???, strCallback )
function print_r(x, max, sMax, skipMethods, sep, l, strCallback) {
max = max || 10;
sMax = sMax || 50;
skipMethods = skipMethods || true;
sep = sep || ' ';
l = l || 0;
if (l > max) return '<font color=\'green\'>[Stopped at ' + l + ' levels]</font><br>\n';
var i, r = '', t = typeof x, tab = '';
if (x === null)
r += '(null)<br>\n';
else if (t == 'object') {
l++;
for (i = 0; i < l; i++)
tab += sep;
if (x && x.length)
t = 'array';
r += '(' + t + ':' + l + ') : <br>\n';
for (i in x) {
if (!(typeof x[i] == 'function' && skipMethods)) {
try {
r += tab + '[' + i + '] : ' +
print_r(x[i], max, sMax, skipMethods, sep, l, strCallback);
}
catch (e) {
return r+='<font color=\'red\'>[ERROR: ' + e + ']</font><br>\n';
}
}
}
}
else {
var sLen = '';
if (t == 'string') {
sLen = '[' + x.length + ']';
if (x.length > sMax)
x = x.substr(0, sMax) + '...';
if(strCallback)
x = strCallback(x);
}
if (!(t == 'function' && skipMethods)) {
r += '(' + t + sLen + ') ' + x + '<br>\n';
}
}
return r;
};
function strCB(str){
return str;
};
(document.getElementById('outprintr').innerHTML) =
('\n<p>' + print_r(eval(document.getElementById('inprintr').value),3) + '</p>');
// ('\n<p>' + print_r(eval(document.getElementById('inprintr').value),3,50,true,null,null, strCB) + '</p>');
//print_r( obj, maxLevel, maxStringLength, boolSkipMethodsAndFunctions, separator, startLevel???, strCallback )
">
<input type=text id="inprintr" style="width:80%" value="document.location;"
onkeydown="if(event.keyCode==13){this.form.onsubmit(); return false;}" />
<input type=reset value="Clear" style="width:4em" onclick="
document.getElementById('outprintr').innerHTML='';this.form.input.focus()" />
<input type=button value="eval" style="width:4em" onclick="this.form.onsubmit()" />
</form>
<div id='outprintr' style="background-color:WhiteSmoke !important;"></div>
</html>
//Requires [[InlineJavascriptPlugin]]//
<html><div id='outprintr2' style="background-color:WhiteSmoke !important;"></div></html>
<script show>
//(document.getElementById('outprintr2').innerHTML) = print_r(document.location,2);
(document.getElementById('outprintr2').innerHTML) = print_r(document.location ,2);
//print_r( obj, maxLevel, maxStringLength, boolSkipMethodsAndFunctions, separator, startLevel??? ,strCallback )
function print_r(x, max, sMax, skipMethods, sep, l, strCallback) {
max = max || 10;
sMax = sMax || 50;
skipMethods = skipMethods || true;
sep = sep || ' ';
l = l || 0;
if (l > max) return '<font color=\'green\'>[Stopped at ' + l + ' levels]</font><br>\n';
var i, r = '', t = typeof x, tab = '';
if (x === null)
r += '(null)<br>\n';
else if (t == 'object') {
l++;
for (i = 0; i < l; i++)
tab += sep;
if (x && x.length)
t = 'array';
r += '(' + t + ':' + l + ') : <br>\n';
for (i in x) {
if (!(typeof x[i] == 'function' && skipMethods)) {
try {
r += tab + '[' + i + '] : ' +
print_r(x[i], max, sMax, skipMethods, sep, l, strCallback);
}
catch (e) {
return r+='<font color=\'red\'>[ERROR: ' + e + ']</font><br>\n';
}
}
}
}
else {
var sLen = '';
if (t == 'string') {
sLen = '[' + x.length + ']';
if (x.length > sMax)
x = x.substr(0, sMax) + '...';
if(strCallback)
x = strCallback(x);
}
if (!(t == 'function' && skipMethods)) {
r += '(' + t + sLen + ') ' + x + '<br>\n';
}
}
return r;
};
function strCB(str){
return str;
};
</script>
!usage
{{{[img[readOnly.png]]}}}
[img[readOnly.png]]
!notes
attached by FileDropPlugin
!type
image/png
!file
!url
!hiddenData
/%
!data
data:image/png;base64,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
!endHiddenData
%/
//{{{
({revisions:{'14018e61-be1e-48d3-9ade-0dae3c9cb5dd':{alive:{'8b35aace-2080-40fd-a42f-8c853dd96622':"487400c2-9002-4d6f-8ae5-500e1ad2e1ad"}, dead:{}, changed:["8b35aace-2080-40fd-a42f-8c853dd96622"], branch:null, timestamp:1278280085307, metadata:{subject:"First Draft"}, directParent:null, additionalParent:null}, 'fb1ad628-cb39-4554-9f23-8ac874739534':{alive:{'8b35aace-2080-40fd-a42f-8c853dd96622':"255e851b-2e55-499d-83c8-84f5f1a5c25f"}, dead:{}, changed:["8b35aace-2080-40fd-a42f-8c853dd96622"], branch:null, timestamp:1278280109681, metadata:{subject:"Second Draft"}, directParent:"14018e61-be1e-48d3-9ade-0dae3c9cb5dd", additionalParent:null}, 'e8d230d3-da59-43b5-8fb2-9f2c22c966fa':{alive:{'8b35aace-2080-40fd-a42f-8c853dd96622':"a6b83261-d904-4729-99e4-2c0fd4705057"}, dead:{}, changed:["8b35aace-2080-40fd-a42f-8c853dd96622"], branch:null, timestamp:1278280138897, metadata:{subject:"Third Draft"}, directParent:"fb1ad628-cb39-4554-9f23-8ac874739534", additionalParent:null}, '51a8fbbe-d629-4934-aebf-a06b9fddfaf2':{alive:{'8b35aace-2080-40fd-a42f-8c853dd96622':"c6e227c5-94c8-4a0c-b131-8b4e7a9298ff"}, dead:{}, changed:["8b35aace-2080-40fd-a42f-8c853dd96622"], branch:null, timestamp:1278280191624, metadata:{subject:"1B"}, directParent:"14018e61-be1e-48d3-9ade-0dae3c9cb5dd", additionalParent:null}}, bodies:{'487400c2-9002-4d6f-8ae5-500e1ad2e1ad':{title:"historyPluginSample", text:"<<history>>First Draft:\nThis is the first draft. lalalalalala", modifier:"KennyZ", modified:1278280077866, tags:"sample"}, '255e851b-2e55-499d-83c8-84f5f1a5c25f':{title:"historyPluginSample", text:"<<history>>Second Draft:\nThis is the second draft. bahahahahahaha", modifier:"KennyZ", modified:1278280102962, tags:"sample"}, 'a6b83261-d904-4729-99e4-2c0fd4705057':{title:"historyPluginSample", text:"<<history>>Third Draft:\nThis is the third draft. muhahahahaha", modifier:"KennyZ", modified:1278280133879, tags:"sample"}, 'c6e227c5-94c8-4a0c-b131-8b4e7a9298ff':{title:"historyPluginSample", text:"<<history>>First Draft B:\nThis is the first draft (version B).\nShould I say lala, baba, or haha?", modifier:"KennyZ", modified:1278280180431, tags:"sample"}}})
//}}}
//{{{
({revisions:{'d982ba48-d5e7-4dd3-a282-3cdc5340d320':{alive:{'96317a1d-b01c-49a0-8552-9c45a8ccea8b':"d37dd945-0a10-448f-94bc-44b16be6cec5"}, dead:{}, changed:["96317a1d-b01c-49a0-8552-9c45a8ccea8b"], branch:null, timestamp:1278305739373, metadata:{subject:"abc"}, directParent:null, additionalParent:null}, '9e9ad1b5-c6ab-4f56-9ab6-b5f3fe1c4598':{alive:{'96317a1d-b01c-49a0-8552-9c45a8ccea8b':"c9cb13c1-6d49-434e-b6a0-578d3a06524d"}, dead:{}, changed:["96317a1d-b01c-49a0-8552-9c45a8ccea8b"], branch:null, timestamp:1278305754348, metadata:{subject:"bbb"}, directParent:"d982ba48-d5e7-4dd3-a282-3cdc5340d320", additionalParent:null}, '50a0a0a2-d507-4960-a161-ad6b7c8507bc':{alive:{'96317a1d-b01c-49a0-8552-9c45a8ccea8b':"78b80f84-bbde-4726-8b29-706fef7d3333"}, dead:{}, changed:["96317a1d-b01c-49a0-8552-9c45a8ccea8b"], branch:null, timestamp:1278305763150, metadata:{subject:"ccccc"}, directParent:"9e9ad1b5-c6ab-4f56-9ab6-b5f3fe1c4598", additionalParent:null}, '12952761-b14f-4c32-a40e-94de7f0ccf78':{alive:{'96317a1d-b01c-49a0-8552-9c45a8ccea8b':"51bcaf5b-7a35-4b8c-9832-8ac197dfb1b5"}, dead:{}, changed:["96317a1d-b01c-49a0-8552-9c45a8ccea8b"], branch:null, timestamp:1278305892436, metadata:{subject:"ddddd"}, directParent:"50a0a0a2-d507-4960-a161-ad6b7c8507bc", additionalParent:null}, '59fdb75f-80ec-4018-9e4f-3ec1cd49664c':{alive:{'96317a1d-b01c-49a0-8552-9c45a8ccea8b':"576864cd-87ed-42e0-9bc2-5c8a642debb9"}, dead:{}, changed:["96317a1d-b01c-49a0-8552-9c45a8ccea8b"], branch:null, timestamp:1278308057287, metadata:{subject:"zz"}, directParent:"d982ba48-d5e7-4dd3-a282-3cdc5340d320", additionalParent:null}}, bodies:{'d37dd945-0a10-448f-94bc-44b16be6cec5':{title:"testzz", text:"<<history>> abc abc abc", modifier:"KennyZ", modified:1278305733358, tags:""}, 'c9cb13c1-6d49-434e-b6a0-578d3a06524d':{title:"testzz", text:"<<history>>bbbbbbbbbbbbbbbbbb", modifier:"KennyZ", modified:1278305750790, tags:""}, '78b80f84-bbde-4726-8b29-706fef7d3333':{title:"testzz", text:"<<history>>cccccccccccc", modifier:"KennyZ", modified:1278305758977, tags:""}, '51bcaf5b-7a35-4b8c-9832-8ac197dfb1b5':{title:"testzz", text:"<<history>>cccccccccccc", modifier:"KennyZ", modified:1278305700000, tags:""}, '576864cd-87ed-42e0-9bc2-5c8a642debb9':{title:"testzz", text:"<<history>> abc abc abc\nas\nf\nasf\nasf", modifier:"KennyZ", modified:1278308046415, tags:""}}})
//}}}
//{{{
({revisions:{'7fa9b899-5379-4fca-92bf-c88bd69e68a1':{alive:{'a7532004-be1d-447e-b45c-014e6821c981':"0deac4fa-e0c0-4137-9115-c96007f8ca8c"}, dead:{}, changed:["a7532004-be1d-447e-b45c-014e6821c981"], branch:null, timestamp:1278361913474, metadata:{subject:"Alpha"}, directParent:null, additionalParent:null}}, bodies:{'0deac4fa-e0c0-4137-9115-c96007f8ca8c':{title:"HistoryPlugin", text:"/***\n<<history>>\n|''Name:''|HistoryPlugin|\n|''Description:''|Add history or revision control to any individual tiddler.|\n|''Author:''|MartinBudden, TonyGarnockJones, and Kenny Z|\n|''Source:''|http://cooltool.tiddlyspot.com/#HistoryPlugin|\n|''Dependencies:''|[[json2]] [[graph]] [[fs]] [[Draw]] [[diff]]|\n|''CodeRepository:''|[[HistoryPluginRequired.zip|http://cooltool.tiddlyspot.com/#HistoryPluginRequired.zip]],|\n|''Version:''|0.0.1|\n|''Status:''|Alpha|\n|''Date:''|July 3, 2010|\n|''Comments:''|[[The original code|http://homepages.kcbbs.gen.nz/tonyg/projects/synchrotron.html]] keeps track of changes to the entire TW. I changed it so each tiddler has its own repository. This gives it that timeline or \"history\" functionality I was going for.|\n|''License:''|[[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]] |\n|''~CoreVersion:''|2.6|\n!!Description\nAdd history or revision control to any individual tiddler. Be able to check for changes in different revisions.\n!!Usage\n#Import\n#Save & Reload\n#Add {{{<<history>>}}} to any tiddler.\n#Click commit button after writing first draft.\n!Todo\n*Find and remove rogue revision repositories.\n!!Code\n***/\n//{{{\nif(!version.extensions.HistoryPlugin) {\nversion.extensions.HistoryPlugin= {installed:true};\n\nconfig.macros.history={\ncanvis: [],\ninit: function(){\n\tconfig.shadowTiddlers.StyleSheetForHistory = this.css;\n\tsetStylesheet(store.getTiddlerText(\"StyleSheetForHistory\",this.css),\"history\");\n},\nhandler: function(place,macroName,params,wikifier,paramString,tiddler){\n\tvar rev = new Revision(tiddler);\n\tvar div=createTiddlyElement(place,'div',null,'history');\n\tDrawDvcs.tiddlyRenderRepository(div,rev.repo,rev);\n\tcreateTiddlyElement(div,'br');\n\tif(rev.dirty)\n\t\tcreateTiddlyButton(div,\"commit\",\"Commit the change\",function(){rev.commit()});\n\tif(this.canvis[rev.inode])\n\t\tcreateTiddlyButton(div,\"canvis\",\"Temporary unsaved changes\",\n\t\t\tfunction(){\n\t\t\t\tif(rev.dirty){ //clone & swap\n\t\t\t\t\ttemp = config.macros.history.copy(tiddler.text,tiddler.fields.hist_uuid);\n\t\t\t\t\ttiddler.text=config.macros.history.canvis[rev.inode].text;\n\t\t\t\t\ttiddler.fields.hist_uuid=config.macros.history.canvis[rev.inode].uuid;\n\t\t\t\t\tconfig.macros.history.canvis[rev.inode]=temp;\n\t\t\t\t}else{\n\t\t\t\t\ttiddler.text = config.macros.history.canvis[rev.inode].text;\n\t\t\t\t\ttiddler.fields.hist_uuid = config.macros.history.canvis[rev.inode].uuid;\n\t\t\t\t\tconfig.macros.history.canvis[rev.inode] = null;\n\t\t\t\t}\n\t\t\t\tstory.refreshTiddler(tiddler.title,null,true);\n\t\t\t});\n\treturn false;\n},\ncopy: function(text,uuid){\n\tt={}; t.text=text; t.uuid=uuid; return t;\n},\ncss: \"div.history{float:right; margin:4px;}\\n\\\ndiv.repository{line-height:0px;white-space:nowrap;}\\n\\\n.revision.selected{background-color:blue;color:white;}\\n\\\n.revision.modified{background-color:red;color:white;}\\n\",\n//.revision.aParent{background-color:#00cc00;color:white;}\\n\", // NEVER USED\n};\n// draw diagram of revision paths\nDrawDvcs.tiddlyRenderRepository = function(place,repo,revStore) {\n\tvar para=createTiddlyElement(place,'div',null,'repository');\n\tvar ordering = DrawDvcs.renderRepository(repo);\n\tfor (var i = 0; i < ordering.length; i++){\n\t\tvar item = ordering[i];\n\t\tvar rev = repo.lookupRev(item.revId);\n\t\tvar pictures = item.pictures;\n\t\tfor (var j = 0; j < pictures.length; j++) {\n\t\t\timg=createTiddlyElement(para,'img',null,'repoImg');\n\t\t\timg.src = config.macros.history.images[pictures[j]];\n\t\t}\n\t\tvar summary=((rev.metadata||{}).subject)||\"Untitled\";\n\t\tvar btnCss='revision'; var btnTxt='Checkout';\n\t\tif(revStore.fs.directParent==item.revId){\n\t\t\tif(revStore.dirty) btnCss+=' modified';\n\t\t\telse btnCss+=' selected';\n\t\t\tbtnTxt='Revert';\n\t\t}//else if(revStore.fs.additionalParent == item.revId) btnCss+=' aParent'; // NEVER HAPPENS\n\t\tvar s=createTiddlyButton(para,summary,btnTxt,revisionClicked,btnCss);\n\t\ts.revisionId=item.revId; s.revStore=revStore;\n\t\tcreateTiddlyElement(para,'br');\n\t}\n};\n// called when a revision path is clicked\nfunction revisionClicked(event) {\n\tvar e = (event || window.event);\n\tvar revId = e.target.revisionId;\n\tvar revStore = e.target.revStore;\n\trevStore.checkout(revId);\n\treturn false;\n};\n// object holding revisions\nfunction Revision(tiddler){\n\tthis.repo = new Dvcs.Repository();\n\tthis.fs = this.repo.update(null);\n\tthis.tiddler = tiddler;\n\tthis.inode = tiddler.fields.hist_inode;\n\tthis.uuid = tiddler.fields.hist_uuid;\n\tthis.dirty=false;\n\tthis.loadRepo();\n\tthis.hasChanged();\n\treturn this;\n};\n// convert data saved in tiddler into repo\nRevision.prototype.loadRepo = function(){\n\tvar repoText = store.getTiddlerText(\"repo_\"+this.inode,null);\n if (repoText){\n\t\tthis.repo.importRevisions(eval(repoText));\n\t\tthis.fs=this.repo.update(this.uuid);\n }else{\n\tvar id=this.fs.createFile();\n\twhile(store.tiddlerExists(\"repo_\"+id)){\n\t\tid=this.fs.createFile();\n\t}\n\tthis.inode = this.tiddler.fields.hist_inode = id;\n }\n};\n// save changes into repo\nRevision.prototype.commit = function(){\n\tif(!this.dirty)return;\n\tnote = prompt(\"Note this commit: \").substr(0,40); // error if null and returns.\n\tthis.fs.setProp(this.inode,\"title\",this.tiddler.title);\n\tthis.fs.setProp(this.inode,\"text\",this.tiddler.text);\n\tthis.fs.setProp(this.inode,\"modifier\",this.tiddler.modifier);\n\tthis.fs.setProp(this.inode,\"modified\",this.tiddler.modified.getTime());\n\ttags=[];for(i=0;i<this.tiddler.tags.length;i++)\n\t\ttags.push(String.encodeTiddlyLink(this.tiddler.tags[i]));\n\tthis.fs.setProp(this.inode,\"tags\",tags.join(' '));\n\tthis.fs.anyDirty=true;\n\tuuid = this.repo.commit(this.fs,{subject: note});\n\tthis.uuid = this.tiddler.fields.hist_uuid = uuid;\n\tthis.fs = this.repo.update(uuid);\n\tthis.saveRepo();\n\tstory.refreshTiddler(this.tiddler.title,null,true);\n};\n//save repo into a tiddler\nRevision.prototype.saveRepo = function(){\n\ttitle = \"repo_\"+this.inode;\n\trepoText = uneval(this.repo.exportRevisions());\n\ttext = '//{{{\\n'+repoText+'\\n//}}}\\n';\n\ttags = ['excludeLists','excludeSearch','repository'];\n\tstore.saveTiddler(title,title,text,this.tiddler.title,new Date(),tags);\n\tautoSaveChanges();\n};\n//get diff between current text and data in repo\nRevision.prototype.hasChanged = function(){\n\t// check text body\n\ttxt = Crypto.hexSha1Str(this.tiddler.text);\n\tsrc = Crypto.hexSha1Str(this.fs.getProp(this.inode,\"text\",\"\"));\n\tif(txt!=src)return this.dirty=true;\n\t// check title\n\ttxt = Crypto.hexSha1Str(this.tiddler.title);\n\tsrc = Crypto.hexSha1Str(this.fs.getProp(this.inode,\"title\",\"\"));\n\treturn this.dirty=(txt!=src);\n};\n// take out data from repo\nRevision.prototype.checkout = function(uuid){\n\tif(this.dirty){\n\t\tif(config.macros.history.canvis[this.inode])\n\t\t\tif(!confirm(\"Any uncommitted work would be lost. Are you sure?\"))\n\t\t\t\treturn false;\n\t\tconfig.macros.history.canvis[this.inode]=\n\t\t\tconfig.macros.history.copy(this.tiddler.text,this.uuid);\n\t}\n\tthis.uuid = this.tiddler.fields.hist_uuid = uuid;\n\tthis.fs = this.repo.update(this.uuid);\n\tthisTitle=this.tiddler.title;\n\ttitle=this.fs.getProp(this.inode,\"title\",thisTitle);\n\ttext=this.fs.getProp(this.inode,\"text\",\"\");\t\n\twho=this.fs.getProp(this.inode,\"modifier\",\"UNKNOWN\");\n\twhen=this.fs.getProp(this.inode,\"modified\",new Date().getTime());\n\tdate=new Date(); date.setTime(parseInt(when));\n\ttags=this.fs.getProp(this.inode,\"tags\",' ').readBracketedList();\n\tif(title != thisTitle){\n\t\tfor(i=1,s=title;store.tiddlerExists(title);i++){\n\t\t\ttitle=s+' ('+i+')';\n\t\t}\n\t\tstory.closeTiddler(thisTitle,false,false); \t\t\n\t\tstore.saveTiddler(thisTitle,title,text,who,date,tags,this.tiddler.fields);\n\t\tstory.displayTiddler(null,title);\n\t}else this.tiddler.set(null,text,who,date,tags);\n\tstory.refreshTiddler(title,null,true);\n\treturn true;\n};\n\nconfig.macros.history.images = {\n \"blob_0.png\": \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH2AYFChQyYckycwAAAIdJREFUOI3tkjEKwzAMRV+6CnwmjTpFl1yshwnkLp5TNP4u9tJ2cWsohTzQIqEnGwlO/ooFuAIbcG+xtdzyiewGyMzk7nJ3mZkAtdqQdAUUEcpMdTJTEdGl64hwL6Wo1qpnaq0qpQjYR4RHRLzIOu2Vx7vGy8iUb5j+5elLmX42XTrtsE9+yANzZprVJVS76gAAAABJRU5ErkJggg==\"\n ,\"blob_1.png\": \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH2AYFChQyYckycwAAAJZJREFUOI3tkjEOAjEMBPdoLflNLv0KmvsYjznpep7h+lAqtDROAwiSUwQFjLRNooxieYE2zpm3HBqFzfyg8BUTgCOABcA1s+TZtEd2AkARoZnRzCgiBMC865LOAOjuLKWwUkqhu1fp3CNcVZURwXsigqpKAGuPcHP3B1klf7k9e/ixLQ8fefhShtemSmuxL5ndxf7zRW4Gj5yRa/KFewAAAABJRU5ErkJggg==\"\n ,\"blob_10.png\": \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH2AYFChQyYckycwAAAKVJREFUOI3tkrEJwzAQRZ/AnUCQQoOkSaFKpaZI48UyhgcwuMkk6oPKn0ZuEhliYzABP7jmjv/gpIOTv8IAd2AEXrXG2jNbZA9A1lrFGBVjlLVWgOpslbQHlFJSKUUzpRSllGZpv0Y4OeeUc9YnOWc55wRMrWAHPBv9awgB7/3XwHtPCIFhGG6tbAdcGsJf3scsZJtsXnmJ3T9l97OZpbsd9smBvAHQ9YOCh41JCAAAAABJRU5ErkJggg==\"\n ,\"blob_11.png\": \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH2AYFChQyYckycwAAALVJREFUOI3tkjEKAjEQRd/KdoGARQ5iY5EqZU5hsxfzGDnAwjZWHiO9pJKxSRrNanZZsNAHv5lhHmQy0MY15yO7RmEzPyh8RwecgBG454y51q2RnQFRSolzTpxzopQSQHJvkXQAxHsvKSUppJTEe1+kwxLhpLWWGKM8E2MUrbUAU22wBy6V+sFaizHmpWGMwVpLCOFYm+2BfUXYsp9uZrbK6ifPsfmnbH42RVoO+5az+rD/fJEHZB6FPnyuglsAAAAASUVORK5CYII=\"\n ,\"blob_12.png\": \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH2AYFChQyYckycwAAAJxJREFUOI3tkjEKAyEUBceQThByI8t/ijR7sRxmYZtUewzrBKvlpdHGFIkbm8AOvEZlvuKDg7/CAVdgBp4lc1lze2Q3QN57xRgVY5T3XoDKXpd0AmRmyjmrknOWmVXp1CNcQghKKaklpaQQgoClR/gwszdZpdxyA+5tzj1TGhxw+fbw8CcP/5ThtanSWuytZHexW9aSj5x+nXQIeQEBLaCqFSFpfQAAAABJRU5ErkJggg==\"\n ,\"blob_13.png\": \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH2AYFChQyYckycwAAAJ5JREFUOI3tlDEKAyEQRZ8hnSDkRpZzijR7sRxmYZtUOYZ1wGr5abQxkGiQNMmD3zjyVGYQ+riVvOXQKezmB4WvcMAZWIG9ZC1r7hPZBZD3XjFGxRjlvRegUhuSLoDMTDlnVXLOMrMqXUaEWwhBKSW1pJQUQhCwjQjvZvYkq5Rb7sC1zXHklAYHnHo3T3/y9KZMH5sqnTbYLf/v64vCB5RHomZlltYsAAAAAElFTkSuQmCC\"\n ,\"blob_14.png\": \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH2AYFChQyYckycwAAALJJREFUOI3tkjEOwiAUhr+abiQkDhzExYGJkVO49GIegwM06eLkMdgNk3kusFQaLXYx6Ze85b38HwEe7PwVHXABRuCRa8y9rkV2BUQpJc45cc6JUkoAybNV0gEQ772klKSQUhLvfZEOa4ST1lpijDInxihaawGmWrAHbpX+yVqLMeZtYIzBWksI4VzL9sCxIvzmfbqFbJXmKy+x+adsvjZFWhb7mat5sefcc33k8OtJu5AXRsKFPuF7sfwAAAAASUVORK5CYII=\"\n ,\"blob_15.png\": \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH2AYFChQyYckycwAAALVJREFUOI3tlLENwyAQRR+ROySkFAySJgUVJVOk8WIZwwNYcpMqY7AAVXRpoHFwgi0rTfKka+70nwScgDbuuT5yaBQ284PCdyjgAozAI9eYe2qL7AqI1lq89+K9F621AJJnq6Q9ICEESSlJIaUkIYQi7dcIJ2OMxBhlToxRjDECTLVgB9wq/ZNzDmvty8Bai3OOYRjOtWwHHCvClvtRC9kqm4+8xO6PsvvaFOluiz3n/319UfgE2dyG+rvKV2wAAAAASUVORK5CYII=\"\n ,\"blob_2.png\": \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH2AYFChQyYckycwAAAJNJREFUOI3tkjEKAjEQRd+CXSDgjaacU9jsxTzMwjaeJPVKKvk2SaMRiQZE2Ae/mZBHZjKw81dMwAlYgGvJUmrTJ7IzoBCCzExmphCCAJWzLukMyN2Vc1Yl5yx3r9K5R7jGGJVS0iMpJcUYBayvLl8aubn7k6xSXrm1ZAfg2Kh3D/0dX7XcYvinDF+bKh222Ds/5A5/457uDkGvZQAAAABJRU5ErkJggg==\"\n ,\"blob_3.png\": \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH2AYFChQyYckycwAAAKNJREFUOI3tkr0KwjAYRU/FLRDwjTJ+T+HSF/NhCl2cfIzMSqZyXZJFo01rwUEP3OULOeTnQhuXnFl2jcJmflD4jg44AgMw5Qx51q2RnQA55xRCUAhBzjkBymuLpD0gM1NKSYWUksysSPslwtF7rxijHokxynsvYHy1+VzJZGZPskI+5bUm2wOHynzxo8/x0ZVrbP4pm9emSEuxbzmri/3ni9wBEwygqo8e4tAAAAAASUVORK5CYII=\"\n ,\"blob_4.png\": \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH2AYFChQyYckycwAAAJVJREFUOI3tkjEKwzAMRX+6CnQmjTpFl1yshwlk7zE0p2gqv4u8pIXi1EtpH/zFxs82+sCfr2ICcAawALhVllqbjsguACgiNDOaGUWEAFh7XdIZAN2dmclGZtLdm3TuEa6qyojgnoigqhLA2iPc3P1J1qhXbq8Onnpu+YThXx4+lOG1adJW7HvlcLH3XCtvGT7lHxQ+AOkknJHNxLgkAAAAAElFTkSuQmCC\"\n ,\"blob_5.png\": \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH2AYFChQyYckycwAAAJZJREFUOI3tlDEKwzAMRX+6CnQmjTpFl1yshwlk7zE0BzSV38Ve0tLaxWRpHmix8MPiCwNt3Et95dIobOYPhZ+YAFwBLAAepZZyNv0iuwGgiNDMaGYUEQJg6XVJZwB0d2YmK5lJd6/SuUe4qiojgnsigqpKAGuPcHP3F1mlvHJ7d/GwlIePPDyU4WtTpcMWe8/5fR0ofAJ8TZ5N0sDKDwAAAABJRU5ErkJggg==\"\n ,\"blob_6.png\": \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH2AYFChQyYckycwAAAJ9JREFUOI3tkrEKwyAURU9KN0HoHzm+r+iSH+vHBLJ0ymc4tziF20WX1BJMshRy4C5PPD71wclf0QF3YADeOUOudVtkD0DOOYUQFEKQc06A8lqTtAdkZkopqZBSkpkVad8iHL33ijFqSYxR3nsB46/Nz0pmM/uSFXKXr5rsCtwq9eZHX2PXlWsc/imHj02RlsGeczYP9pIpZ5XL3pNOIR/1oaCqrqJp9wAAAABJRU5ErkJggg==\"\n ,\"blob_7.png\": \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH2AYFChQyYckycwAAAKNJREFUOI3tlLEKwjAURU/FLRDwjzK+r3Dpj/kxhS5O/YzMQqZyXZKlRttocdEDd3khh7zkEdjGlLPKYaNwMz8ofEUHnIEBmHOGXOvekV0AOecUQlAIQc45AcprTdIekJkppaRCSklmVqR9i3D03ivGqCUxRnnvBYzPNl8rmc3sQVbIp7zVZEfgVKk3X/oaH7VcY/dH2X1sinS3wV7y/76+KLwDiMqiZru+wK0AAAAASUVORK5CYII=\"\n ,\"blob_8.png\": \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH2AYFChQyYckycwAAAJBJREFUOI3tkjEKAjEQRV/ALjDgjaacU9jsxTzMwjaeJLWSSr5N0qyNkYAI++A3yfAyYQYO/ooEXIAVeLSs7Sx9I7sCyjnL3eXuyjkLULsbki6AIkK1VnVqrYqILl1GhJuZqZSiPaUUmZmAbUR4j4g3Wad1+QRu+5xGXtmRgPOnxdO/PH0o09emS6ct9sEPeQGLYJ7ucs6fnQAAAABJRU5ErkJggg==\"\n ,\"blob_9.png\": \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH2AYFChQyYckycwAAAJ9JREFUOI3tkjEKAyEUBceQThByI8t/ijR7sRxmYZtUOYZ1gtXy0mizgUQXIUUy8BqV8YsP2riVfOTQKGzmB4XvcMAZmIG1ZC5rbo/sAsh7rxijYozy3gtQ2euSToDMTDlnVXLOMrMqnXqESwhBKSVtSSkphCBg6RHezexFVilTrsB1m2PPLRsccGo9PPzJwz9leG2qtBb7UbK72H++yBMeiaCqdfixnAAAAABJRU5ErkJggg==\"\n ,\"slide_l.png\": \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH2AYFChQyYckycwAAADFJREFUOI1jYBgFo2AYAkYqmsXMwMAQSE3DVjEwMPyntmGrqG0Y86hho4YhQBixhgEAQRwWyV5wCkoAAAAASUVORK5CYII=\"\n ,\"slide_m.png\": \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH2AYFChQyYckycwAAAE9JREFUOI3t0zEKgDAMBdAHvaJ6yF5SByuIgxUasEP+FggPQhLeU1CxY+30dnPHaqsTS6wlFBOIFSycHxCBXZMO57mDUGye60jsZwy2r9gB/Z0tlT2EWtcAAAAASUVORK5CYII=\"\n ,\"slide_r.png\": \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH2AYFChQyYckycwAAADpJREFUOI3t06ENACAMRcFLmJElWRIEFSgwVaTP/aQ5V+41DEz0x+2zExuxCyssSsVkY+wPSMOq6ssWvM8WywislYYAAAAASUVORK5CYII=\"\n ,\"stick_0.png\": \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH2AYFChQyYckycwAAABVJREFUOI1jYBgFo2AUjIJRMAqoAwAGVAAB8lwiXwAAAABJRU5ErkJggg==\"\n ,\"stick_1.png\": \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH2AYFChQyYckycwAAACNJREFUOI1jYCAOXIJigoCJSAOJBqMGjho4auCogaMGDhUDAZwOAcsorz0zAAAAAElFTkSuQmCC\"\n ,\"stick_10.png\": \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH2AYFChQyYckycwAAAJVJREFUOI3t07sJAlEQRuHPt2IgC4Z2YGIJlmBPYgOmYgkbiLGhmX2YrqkgGuw1MViXe41kTzIMDId/BoaGhj+khUuiY4QJxuh1kSWIMgxD/8QjRjTALggKbLCIDKWPU5AdMY0VvdkH2RbtVNkyyA7opMrgjJsfrAlzZbr1t8G6d1iFmscm+iTHXfkIldRNOMNVuXYlL+XfFT2H2O6WAAAAAElFTkSuQmCC\"\n ,\"stick_11.png\": \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH2AYFChQyYckycwAAALVJREFUOI3t0ztuAkEMgOEvYQkQChQpp6DikrkALcohUOrcgIqCjj5FilDQ8UixlngosN5su780Gllj/bLHMjmWcSp5TArTtMJW+A8esEjkjeNe/fE2wAhDdAu8JISduM9zBxH3Iz5in3DhcvV6mIXgB2+YZEXXwid8huwDr3VF18L3kE01HOgS65DNnf60kXCLjYo2s2X38axs9btRacGXst3a07zFBgflItwl23KBnbLKu/wCR20gpGTSl3wAAAAASUVORK5CYII=\"\n ,\"stick_12.png\": \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH2AYFChQyYckycwAAANNJREFUOI3t07FKA0EQgOHvoijaxuBDaCEEe5uUwUeyEDurtEHfwECQlNopCKnsrUJqFcFCQs7i5sgVeuxhJ/nLnZl/d2ZY1qz5h2SYYo5nTPCEvIHjAKc4xj684DMkeYj7CaITPFbqvjArgy10cYmPSLjGzg+ibQwj5w0XOKq7uYObKLjHbiW2hbuI3WIvoRMUsx1UXlpyFWeD6KoRGUYh6ClmlmOMjaaykjZeFcN/wLsGbf7GmdUmz/8qg8OKsHabqbSwwFIx11o2E4TLEGYSftA3PXkxeOJzoewAAAAASUVORK5CYII=\"\n ,\"stick_13.png\": \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH2AYFChQyYckycwAAANtJREFUOI3t07FKA0EQBuDvTlG0VfEhtAgEe19AfCQLsbNKK/oGCiIpYykEUtlrI9YqooVFziJzuEg896JlftjmduZj9+aOvNzG+jVlJpidOTgHZ8giRng0+XD7GKJqYWxhHzvYhDu8B1IFvPetadqfsoubpO8DD/VmiS6O8RoFZ1iZAi7jJGqecYRO0xU2cB4N11hNwCUMYu8K601QmgK95KQ1eBrPemYYaIGLAO5N3nWFSyy0xeqs4QlvsV60uOZPOfA1ycO/YrCdgI3TzE2JcYDFf4ACHOcUfgK/fDpV7BBCtAAAAABJRU5ErkJggg==\"\n ,\"stick_14.png\": \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH2AYFChQyYckycwAAAM1JREFUOI3t0rFKA0EQgOFvY2KMFiKat7AQ8gI2PpeF2FmlFX0DA2Jtuvg4apAYCHpnkbl4CDnvsJP81c7O7r8z7LBhwz8kYYYF5phG3IQe9rGHTgpZO+QifsZ7DdEBdiLO8VkkWxjgCm+RvI1LP+niOs684hInVS/3cRcXxtgt5bbxGLkHHP3SxYqEYanSgpvYG0ZXjUgYheAMp7G+x1ZTWcEhXvCEieUU1G5zHedRWY6Lv8rguCSs/M26tPCBzPesrqVdQ5iFMFlWWckXLE8s0STxUmsAAAAASUVORK5CYII=\"\n ,\"stick_15.png\": \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH2AYFChQyYckycwAAAOFJREFUOI3t071KA0EQwPHfnt9aiKidTyApBB/QQuys0oq+gYJY60NYpItVaj+QKAgmFpmTNcTcGtv8Ydmdm50/c8wdZdzHaqQqFBYzF86FM5DQxwfe8RLxOPuxdybk1rCJDSylkC2GXMSPeMuK9mLvjYm2sBrxEJ91ssIhTvEayYso4uevt4KzuPOMExxM6PybXVxGwR3WM+EybiN3g51popyEdtZpLTyPZ20zDDThKgQP6Mb5Ggt/ldVs48lo8n2jr6D4NX/jKDob4vi/MmhlwqnTLKXCIISp4W4xg1iNfAH/IDYHUEEa4gAAAABJRU5ErkJggg==\"\n ,\"stick_2.png\": \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH2AYFChQyYckycwAAACRJREFUOI1jYBgFo2AYAkYGBoYz1DSQhYGBQZCaBo6CUTAsAQAO/gDjGameSwAAAABJRU5ErkJggg==\"\n ,\"stick_3.png\": \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH2AYFChQyYckycwAAAD9JREFUOI1jYCAOXIJigoCJSAOJBqMGjhpIBmBkYGA4Q4Q6LSh9jZBCFgYGBkEiDGSG0sSoJQqMZr1RA4eUgQCBQAVfOGtUugAAAABJRU5ErkJggg==\"\n ,\"stick_4.png\": \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH2AYFChQyYckycwAAAJBJREFUOI3tzjEOAUEYBeBvV0UrEncQlTOoROJGLqByADdYjV6pUumVEp1C0KEwiUZiYqaSfcmfaV6+edSp84dpYIsRerjhkIruccUj3A7jVLTEADOcA7xAMxWGDqqArtHKgRaYey/NkgLLgA5zoW2csMkFwtRrZT+mXEZ0qvBOfl306dMLVrHlb7njiG4M+ATgfRo0TB7IrwAAAABJRU5ErkJggg==\"\n ,\"stick_5.png\": \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH2AYFChQyYckycwAAAKJJREFUOI3t0zEKwjAYgNFncVBX8RZunsObOYgH8Aa6uboLTu66CS4iKDqpdWgKxaWh7dgPsoVHEvIT1yGs0pJIMLoWbMEKdbHHWfZxN9ghrYMe8QpIGuDp357oSclLMMEMjwAv0a8KFhthFdAtBnVB6GBROGltMEfXAT01AcIQNzxjwbJ/eMVc9o69WkcrNJZd+9IUmOCDe+zmsr54y6aqtB8W9CgIIj5T8QAAAABJRU5ErkJggg==\"\n ,\"stick_6.png\": \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH2AYFChQyYckycwAAAI9JREFUOI3tzjEOAVEUheFvJhpakdiEyhr0dmQDqlmAHYxGr7QWFREZkilQeKKRePFeJfM3997k5L+Hjo4/pECDFlecwp0kbNELu3AfcEkRl5hiiTPuWKGfIn0xQh2kWwxySAtU3k2zUGAdpLNc0iGO2OUSwsKz5SQmXEZk6jDnvzb69LTBJjb8jRv2GMcIHzSiGs7D32QGAAAAAElFTkSuQmCC\"\n ,\"stick_7.png\": \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH2AYFChQyYckycwAAALBJREFUOI3t1D1qAkEUwPGfi4WmFbucIKTzmimCB/AGegQPYZEylYWNhigqLH4V84RFAjtkt/QPw5thHn/efJLHIlotRaYwm6fwKfwHHexR4ojfGD/yFvErR1iiG30x3uBQyXuNuMyttMAIH9jhign6MZ/99P5iiGlI53hpKiQtf1yptLHwLp2F9LsNIQzwI518K9/XGp/SPvYalVbhXVr2qi1hgTO2ucl1XHCSLn8tN1MaJxupl4lMAAAAAElFTkSuQmCC\"\n ,\"stick_8.png\": \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH2AYFChQyYckycwAAAJNJREFUOI3t0yEOwkAQRuEPSOACJBhugMHgewO4U8MFsIQjVBA0Ei6CwILFFLGLQdBmt4r0JZs1k5d/JjP09Pwhgw4cC6yxwixHVOCKOr4XbimiCfZR8sAWy9RUY5yj7IRpqujDIcp2GObKiig7YpQrgwueOmiTsBo1yqbCtnPYxL9KTfRNJexZ4yG0TTjHXWj7J2/dMhe9PX35ywAAAABJRU5ErkJggg==\"\n ,\"stick_9.png\": \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH2AYFChQyYckycwAAAKNJREFUOI3t0zEOAUEUBuAPG0QtcQiNRu8GTuUCWnEIUWsdQK/SKBS20Iig2NFssLNWuX8y3cyX9+dliMsunMI0I8Ho1GAN/pDkD8YQU4wxiH307qdMsMUjnCsOv4AdLAJyxgyjWCgPtrEJ2Br9slAeXAZsruJCd9gHbIVWFewFXpAqqBk7dhc9WdVTpdFCjrK6pbf5KSnuaBRdjK2c4Cab8muerVAjt5zCDvoAAAAASUVORK5CYII=\"\n};\n} //# end of 'install only once'\n//}}}", modifier:"KennyZ", modified:1278361877193, tags:"systemConfig commented"}}})
//}}}
//{{{
({revisions:{'619c2f33-ab23-4a0d-b277-73de9ce7e11d':{alive:{'d8649584-cb1b-49e5-9c11-be9e64bae7a5':"e8a0df8c-c225-405c-81a6-376c44b68eb0"}, dead:{}, changed:["d8649584-cb1b-49e5-9c11-be9e64bae7a5"], branch:null, timestamp:1278435451167, metadata:{subject:"+IncludeForm"}, directParent:null, additionalParent:null}}, bodies:{'e8a0df8c-c225-405c-81a6-376c44b68eb0':{title:"QuickLog", text:"<<history>>\n/%\n!info\nNote: Changes are not saved.\n{{{<<tiddler QuickLog with: Title_YYYY-0MM-0DD \"tagname\" \"singleLine\" \"separator\" \"timeStamp\">>}}}\n{{{<<tiddler QuickLog with: Worklog_YYYY-0MM-0DD \"worklog\" \"checked\" \"\" \"checked\">>}}}\n<<tiddler QuickLog with: Worklog_YYYY-0MM-0DD \"worklog\" \"\" \"\" \"\">>\n//Shortcut: Press {{{SHIFT}}} + {{{ENTER}}} to save.//\n!end\n\n!show\n<html>\n<form class=\"QuickLog\" name=\"$1\" style=\"display:inline;margin:0;padding:0;white-space:nowrap;\"\naction=\"#\" onsubmit=\"function save(){\n var when=new Date();\n var title=when.formatString('$1');\n var tags='$2';\n var who=config.options.txtUserName;\n\n var text=txt.value.replace(/^\\s+|\\s+$/g, ''); if(text=='') return;\n if(singleLine.checked) text=text.replace(/\\s+/gm, ' ');\n if(timeStamp.checked) text='~~:::::__'+when+'__:::::~~\\n'+text;\n\n if(!store.tiddlerExists(title)){\n if(includeForm.checked)\n text='<<tiddler QuickLog with: '+title+' '+tags+' \\'$3\\' \\'$4\\' \\'$5\\'>>\\n!\\n' + text;\n store.saveTiddler(title,title,text,who,when,tags);\n story.displayTiddler(null,title);\n }else{\n var tiddler = store.getTiddler(title);\n if(separator.checked) tiddler.text += '\\n----';\n tiddler.text += '\\n'+ text;\n //store.saveTiddler(title,title,text,who,when,tags);\n store.dirty=true;\n story.refreshTiddler(title,DEFAULT_VIEW_TEMPLATE,true);\n }\n autoSaveChanges(); txt.value=''; txt.focus();\n}; save();\">\n<input type=reset value=\"Clear\" style=\"width:4em\" onclick=\"this.form.txt.focus()\" />\n<input type=button value=\"Post\" style=\"width:4em\" onclick=\"this.form.onsubmit();\" />\n<span title=\"Single Line\"><input type=\"checkbox\" name=\"singleLine\" $3>SL</input></span>\n<span title=\"Separator\"><input type=\"checkbox\" name=\"separator\" $4>HR</input></span>\n<span title=\"Time Stamp\"><input type=\"checkbox\" name=\"timeStamp\" $5>TS</input></span>\n<span title=\"Include Form\"><input type=\"checkbox\" name=\"includeForm\" $6>IF</input></span><br />\n<textarea name=\"txt\" rows=\"5\" cols=\"60\" style=\"width:90%\" onkeydown=\"\n\tif(event.keyCode == 16) isShift =true;\n\tif(isShift==true && event.keyCode == 13){ this.form.onsubmit(); return false;}\n\" onkeyup=\"isShift=false\"></textarea>\n</form></html>\n!end\n%/<<tiddler {{'QuickLog##'+('$1'=='$'+'1'?'info':'show')}} with: [[$1]] {{'$2'!='$'+'2'?'$2':''}} {{'$3'!='$'+'3'?'$3':''}} {{'$4'!='$'+'4'?'$4':''}} {{'$5'!='$'+'5'?'$5':''}} {{'$6'!='$'+'6'?'$6':''}}>>", modifier:"KennyZ", modified:1278435444525, tags:"transclusion"}}})
//}}}
It is a mistake to regard age as a downhill grade toward dissolution. The reverse is true. As one grows older, one climbs with surprising strides.
//George Sand (1804 - 1876)//
----
Man is the only animal whose desires increase as they are fed; the only animal that is never satisfied.
//Henry George (1839 - 1897)//
----
The sole advantage of power is that you can do more good.
//Baltasar Gracian, The Art of Worldly Wisdom, 1647//
----
The family is changing not disappearing. We have to broaden our understanding of it, look for the new metaphors.
//Mary Catherine Bateson//
----
Far better to think historically, to remember the lessons of the past. Thus, far better to conceive of power as consisting in part of the knowledge of when not to use all the power you have. Far better to be one who knows that if you reserve the power not to use all your power, you will lead others far more successfully and well.
A. Bartlett Giamatti (1938 - 1989), President of Yale University
----
Nearly all men can stand adversity, but if you want to test a man's character, give him power.
Abraham Lincoln (1809 - 1865)
----
You see what power is - holding someone else's fear in your hand and showing it to them!
Amy Tan (1952 - )
----
The sole advantage of power is that you can do more good.
Baltasar Gracian, The Art of Worldly Wisdom, 1647
----
To know the pains of power, we must go to those who have it; to know its pleasures, we must go to those who are seeking it.
Charles Caleb Colton (1780 - 1832), Lacon, 1825
----
It is said that power corrupts, but actually it's more true that power attracts the corruptible. The sane are usually attracted by other things than power.
David Brin (1950 - )
----
Let not thy will roar, when thy power can but whisper.
Dr. Thomas Fuller (1654 - 1734), Gnomologia, 1732
----
Ultimately, the only power to which man should aspire is that which he exercises over himself.
Elie Wiesel (1928 - )
----
It is when power is wedded to chronic fear that it becomes formidable.
Eric Hoffer (1902 - 1983), The Passionate State of Mind, 1954
----
If absolute power corrupts absolutely, does absolute powerlessness make you pure?
Harry Shearer
----
The great secret of power is never to will to do more than you can accomplish.
Henrik Ibsen (1828 - 1906)
----
Be fit for more than the thing you are now doing. Let everyone know that you have a reserve in yourself; that you have more power than you are now using. If you are not too large for the place you occupy, you are too small for it.
James A. Garfield (1831 - 1881)
----
Power corrupts. Absolute power is kind of neat.
John Lehman (1942 - ), Secretary of the Navy, 1981-1987
----
One person with a belief is equal to a force of 99 who have only interests.
John Stuart Mill (1806 - 1873)
----
The secret of all power is - save your force. If you want high pressure you must choke off waste.
Joseph Farrell
----
If power was an illusion, wasn't weakness necessarily one also?
Lois McMaster Bujold, A Civil Campaign, 1999
----
Power tends to corrupt, and absolute power corrupts absolutely.
Lord Acton, Letter to Bishop Mandell Creighton, 1887
----
The highest proof of virtue is to possess boundless power without abusing it.
Lord Macaulay, review of Lucy Aikin, 'Life and Writings of Addison,' 1943
----
Power never takes a back step - only in the face of more power.
Malcolm X (1925 - 1965), Malcolm X Speaks, 1965
----
The problem of power is how to achieve its responsible use rather than its irresponsible and indulgent use - of how to get men of power to live for the public rather than off the public.
Robert F. Kennedy (1925 - 1968), 'I Remember, I Believe,' The Pursuit of Justice, 1964
----
Most powerful is he who has himself in his own power.
Seneca (5 BC - 65 AD)
----
Knowledge is power.
Sir Francis Bacon (1561 - 1626), Religious Meditations, Of Heresies, 1597
----
We thought, because we had power, we had wisdom.
Stephen Vincent Benet (1898 - 1943), Litany for Dictatorships, 1935
----
We have, I fear, confused power with greatness.
Stewart L. Udall (1920 - ), commencement address, Dartmouth College, June 13, 1965
----
An honest man can feel no pleasure in the exercise of power over his fellow citizens.
Thomas Jefferson (1743 - 1826), letter to John Melish, January 13, 1813
----
The love of liberty is the love of others; the love of power is the love of ourselves.
William Hazlitt (1778 - 1830)
----
Power consists in one's capacity to link his will with the purpose of others, to lead by reason and a gift of cooperation.
Woodrow Wilson (1856 - 1924), letter to Mary A. Hulbert, September 21, 1913
in FF, works on textarea only
//{{{
function makeitbold(){
var $tb = document.getElementById("textbox");
if (document.selection){
var str=document.selection.createRange().text;
var sel=document.selection.createRange();
sel.text="<b>"+str+"</b>";
}else if (typeof $tb.selectionStart != 'undefined'){
var $before, $after, $selection;
$before= $tb.value.substring(0, $tb.selectionStart)
$selection = $tb.value.substring($tb.selectionStart, $tb.selectionEnd)
$after = $tb.value.substring($tb.selectionEnd, $tb.value.length)
$tb.value= String.concat($before, "<b>", $selection, "</b>", $after)
}
$tb.focus();
}
//}}}
!usage
{{{[[syntaxhighlighterplugin4tiddlywiki|syntaxhighlighterplugin4tiddlywiki]]}}}
[[syntaxhighlighterplugin4tiddlywiki|syntaxhighlighterplugin4tiddlywiki]]
!notes
attached by FileDropPlugin
!type
application/x-zip-compressed
!file
!url
!hiddenData
/%data:application/x-zip-compressed;base64,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
%/
You can suggest a series of articles about neighborhood
restaurants or bars, or a feature about local bookstores,
hairdressing and cosmetic salons. You can even include your
family and friends in your research. Ask them where they
shop and why. Don't forget the seasonal markets; First
Communions, Bar Mitzvahs, June weddings, Easter and
Christmas Fairs. Is a local celebrity about to get married?
Do certain stores have seasonal promotions planned? You can
almost research...
Robert Norris paced the small living room, stabbing at the air with the sheaf of papers clenched in his fist.
"Look. This is crazy."
"What do you mean, crazy?"
"I mean that you can't do it!"
"I can and I will."
"No way!"
"Nothing you say will stop me."
"Fool!"
zzz[[wc ex2 w50,L8]]<br>XXXXX<br>[[wc ex1 w74,L9]]zzz
a あ ア か カ さ サ た タ な ナ は ハ ま マ や ヤ ら ラ わ ワ
i い イ き キ し シ ち チ に ニ ひ ヒ み ミ * り リ ゐ ヰ
u う ウ く ク す ス つ ツ ぬ ヌ ふ フ む ム ゆ ユ る ル ん ン
e え エ け ケ せ セ て テ ね ネ へ ヘ め メ * れ レ ゑ ヱ
o お オ こ コ そ ソ と ト の ノ ほ ホ も モ よ ヨ ろ ロ を ヲ
!usage
{{{[img[wordCount.png]]}}}
[img[wordCount.png]]
!notes
attached by FileDropPlugin
!type
image/png
!file
!url
!hiddenData
/%
!data
data:image/png;base64,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
!endHiddenData
%/