Welcome to TiddlyWiki created by Jeremy Ruston, Copyright © 2007 UnaMesa Association
{{center{@@font-weight:bold;[[Accordian Menu|AccordianMenuContent]]@@}}}
{{accordianSlider{<<slider "chkTab" [[ShowTabbedMenuPackage]] 'Tabbed Menu »'>>}}}{{accordianSlider{<<slider "chkAcc" [[ShowAccordianMenuPackage]] 'Accordian Menu »'>>}}}{{accordianSlider{<<slider chkTools [[Tools]] 'Tools »'>>}}}
Dave Gifford, who created ~NoteStorm wrote:
It's my privilege to be able to offer this resource for free. This is possible due to the efforts of various people:
*Jeremy Ruston, the creator of ~TiddlyWiki. ^^ TiddlyWiki <<version>> © 2008 [[UnaMesa|http://www.unamesa.org/]]^^
*The creators of the various piugins used in this adaptation of ~TiddlyWiki. Use the following button to see a list of the plugins used here. Each plugin contains information about its creator. <<tag systemConfig>>
*Morris Gray, who came up with the ~TiddlerBar idea, put a lot of work into perfecting the Treeview experience, and came up with numerous other helpful tweaks.
*Måns Mårtensson , who helped me find an even simpler way to index master topics
-----
^^<html><a rel="license" href="http://creativecommons.org/licenses/by/3.0/"><img alt="Creative Commons License" style="border-width:0" src="http://i.creativecommons.org/l/by/3.0/88x31.png" /></a><br />~NoteStorm is licensed by Dave Gifford under a <a rel="license" href="http://creativecommons.org/licenses/by/3.0/">Creative Commons Attribution 3.0 Unported License</a></html>^^
/***
|''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");
// %/
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)};
// 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!data\n%5\n',
//}}}
// // 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); }
displayMessage('attached "'+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.0|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1.3|
|Type|plugin|
|Requires||
|Description|run-time library for displaying attachment tiddlers|
This plugin provides "stand-alone" 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: This plugin does not include the "control panel" and supporting functions needed to //create// new attachment tiddlers. Those features are provided by [[AttachFilePlugin]], which can be installed while building your document, and then safely omitted to reduce the overall file size when you publish your finished document (assuming you don't intend to create any additional attachment tiddlers in that document)
!!!!!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.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: 0, date: new Date(2009,6,4)};
//}}}
//{{{
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 { // IE
var fso = new ActiveXObject("Scripting.FileSystemObject");
return fso.FileExists(f);
}
}
//}}}
//{{{
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);
}
}
//}}}
window.oldDisplayMessage = displayMessage;
displayMessage = function (text,linkText)
{ oldDisplayMessage(text,linkText);
setTimeout( 'clearMessage()', 2800 );}
Background: #fff
Foreground: #000
PrimaryPale: #ddaa99
PrimaryLight: #552233
PrimaryMid: #552233
PrimaryDark: #014
SecondaryPale: #994444
SecondaryLight: #994444
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #ffeedd
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
@@color:#ffc;''» »'' @@ Tabs containing CSS styling code (controls layout and visual style)
----
<script>
// get all tiddlers tagged with "CSS"
var tids=store.getTaggedTiddlers("CSS");
// keep only tiddlers *also* tagged with New
var list=[];
for (var t=0; t<tids.length; t++)
if (tids[t].isTagged("CSS")) list.push(tids[t]);
// create output list of tiddler titles, one per line
var out="";
for (var t=0; t<list.length; t++) out+="#[["+list[t].title+"]]\n";
return out;
</script>
/***
|Name:|CloseOnCancelPlugin|
|Description:|Closes the tiddler if you click new tiddler then cancel. Default behaviour is to leave it open|
|Version:|3.0.1 ($Rev: 3861 $)|
|Date:|$Date: 2008-03-08 10:53:09 +1000 (Sat, 08 Mar 2008) $|
|Source:|http://mptw.tiddlyspot.com/#CloseOnCancelPlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License:|http://mptw.tiddlyspot.com/#TheBSDLicense|
***/
//{{{
merge(config.commands.cancelTiddler,{
handler_mptw_orig_closeUnsaved: config.commands.cancelTiddler.handler,
handler: function(event,src,title) {
this.handler_mptw_orig_closeUnsaved(event,src,title);
if (!store.tiddlerExists(title) && !store.isShadowTiddler(title))
story.closeTiddler(title,true);
return false;
}
});
//}}}
Background: #fff
Foreground: #000
PrimaryPale: #ddddff
PrimaryLight: #110077
PrimaryMid: #110077
PrimaryDark: #014
SecondaryPale: #7788bb
SecondaryLight: #5566aa
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
{{floatleft small borderright{
<<tiddler ColorPalette>>
}}}PaletteMaker:<hr><<tiddler PaletteMaker>>{{clear block{}}}
/***
|''Description:''|Configure options for this TiddlyWiki|
***/
//{{{
/***
Disabled
//AutoClearMessageMacro
//Auto closes the pop-up messages after 3 seconds.Change the 3000 to modify the time.
{{{
window.oldDisplayMessage = displayMessage;
displayMessage = function (text,linkText)
{ oldDisplayMessage(text,linkText);
setTimeout( 'clearMessage()', 3000 );}
}}}
***/
//Show wysiwyg editor buttons during edit
config.options.chkShowQuickEdit=true;
//tweak closeAll for toolbar
config.commands.closeAll ={
text:"close all",
tooltip:"close all"};
config.commands.closeAll.handler = function(event,src,title)
{story.closeAllTiddlers();return false;}
//config TiddlersBar
config.options.chkDisableTabsBar=false;
// re-label default text for some standard UI elements
config.commands.permalink.text="link";
config.commands.references.text="references";
merge(config.macros.toolbar,{ moreLabel: 'more\u25BC', lessLabel: '\u25C4less' });
// allows custom response when tiddler does not exist (e.g. redirection to alternative tiddler)
config.shadowTiddlers.MissingTiddler=config.views.wikified.defaultText.replace(/%0/,'$1'); // default to standard message
config.views.wikified.defaultText='<<tiddler MissingTiddler with: [[%0]]>>';
// wrap AdvancedOptions and PluginManager default content in a groupbox (and use a smaller font)
config.shadowTiddlers.AdvancedOptions=
config.shadowTiddlers.AdvancedOptions.replace(
/<<options>>/,
"{{small groupbox{<<options>>}}}");
config.shadowTiddlers.PluginManager=
config.shadowTiddlers.PluginManager.replace(
/<<plugins>>/,
"{{small groupbox{<<plugins>>}}}");
// message used by ConfirmExitPlugin when no changes have been made
config.messages.confirmExit_nochanges='\tTiddlyTools... Small Tools for Big Ideas™\n\t'
+store.getTiddlerText("SiteUrl",document.location.protocol=="http"?document.location.href:"");
//}}}
/***
|''Description:''|Cookie plugin for Treeview Plugin Usage: (persist: "cookie") means the state of the Treemenu persists and will remain where you left it between sessions.|
***/
/**
* Cookie plugin
*
* Copyright (c) 2006 Klaus Hartl (stilbuero.de)
* Dual licensed under the MIT and GPL licenses:
* http://www.opensource.org/licenses/mit-license.php
* http://www.gnu.org/licenses/gpl.html
*
*/
/**
* Create a cookie with the given name and value and other optional parameters.
*
* @example $.cookie('the_cookie', 'the_value');
* @desc Set the value of a cookie.
* @example $.cookie('the_cookie', 'the_value', {expires: 7, path: '/', domain: 'jquery.com', secure: true});
* @desc Create a cookie with all available options.
* @example $.cookie('the_cookie', 'the_value');
* @desc Create a session cookie.
* @example $.cookie('the_cookie', null);
* @desc Delete a cookie by passing null as value.
*
* @param String name The name of the cookie.
* @param String value The value of the cookie.
* @param Object options An object literal containing key/value pairs to provide optional cookie attributes.
* @option Number|Date expires Either an integer specifying the expiration date from now on in days or a Date object.
* If a negative value is specified (e.g. a date in the past), the cookie will be deleted.
* If set to null or omitted, the cookie will be a session cookie and will not be retained
* when the the browser exits.
* @option String path The value of the path atribute of the cookie (default: path of page that created the cookie).
* @option String domain The value of the domain attribute of the cookie (default: domain of page that created the cookie).
* @option Boolean secure If true, the secure attribute of the cookie will be set and the cookie transmission will
* require a secure protocol (like HTTPS).
* @type undefined
*
* @name $.cookie
* @cat Plugins/Cookie
* @author Klaus Hartl/klaus.hartl@stilbuero.de
*/
/**
* Get the value of a cookie with the given name.
*
* @example $.cookie('the_cookie');
* @desc Get the value of a cookie.
*
* @param String name The name of the cookie.
* @return The value of the cookie.
* @type String
*
* @name $.cookie
* @cat Plugins/Cookie
* @author Klaus Hartl/klaus.hartl@stilbuero.de
*/
jQuery.cookie = function(name, value, options) {
if (typeof value != 'undefined') { // name and value given, set cookie
options = options || {};
if (value === null) {
value = '';
options.expires = -1;
}
var expires = '';
if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) {
var date;
if (typeof options.expires == 'number') {
date = new Date();
date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));
} else {
date = options.expires;
}
expires = '; expires=' + date.toUTCString(); // use expires attribute, max-age is not supported by IE
}
var path = options.path ? '; path=' + options.path : '';
var domain = options.domain ? '; domain=' + options.domain : '';
var secure = options.secure ? '; secure' : '';
document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');
} else { // only name given, get cookie
var cookieValue = null;
if (document.cookie && document.cookie != '') {
var cookies = document.cookie.split(';');
for (var i = 0; i < cookies.length; i++) {
var cookie = jQuery.trim(cookies[i]);
// Does this cookie string begin with the name we want?
if (cookie.substring(0, name.length + 1) == (name + '=')) {
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
}
}
}
return cookieValue;
}
};
/***
|''Name''|DeprecatedFunctionsPlugin|
|''Description''|Provides support for functions removed from the TiddlyWiki core|
|''Version''|1.0.0|
|''Status''|stable|
|''Source''|http://www.tiddlywiki.com/coreplugins.html#DeprecatedFunctionsPlugin|
|''~CodeRepository:''|http://svn.tiddlywiki.org/Trunk/association/plugins/DeprecatedFunctionsPlugin/DeprecatedFunctionsPlugin.js |
|''License''|[[BSD open source license]]|
|''~CoreVersion''|2.3.0|
|''Feedback''|[[TiddlyWiki community|http://groups.google.com/group/TiddlyWiki]] |
|''Keywords''|legacySupport|
!Code
***/
//{{{
if(!version.extensions.DeprecatedFunctionsPlugin) {
version.extensions.DeprecatedFunctionsPlugin = {installed:true};
//--
//-- Deprecated code
//--
// @Deprecated: Use createElementAndWikify and this.termRegExp instead
config.formatterHelpers.charFormatHelper = function(w)
{
w.subWikify(createTiddlyElement(w.output,this.element),this.terminator);
};
// @Deprecated: Use enclosedTextHelper and this.lookaheadRegExp instead
config.formatterHelpers.monospacedByLineHelper = 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 text = lookaheadMatch[1];
if(config.browser.isIE)
text = text.replace(/\n/g,"\r");
createTiddlyElement(w.output,"pre",null,null,text);
w.nextMatch = lookaheadRegExp.lastIndex;
}
};
// @Deprecated: Use <br> or <br /> instead of <<br>>
config.macros.br = {};
config.macros.br.handler = function(place)
{
createTiddlyElement(place,"br");
};
// Find an entry in an array. Returns the array index or null
// @Deprecated: Use indexOf instead
Array.prototype.find = function(item)
{
var i = this.indexOf(item);
return i == -1 ? null : i;
};
// Load a tiddler from an HTML DIV. The caller should make sure to later call Tiddler.changed()
// @Deprecated: Use store.getLoader().internalizeTiddler instead
Tiddler.prototype.loadFromDiv = function(divRef,title)
{
return store.getLoader().internalizeTiddler(store,this,title,divRef);
};
// Format the text for storage in an HTML DIV
// @Deprecated Use store.getSaver().externalizeTiddler instead.
Tiddler.prototype.saveToDiv = function()
{
return store.getSaver().externalizeTiddler(store,this);
};
// @Deprecated: Use store.allTiddlersAsHtml() instead
function allTiddlersAsHtml()
{
return store.allTiddlersAsHtml();
}
// @Deprecated: Use refreshPageTemplate instead
function applyPageTemplate(title)
{
refreshPageTemplate(title);
}
// @Deprecated: Use story.displayTiddlers instead
function displayTiddlers(srcElement,titles,template,unused1,unused2,animate,unused3)
{
story.displayTiddlers(srcElement,titles,template,animate);
}
// @Deprecated: Use story.displayTiddler instead
function displayTiddler(srcElement,title,template,unused1,unused2,animate,unused3)
{
story.displayTiddler(srcElement,title,template,animate);
}
// @Deprecated: Use functions on right hand side directly instead
var createTiddlerPopup = Popup.create;
var scrollToTiddlerPopup = Popup.show;
var hideTiddlerPopup = Popup.remove;
// @Deprecated: Use right hand side directly instead
var regexpBackSlashEn = new RegExp("\\\\n","mg");
var regexpBackSlash = new RegExp("\\\\","mg");
var regexpBackSlashEss = new RegExp("\\\\s","mg");
var regexpNewLine = new RegExp("\n","mg");
var regexpCarriageReturn = new RegExp("\r","mg");
}
//}}}
/%
!info
|Name|DigitalClock|
|Source|http://www.TiddlyTools.com/#DigitalClock|
|Version|2.0.0|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|transclusion|
|Description|display current time with automatic update|
Usage
<<<
{{{
<<tiddler DigitalClock with: format tick>>
}}}
*''format'' is any TiddlyWiki date/time formatting string
*''tick'' is the time in seconds between display updates (default=1sec)
<<<
Example
<<<
show hours, minutes and seconds, updated once per second:
{{{<<tiddler DigitalClock with: "hh:0mm:0ss" 1>>}}}
<<tiddler DigitalClock##show with: "hh:0mm:0ss" 1>>
<<<
!end
!show
<html><a href='javascript:;'></a></html><<tiddler {{
window.DigitalClock_tick=function(id){
var e=document.getElementById(id); if (!e) return;
e.title='click to '+(e.paused?'RESUME':'PAUSE')+' clock display';
if (e.paused) return;
e.innerHTML=new Date().formatString(e.fmt);
e.timer=setTimeout('window.DigitalClock_tick('+id+')',e.tick*1000);
}
var e=place.lastChild.firstChild;
e.id=new Date().getTime()+Math.random();
e.onclick=function(){this.paused=!this.paused;window.DigitalClock_tick(this.id);}
e.style.cursor='pointer';
e.fmt=('$1'=='$'+'1')?'hh12:0mm:0ss am':'$1';
e.tick=('$2'=='$'+'2')?'1':'$2';
if (e.timer===undefined) window.DigitalClock_tick(e.id);
'';}}>>
!end
%/<<tiddler {{'DigitalClock##'+(tiddler&&tiddler.title=='DigitalClock'?'info':'show');}}
with: [[$1]] [[$2]]>>
Type the text for 'New Tiddler'
<script label="Edit online" title="Edit no animations">if(window.version&&window.version.title=='TiddlyWiki')
{readOnly=false;if(window.backstage){if(!backstage.button)backstage.init();backstage.show();}config.options.chkAnimate=false;refreshDisplay();}</script>
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::EditToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='editor' macro='edit title'></div>
<div macro='annotations'></div>
<div macro='tiddler QuickEditToolbar'></div>
<div class='editor' macro='edit tags'></div>
<div macro='showWhen tiddler.tags.contains("Note") || tiddler.title =="New Note"'>[[NoteNote]]</div>
<div class='editor' macro='edit text'></div>
<!--}}}-->
@@color:#ccc;Tiddlers tagged with attachment@@
----
{{twocolumns{
<script>
// get all tiddlers tagged with "attachment"
var tids=store.getTaggedTiddlers("attachment");
// keep only tiddlers *also* tagged with New
var list=[];
for (var t=0; t<tids.length; t++)
if (tids[t].isTagged("attachment")) list.push(tids[t]);
// create output list of tiddler titles, one per line
var out="";
for (var t=0; t<list.length; t++) out+="#[["+list[t].title+"]]\n";
return out;
</script>
}}}
/***
|Name:|ExtentTagButtonPlugin|
|Description:|Adds a New tiddler button in the tag drop down|
|Version:|3.2 ($Rev: 3861 $)|
|Date:|$Date: 2008-03-08 10:53:09 +1000 (Sat, 08 Mar 2008) $|
|Source:|http://mptw.tiddlyspot.com/#ExtendTagButtonPlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License|http://mptw.tiddlyspot.com/#TheBSDLicense|
***/
//{{{
window.onClickTag_mptw_orig = window.onClickTag;
window.onClickTag = function(e) {
window.onClickTag_mptw_orig.apply(this,arguments);
var tag = this.getAttribute("tag");
var title = this.getAttribute("tiddler");
// Thanks Saq, you're a genius :)
var popup = Popup.stack[Popup.stack.length-1].popup;
createTiddlyElement(createTiddlyElement(popup,"li",null,"listBreak"),"div");
wikify("<<newTiddler label:'New tiddler' tag:'"+tag+"'>>",createTiddlyElement(popup,"li"));
return false;
}
//}}}
/***
|Name|FileDropPlugin|
|Source|http://www.TiddlyTools.com/#FileDropPlugin|
|Version|2.0.0|
|Author|BradleyMeck and Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Requires|FireFox or mozilla-compatible browser|
|Overrides||
|Options|##Configuration|
|Description|drag-and-drop files/directories to create tiddlers|
This plugin registers window event handlers for 'dragdrop' (FireFox 3.1-) and 'drop' (FireFox3.5+) events to automatically create tiddlers from files that are dragged and dropped into an open TiddlyWiki document. It supports extended handling for multiple files and/or directories, as well as optional handling for embedding binary files if [[AttachFilePlugin]], [[AttachFilePluginFormatters]] and [[AttachFileMIMETypes]] are installed.
!!!!!Configuration
<<<
<<option chkFileDropTrimFilename>> Omit file extensions from tiddler titles when creating new tiddlers
{{{usage: <<option chkFileDropTrimFilename>> }}}
<<option chkFileDropDisplay>> Automatically display newly created tiddlers
{{{usage: <<option chkFileDropDisplay>> }}}
Tag newly created tiddlers with: <<option txtFileDropTags>>
{{{usage: <<option txtFileDropTags>>}}}
__FileDrop+AttachFile configuration options:__
<<option chkFileDropAttachLocalLink>> Include reference to local path/filename
{{{usage: <<option chkFileDropAttachLocalLink>> }}}
<<option chkFileDropAttachEncodeData>> Include binary file data as encoded "base64" text
{{{usage: <<option chkFileDropAttachEncodeData>> }}}
...only if file is smaller than: <<option txtFileDropAttachDataLimit>> bytes
{{{usage: <<option txtFileDropAttachDataLimit>>}}}
//Note: if the plugin does not seem to work, open up the page 'about:config' (just type it in the address bar) and make sure ''signed.applets.codebase_principal_support'' is set to ''true''//
<<<
!!!!!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
<<<
2009.08.19 2.0.0 ELS 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.01.01 0.9.9 extensions for AttachFilePlugin
2006.11.04 0.1.1 initial release by Bradley Meck
Old revision notes:
*Note: this version has been 'tweaked' by Eric Shulman (http://www.TiddlyTools.com) to add suspend/resume notification handling to improve performance when multiple files are dropped at once.
*Multiple File Dropping API updated, to end all capturing events after yours return a value that makes if(myFunctionsReturnValue) evaluate to true
*Added support for multiple file drop handlers
**Use the config.macros.fileDrop.addEventListener(@@color(green):String Flavor@@, @@color(green):Function handler(nsiFile){}@@, @@color(green):Boolean addToFront@@) function
***Standard Flavor is 'application/x-moz-file'
***addToFront gives your handler priority over all others at time of add
*Old plugin would disallow drops of text between applications because it didn't check if the transfer was a file.
<<<
!!!!!Code
***/
//{{{
version.extensions.FileDropPlugin={major:2, minor:0, revision:0, date: new Date(2009,8,19)};
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', config.macros.fileDrop.dragDropHandler, true); // FireFox3.1-
window.addEventListener('drop', config.macros.fileDrop.dragDropHandler, true); // FireFox3.5+
}
//}}}
/***
!!!!!handler for files, directories and binary attachments (see [[AttachFilePlugin]])
<<<
* use just filename instead of whole path as tiddler title
* check for existing tiddler and prompt for new name
* handle folder drops (drops each file or creates a file list in a tiddler)
* use AttachFilePlugin if MIME type is not text/plain
* autotag created tiddlers (e.g., "temporary", "dropped", etc.)
* option to suppress automatic display of newly created tiddlers
* suspend/resume notifications when handling multiple files (performance improvement)
<<<
***/
//{{{
if (config.options.chkFileDropAttachEncodeData===undefined)
config.options.chkFileDropAttachEncodeData=true;
if (config.options.chkFileDropAttachLocalLink===undefined)
config.options.chkFileDropAttachLocalLink=true;
if (config.options.txtFileDropAttachDataLimit===undefined)
config.options.txtFileDropAttachDataLimit=32768;
if (config.options.txtFileDropTags===undefined)
config.options.txtFileDropTags="";
if (config.options.chkFileDropDisplay===undefined)
config.options.chkFileDropDisplay=true;
if (config.options.chkFileDropTrimFilename===undefined)
config.options.chkFileDropTrimFilename=false;
config.macros.fileDrop.addEventListener("application/x-moz-file",function(nsiFile) {
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 (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; // use existing title
title=prompt("Please enter a different tiddler title for this file",nsiFile.path.replace(/\\/g,"/"));
}
if (!title || !title.length) return true; // aborted by user... we're done!
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 (config.options.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=config.options.txtFileDropTags?config.options.txtFileDropTags.readBracketedList():[];
store.saveTiddler(null,title,text,config.options.txtUserName,now,newtags);
if (config.options.chkFileDropDisplay) story.displayTiddler(null,title);
return true;
}
}
if (files.length>1) store.suspendNotifications();
for (i=0; i<files.length; i++) {
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 (config.options.chkFileDropTrimFilename)
{ var p=title.split("."); if (p.length>1) p.pop(); title=p.join("."); }
var path=file.path;
var size=file.fileSize;
while (title && title.length && store.tiddlerExists(title)) {
if (confirm(config.messages.overwriteWarning.format([title]))) break; // use existing title
title=prompt("Please enter a different tiddler title for this file",path.replace(/\\/g,"/"));
}
if (!title || !title.length) continue; // cancelled by user... skip this file
if (config.macros.attach) {
type=config.macros.attach.getMIMEType(file.leafName,"");
if (!type.length)
type=prompt("Unrecognized file type. Please enter a MIME type for this file","text/plain");
if (!type||!type.length) continue; // cancelled by user... skip this file
}
var newtags=config.options.txtFileDropTags?config.options.txtFileDropTags.readBracketedList():[];
if (type=="text/plain")
store.saveTiddler(null,title,loadFile(path),config.options.txtUserName,now,newtags);
else {
// only encode data if enabled and file is smaller than limit. Default is 32768 (32K) bytes.
var embed=config.options.chkFileDropAttachEncodeData
&& file.fileSize<config.options.txtFileDropAttachDataLimit;
newtags.push("attachment"); newtags.push("excludeMissing");
var localfile="";
if (config.options.chkFileDropAttachLocalLink) {
// if file is in current document folder,
// remove path prefix and use relative reference
var localfile=path;
var h=document.location.href;
folder=getLocalPath(decodeURIComponent(h.substr(0,h.lastIndexOf("/")+1)));
if (localfile.substr(0,folder.length)==folder)
localfile='./'+localfile.substr(folder.length);
}
config.macros.attach.createAttachmentTiddler(path,
now.formatString(config.macros.timeline.dateFormat),
"attached by FileDropPlugin", newtags,
title, embed, config.options.chkFileDropAttachLocalLink, false,
localfile, "", type,!config.options.chkFileDropDisplay);
}
if (config.options.chkFileDropDisplay) story.displayTiddler(null,title);
}
if (files.length>1) { store.resumeNotifications(); store.notifyAll(); }
return true;
})
//}}}
/***
|Name|FontSizePlugin|
|Created by|SaqImtiaz|
|Location|http://tw.lewcid.org/#FontSizePlugin|
|Version|1.0|
|Requires|~TW2.x|
!Description:
Resize tiddler text on the fly. The text size is remembered between sessions by use of a cookie.
You can customize the maximum and minimum allowed sizes.
(only affects tiddler content text, not any other text)
Also, you can load a TW file with a font-size specified in the url.
Eg: http://tw.lewcid.org/#font:110
!Demo:
Try using the font-size buttons in the sidebar, or in the MainMenu above.
!Installation:
Copy the contents of this tiddler to your TW, tag with systemConfig, save and reload your TW.
Then put {{{<<fontSize "font-size:">>}}} in your SideBarOptions tiddler, or anywhere else that you might like.
!Usage
{{{<<fontSize>>}}} results in <<fontSize>>
{{{<<fontSize font-size: >>}}} results in <<fontSize font-size:>>
!Customizing:
The buttons and prefix text are wrapped in a span with class fontResizer, for easy css styling.
To change the default font-size, and the maximum and minimum font-size allowed, edit the config.fontSize.settings section of the code below.
!Notes:
This plugin assumes that the initial font-size is 100% and then increases or decreases the size by 10%. This stepsize of 10% can also be customized.
!History:
*27-07-06, version 1.0 : prevented double clicks from triggering editing of containing tiddler.
*25-07-06, version 0.9
!Code
***/
//{{{
config.fontSize={};
//configuration settings
config.fontSize.settings =
{
defaultSize : 100, // all sizes in %
maxSize : 200,
minSize : 40,
stepSize : 10
};
//startup code
var fontSettings = config.fontSize.settings;
if (!config.options.txtFontSize)
{config.options.txtFontSize = fontSettings.defaultSize;
saveOptionCookie("txtFontSize");}
setStylesheet(".tiddler .viewer {font-size:"+config.options.txtFontSize+"%;}\n","fontResizerStyles");
setStylesheet("#contentWrapper .fontResizer .button {display:inline;font-size:105%; font-weight:bold; margin:0 1px; padding: 0 3px; text-align:center !important;}\n .fontResizer {margin:0 0.5em;}","fontResizerButtonStyles");
//macro
config.macros.fontSize={};
config.macros.fontSize.handler = function (place,macroName,params,wikifier,paramString,tiddler)
{
var sp = createTiddlyElement(place,"span",null,"fontResizer");
sp.ondblclick=this.onDblClick;
if (params[0])
createTiddlyText(sp,params[0]);
createTiddlyButton(sp,"+","increase font-size",this.incFont);
createTiddlyButton(sp,"=","reset font-size",this.resetFont);
createTiddlyButton(sp,"-","decrease font-size",this.decFont);
}
config.macros.fontSize.onDblClick = function (e)
{
if (!e) var e = window.event;
e.cancelBubble = true;
if (e.stopPropagation) e.stopPropagation();
return false;
}
config.macros.fontSize.setFont = function ()
{
saveOptionCookie("txtFontSize");
setStylesheet(".tiddler .viewer {font-size:"+config.options.txtFontSize+"%;}\n","fontResizerStyles");
}
config.macros.fontSize.incFont=function()
{
if (config.options.txtFontSize < fontSettings.maxSize)
config.options.txtFontSize = (config.options.txtFontSize*1)+fontSettings.stepSize;
config.macros.fontSize.setFont();
}
config.macros.fontSize.decFont=function()
{
if (config.options.txtFontSize > fontSettings.minSize)
config.options.txtFontSize = (config.options.txtFontSize*1) - fontSettings.stepSize;
config.macros.fontSize.setFont();
}
config.macros.fontSize.resetFont=function()
{
config.options.txtFontSize=fontSettings.defaultSize;
config.macros.fontSize.setFont();
}
config.paramifiers.font =
{
onstart: function(v)
{
config.options.txtFontSize = v;
config.macros.fontSize.setFont();
}
};
//}}}
/***
|''Name:''|ForEachTiddlerPlugin|
|''Version:''|1.0.8 (2007-04-12)|
|''Source:''|http://tiddlywiki.abego-software.de/#ForEachTiddlerPlugin|
|''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-2007 [[abego Software|http://www.abego-software.de]]|
|''TiddlyWiki:''|1.2.38+, 2.0|
|''Browser:''|Firefox 1.0.4+; Firefox 1.5; InternetExplorer 6.0|
!Description
Create customizable lists, tables etc. for your selections of tiddlers. Specify the tiddlers to include and their order through a powerful language.
''Syntax:''
|>|{{{<<}}}''forEachTiddler'' [''in'' //tiddlyWikiPath//] [''where'' //whereCondition//] [''sortBy'' //sortExpression// [''ascending'' //or// ''descending'']] [''script'' //scriptText//] [//action// [//actionParameters//]]{{{>>}}}|
|//tiddlyWikiPath//|The filepath to the TiddlyWiki the macro should work on. When missing the current TiddlyWiki is used.|
|//whereCondition//|(quoted) JavaScript boolean expression. May refer to the build-in variables {{{tiddler}}} and {{{context}}}.|
|//sortExpression//|(quoted) JavaScript expression returning "comparable" objects (using '{{{<}}}','{{{>}}}','{{{==}}}'. May refer to the build-in variables {{{tiddler}}} and {{{context}}}.|
|//scriptText//|(quoted) JavaScript text. Typically defines JavaScript functions that are called by the various JavaScript expressions (whereClause, sortClause, action arguments,...)|
|//action//|The action that should be performed on every selected tiddler, in the given order. By default the actions [[addToList|AddToListAction]] and [[write|WriteAction]] are supported. When no action is specified [[addToList|AddToListAction]] is used.|
|//actionParameters//|(action specific) parameters the action may refer while processing the tiddlers (see action descriptions for details). <<tiddler [[JavaScript in actionParameters]]>>|
|>|~~Syntax formatting: Keywords in ''bold'', optional parts in [...]. 'or' means that exactly one of the two alternatives must exist.~~|
See details see [[ForEachTiddlerMacro]] and [[ForEachTiddlerExamples]].
!Revision history
* v1.0.8 (2007-04-12)
** Adapted to latest TiddlyWiki 2.2 Beta importTiddlyWiki API (introduced with changeset 2004). TiddlyWiki 2.2 Beta builds prior to changeset 2004 are no longer supported (but TiddlyWiki 2.1 and earlier, of cause)
* v1.0.7 (2007-03-28)
** Also support "pre" formatted TiddlyWikis (introduced with TW 2.2) (when using "in" clause to work on external tiddlers)
* v1.0.6 (2006-09-16)
** Context provides "viewerTiddler", i.e. the tiddler used to view the macro. Most times this is equal to the "inTiddler", but when using the "tiddler" macro both may be different.
** Support "begin", "end" and "none" expressions in "write" action
* v1.0.5 (2006-02-05)
** Pass tiddler containing the macro with wikify, context object also holds reference to tiddler containing the macro ("inTiddler"). Thanks to SimonBaird.
** Support Firefox 1.5.0.1
** Internal
*** Make "JSLint" conform
*** "Only install once"
* v1.0.4 (2006-01-06)
** Support TiddlyWiki 2.0
* v1.0.3 (2005-12-22)
** Features:
*** Write output to a file supports multi-byte environments (Thanks to Bram Chen)
*** Provide API to access the forEachTiddler functionality directly through JavaScript (see getTiddlers and performMacro)
** Enhancements:
*** Improved error messages on InternetExplorer.
* v1.0.2 (2005-12-10)
** Features:
*** context object also holds reference to store (TiddlyWiki)
** Fixed Bugs:
*** ForEachTiddler 1.0.1 has broken support on win32 Opera 8.51 (Thanks to BrunoSabin for reporting)
* v1.0.1 (2005-12-08)
** Features:
*** Access tiddlers stored in separated TiddlyWikis through the "in" option. I.e. you are no longer limited to only work on the "current TiddlyWiki".
*** Write output to an external file using the "toFile" option of the "write" action. With this option you may write your customized tiddler exports.
*** Use the "script" section to define "helper" JavaScript functions etc. to be used in the various JavaScript expressions (whereClause, sortClause, action arguments,...).
*** Access and store context information for the current forEachTiddler invocation (through the build-in "context" object) .
*** Improved script evaluation (for where/sort clause and write scripts).
* v1.0.0 (2005-11-20)
** initial version
!Code
***/
//{{{
//============================================================================
//============================================================================
// ForEachTiddlerPlugin
//============================================================================
//============================================================================
// Only install once
if (!version.extensions.ForEachTiddlerPlugin) {
if (!window.abego) window.abego = {};
version.extensions.ForEachTiddlerPlugin = {
major: 1, minor: 0, revision: 8,
date: new Date(2007,3,12),
source: "http://tiddlywiki.abego-software.de/#ForEachTiddlerPlugin",
licence: "[[BSD open source license (abego Software)|http://www.abego-software.de/legal/apl-v10.html]]",
copyright: "Copyright (c) abego Software GmbH, 2005-2007 (www.abego-software.de)"
};
// For backward compatibility with TW 1.2.x
//
if (!TiddlyWiki.prototype.forEachTiddler) {
TiddlyWiki.prototype.forEachTiddler = function(callback) {
for(var t in this.tiddlers) {
callback.call(this,t,this.tiddlers[t]);
}
};
}
//============================================================================
// forEachTiddler Macro
//============================================================================
version.extensions.forEachTiddler = {
major: 1, minor: 0, revision: 8, date: new Date(2007,3,12), provider: "http://tiddlywiki.abego-software.de"};
// ---------------------------------------------------------------------------
// Configurations and constants
// ---------------------------------------------------------------------------
config.macros.forEachTiddler = {
// Standard Properties
label: "forEachTiddler",
prompt: "Perform actions on a (sorted) selection of tiddlers",
// actions
actions: {
addToList: {},
write: {}
}
};
// ---------------------------------------------------------------------------
// The forEachTiddler Macro Handler
// ---------------------------------------------------------------------------
config.macros.forEachTiddler.getContainingTiddler = function(e) {
while(e && !hasClass(e,"tiddler"))
e = e.parentNode;
var title = e ? e.getAttribute("tiddler") : null;
return title ? store.getTiddler(title) : null;
};
config.macros.forEachTiddler.handler = function(place,macroName,params,wikifier,paramString,tiddler) {
// config.macros.forEachTiddler.traceMacroCall(place,macroName,params,wikifier,paramString,tiddler);
if (!tiddler) tiddler = config.macros.forEachTiddler.getContainingTiddler(place);
// --- Parsing ------------------------------------------
var i = 0; // index running over the params
// Parse the "in" clause
var tiddlyWikiPath = undefined;
if ((i < params.length) && params[i] == "in") {
i++;
if (i >= params.length) {
this.handleError(place, "TiddlyWiki path expected behind 'in'.");
return;
}
tiddlyWikiPath = this.paramEncode((i < params.length) ? params[i] : "");
i++;
}
// Parse the where clause
var whereClause ="true";
if ((i < params.length) && params[i] == "where") {
i++;
whereClause = this.paramEncode((i < params.length) ? params[i] : "");
i++;
}
// Parse the sort stuff
var sortClause = null;
var sortAscending = true;
if ((i < params.length) && params[i] == "sortBy") {
i++;
if (i >= params.length) {
this.handleError(place, "sortClause missing behind 'sortBy'.");
return;
}
sortClause = this.paramEncode(params[i]);
i++;
if ((i < params.length) && (params[i] == "ascending" || params[i] == "descending")) {
sortAscending = params[i] == "ascending";
i++;
}
}
// Parse the script
var scriptText = null;
if ((i < params.length) && params[i] == "script") {
i++;
scriptText = this.paramEncode((i < params.length) ? params[i] : "");
i++;
}
// Parse the action.
// When we are already at the end use the default action
var actionName = "addToList";
if (i < params.length) {
if (!config.macros.forEachTiddler.actions[params[i]]) {
this.handleError(place, "Unknown action '"+params[i]+"'.");
return;
} else {
actionName = params[i];
i++;
}
}
// Get the action parameter
// (the parsing is done inside the individual action implementation.)
var actionParameter = params.slice(i);
// --- Processing ------------------------------------------
try {
this.performMacro({
place: place,
inTiddler: tiddler,
whereClause: whereClause,
sortClause: sortClause,
sortAscending: sortAscending,
actionName: actionName,
actionParameter: actionParameter,
scriptText: scriptText,
tiddlyWikiPath: tiddlyWikiPath});
} catch (e) {
this.handleError(place, e);
}
};
// Returns an object with properties "tiddlers" and "context".
// tiddlers holds the (sorted) tiddlers selected by the parameter,
// context the context of the execution of the macro.
//
// The action is not yet performed.
//
// @parameter see performMacro
//
config.macros.forEachTiddler.getTiddlersAndContext = function(parameter) {
var context = config.macros.forEachTiddler.createContext(parameter.place, parameter.whereClause, parameter.sortClause, parameter.sortAscending, parameter.actionName, parameter.actionParameter, parameter.scriptText, parameter.tiddlyWikiPath, parameter.inTiddler);
var tiddlyWiki = parameter.tiddlyWikiPath ? this.loadTiddlyWiki(parameter.tiddlyWikiPath) : store;
context["tiddlyWiki"] = tiddlyWiki;
// Get the tiddlers, as defined by the whereClause
var tiddlers = this.findTiddlers(parameter.whereClause, context, tiddlyWiki);
context["tiddlers"] = tiddlers;
// Sort the tiddlers, when sorting is required.
if (parameter.sortClause) {
this.sortTiddlers(tiddlers, parameter.sortClause, parameter.sortAscending, context);
}
return {tiddlers: tiddlers, context: context};
};
// Returns the (sorted) tiddlers selected by the parameter.
//
// The action is not yet performed.
//
// @parameter see performMacro
//
config.macros.forEachTiddler.getTiddlers = function(parameter) {
return this.getTiddlersAndContext(parameter).tiddlers;
};
// Performs the macros with the given parameter.
//
// @param parameter holds the parameter of the macro as separate properties.
// The following properties are supported:
//
// place
// whereClause
// sortClause
// sortAscending
// actionName
// actionParameter
// scriptText
// tiddlyWikiPath
//
// All properties are optional.
// For most actions the place property must be defined.
//
config.macros.forEachTiddler.performMacro = function(parameter) {
var tiddlersAndContext = this.getTiddlersAndContext(parameter);
// Perform the action
var actionName = parameter.actionName ? parameter.actionName : "addToList";
var action = config.macros.forEachTiddler.actions[actionName];
if (!action) {
this.handleError(parameter.place, "Unknown action '"+actionName+"'.");
return;
}
var actionHandler = action.handler;
actionHandler(parameter.place, tiddlersAndContext.tiddlers, parameter.actionParameter, tiddlersAndContext.context);
};
// ---------------------------------------------------------------------------
// The actions
// ---------------------------------------------------------------------------
// Internal.
//
// --- The addToList Action -----------------------------------------------
//
config.macros.forEachTiddler.actions.addToList.handler = function(place, tiddlers, parameter, context) {
// Parse the parameter
var p = 0;
// Check for extra parameters
if (parameter.length > p) {
config.macros.forEachTiddler.createExtraParameterErrorElement(place, "addToList", parameter, p);
return;
}
// Perform the action.
var list = document.createElement("ul");
place.appendChild(list);
for (var i = 0; i < tiddlers.length; i++) {
var tiddler = tiddlers[i];
var listItem = document.createElement("li");
list.appendChild(listItem);
createTiddlyLink(listItem, tiddler.title, true);
}
};
abego.parseNamedParameter = function(name, parameter, i) {
var beginExpression = null;
if ((i < parameter.length) && parameter[i] == name) {
i++;
if (i >= parameter.length) {
throw "Missing text behind '%0'".format([name]);
}
return config.macros.forEachTiddler.paramEncode(parameter[i]);
}
return null;
}
// Internal.
//
// --- The write Action ---------------------------------------------------
//
config.macros.forEachTiddler.actions.write.handler = function(place, tiddlers, parameter, context) {
// Parse the parameter
var p = 0;
if (p >= parameter.length) {
this.handleError(place, "Missing expression behind 'write'.");
return;
}
var textExpression = config.macros.forEachTiddler.paramEncode(parameter[p]);
p++;
// Parse the "begin" option
var beginExpression = abego.parseNamedParameter("begin", parameter, p);
if (beginExpression !== null)
p += 2;
var endExpression = abego.parseNamedParameter("end", parameter, p);
if (endExpression !== null)
p += 2;
var noneExpression = abego.parseNamedParameter("none", parameter, p);
if (noneExpression !== null)
p += 2;
// Parse the "toFile" option
var filename = null;
var lineSeparator = undefined;
if ((p < parameter.length) && parameter[p] == "toFile") {
p++;
if (p >= parameter.length) {
this.handleError(place, "Filename expected behind 'toFile' of 'write' action.");
return;
}
filename = config.macros.forEachTiddler.getLocalPath(config.macros.forEachTiddler.paramEncode(parameter[p]));
p++;
if ((p < parameter.length) && parameter[p] == "withLineSeparator") {
p++;
if (p >= parameter.length) {
this.handleError(place, "Line separator text expected behind 'withLineSeparator' of 'write' action.");
return;
}
lineSeparator = config.macros.forEachTiddler.paramEncode(parameter[p]);
p++;
}
}
// Check for extra parameters
if (parameter.length > p) {
config.macros.forEachTiddler.createExtraParameterErrorElement(place, "write", parameter, p);
return;
}
// Perform the action.
var func = config.macros.forEachTiddler.getEvalTiddlerFunction(textExpression, context);
var count = tiddlers.length;
var text = "";
if (count > 0 && beginExpression)
text += config.macros.forEachTiddler.getEvalTiddlerFunction(beginExpression, context)(undefined, context, count, undefined);
for (var i = 0; i < count; i++) {
var tiddler = tiddlers[i];
text += func(tiddler, context, count, i);
}
if (count > 0 && endExpression)
text += config.macros.forEachTiddler.getEvalTiddlerFunction(endExpression, context)(undefined, context, count, undefined);
if (count == 0 && noneExpression)
text += config.macros.forEachTiddler.getEvalTiddlerFunction(noneExpression, context)(undefined, context, count, undefined);
if (filename) {
if (lineSeparator !== undefined) {
lineSeparator = lineSeparator.replace(/\\n/mg, "\n").replace(/\\r/mg, "\r");
text = text.replace(/\n/mg,lineSeparator);
}
saveFile(filename, convertUnicodeToUTF8(text));
} else {
var wrapper = createTiddlyElement(place, "span");
wikify(text, wrapper, null/* highlightRegExp */, context.inTiddler);
}
};
// ---------------------------------------------------------------------------
// Helpers
// ---------------------------------------------------------------------------
// Internal.
//
config.macros.forEachTiddler.createContext = function(placeParam, whereClauseParam, sortClauseParam, sortAscendingParam, actionNameParam, actionParameterParam, scriptText, tiddlyWikiPathParam, inTiddlerParam) {
return {
place : placeParam,
whereClause : whereClauseParam,
sortClause : sortClauseParam,
sortAscending : sortAscendingParam,
script : scriptText,
actionName : actionNameParam,
actionParameter : actionParameterParam,
tiddlyWikiPath : tiddlyWikiPathParam,
inTiddler : inTiddlerParam, // the tiddler containing the <<forEachTiddler ...>> macro call.
viewerTiddler : config.macros.forEachTiddler.getContainingTiddler(placeParam) // the tiddler showing the forEachTiddler result
};
};
// Internal.
//
// Returns a TiddlyWiki with the tiddlers loaded from the TiddlyWiki of
// the given path.
//
config.macros.forEachTiddler.loadTiddlyWiki = function(path, idPrefix) {
if (!idPrefix) {
idPrefix = "store";
}
var lenPrefix = idPrefix.length;
// Read the content of the given file
var content = loadFile(this.getLocalPath(path));
if(content === null) {
throw "TiddlyWiki '"+path+"' not found.";
}
var tiddlyWiki = new TiddlyWiki();
// Starting with TW 2.2 there is a helper function to import the tiddlers
if (tiddlyWiki.importTiddlyWiki) {
if (!tiddlyWiki.importTiddlyWiki(content))
throw "File '"+path+"' is not a TiddlyWiki.";
tiddlyWiki.dirty = false;
return tiddlyWiki;
}
// The legacy code, for TW < 2.2
// Locate the storeArea div's
var posOpeningDiv = content.indexOf(startSaveArea);
var posClosingDiv = content.lastIndexOf(endSaveArea);
if((posOpeningDiv == -1) || (posClosingDiv == -1)) {
throw "File '"+path+"' is not a TiddlyWiki.";
}
var storageText = content.substr(posOpeningDiv + startSaveArea.length, posClosingDiv);
// Create a "div" element that contains the storage text
var myStorageDiv = document.createElement("div");
myStorageDiv.innerHTML = storageText;
myStorageDiv.normalize();
// Create all tiddlers in a new TiddlyWiki
// (following code is modified copy of TiddlyWiki.prototype.loadFromDiv)
var store = myStorageDiv.childNodes;
for(var t = 0; t < store.length; t++) {
var e = store[t];
var title = null;
if(e.getAttribute)
title = e.getAttribute("tiddler");
if(!title && e.id && e.id.substr(0,lenPrefix) == idPrefix)
title = e.id.substr(lenPrefix);
if(title && title !== "") {
var tiddler = tiddlyWiki.createTiddler(title);
tiddler.loadFromDiv(e,title);
}
}
tiddlyWiki.dirty = false;
return tiddlyWiki;
};
// Internal.
//
// Returns a function that has a function body returning the given javaScriptExpression.
// The function has the parameters:
//
// (tiddler, context, count, index)
//
config.macros.forEachTiddler.getEvalTiddlerFunction = function (javaScriptExpression, context) {
var script = context["script"];
var functionText = "var theFunction = function(tiddler, context, count, index) { return "+javaScriptExpression+"}";
var fullText = (script ? script+";" : "")+functionText+";theFunction;";
return eval(fullText);
};
// Internal.
//
config.macros.forEachTiddler.findTiddlers = function(whereClause, context, tiddlyWiki) {
var result = [];
var func = config.macros.forEachTiddler.getEvalTiddlerFunction(whereClause, context);
tiddlyWiki.forEachTiddler(function(title,tiddler) {
if (func(tiddler, context, undefined, undefined)) {
result.push(tiddler);
}
});
return result;
};
// Internal.
//
config.macros.forEachTiddler.createExtraParameterErrorElement = function(place, actionName, parameter, firstUnusedIndex) {
var message = "Extra parameter behind '"+actionName+"':";
for (var i = firstUnusedIndex; i < parameter.length; i++) {
message += " "+parameter[i];
}
this.handleError(place, message);
};
// Internal.
//
config.macros.forEachTiddler.sortAscending = function(tiddlerA, tiddlerB) {
var result =
(tiddlerA.forEachTiddlerSortValue == tiddlerB.forEachTiddlerSortValue)
? 0
: (tiddlerA.forEachTiddlerSortValue < tiddlerB.forEachTiddlerSortValue)
? -1
: +1;
return result;
};
// Internal.
//
config.macros.forEachTiddler.sortDescending = function(tiddlerA, tiddlerB) {
var result =
(tiddlerA.forEachTiddlerSortValue == tiddlerB.forEachTiddlerSortValue)
? 0
: (tiddlerA.forEachTiddlerSortValue < tiddlerB.forEachTiddlerSortValue)
? +1
: -1;
return result;
};
// Internal.
//
config.macros.forEachTiddler.sortTiddlers = function(tiddlers, sortClause, ascending, context) {
// To avoid evaluating the sortClause whenever two items are compared
// we pre-calculate the sortValue for every item in the array and store it in a
// temporary property ("forEachTiddlerSortValue") of the tiddlers.
var func = config.macros.forEachTiddler.getEvalTiddlerFunction(sortClause, context);
var count = tiddlers.length;
var i;
for (i = 0; i < count; i++) {
var tiddler = tiddlers[i];
tiddler.forEachTiddlerSortValue = func(tiddler,context, undefined, undefined);
}
// Do the sorting
tiddlers.sort(ascending ? this.sortAscending : this.sortDescending);
// Delete the temporary property that holds the sortValue.
for (i = 0; i < tiddlers.length; i++) {
delete tiddlers[i].forEachTiddlerSortValue;
}
};
// Internal.
//
config.macros.forEachTiddler.trace = function(message) {
displayMessage(message);
};
// Internal.
//
config.macros.forEachTiddler.traceMacroCall = function(place,macroName,params) {
var message ="<<"+macroName;
for (var i = 0; i < params.length; i++) {
message += " "+params[i];
}
message += ">>";
displayMessage(message);
};
// Internal.
//
// Creates an element that holds an error message
//
config.macros.forEachTiddler.createErrorElement = function(place, exception) {
var message = (exception.description) ? exception.description : exception.toString();
return createTiddlyElement(place,"span",null,"forEachTiddlerError","<<forEachTiddler ...>>: "+message);
};
// Internal.
//
// @param place [may be null]
//
config.macros.forEachTiddler.handleError = function(place, exception) {
if (place) {
this.createErrorElement(place, exception);
} else {
throw exception;
}
};
// Internal.
//
// Encodes the given string.
//
// Replaces
// "$))" to ">>"
// "$)" to ">"
//
config.macros.forEachTiddler.paramEncode = function(s) {
var reGTGT = new RegExp("\\$\\)\\)","mg");
var reGT = new RegExp("\\$\\)","mg");
return s.replace(reGTGT, ">>").replace(reGT, ">");
};
// Internal.
//
// Returns the given original path (that is a file path, starting with "file:")
// as a path to a local file, in the systems native file format.
//
// Location information in the originalPath (i.e. the "#" and stuff following)
// is stripped.
//
config.macros.forEachTiddler.getLocalPath = function(originalPath) {
// Remove any location part of the URL
var hashPos = originalPath.indexOf("#");
if(hashPos != -1)
originalPath = originalPath.substr(0,hashPos);
// Convert to a native file format assuming
// "file:///x:/path/path/path..." - pc local file --> "x:\path\path\path..."
// "file://///server/share/path/path/path..." - FireFox pc network file --> "\\server\share\path\path\path..."
// "file:///path/path/path..." - mac/unix local file --> "/path/path/path..."
// "file://server/share/path/path/path..." - pc network file --> "\\server\share\path\path\path..."
var localPath;
if(originalPath.charAt(9) == ":") // pc local file
localPath = unescape(originalPath.substr(8)).replace(new RegExp("/","g"),"\\");
else if(originalPath.indexOf("file://///") === 0) // FireFox pc network file
localPath = "\\\\" + unescape(originalPath.substr(10)).replace(new RegExp("/","g"),"\\");
else if(originalPath.indexOf("file:///") === 0) // mac/unix local file
localPath = unescape(originalPath.substr(7));
else if(originalPath.indexOf("file:/") === 0) // mac/unix local file
localPath = unescape(originalPath.substr(5));
else // pc network file
localPath = "\\\\" + unescape(originalPath.substr(7)).replace(new RegExp("/","g"),"\\");
return localPath;
};
// ---------------------------------------------------------------------------
// Stylesheet Extensions (may be overridden by local StyleSheet)
// ---------------------------------------------------------------------------
//
setStylesheet(
".forEachTiddlerError{color: #ffffff;background-color: #880000;}",
"forEachTiddler");
//============================================================================
// End of forEachTiddler Macro
//============================================================================
//============================================================================
// String.startsWith Function
//============================================================================
//
// Returns true if the string starts with the given prefix, false otherwise.
//
version.extensions["String.startsWith"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
String.prototype.startsWith = function(prefix) {
var n = prefix.length;
return (this.length >= n) && (this.slice(0, n) == prefix);
};
//============================================================================
// String.endsWith Function
//============================================================================
//
// Returns true if the string ends with the given suffix, false otherwise.
//
version.extensions["String.endsWith"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
String.prototype.endsWith = function(suffix) {
var n = suffix.length;
return (this.length >= n) && (this.right(n) == suffix);
};
//============================================================================
// String.contains Function
//============================================================================
//
// Returns true when the string contains the given substring, false otherwise.
//
version.extensions["String.contains"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
String.prototype.contains = function(substring) {
return this.indexOf(substring) >= 0;
};
//============================================================================
// Array.indexOf Function
//============================================================================
//
// Returns the index of the first occurance of the given item in the array or
// -1 when no such item exists.
//
// @param item [may be null]
//
version.extensions["Array.indexOf"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
Array.prototype.indexOf = function(item) {
for (var i = 0; i < this.length; i++) {
if (this[i] == item) {
return i;
}
}
return -1;
};
//============================================================================
// Array.contains Function
//============================================================================
//
// Returns true when the array contains the given item, otherwise false.
//
// @param item [may be null]
//
version.extensions["Array.contains"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
Array.prototype.contains = function(item) {
return (this.indexOf(item) >= 0);
};
//============================================================================
// Array.containsAny Function
//============================================================================
//
// Returns true when the array contains at least one of the elements
// of the item. Otherwise (or when items contains no elements) false is returned.
//
version.extensions["Array.containsAny"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
Array.prototype.containsAny = function(items) {
for(var i = 0; i < items.length; i++) {
if (this.contains(items[i])) {
return true;
}
}
return false;
};
//============================================================================
// Array.containsAll Function
//============================================================================
//
// Returns true when the array contains all the items, otherwise false.
//
// When items is null false is returned (even if the array contains a null).
//
// @param items [may be null]
//
version.extensions["Array.containsAll"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
Array.prototype.containsAll = function(items) {
for(var i = 0; i < items.length; i++) {
if (!this.contains(items[i])) {
return false;
}
}
return true;
};
} // of "install only once"
// Used Globals (for JSLint) ==============
// ... DOM
/*global document */
// ... TiddlyWiki Core
/*global convertUnicodeToUTF8, createTiddlyElement, createTiddlyLink,
displayMessage, endSaveArea, hasClass, loadFile, saveFile,
startSaveArea, store, wikify */
//}}}
/***
!Licence and Copyright
Copyright (c) abego Software ~GmbH, 2005 ([[www.abego-software.de|http://www.abego-software.de]])
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
Neither the name of abego Software nor the names of its contributors may be
used to endorse or promote products derived from this software without specific
prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
DAMAGE.
***/
/***
|Name|GotoPlugin|
|Source|http://www.TiddlyTools.com/#GotoPlugin|
|Documentation|http://www.TiddlyTools.com/#GotoPluginInfo|
|Version|1.9.0|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides||
|Description|view any tiddler by entering it's title - displays list of possible matches|
''View a tiddler by typing its title and pressing //enter//.'' As you type, a list of possible matches is displayed. You can scroll-and-click (or use arrows+enter) to select/view a tiddler, or press //escape// to close the listbox to resume typing. When the listbox is ''//not//'' being displayed, press //escape// to clear the current text input and start over.
!!!Documentation
>see [[GotoPluginInfo]]
!!!Configuration
<<<
*Match titles only after {{twochar{<<option txtIncrementalSearchMin>>}}} or more characters are entered.<br>Use down-arrow to start matching with shorter input. //Note: This option value is also set/used by [[SearchOptionsPlugin]]//.
*To set the maximum height of the listbox, you can create a tiddler tagged with <<tag systemConfig>>, containing:
//{{{
config.macros.gotoTiddler.listMaxSize=10; // change this number
//}}}
<<<
!!!Revisions
<<<
2009.04.05 [1.9.0] added 'showlist' parameter for inline display with listbox always visible.
|please see [[GotoPluginInfo]] for additional revision details|
2006.05.05 [0.0.0] started
<<<
!!!Code
***/
//{{{
version.extensions.GotoPlugin= {major: 1, minor: 9, revision: 0, date: new Date(2009,4,5)};
// automatically tweak shadow SideBarOptions to add <<gotoTiddler>> macro above <<search>>
config.shadowTiddlers.SideBarOptions=config.shadowTiddlers.SideBarOptions.replace(/<<search>>/,"{{button{goto}}}\n<<gotoTiddler>><<search>>");
if (config.options.txtIncrementalSearchMin===undefined) config.options.txtIncrementalSearchMin=3;
config.macros.gotoTiddler= {
listMaxSize: 10,
listHeading: 'Found %0 matching title%1...',
searchItem: "Search for '%0'...",
handler:
function(place,macroName,params,wikifier,paramString,tiddler) {
var quiet =params.contains("quiet");
var showlist =params.contains("showlist");
var search =params.contains("search");
params = paramString.parseParams("anon",null,true,false,false);
var instyle =getParam(params,"inputstyle","");
var liststyle =getParam(params,"liststyle","");
var filter =getParam(params,"filter","");
var html=this.html;
var keyevent=window.event?"onkeydown":"onkeypress"; // IE event fixup for ESC handling
html=html.replace(/%keyevent%/g,keyevent);
html=html.replace(/%search%/g,search);
html=html.replace(/%quiet%/g,quiet);
html=html.replace(/%showlist%/g,showlist);
html=html.replace(/%display%/g,showlist?'block':'none');
html=html.replace(/%position%/g,showlist?'static':'absolute');
html=html.replace(/%instyle%/g,instyle);
html=html.replace(/%liststyle%/g,liststyle);
html=html.replace(/%filter%/g,filter);
if (config.browser.isIE) html=this.IEtableFixup.format([html]);
var span=createTiddlyElement(place,'span');
span.innerHTML=html; var form=span.getElementsByTagName("form")[0];
if (showlist) this.fillList(form.list,'',filter,search,0);
},
html:
'<form onsubmit="return false" style="display:inline;margin:0;padding:0">\
<input name=gotoTiddler type=text autocomplete="off" accesskey="G" style="%instyle%"\
title="Enter title text... ENTER=goto, SHIFT-ENTER=search for text, DOWN=select from list"\
onfocus="this.select(); this.setAttribute(\'accesskey\',\'G\');"\
%keyevent%="return config.macros.gotoTiddler.inputEscKeyHandler(event,this,this.form.list,%search%,%showlist%);"\
onkeyup="return config.macros.gotoTiddler.inputKeyHandler(event,this,%quiet%,%search%,%showlist%);">\
<select name=list style="display:%display%;position:%position%;%liststyle%"\
onchange="if (!this.selectedIndex) this.selectedIndex=1;"\
onblur="this.style.display=%showlist%?\'block\':\'none\';"\
%keyevent%="return config.macros.gotoTiddler.selectKeyHandler(event,this,this.form.gotoTiddler,%showlist%);"\
onclick="return config.macros.gotoTiddler.processItem(this.value,this.form.gotoTiddler,this,%showlist%);">\
</select><input name="filter" type="hidden" value="%filter%">\
</form>',
IEtableFixup:
"<table style='width:100%;display:inline;padding:0;margin:0;border:0;'>\
<tr style='padding:0;margin:0;border:0;'><td style='padding:0;margin:0;border:0;'>\
%0</td></tr></table>",
getItems:
function(val,filter) {
if (!this.items.length || val.length<=config.options.txtIncrementalSearchMin) {
// starting new search, refresh cached list of tiddlers/shadows/tags
this.items=new Array();
if (filter.length) {
var fn=store.getMatchingTiddlers||store.getTaggedTiddlers;
var tiddlers=store.sortTiddlers(fn.apply(store,[filter]),'title');
} else
var tiddlers=store.getTiddlers("title","excludeLists");
for(var t=0; t<tiddlers.length; t++) this.items.push(tiddlers[t].title);
if (!filter.length) {
for (var t in config.shadowTiddlers) this.items.pushUnique(t);
var tags=store.getTags();
for(var t=0; t<tags.length; t++) this.items.pushUnique(tags[t][0]);
}
}
var found = [];
var match=val.toLowerCase();
for(var i=0; i<this.items.length; i++)
if (this.items[i].toLowerCase().indexOf(match)!=-1) found.push(this.items[i]);
return found;
},
items: [], // cached list of tiddlers/shadows/tags
getItemSuffix:
function(t) {
if (store.tiddlerExists(t)) return ""; // tiddler
if (store.isShadowTiddler(t)) return " (shadow)"; // shadow
return " (tag)"; // tag
},
fillList:
function(list,val,filter,search,key) {
if (list.style.display=="none") return; // not visible... do nothing!
var indent='\xa0\xa0\xa0';
var found = this.getItems(val,filter); // find matching items...
found.sort(); // alpha by title
while (list.length > 0) list.options[0]=null; // clear list
var hdr=this.listHeading.format([found.length,found.length==1?"":"s"]);
list.options[0]=new Option(hdr,"",false,false);
for (var t=0; t<found.length; t++) list.options[list.length]=
new Option(indent+found[t]+this.getItemSuffix(found[t]),found[t],false,false);
if (search)
list.options[list.length]=new Option(this.searchItem.format([val]),"*",false,false);
list.size=(list.length<this.listMaxSize?list.length:this.listMaxSize); // resize list...
list.selectedIndex=key==38?list.length-1:key==40?1:0;
},
keyProcessed:
function(ev) { // utility function
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;
},
inputEscKeyHandler:
function(event,here,list,search,showlist) {
if (event.keyCode==27) {
if (showlist) { // clear input, reset list
here.value=here.defaultValue;
this.fillList(list,'',here.form.filter.value,search,0);
}
else if (list.style.display=="none") // clear input
here.value=here.defaultValue;
else list.style.display="none"; // hide list
return this.keyProcessed(event);
}
return true; // key bubbles up
},
inputKeyHandler:
function(event,here,quiet,search,showlist) {
var key=event.keyCode;
var list=here.form.list;
var filter=here.form.filter;
// non-printing chars bubble up, except for a few:
if (key<48) switch(key) {
// backspace=8, enter=13, space=32, up=38, down=40, delete=46
case 8: case 13: case 32: case 38: case 40: case 46: break; default: return true;
}
// blank input... if down/enter... fall through (list all)... else, and hide or reset list
if (!here.value.length && !(key==40 || key==13)) {
if (showlist) this.fillList(here.form.list,'',here.form.filter.value,search,0);
else list.style.display="none";
return this.keyProcessed(event);
}
// hide list if quiet, or below input minimum (and not showlist)
list.style.display=(!showlist&&(quiet||here.value.length<config.options.txtIncrementalSearchMin))?'none':'block';
// non-blank input... enter=show/create tiddler, SHIFT-enter=search for text
if (key==13 && here.value.length) return this.processItem(event.shiftKey?'*':here.value,here,list,showlist);
// up or down key, or enter with blank input... shows and moves to list...
if (key==38 || key==40 || key==13) { list.style.display="block"; list.focus(); }
this.fillList(list,here.value,filter.value,search,key);
return true; // key bubbles up
},
selectKeyHandler:
function(event,list,editfield,showlist) {
if (event.keyCode==27) // escape... hide list, move to edit field
{ editfield.focus(); list.style.display=showlist?'block':'none'; return this.keyProcessed(event); }
if (event.keyCode==13 && list.value.length) // enter... view selected item
{ this.processItem(list.value,editfield,list,showlist); return this.keyProcessed(event); }
return true; // key bubbles up
},
processItem:
function(title,here,list,showlist) {
if (!title.length) return;
list.style.display=showlist?'block':'none';
if (title=="*") { story.search(here.value); return false; } // do full-text search
if (!showlist) here.value=title;
story.displayTiddler(null,title); // show selected tiddler
return false;
}
}
//}}}
Background: #fff
Foreground: #000
PrimaryPale: #ccdd88
PrimaryLight: #113311
PrimaryMid: #113311
PrimaryDark: #014
SecondaryPale: #667722
SecondaryLight: #667722
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eeffaa
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
/***
|Name|HTMLFormattingPlugin|
|Source|http://www.TiddlyTools.com/#HTMLFormattingPlugin|
|Documentation|http://www.TiddlyTools.com/#HTMLFormattingPluginInfo|
|Version|2.4.0|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides|'HTML' formatter|
|Description|embed wiki syntax formatting inside of HTML content|
The ~HTMLFormatting plugin allows you to ''mix wiki-style formatting syntax within HTML formatted content'' by extending the action of the standard TiddlyWiki formatting handler.
!!!!!Documentation
>see [[HTMLFormattingPluginInfo]]
!!!!!Revisions
<<<
2009.01.05 [2.4.0] in wikifyTextNodes(), pass w.highlightRegExp and w.tiddler to wikify() so that search term highlighting and tiddler-relative macro processing will work
| see [[HTMLFormattingPluginInfo]] for additional revision details |
2005.06.26 [1.0.0] Initial Release (as code adaptation - pre-dates TiddlyWiki plugin architecture!!)
<<<
!!!!!Code
***/
//{{{
version.extensions.HTMLFormattingPlugin= {major: 2, minor: 4, revision: 0, date: new Date(2009,1,5)};
// find the formatter for HTML and replace the handler
initHTMLFormatter();
function initHTMLFormatter()
{
for (var i=0; i<config.formatters.length && config.formatters[i].name!="html"; i++);
if (i<config.formatters.length) config.formatters[i].handler=function(w) {
if (!this.lookaheadRegExp) // fixup for TW2.0.x
this.lookaheadRegExp = new RegExp(this.lookahead,"mg");
this.lookaheadRegExp.lastIndex = w.matchStart;
var lookaheadMatch = this.lookaheadRegExp.exec(w.source)
if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
var html=lookaheadMatch[1];
// if <nowiki> is present, just let browser handle it!
if (html.indexOf('<nowiki>')!=-1)
createTiddlyElement(w.output,"span").innerHTML=html;
else {
// if <hide linebreaks> is present, suppress wiki-style literal handling of newlines
if (html.indexOf('<hide linebreaks>')!=-1) html=html.replace(/\n/g,' ');
// remove all \r's added by IE textarea and mask newlines and macro brackets
html=html.replace(/\r/g,'').replace(/\n/g,'\\n').replace(/<</g,'%%(').replace(/>>/g,')%%');
// create span, let browser parse HTML
var e=createTiddlyElement(w.output,"span"); e.innerHTML=html;
// then re-render text nodes as wiki-formatted content
wikifyTextNodes(e,w);
}
w.nextMatch = this.lookaheadRegExp.lastIndex; // continue parsing
}
}
}
// wikify #text nodes that remain after HTML content is processed (pre-order recursion)
function wikifyTextNodes(theNode,w)
{
function unmask(s) { return s.replace(/\%%\(/g,'<<').replace(/\)\%%/g,'>>').replace(/\\n/g,'\n'); }
switch (theNode.nodeName.toLowerCase()) {
case 'style': case 'option': case 'select':
theNode.innerHTML=unmask(theNode.innerHTML);
break;
case 'textarea':
theNode.value=unmask(theNode.value);
break;
case '#text':
var txt=unmask(theNode.nodeValue);
var newNode=createTiddlyElement(null,"span");
theNode.parentNode.replaceChild(newNode,theNode);
wikify(txt,newNode,highlightHack,w.tiddler);
break;
default:
for (var i=0;i<theNode.childNodes.length;i++)
wikifyTextNodes(theNode.childNodes.item(i),w); // recursion
break;
}
}
//}}}
/***
|Name:|HideWhenPlugin|
|Description:|Allows conditional inclusion/exclusion in templates|
|Version:|3.1 ($Rev: 3919 $)|
|Date:|$Date: 2008-03-13 02:03:12 +1000 (Thu, 13 Mar 2008) $|
|Source:|http://mptw.tiddlyspot.com/#HideWhenPlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License:|http://mptw.tiddlyspot.com/#TheBSDLicense|
For use in ViewTemplate and EditTemplate. Example usage:
{{{<div macro="showWhenTagged Task">[[TaskToolbar]]</div>}}}
{{{<div macro="showWhen tiddler.modifier == 'BartSimpson'"><img src="bart.gif"/></div>}}}
***/
//{{{
window.hideWhenLastTest = false;
window.removeElementWhen = function(test,place) {
window.hideWhenLastTest = test;
if (test) {
removeChildren(place);
place.parentNode.removeChild(place);
}
};
merge(config.macros,{
hideWhen: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
removeElementWhen( eval(paramString), place);
}},
showWhen: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
removeElementWhen( !eval(paramString), place);
}},
hideWhenTagged: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
removeElementWhen( tiddler.tags.containsAll(params), place);
}},
showWhenTagged: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
removeElementWhen( !tiddler.tags.containsAll(params), place);
}},
hideWhenTaggedAny: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
removeElementWhen( tiddler.tags.containsAny(params), place);
}},
showWhenTaggedAny: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
removeElementWhen( !tiddler.tags.containsAny(params), place);
}},
hideWhenTaggedAll: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
removeElementWhen( tiddler.tags.containsAll(params), place);
}},
showWhenTaggedAll: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
removeElementWhen( !tiddler.tags.containsAll(params), place);
}},
hideWhenExists: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
removeElementWhen( store.tiddlerExists(params[0]) || store.isShadowTiddler(params[0]), place);
}},
showWhenExists: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
removeElementWhen( !(store.tiddlerExists(params[0]) || store.isShadowTiddler(params[0])), place);
}},
hideWhenTitleIs: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
removeElementWhen( tiddler.title == params[0], place);
}},
showWhenTitleIs: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
removeElementWhen( tiddler.title != params[0], place);
}},
'else': { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
removeElementWhen( !window.hideWhenLastTest, place);
}}
});
//}}}
<html><a href="javascript:void(0)" onclick="story.closeAllTiddlers();story.displayTiddlers(null,store.filterTiddlers(store.getTiddlerText('DefaultTiddlers'))) "
><span title="Luk alle tiddlere og åben velkomstsiden" style="cursor:pointer">''Home''</span></a></li></html>
/***
|Name|ImageSizePlugin|
|Source|http://www.TiddlyTools.com/#ImageSizePlugin|
|Version|1.2.1|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|plugin,formatter|
|Requires||
|Overrides|'image' formatter|
|Description|adds support for resizing images|
This plugin adds optional syntax to scale an image to a specified width and height and/or interactively resize the image with the mouse.
!!!!!Usage
<<<
The extended image syntax is:
{{{
[img(w+,h+)[...][...]]
}}}
where ''(w,h)'' indicates the desired width and height (in CSS units, e.g., px, em, cm, in, or %). Use ''auto'' (or a blank value) for either dimension to scale that dimension proportionally (i.e., maintain the aspect ratio). You can also calculate a CSS value 'on-the-fly' by using a //javascript expression// enclosed between """{{""" and """}}""". Appending a plus sign (+) to a dimension enables interactive resizing in that dimension (by dragging the mouse inside the image). Use ~SHIFT-click to show the full-sized (un-scaled) image. Use ~CTRL-click to restore the starting size (either scaled or full-sized).
<<<
!!!!!Examples
<<<
{{{
[img(100px+,75px+)[images/meow2.jpg]]
}}}
[img(100px+,75px+)[images/meow2.jpg]]
{{{
[<img(34%+,+)[images/meow.gif]]
[<img(21% ,+)[images/meow.gif]]
[<img(13%+, )[images/meow.gif]]
[<img( 8%+, )[images/meow.gif]]
[<img( 5% , )[images/meow.gif]]
[<img( 3% , )[images/meow.gif]]
[<img( 2% , )[images/meow.gif]]
[img( 1%+,+)[images/meow.gif]]
}}}
[<img(34%+,+)[images/meow.gif]]
[<img(21% ,+)[images/meow.gif]]
[<img(13%+, )[images/meow.gif]]
[<img( 8%+, )[images/meow.gif]]
[<img( 5% , )[images/meow.gif]]
[<img( 3% , )[images/meow.gif]]
[<img( 2% , )[images/meow.gif]]
[img( 1%+,+)[images/meow.gif]]
{{tagClear{
}}}
<<<
!!!!!Revisions
<<<
2009.02.24 [1.2.1] cleanup width/height regexp, use '+' suffix for resizing
2009.02.22 [1.2.0] added stretchable images
2008.01.19 [1.1.0] added evaluated width/height values
2008.01.18 [1.0.1] regexp for "(width,height)" now passes all CSS values to browser for validation
2008.01.17 [1.0.0] initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.ImageSizePlugin= {major: 1, minor: 2, revision: 1, date: new Date(2009,2,24)};
//}}}
//{{{
var f=config.formatters[config.formatters.findByField("name","image")];
f.match="\\[[<>]?[Ii][Mm][Gg](?:\\([^,]*,[^\\)]*\\))?\\[";
f.lookaheadRegExp=/\[([<]?)(>?)[Ii][Mm][Gg](?:\(([^,]*),([^\)]*)\))?\[(?:([^\|\]]+)\|)?([^\[\]\|]+)\](?:\[([^\]]*)\])?\]/mg;
f.handler=function(w) {
this.lookaheadRegExp.lastIndex = w.matchStart;
var lookaheadMatch = this.lookaheadRegExp.exec(w.source)
if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
var floatLeft=lookaheadMatch[1];
var floatRight=lookaheadMatch[2];
var width=lookaheadMatch[3];
var height=lookaheadMatch[4];
var tooltip=lookaheadMatch[5];
var src=lookaheadMatch[6];
var link=lookaheadMatch[7];
// Simple bracketted link
var e = w.output;
if(link) { // LINKED IMAGE
if (config.formatterHelpers.isExternalLink(link)) {
if (config.macros.attach && config.macros.attach.isAttachment(link)) {
// see [[AttachFilePluginFormatters]]
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);
addClass(e,"imageLink");
}
var img = createTiddlyElement(e,"img");
if(floatLeft) img.align="left"; else if(floatRight) img.align="right";
if(width||height) {
var x=width.trim(); var y=height.trim();
var stretchW=(x.substr(x.length-1,1)=='+'); if (stretchW) x=x.substr(0,x.length-1);
var stretchH=(y.substr(y.length-1,1)=='+'); if (stretchH) y=y.substr(0,y.length-1);
if (x.substr(0,2)=="{{")
{ try{x=eval(x.substr(2,x.length-4))} catch(e){displayMessage(e.description||e.toString())} }
if (y.substr(0,2)=="{{")
{ try{y=eval(y.substr(2,y.length-4))} catch(e){displayMessage(e.description||e.toString())} }
img.style.width=x.trim(); img.style.height=y.trim();
config.formatterHelpers.addStretchHandlers(img,stretchW,stretchH);
}
if(tooltip) img.title = tooltip;
// GET IMAGE SOURCE
if (config.macros.attach && config.macros.attach.isAttachment(src))
src=config.macros.attach.getAttachment(src); // see [[AttachFilePluginFormatters]]
else if (config.formatterHelpers.resolvePath) { // see [[ImagePathPlugin]]
if (config.browser.isIE || config.browser.isSafari) {
img.onerror=(function(){
this.src=config.formatterHelpers.resolvePath(this.src,false);
return false;
});
} else
src=config.formatterHelpers.resolvePath(src,true);
}
img.src=src;
w.nextMatch = this.lookaheadRegExp.lastIndex;
}
}
config.formatterHelpers.addStretchHandlers=function(e,stretchW,stretchH) {
e.title=((stretchW||stretchH)?'DRAG=stretch/shrink, ':'')
+'SHIFT-CLICK=show full size, CTRL-CLICK=restore initial size';
e.statusMsg='width=%0, height=%1';
e.style.cursor='move';
e.originalW=e.style.width;
e.originalH=e.style.height;
e.minW=Math.max(e.offsetWidth/20,10);
e.minH=Math.max(e.offsetHeight/20,10);
e.stretchW=stretchW;
e.stretchH=stretchH;
e.onmousedown=function(ev) { var ev=ev||window.event;
this.sizing=true;
this.startX=!config.browser.isIE?ev.pageX:(ev.clientX+findScrollX());
this.startY=!config.browser.isIE?ev.pageY:(ev.clientY+findScrollY());
this.startW=this.offsetWidth;
this.startH=this.offsetHeight;
return false;
};
e.onmousemove=function(ev) { var ev=ev||window.event;
if (this.sizing) {
var s=this.style;
var currX=!config.browser.isIE?ev.pageX:(ev.clientX+findScrollX());
var currY=!config.browser.isIE?ev.pageY:(ev.clientY+findScrollY());
var newW=(currX-this.offsetLeft)/(this.startX-this.offsetLeft)*this.startW;
var newH=(currY-this.offsetTop )/(this.startY-this.offsetTop )*this.startH;
if (this.stretchW) s.width =Math.floor(Math.max(newW,this.minW))+'px';
if (this.stretchH) s.height=Math.floor(Math.max(newH,this.minH))+'px';
clearMessage(); displayMessage(this.statusMsg.format([s.width,s.height]));
}
return false;
};
e.onmouseup=function(ev) { var ev=ev||window.event;
if (ev.shiftKey) { this.style.width=this.style.height=''; }
if (ev.ctrlKey) { this.style.width=this.originalW; this.style.height=this.originalH; }
this.sizing=false;
clearMessage();
return false;
};
e.onmouseout=function(ev) { var ev=ev||window.event;
this.sizing=false;
clearMessage();
return false;
};
}
//}}}
Type the text for 'New Tiddler'
/***
|Name|InlineJavascriptPlugin|
|Source|http://www.TiddlyTools.com/#InlineJavascriptPlugin|
|Documentation|http://www.TiddlyTools.com/#InlineJavascriptPluginInfo|
|Version|1.9.2|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides||
|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.
!!!!!Documentation
>see [[InlineJavascriptPluginInfo]]
!!!!!Revisions
<<<
2008.03.03 [1.9.2] corrected declaration of wikifyPlainText() for 'TW 2.1.x compatibility fallback' (fixes Safari "parse error")
2008.02.23 [1.9.1] in onclick function, use string instead of array for 'bufferedHTML' attribute on link element (fixes IE errors)
2008.02.21 [1.9.0] 'onclick' scripts now allow returned text (or document.write() calls) to be wikified into a span that immediately follows the onclick link. Also, added default 'return false' handling if no return value provided (prevents HREF from being triggered -- return TRUE to allow HREF to be processed). Thanks to Xavier Verges for suggestion and preliminary code.
|please see [[InlineJavascriptPluginInfo]] for additional revision details|
2005.11.08 [1.0.0] initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.inlineJavascript= {major: 1, minor: 9, revision: 2, date: new Date(2008,3,3)};
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) { // load a script library
// make script tag, set src, add to body to execute, then remove for cleanup
var script = document.createElement("script"); script.src = src;
document.body.appendChild(script); document.body.removeChild(script);
}
if (code) { // there is script code
if (show) // show inline script code in tiddler output
wikify("{{{\n"+lookaheadMatch[0]+"\n}}}\n",w.output);
if (label) { // create a link to an 'onclick' script
// add a link, define click handler, save code in link (pass 'place'), set link attributes
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){"+fixup+"\n};_out(this);"
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 inline script code
var fixup=code.replace(/document.write\s*\(/gi,'place.innerHTML+=(');
var code="function _out(place){"+fixup+"\n};_out(w.output);"
try { var out=eval(code); } 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();
}
//}}}
<<list filter [tag[Insert]] [sort[+modified]]>>
/***
!!!<<gradient horiz #4EB93E #fff >><<tiddler RefreshStyles>> StyleSheetTiddlersBar>>/%==================================================%/
***/
.treeview, .treeview ul {
padding: 0;
margin: 0;
list-style: none;
}
.treeview ul {
background-color:transparent;
margin-top: 2px;
}
.treeview .hitarea {
background: url([[treeview-gold.gif]]) -64px -25px no-repeat;
height: 16px;
width: 16px;
margin-left: -16px;
float: left;
cursor: pointer;
}
/* fix for IE6 */
* html .hitarea {
display: inline;
float:none;
}
.treeview li {
margin: 0;
padding: 3px 0pt 3px 16px;
}
.treeview a.selected {
background-color: #eee;
}
#treecontrol { margin: 1em 0; display: none; }
.treeview .hover { color: red; cursor: pointer; }
.treeview li { background: url([[treeview-gold-line.gif]]) 0 0 no-repeat; }
.treeview li.collapsable, .treeview li.expandable { background-position: 0 -176px; }
.treeview .expandable-hitarea { background-position: -80px -3px; }
.treeview li.last { background-position: 0 -1766px }
.treeview li.lastCollapsable, .treeview li.lastExpandable { background-image: url([[treeview-gold.gif]]); }
.treeview li.lastCollapsable { background-position: 0 -111px }
.treeview li.lastExpandable { background-position: -32px -67px }
.treeview div.lastCollapsable-hitarea, .treeview div.lastExpandable-hitarea { background-position: 0; }
.treeview-red li { background-image: url([[treeview-red-line.gif]]); }
.treeview-red .hitarea, .treeview-red li.lastCollapsable, .treeview-red li.lastExpandable { background-image: url([[treeview-red.gif]]); }
.treeview-gold li { background-image: url([[treeview-gold-line.gif]]); }
.treeview-gold .hitarea, .treeview-gold li.lastCollapsable, .treeview-gold li.lastExpandable { background-image: url([[treeview-gold.gif]]); }
.treeview-black li { background-image: url([[treeview-black-line.gif]]); }
.treeview-black .hitarea, .treeview-black li.lastCollapsable, .treeview-black li.lastExpandable { background-image: url([[treeview-black.gif]]); }
.treeview-gray li { background-image: url([[treeview-gray-line.gif]]); }
.treeview-gray .hitarea, .treeview-gray li.lastCollapsable, .treeview-gray li.lastExpandable { background-image: url([[treeview-gray.gif]]); }
.treeview-famfamfam li { background-image: url([[treeview-famfamfam-line.gif]]); }
.treeview-famfamfam .hitarea, .treeview-famfamfam li.lastCollapsable, .treeview-famfamfam li.lastExpandable { background-image: url([[treeview-famfamfam.gif]]); }
.filetree li { padding: 3px 0 2px 16px; }
.filetree span.folder, .filetree span.file { padding: 1px 0 1px 16px; display: block; }
.filetree span.folder { background: url([[folder.gif]]) 0 0 no-repeat; }
.filetree li.expandable span.folder { background: url([[folder-closed.gif]]) 0 0 no-repeat; }
.filetree span.file { background: url([[file.gif]]) 0 0 no-repeat; }
<<forEachTiddler
where
'tiddler.tags.contains("$1")'
write
'"#[["+tiddler.title+"]] ("+tiddler.text.length+")\n"'
>>
----
{{twocolumns{
<<tiddler ListTaggedTiddlers with: "ProjectPackage">>
}}}
{{center{<<tiddler HomeButton>>}}}{{left{<<tabs mainmenu
Status 'Status' 'StatusTab'
Topics 'MasterTopics' 'MasterTopics'
Projects 'Projects' 'ProjectsTab'
Notes 'Notes' 'NotesTab'
>>
}}}
----
+++[new tiddlers]
<<newTiddler "New Tiddler">>
<<tiddler NewHTMLFromTemplate>>
<<tiddler NewIframeFromTemplate>>
<<tiddler NewObjectFromTemplate>>
<<tiddler NewProjectTemplate>>
<<tiddler NewScriptTiddler>>
<<tiddler NewSliderFromTemplate>>
<<tiddler NewSystemConfigTiddler>>
<<tiddler NewTabsFromTemplate>>
/%<<newJournal "New Earth Time: [UTC]YYYY.0MM.0DD[/UTC] NETDEGMINSEC "journal">>%/
===
<script>
/*
* Treeview 1.4 - jQuery plugin to hide and show branches of a tree
*
* http://bassistance.de/jquery-plugins/jquery-plugin-treeview/
* http://docs.jquery.com/Plugins/Treeview
*
* Copyright (c) 2007 Jörn Zaefferer
*
* Dual licensed under the MIT and GPL licenses:
* http://www.opensource.org/licenses/mit-license.php
* http://www.gnu.org/licenses/gpl.html
*
* Revision: $Id: jquery.treeview.js 4684 2008-02-07 19:08:06Z joern.zaefferer $
*
*/
;(function($) {
$.extend($.fn, {
swapClass: function(c1, c2) {
var c1Elements = this.filter('.' + c1);
this.filter('.' + c2).removeClass(c2).addClass(c1);
c1Elements.removeClass(c1).addClass(c2);
return this;
},
replaceClass: function(c1, c2) {
return this.filter('.' + c1).removeClass(c1).addClass(c2).end();
},
hoverClass: function(className) {
className = className || "hover";
return this.hover(function() {
$(this).addClass(className);
}, function() {
$(this).removeClass(className);
});
},
heightToggle: function(animated, callback) {
animated ?
this.animate({ height: "toggle" }, animated, callback) :
this.each(function(){
jQuery(this)[ jQuery(this).is(":hidden") ? "show" : "hide" ]();
if(callback)
callback.apply(this, arguments);
});
},
heightHide: function(animated, callback) {
if (animated) {
this.animate({ height: "hide" }, animated, callback);
} else {
this.hide();
if (callback)
this.each(callback);
}
},
prepareBranches: function(settings) {
if (!settings.prerendered) {
// mark last tree items
this.filter(":last-child:not(ul)").addClass(CLASSES.last);
// collapse whole tree, or only those marked as closed, anyway except those marked as open
this.filter((settings.collapsed ? "" : "." + CLASSES.closed) + ":not(." + CLASSES.open + ")").find(">ul").hide();
}
// return all items with sublists
return this.filter(":has(>ul)");
},
applyClasses: function(settings, toggler) {
this.filter(":has(>ul):not(:has(>a))").find(">span").click(function(event) {
toggler.apply($(this).next());
}).add( $("a", this) ).hoverClass();
if (!settings.prerendered) {
// handle closed ones first
this.filter(":has(>ul:hidden)")
.addClass(CLASSES.expandable)
.replaceClass(CLASSES.last, CLASSES.lastExpandable);
// handle open ones
this.not(":has(>ul:hidden)")
.addClass(CLASSES.collapsable)
.replaceClass(CLASSES.last, CLASSES.lastCollapsable);
// create hitarea
this.prepend("<div class=\"" + CLASSES.hitarea + "\"/>").find("div." + CLASSES.hitarea).each(function() {
var classes = "";
$.each($(this).parent().attr("class").split(" "), function() {
classes += this + "-hitarea ";
});
$(this).addClass( classes );
});
}
// apply event to hitarea
this.find("div." + CLASSES.hitarea).click( toggler );
},
treeview: function(settings) {
settings = $.extend({
cookieId: "treeview"
}, settings);
if (settings.add) {
return this.trigger("add", [settings.add]);
}
if ( settings.toggle ) {
var callback = settings.toggle;
settings.toggle = function() {
return callback.apply($(this).parent()[0], arguments);
};
}
// factory for treecontroller
function treeController(tree, control) {
// factory for click handlers
function handler(filter) {
return function() {
// reuse toggle event handler, applying the elements to toggle
// start searching for all hitareas
toggler.apply( $("div." + CLASSES.hitarea, tree).filter(function() {
// for plain toggle, no filter is provided, otherwise we need to check the parent element
return filter ? $(this).parent("." + filter).length : true;
}) );
return false;
};
}
// click on first element to collapse tree
$("a:eq(0)", control).click( handler(CLASSES.collapsable) );
// click on second to expand tree
$("a:eq(1)", control).click( handler(CLASSES.expandable) );
// click on third to toggle tree
$("a:eq(2)", control).click( handler() );
}
// handle toggle event
function toggler() {
$(this)
.parent()
// swap classes for hitarea
.find(">.hitarea")
.swapClass( CLASSES.collapsableHitarea, CLASSES.expandableHitarea )
.swapClass( CLASSES.lastCollapsableHitarea, CLASSES.lastExpandableHitarea )
.end()
// swap classes for parent li
.swapClass( CLASSES.collapsable, CLASSES.expandable )
.swapClass( CLASSES.lastCollapsable, CLASSES.lastExpandable )
// find child lists
.find( ">ul" )
// toggle them
.heightToggle( settings.animated, settings.toggle );
if ( settings.unique ) {
$(this).parent()
.siblings()
// swap classes for hitarea
.find(">.hitarea")
.replaceClass( CLASSES.collapsableHitarea, CLASSES.expandableHitarea )
.replaceClass( CLASSES.lastCollapsableHitarea, CLASSES.lastExpandableHitarea )
.end()
.replaceClass( CLASSES.collapsable, CLASSES.expandable )
.replaceClass( CLASSES.lastCollapsable, CLASSES.lastExpandable )
.find( ">ul" )
.heightHide( settings.animated, settings.toggle );
}
}
function serialize() {
function binary(arg) {
return arg ? 1 : 0;
}
var data = [];
branches.each(function(i, e) {
data[i] = $(e).is(":has(>ul:visible)") ? 1 : 0;
});
$.cookie(settings.cookieId, data.join("") );
}
function deserialize() {
var stored = $.cookie(settings.cookieId);
if ( stored ) {
var data = stored.split("");
branches.each(function(i, e) {
$(e).find(">ul")[ parseInt(data[i]) ? "show" : "hide" ]();
});
}
}
// add treeview class to activate styles
this.addClass("treeview");
// prepare branches and find all tree items with child lists
var branches = this.find("li").prepareBranches(settings);
switch(settings.persist) {
case "cookie":
var toggleCallback = settings.toggle;
settings.toggle = function() {
serialize();
if (toggleCallback) {
toggleCallback.apply(this, arguments);
}
};
deserialize();
break;
case "location":
var current = this.find("a").filter(function() { return this.href.toLowerCase() == location.href.toLowerCase(); });
if ( current.length ) {
current.addClass("selected").parents("ul, li").add( current.next() ).show();
}
break;
}
branches.applyClasses(settings, toggler);
// if control option is set, create the treecontroller and show it
if ( settings.control ) {
treeController(this, settings.control);
$(settings.control).show();
}
return this.bind("add", function(event, branches) {
$(branches).prev()
.removeClass(CLASSES.last)
.removeClass(CLASSES.lastCollapsable)
.removeClass(CLASSES.lastExpandable)
.find(">.hitarea")
.removeClass(CLASSES.lastCollapsableHitarea)
.removeClass(CLASSES.lastExpandableHitarea);
$(branches).find("li").andSelf().prepareBranches(settings).applyClasses(settings, toggler);
});
}
});
// classes used by the plugin
// need to be styled via external stylesheet, see first example
var CLASSES = $.fn.treeview.classes = {
open: "open",
closed: "closed",
expandable: "expandable",
expandableHitarea: "expandable-hitarea",
lastExpandableHitarea: "lastExpandable-hitarea",
collapsable: "collapsable",
collapsableHitarea: "collapsable-hitarea",
lastCollapsableHitarea: "lastCollapsable-hitarea",
lastCollapsable: "lastCollapsable",
lastExpandable: "lastExpandable",
last: "last",
hitarea: "hitarea"
};
// provide backwards compability
$.fn.Treeview = $.fn.treeview;
})(jQuery);
</script>
<script>
var sc_project=4838317;
var sc_invisible=1;
var sc_partition=56;
var sc_click_stat=1;
var sc_security="9ff8d9d0";
</script>
{{span{<script>
place.style.display=readOnly?'none':'inline';
</script><<newTiddler title: 'Give your topic a name here' tag: 'Topics' tag: 'closed' label: 'newTopic' text:"">>}}}<<tiddler TopicsTemplate1 with: [[Topics]]>>
/***
| Name:|''MonkeyTaggerMacro''|
| Created by:|SaqImtiaz|
| Location:|http://tw.lewcid.org/#MonkeyTaggerMacro|
| Version:|0.9 (08-Apr-2006)|
| Requires:|~TW2.07|
!About:
*an adaptation of TagAdderMacro for monkeyGTD and tagglytagging user, but could be useful to just about anyone!
*{{{<<monkeyTagger Project>>}}} gives a drop down list of all tags, tagged with Project.
*The list allows toggling of tags on the current tiddler.
*logging options for task management.
!Demo:
<<monkeyTagger Status>>
!Installation:
*Copy this tiddler to your TW with the systemConfig tag
*either copy the following to your ViewTemplate:
{{{<div class='tagged' macro='monkeyTagger tagToTrack'></div>}}}
or
*better yet, define your own toolbar class and add as many as you need to create a nice toolbar.
Eg:
{{{<div class='toolbar' >
<span style="padding-right:0.15em;" macro='monkeyTagger Project'></span>
<span style="padding-right:0.15em;" macro='monkeyTagger Status'></span>
<span macro='toolbar -closeTiddler closeOthers +editTiddler permalink references jump'></span>
</div>}}}
(adjust padding to taste)
!Usage:
''Syntax:''
|>|{{{<<monkeyTagger source:"sourcetag" label:"customlabel" logging:"true/false" anchor:"anchortext" arrow:"true/false">>}}}|
|label:|quoted text to use as a customlabel|
|arrow:|add arrow to custom label, values are "true" or "false"|
|anchor:|quoted text to specify where to add logging text|
|logging:|enable logging of tags added (for task management), values are "true" or "false"|
the only parameter you ''have'' to pass is the source. When passing only one parameter, you can write either something like:
{{{<<monkeyTagger "Project">>}}} or {{{<<monkeyTagger source:"Project">>}}} for <<monkeyTagger Project>>
All other parameters are optional, and can be written in any order.
''Defaults:''
|label:|default label if not specified = source tag + arrow|
|arrow:|true |
|logging:|false |
|anchor:|none used by default, logging text added to end of tiddler |
''Examples:''
|custom label| {{{<<monkeyTagger source:"Project" label:"customlabel">>}}} |<<monkeyTagger source:"Project" label:"customlabel">>|
|custom label without arrow| {{{<<monkeyTagger source:"Project" label:"customlabel" arrow:"false">>}}} |<<monkeyTagger source:"Project" label:"customlabel" arrow:"false">>|
|logging enabled| {{{<<monkeyTagger source:"Project" logging:"true"}}} |<<monkeyTagger source:"Project" logging:"true">>|
|logging enabled with anchor text|{{{<<monkeyTagger source:"Project" logging:"true" anchor:"anchortext"}}} |<<monkeyTagger source:"Project" logging:"true" anchor:"anchortext">>|
''Tips:''
*Make sure your anchor text doesn't occur more than once in every tiddler, as the first instance will be used.
*I recommend using something like {{{/%StatusLog%/}}} as an invisible anchor.
*Use a tag based template, and add monkeyTagger macro's with logging enabled to the toolbar in just your taskmanagement templates.
!To Do:
*add sorting options if requested.
*''add exclude tag feature''!
!History
*Version 0.9:
**changed to named parameters to make it more user friendly
**added option to disable/enable dropdown arrow in custom labels
**added logging option with anchor text.
!CODE
***/
//{{{
config.macros.monkeyTagger= {};
//config.macros.monkeyTagger.dropdownchar = (document.all?"▼":"▾"); // the fat one is the only one that works in IE
config.macros.monkeyTagger.dropdownchar = "▼"; // uncomment previous line and comment this for smaller version in FF
config.macros.monkeyTagger.handler = function(place,macroName,params,wikifier,paramString,tiddler)
{
var nAV = paramString.parseParams('test', null, true);
if ((nAV[0].arrow)&&(nAV[0].arrow[0])=='false')
var arrow=': ';
else
var arrow=': '+ config.macros.monkeyTagger.dropdownchar;
if((nAV[0].source)&&(nAV[0].source[0])!='.')
{var tagToTrack = nAV[0].source[0]}
else if(params[0]&&(params[0]!='.'))
{var tagToTrack = params[0]}
else
{return false;};
var monkeylabel = ((nAV[0].label)&&(nAV[0].label[0])!='.')?nAV[0].label[0]+arrow: tagToTrack+arrow;
var logmode = ((nAV[0].logging)&&(nAV[0].logging[0])!='.')?nAV[0].logging[0]: "false";
if ((nAV[0].anchor)&&(nAV[0].anchor[0])!='.')
var anchor = nAV[0].anchor[0];
var monkeytooltip=tagToTrack + ' :';
if(tiddler instanceof Tiddler)
{var title = tiddler.title;
var addcomment = function(tiddler,newTag){
var now = new Date();
var timeFormat= 'DD/0MM/YY 0hh:0mm';
var formattednow= now.formatString(timeFormat);
var txt="\n*''"+tagToTrack+"'' set as ''"+newTag+"'' on "+formattednow;
if (anchor && anchor!='.')
{var pos=tiddler.text.indexOf(anchor);
if (pos!=-1) {pos=pos + anchor.length}
else if (pos==-1) {pos=tiddler.text.length}}
else if (!anchor){var pos = tiddler.text.length;};
tiddler.set(null,tiddler.text.substr(0,pos)+txt+tiddler.text.substr(pos));
story.refreshTiddler(tiddler.title,null,true);
return false;
}
var ontagclick = function(e) {
if (!e) var e = window.event;
var tag = this.getAttribute("tag");
var t=store.getTiddler(title);
if (!t || !t.tags) return;
if (t.tags.find(tag)==null)
{t.tags.push(tag)
if (logmode=="true"){addcomment(t,tag);}}
else
{t.tags.splice(t.tags.find(tag),1)};
story.saveTiddler(title);
story.refreshTiddler(title,null,true);
return false;
};
var onclick = function(e) {
if (!e) var e = window.event;
var popup = Popup.create(this);
var thistiddler=store.getTiddler(title);
var taggedarray = new Array();
var tagslabel = new Array();
var taggedtiddlers = store.getTaggedTiddlers(tagToTrack);
for (var t=0; t<taggedtiddlers.length; t++){
var taggedtitle= ((taggedtiddlers[t]).title);
taggedarray.push(taggedtitle);}
for (var t=0; t<taggedarray.length; t++){
var temptag = taggedarray[t];
if (thistiddler.tags.find(temptag)==null)
{var temptag='[ ] '+ temptag;
tagslabel.push(temptag);}
else
{var temptag ='[x] '+ temptag;
tagslabel.push(temptag);}
}
if(tagslabel.length == 0)
createTiddlyText(createTiddlyElement(popup,"li"),('no '+tagToTrack));
for (var t=0; t<tagslabel.length; t++)
{
var theTag = createTiddlyButton(createTiddlyElement(popup,"li"),tagslabel[t],("toggle '"+ ([taggedarray[t]]))+"'",ontagclick);
theTag.setAttribute("tag",taggedarray[t]);
}
Popup.show(popup,false);
e.cancelBubble = true;
if (e.stopPropagation) e.stopPropagation();
return(false);
};
//createTiddlyButton(place,monkeylabel,monkeylabel,onclick);
var createdropperButton = function(place){
var sp = createTiddlyElement(place,"span",null,"monkeytaggerbutton");
var theDropDownBtn = createTiddlyButton(sp,monkeylabel,monkeytooltip,onclick);
};
createdropperButton(place);
}
};
setStylesheet(
".toolbar .monkeytaggerbutton {margin-right:0em; border:0px solid #fff; padding:0px; padding-right:0px; padding-left:0px;}\n"+
".monkeytaggerbutton a.button {padding:2px; padding-left:2px; padding-right:2px;}\n"+
// ".monkeytaggerbutton {font-size:130%;}\n"+
//".monkeytaggerbutton .button {color:#703;}\n"+
"",
"MonkeyTaggerStyles");
//}}}
*~TiddlyWiki's homepage is a good place to start: http://www.tiddlywiki.com
*This is our own ~TiddlyWiki tutorial for beginners: http://www.giffmex.org/twfortherestofus.html
*This is the best tutorial for those who know a bit more: http://tiddlyspot.com/twhelp/ by Morris Gray
*The Google Group devoted to ~TiddlyWiki is extremely helpful: http://groups-beta.google.com/group/TiddlyWiki
*Here is the ever-in-process official documentation site: http://www.tiddlywiki.org/wiki
{{floatleft small borderright{
Sunshine: #ff0
Grass: #360
Sky: LightBlue
Dirt: #633
Apple: #C00
Banana: #FF0
Lime: #3C6
Orange: #F93
Peach: #F99
Pear: #CF6
Raspberry: #606
Background: #fff
Foreground: #000
PrimaryPale: #9cf
PrimaryLight: #09f
PrimaryMid: #03c
PrimaryDark: #003
SecondaryPale: #ffc
SecondaryLight: #fc9
SecondaryMid: #cc6
SecondaryDark: #630
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #C33
}}}PaletteMaker:<hr><<tiddler PaletteMaker>>{{clear block{}}}
/***
|Name|NestedSlidersPlugin|
|Source|http://www.TiddlyTools.com/#NestedSlidersPlugin|
|Documentation|http://www.TiddlyTools.com/#NestedSlidersPluginInfo|
|Version|2.4.9|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides||
|Options|##Configuration|
|Description|show content in nest-able sliding/floating panels, without creating separate tiddlers for each panel's content|
!!!!!Documentation
>see [[NestedSlidersPluginInfo]]
!!!!!Configuration
<<<
<<option chkFloatingSlidersAnimate>> allow floating sliders to animate when opening/closing
>Note: This setting can cause 'clipping' problems in some versions of InternetExplorer.
>In addition, for floating slider animation to occur you must also allow animation in general (see [[AdvancedOptions]]).
<<<
!!!!!Revisions
<<<
2008.11.15 - 2.4.9 in adjustNestedSlider(), don't make adjustments if panel is marked as 'undocked' (CSS class). In onClickNestedSlider(), SHIFT-CLICK docks panel (see [[MoveablePanelPlugin]])
|please see [[NestedSlidersPluginInfo]] for additional revision details|
2005.11.03 - 1.0.0 initial public release. Thanks to RodneyGomes, GeoffSlocock, and PaulPetterson for suggestions and experiments.
<<<
!!!!!Code
***/
//{{{
version.extensions.NestedSlidersPlugin= {major: 2, minor: 4, revision: 9, date: new Date(2008,11,15)};
// options for deferred rendering of sliders that are not initially displayed
if (config.options.chkFloatingSlidersAnimate===undefined)
config.options.chkFloatingSlidersAnimate=false; // avoid clipping problems in IE
// default styles for 'floating' class
setStylesheet(".floatingPanel { position:absolute; z-index:10; padding:0.5em; margin:0em; \
background-color:#eee; color:#000; border:1px solid #000; text-align:left; }","floatingPanelStylesheet");
// if removeCookie() function is not defined by TW core, define it here.
if (window.removeCookie===undefined) {
window.removeCookie=function(name) {
document.cookie = name+'=; expires=Thu, 01-Jan-1970 00:00:01 UTC; path=/;';
}
}
config.formatters.push( {
name: "nestedSliders",
match: "\\n?\\+{3}",
terminator: "\\s*\\={3}\\n?",
lookahead: "\\n?\\+{3}(\\+)?(\\([^\\)]*\\))?(\\!*)?(\\^(?:[^\\^\\*\\@\\[\\>]*\\^)?)?(\\*)?(\\@)?(?:\\{\\{([\\w]+[\\s\\w]*)\\{)?(\\[[^\\]]*\\])?(\\[[^\\]]*\\])?(?:\\}{3})?(\\#[^:]*\\:)?(\\>)?(\\.\\.\\.)?\\s*",
handler: function(w)
{
lookaheadRegExp = new RegExp(this.lookahead,"mg");
lookaheadRegExp.lastIndex = w.matchStart;
var lookaheadMatch = lookaheadRegExp.exec(w.source)
if(lookaheadMatch && lookaheadMatch.index == w.matchStart)
{
var defopen=lookaheadMatch[1];
var cookiename=lookaheadMatch[2];
var header=lookaheadMatch[3];
var panelwidth=lookaheadMatch[4];
var transient=lookaheadMatch[5];
var hover=lookaheadMatch[6];
var buttonClass=lookaheadMatch[7];
var label=lookaheadMatch[8];
var openlabel=lookaheadMatch[9];
var panelID=lookaheadMatch[10];
var blockquote=lookaheadMatch[11];
var deferred=lookaheadMatch[12];
// location for rendering button and panel
var place=w.output;
// default to closed, no cookie, no accesskey, no alternate text/tip
var show="none"; var cookie=""; var key="";
var closedtext=">"; var closedtip="";
var openedtext="<"; var openedtip="";
// extra "+", default to open
if (defopen) show="block";
// cookie, use saved open/closed state
if (cookiename) {
cookie=cookiename.trim().slice(1,-1);
cookie="chkSlider"+cookie;
if (config.options[cookie]==undefined)
{ config.options[cookie] = (show=="block") }
show=config.options[cookie]?"block":"none";
}
// parse label/tooltip/accesskey: [label=X|tooltip]
if (label) {
var parts=label.trim().slice(1,-1).split("|");
closedtext=parts.shift();
if (closedtext.substr(closedtext.length-2,1)=="=")
{ key=closedtext.substr(closedtext.length-1,1); closedtext=closedtext.slice(0,-2); }
openedtext=closedtext;
if (parts.length) closedtip=openedtip=parts.join("|");
else { closedtip="show "+closedtext; openedtip="hide "+closedtext; }
}
// parse alternate label/tooltip: [label|tooltip]
if (openlabel) {
var parts=openlabel.trim().slice(1,-1).split("|");
openedtext=parts.shift();
if (parts.length) openedtip=parts.join("|");
else openedtip="hide "+openedtext;
}
var title=show=='block'?openedtext:closedtext;
var tooltip=show=='block'?openedtip:closedtip;
// create the button
if (header) { // use "Hn" header format instead of button/link
var lvl=(header.length>5)?5:header.length;
var btn = createTiddlyElement(createTiddlyElement(place,"h"+lvl,null,null,null),"a",null,buttonClass,title);
btn.onclick=onClickNestedSlider;
btn.setAttribute("href","javascript:;");
btn.setAttribute("title",tooltip);
}
else
var btn = createTiddlyButton(place,title,tooltip,onClickNestedSlider,buttonClass);
btn.innerHTML=title; // enables use of HTML entities in label
// set extra button attributes
btn.setAttribute("closedtext",closedtext);
btn.setAttribute("closedtip",closedtip);
btn.setAttribute("openedtext",openedtext);
btn.setAttribute("openedtip",openedtip);
btn.sliderCookie = cookie; // save the cookiename (if any) in the button object
btn.defOpen=defopen!=null; // save default open/closed state (boolean)
btn.keyparam=key; // save the access key letter ("" if none)
if (key.length) {
btn.setAttribute("accessKey",key); // init access key
btn.onfocus=function(){this.setAttribute("accessKey",this.keyparam);}; // **reclaim** access key on focus
}
btn.setAttribute("hover",hover?"true":"false");
btn.onmouseover=function(ev) {
// optional 'open on hover' handling
if (this.getAttribute("hover")=="true" && this.sliderPanel.style.display=='none') {
document.onclick.call(document,ev); // close transients
onClickNestedSlider(ev); // open this slider
}
// mouseover on button aligns floater position with button
if (window.adjustSliderPos) window.adjustSliderPos(this.parentNode,this,this.sliderPanel);
}
// create slider panel
var panelClass=panelwidth?"floatingPanel":"sliderPanel";
if (panelID) panelID=panelID.slice(1,-1); // trim off delimiters
var panel=createTiddlyElement(place,"div",panelID,panelClass,null);
panel.button = btn; // so the slider panel know which button it belongs to
btn.sliderPanel=panel; // so the button knows which slider panel it belongs to
panel.defaultPanelWidth=(panelwidth && panelwidth.length>2)?panelwidth.slice(1,-1):"";
panel.setAttribute("transient",transient=="*"?"true":"false");
panel.style.display = show;
panel.style.width=panel.defaultPanelWidth;
panel.onmouseover=function(event) // mouseover on panel aligns floater position with button
{ if (window.adjustSliderPos) window.adjustSliderPos(this.parentNode,this.button,this); }
// render slider (or defer until shown)
w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;
if ((show=="block")||!deferred) {
// render now if panel is supposed to be shown or NOT deferred rendering
w.subWikify(blockquote?createTiddlyElement(panel,"blockquote"):panel,this.terminator);
// align floater position with button
if (window.adjustSliderPos) window.adjustSliderPos(place,btn,panel);
}
else {
var src = w.source.substr(w.nextMatch);
var endpos=findMatchingDelimiter(src,"+++","===");
panel.setAttribute("raw",src.substr(0,endpos));
panel.setAttribute("blockquote",blockquote?"true":"false");
panel.setAttribute("rendered","false");
w.nextMatch += endpos+3;
if (w.source.substr(w.nextMatch,1)=="\n") w.nextMatch++;
}
}
}
}
)
function findMatchingDelimiter(src,starttext,endtext) {
var startpos = 0;
var endpos = src.indexOf(endtext);
// check for nested delimiters
while (src.substring(startpos,endpos-1).indexOf(starttext)!=-1) {
// count number of nested 'starts'
var startcount=0;
var temp = src.substring(startpos,endpos-1);
var pos=temp.indexOf(starttext);
while (pos!=-1) { startcount++; pos=temp.indexOf(starttext,pos+starttext.length); }
// set up to check for additional 'starts' after adjusting endpos
startpos=endpos+endtext.length;
// find endpos for corresponding number of matching 'ends'
while (startcount && endpos!=-1) {
endpos = src.indexOf(endtext,endpos+endtext.length);
startcount--;
}
}
return (endpos==-1)?src.length:endpos;
}
//}}}
//{{{
window.onClickNestedSlider=function(e)
{
if (!e) var e = window.event;
var theTarget = resolveTarget(e);
while (theTarget && theTarget.sliderPanel==undefined) theTarget=theTarget.parentNode;
if (!theTarget) return false;
var theSlider = theTarget.sliderPanel;
var isOpen = theSlider.style.display!="none";
// if SHIFT-CLICK, dock panel first (see [[MoveablePanelPlugin]])
if (e.shiftKey && config.macros.moveablePanel) config.macros.moveablePanel.dock(theSlider,e);
// toggle label
theTarget.innerHTML=isOpen?theTarget.getAttribute("closedText"):theTarget.getAttribute("openedText");
// toggle tooltip
theTarget.setAttribute("title",isOpen?theTarget.getAttribute("closedTip"):theTarget.getAttribute("openedTip"));
// deferred rendering (if needed)
if (theSlider.getAttribute("rendered")=="false") {
var place=theSlider;
if (theSlider.getAttribute("blockquote")=="true")
place=createTiddlyElement(place,"blockquote");
wikify(theSlider.getAttribute("raw"),place);
theSlider.setAttribute("rendered","true");
}
// show/hide the slider
if(config.options.chkAnimate && (!hasClass(theSlider,'floatingPanel') || config.options.chkFloatingSlidersAnimate))
anim.startAnimating(new Slider(theSlider,!isOpen,e.shiftKey || e.altKey,"none"));
else
theSlider.style.display = isOpen ? "none" : "block";
// reset to default width (might have been changed via plugin code)
theSlider.style.width=theSlider.defaultPanelWidth;
// align floater panel position with target button
if (!isOpen && window.adjustSliderPos) window.adjustSliderPos(theSlider.parentNode,theTarget,theSlider);
// if showing panel, set focus to first 'focus-able' element in panel
if (theSlider.style.display!="none") {
var ctrls=theSlider.getElementsByTagName("*");
for (var c=0; c<ctrls.length; c++) {
var t=ctrls[c].tagName.toLowerCase();
if ((t=="input" && ctrls[c].type!="hidden") || t=="textarea" || t=="select")
{ try{ ctrls[c].focus(); } catch(err){;} break; }
}
}
var cookie=theTarget.sliderCookie;
if (cookie && cookie.length) {
config.options[cookie]=!isOpen;
if (config.options[cookie]!=theTarget.defOpen) window.saveOptionCookie(cookie);
else window.removeCookie(cookie); // remove cookie if slider is in default display state
}
// prevent SHIFT-CLICK from being processed by browser (opens blank window... yuck!)
// prevent clicks *within* a slider button from being processed by browser
// but allow plain click to bubble up to page background (to close transients, if any)
if (e.shiftKey || theTarget!=resolveTarget(e))
{ e.cancelBubble=true; if (e.stopPropagation) e.stopPropagation(); }
Popup.remove(); // close open popup (if any)
return false;
}
//}}}
//{{{
// click in document background closes transient panels
document.nestedSliders_savedOnClick=document.onclick;
document.onclick=function(ev) { if (!ev) var ev=window.event; var target=resolveTarget(ev);
if (document.nestedSliders_savedOnClick)
var retval=document.nestedSliders_savedOnClick.apply(this,arguments);
// if click was inside a popup... leave transient panels alone
var p=target; while (p) if (hasClass(p,"popup")) break; else p=p.parentNode;
if (p) return retval;
// if click was inside transient panel (or something contained by a transient panel), leave it alone
var p=target; while (p) {
if ((hasClass(p,"floatingPanel")||hasClass(p,"sliderPanel"))&&p.getAttribute("transient")=="true") break;
p=p.parentNode;
}
if (p) return retval;
// otherwise, find and close all transient panels...
var all=document.all?document.all:document.getElementsByTagName("DIV");
for (var i=0; i<all.length; i++) {
// if it is not a transient panel, or the click was on the button that opened this panel, don't close it.
if (all[i].getAttribute("transient")!="true" || all[i].button==target) continue;
// otherwise, if the panel is currently visible, close it by clicking it's button
if (all[i].style.display!="none") window.onClickNestedSlider({target:all[i].button})
if (!hasClass(all[i],"floatingPanel")&&!hasClass(all[i],"sliderPanel")) all[i].style.display="none";
}
return retval;
};
//}}}
//{{{
// adjust floating panel position based on button position
if (window.adjustSliderPos==undefined) window.adjustSliderPos=function(place,btn,panel) {
if (hasClass(panel,"floatingPanel") && !hasClass(panel,"undocked")) {
// see [[MoveablePanelPlugin]] for use of 'undocked'
var rightEdge=document.body.offsetWidth-1;
var panelWidth=panel.offsetWidth;
var left=0;
var top=btn.offsetHeight;
if (place.style.position=="relative" && findPosX(btn)+panelWidth>rightEdge) {
left-=findPosX(btn)+panelWidth-rightEdge; // shift panel relative to button
if (findPosX(btn)+left<0) left=-findPosX(btn); // stay within left edge
}
if (place.style.position!="relative") {
var left=findPosX(btn);
var top=findPosY(btn)+btn.offsetHeight;
var p=place; while (p && !hasClass(p,'floatingPanel')) p=p.parentNode;
if (p) { left-=findPosX(p); top-=findPosY(p); }
if (left+panelWidth>rightEdge) left=rightEdge-panelWidth;
if (left<0) left=0;
}
panel.style.left=left+"px"; panel.style.top=top+"px";
}
}
//}}}
//{{{
// TW2.1 and earlier:
// hijack Slider stop handler so overflow is visible after animation has completed
Slider.prototype.coreStop = Slider.prototype.stop;
Slider.prototype.stop = function()
{ this.coreStop.apply(this,arguments); this.element.style.overflow = "visible"; }
// TW2.2+
// hijack Morpher stop handler so sliderPanel/floatingPanel overflow is visible after animation has completed
if (version.major+.1*version.minor+.01*version.revision>=2.2) {
Morpher.prototype.coreStop = Morpher.prototype.stop;
Morpher.prototype.stop = function() {
this.coreStop.apply(this,arguments);
var e=this.element;
if (hasClass(e,"sliderPanel")||hasClass(e,"floatingPanel")) {
// adjust panel overflow and position after animation
e.style.overflow = "visible";
if (window.adjustSliderPos) window.adjustSliderPos(e.parentNode,e.button,e);
}
};
}
//}}}
*''Note: Once you are done with the following instructions delete them and start your new project here.''
# Rename this tiddler to your desired project name. It will been added to your projects under the heading Projects
# Set the status above
#''You can add any number of tasks under any project by clicking __add:»subtopic__ in its toolbar above.''
#You can check the status of all projects by calling up the tiddler Projects and clicking on the appropriate button.
''Note: ''You can create any status you want by creating a tiddler with the status name then __tag it status__ and adding another button using the existing ones as a model.
<<newTiddler label:"newHTML" title:'New HTML' text:{{store.getTiddlerText('TiddlerMakeFile##html')}} tag:html>>
/***
|Name:|NewHerePlugin|
|Description:|Creates the new here and new journal macros|
|Version:|3.0 ($Rev: 3861 $)|
|Date:|$Date: 2008-03-08 10:53:09 +1000 (Sat, 08 Mar 2008) $|
|Source:|http://mptw.tiddlyspot.com/#NewHerePlugin|
|Author:|Simon Baird <simon.baird@gmail.com>, modified by giffmex|
|License|http://mptw.tiddlyspot.com/#TheBSDLicense|
***/
//{{{
merge(config.macros, {
newHere: {
handler: function(place,macroName,params,wikifier,paramString,tiddler) {
wikify("<<newTiddler "+paramString+" tag:[["+tiddler.title+"]] tag:Note>>",place,null,tiddler);
}
},
newJournalHere: {
handler: function(place,macroName,params,wikifier,paramString,tiddler) {
wikify("<<newJournal "+paramString+" tag:[["+tiddler.title+"]]>>",place,null,tiddler);
}
}
});
//}}}
+++[newNote]...<<setUserName force>><<tiddler QuickNoteMod with: \n0DD/0MM-YY\n0hh.0mm.0ss>><br><<tiddler ShowPopup with: [[NotesTab]][[See notes]] button 120 sticky>>===
<<newTiddler label:"newProject" title:'New Project' text:{{store.getTiddlerText('TiddlerMakeFile##project')}} tag:Projects>>
<!--{{{-->
<a style="color: #5566ff">Looks like you are creating or editing a new note from the bottom up!<br>
Add the name for your note in the top window, and the text of your note text below. <br>
Add the topic that this note belongs to in the second window above. <br>
Use [[double brackets]] to enclose multiple-word topics. <br>
Use this drop-down menu:<b><span macro='tagChooser'></span></b> to access your current topics and other tags</a>
<!--}}}-->
!usage
{{{[img[NotePad.png]]}}}
[img[NotePad.png]]
!notes
attached by FileDropPlugin
!type
image/png
!file
./NotePad.png
!url
http://dl.dropbox.com/u/1064531/NotePad.png
!data
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABAAAAAA8CAYAAAD46shGAAAAAXNSR0IArs4c6QAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9kLHAABGJ6Nl2YAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAB2klEQVR42u3bMWrDQBCG0dmgA1idBTqADW58hRw8pwhWDiCQShfqJ11iDG7MwoJ4r5vmL7b8YEtmRjXfXxmnKH/3T2RcPksAAAAATX14AgAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAABAAAAANipbprXrDU2bH0s65D/9xJLxX0AAADgzQBwHo+l2tr9lofxWl7eAAAAQBO+AAAAAIAAAAAAAAgAAAAAgAAAAAAACAAAAACAAAAAAAAIAAAAAIAAAAAAAAgAAAAAIAAAAAAAAgAAAAAgAAAAAAACAAAAACAAAAAAAAIAAAAAIAAAAAAAAgAAAAAIAAAAAMBeddO8Zq2xYetjedh7vgEAAIBGAeA8Hku1tfstD+O1vLwBAACAJnwBAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAABAAAAAAgL3qpnnNWmPD1sfysPd8AwAAAG38AsSDPZjCTQY8AAAAAElFTkSuQmCC
Background: #fff
Foreground: #000
PrimaryPale: #ddddff
PrimaryLight: #110077
PrimaryMid: #110077
PrimaryDark: #014
SecondaryPale: #7788bb
SecondaryLight: #5566aa
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::ViewToolbar]]'><span macro="hideWhen readOnly"><span macro='newHere tag:"closed" label:"*create subtopic notes*"'></span><span style="padding-right:1.8em;" macro='tagger'></span ><span style='padding-right: 1.8em;' macro='monkeyTagger tabs'></span><span style="color:#ccc;"></span></span</div></div>
<span class='title' macro='view title'></span>
<div class='viewer postitwhite' macro='view text wikified'></div>
<div class='tagClear'></div>
<!--}}}-->
!usage
{{{[img[Notepad.gif]]}}}
[img[Notepad.gif]]
!notes
attached by FileDropPlugin
!type
image/gif
!file
./Notepad.gif
!url
http://dl.dropbox.com/u/1064531/Notepad.gif
!data
data:image/gif;base64,R0lGODlhAAQ8AKEEAO7FzP/Sutfg4P/6uyH+GkNyZWF0ZWQgd2l0aCBHSU1QIG9uIGEgTWFjACwAAAAAAAQ8AAAC/pyPiXGsD6OctNqLs968+w+G4kiW5omm6sq27gvH8kzPznDX+s73/g8MCofEovGITCqDt9zyCY1Kp9Sq9YrNareyJvcLDovH5LL5jE6XvOq2+w2Py+f0Opltz+v3/L7/D9iGF0hYaHiImKi4CDHI+AgZKTlJWfnjaJmpucnZ6fmI+Sk6SlpqejoVirrK2ur6CquhGktba3uLGzmby9vr+wt81xBMXGx8jEy0m8zc7PwMLbEcTV1tfV07jb3N3e09qf0tPk5ePhdunq6+zv4j8A4fLx8PAF8/j5+vv8/f7/8PMKDAgQQLGjyIMKHChQwbOnwIMaLEiRQrWryIMaPG/o0cOybcgK6dyJEkS9IIaTKlypUsZQ1rCTOmzJmNXtK8iTOnSJQ6e/r8WYwn0KFEi7oSajSp0qWZkDJ9CjUqIadSq1q9+oYq1q1cu2rR6jWs2LFGwJI9izZtDLNq27p9C4It3Ll06z6Qazev3rZ49/r927Uv4MGEnwoujDjxz8OKGzsmR/CeAMkeK1u+jDmz5s2cO3v+DDq06NGkS08EafOx6tVMGbN+DZuc69i0a1ubbTu3bmS4d/v+zas38OHEj6Yujjx5M+HKmzuvxPy59OmJolO/jr2P9ezcu8fZ7j28+DLgx5s/n6U8+vXsn6hvDz++kPfy69s/efy+/v1fIvPz/w8gFPQFSCCAkdljWoIKLshggw4+CGGEEk5IYYUMFQAAOw==
{{span{<script>
place.style.display=readOnly?'none':'inline';
</script><<tiddler NewNote>>}}}<<tiddler TopicsTemplate1 with: [[Note]]>>
*''NOTE:'' This is a completed project and the simple project manager made by Morris Gray is implemented into ~NoteStorm and is ready to use.
#Done: Create custom ProjectsViewTemplate with ~MonkyTagger status chooser in toolbar
#Done: Modified [[newProject template]] in TiddlerMakeFile section to be as "light" as possible.
#Done: Changed TopicsViewTemplate to use a ~TreeView as Title
#Done: Add instructions to fit ~NoteStorms version of TheProjectManager.
#Done: Upload ~NoteStormProject to tiddlyspot.
<!--{{{-->
<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='topMenu'><span class='topMenu' refresh='content' force='true' tiddler='TopMenu'></span></div>
</div>
<div id='tiddlersBar' refresh='none' ondblclick='config.macros.tiddlersBar.onTiddlersBarAction(event)'></div>
<div id='mainMenu' refresh='content' force='true' tiddler='MainMenu'></div>
<div id='sidebar'>
<div id='sidebarOptions' refresh='content' force='true' tiddler='SideBarOptions'></div>
<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
</div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
<div style="position:fixed;z-index:1001;bottom:.3em;right:.3em;cursor:pointer;font-size:9pt;">
<a href="javascript:window.scrollTo(0,0)" title="scroll to top of page">▲</a>
</div>
</div>
<!--}}}-->
/%
!info
|Name|PaletteMaker|
|Source|http://www.TiddlyTools.com/#PaletteMaker|
|Version|1.2.2|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|Type|transclusion|
|Description|edit/create ColorPalette using interactive grid/list|
Usage
<<<
{{{
<<tiddler PaletteMaker with: PaletteName GridName noList noGrid allowOther>>
}}}
*''~PaletteName'' (default=ColorPalette)<br>specifies a tiddler containing {{{name:value}}} slices that assign names to color values
*''~GridName'' (default=[[216-color 'web safe' grid|http://en.wikipedia.org/wiki/Web_colors#Web-safe_colors]])<br>specifies a tiddler (or section) that defines a table, where each table cell contains one of:
**a 3-digit #RGB or 6-digit #RRGGBB color value
**an [[X11 Color Name|http://en.wikipedia.org/wiki/X11_color_names]]
**another valid CSS attribute value (see ''allowOther'', below)
*''noList'' //or// ''noGrid''<br>omits the palette listbox or color grid to provide a more compact layout
*''allowOther''<br>permit non-color CSS attribute values to be entered/selected, e.g., {{{url('images/somefile.jpg')}}}
<<<
Notes:
<<<
*{{block{
You can use "-" as placeholders for the default values of ''~PaletteName'' and/or ''~GridName'':
{{{
<<tiddler PaletteMaker with: - - nogrid>>
}}}
}}}
*{{block{
The grid/list are rendered with 'float:left' styles so content that follows will be rendered next to them. To show your content below the grid/list display, embed an //empty// 'tagClear' CSS wrapper after the PaletteMaker:
{{{
<<tiddler PaletteMaker ...>>{{tagClear{
}}}
}}}
You can also customize the default styles contained in [[PaletteMakerStyles]]:
<<tiddler PaletteMaker##showcode with: styles>>
}}}
*The default color grid definition is:<br><<tiddler PaletteMaker##showcode with: colorgrid>>
<<<
Examples
<<<
Edit ColorPalette (allow non-color values to be entered):
{{{<<tiddler PaletteMaker with: - - allowOther>>}}}
<<tiddler PaletteMaker##show with: - - allowOther>>{{tagClear{
}}}
Create/edit NewPalette using a 16-color 'rainbow' and/or shades of gray (no list):
{{{<<tiddler PaletteMaker with: NewPalette PaletteMaker##grayscale noList>>}}}
<<tiddler PaletteMaker##show with: NewPalette PaletteMaker##grayscale noList>>
{{{<<tiddler PaletteMaker with: NewPalette PaletteMaker##rainbow noList>>}}}
<<tiddler PaletteMaker##show with: NewPalette PaletteMaker##rainbow noList>>
<<<
!showcode
<<tiddler PaletteMaker##out with: {{store.getTiddlerText('PaletteMaker##$1')}}>>
!out
{{{
$1
}}}
!end
!colorgrid
|white || | | | | | |FC0|F90|F60|F30| | | | | | ||FFF|
|black ||9C0| | | | |C90|FC3|FC6|F96|F63|C30| | | | |C03||EEE|
|red ||CF0|CF3|330|660|990|CC0|FF0|C93|C63|300|600|900|C00|F00|F36|F03||DDD|
|orange ||9F0|CF6|9C3|663|993|CC3|FF3|960|930|633|933|C33|F33|C36|F69|F06||CCC|
|yellow ||6F0|9F6|6C3|690|996|CC6|FF6|963|630|966|C66|F66|903|C39|F6C|F09||BBB|
|green ||3F0|6F3|390|6C0|9F3|CC9|FF9|C96|C60|C99|F99|F39|C06|906|F3C|F0C||AAA|
|blue ||0C0|3C0|360|693|9C6|CF9|FFC|FC9|F93|FCC|F9C|C69|936|603|C09|303||999|
|darkmagenta ||3C3|6C6|0F0|3F3|6F6|9F9|CFC| | | |C9C|969|939|909|636|606||888|
|violet ||060|363|090|393|696|9C9| | | |FCF|F9F|F6F|F3F|F0F|C6C|C3C||777|
|darkred ||030|0C3|063|396|6C9|9FC|CFF|39F|9CF|CCF|C9F|96C|639|306|90C|C0C||666|
|darkorange ||0F3|3F6|093|0C6|3F9|9FF|9CC|06C|69C|99F|99C|93F|60C|609|C3F|C0F||555|
|gold ||0F6|6F9|3C6|096|6FF|6CC|699|036|369|66F|66C|669|309|93C|C6F|90F||444|
|darkgreen ||0F9|6FC|3C9|3FF|3CC|399|366|069|039|33F|33C|339|336|63C|96F|60F||333|
|darkblue ||0FC|3FC|0FF|0CC|099|066|033|39C|36C|00F|00C|009|006|003|63F|30F||222|
|indigo ||0C9| | | | |09C|3CF|6CF|69F|36F|03C| | | | |30C||111|
|darkviolet || | | | | | |0CF|09F|06F|03F| | | | | | ||000|
!grayscale
|FFF|EEE|DDD|CCC|BBB|AAA|999|888|777|666|555|444|333|222|111|000|
!rainbow
|black|white|red|orange|yellow|green|blue|darkmagenta|violet|darkred|darkorange|gold|darkgreen|darkblue|indigo|darkviolet|
!end
!styles
/*{{{*/
.colorgrid table
{ float:left; margin:0 !important; border:0 !important; }
.colorgrid table, .colorgrid tr, .colorgrid th, .colorgrid tbody
{ color:black; border:0 !important; }
.colorgrid td
{ height:16px; width:16px; text-align:center; padding:0; line-height:100%; }
.colorgrid select
{ float:left; margin-left:16px; font-size:80%; height:255px; }
/*}}}*/
!end
!code
<<tiddler {{
config.shadowTiddlers.PaletteMakerStyles=store.getTiddlerText('PaletteMaker##styles');
setStylesheet(store.getTiddlerText('PaletteMakerStyles'),'paletteMakerStyles');
window.paletteMaker = {
getColor: function(t){ if (!t||!t.length) return null;
var s=document.createElement('span').style;
try { s.color='#'+t; if (s.color.length) return '#'+t; }
catch(e) { try{ s.color=t; } catch(e){ return null; } return t; } // IE
s.color=t; return s.color.length?t:null; // FF
},
getTextColor: function(t){
t=this.getColor(t);
if (!t||!t.length||!t.startsWith('#')) return 'black'; // BAD COLOR or X11 COLOR NAME
var rgb=t.substr(1).split(''); var long=t.length>=6;
function h2d(h){return '0123456789ABCDEF'.indexOf(h?h.toUpperCase():'');};
var r=h2d(rgb[0]); var g=h2d(rgb[long?2:1]); var b=h2d(rgb[long?4:2]);
if (r<0||g<0||b<0||r+g+b>=15) return 'black'; // BAD RGB or BRIGHT COLOR
return 'white'; // DARK COLOR
},
getPalette: function(palette) {
var pal={};
var slices=store.calcAllSlices(palette);
for (var s in slices) {
var color=slices[s].toUpperCase().replace(/#/,'');
if (!pal[color]) pal[color]=new Array();
pal[color].push(s);
}
return pal;
},
drawGrid: function(place,grid,palette,opts) {
var pm=window.paletteMaker; // abbrev
removeChildren(place);
if (!opts.contains('NOGRID')) wikify(store.getTiddlerText(grid,''),place);
if (!opts.contains('NOLIST')) var s=pm.drawList(place,
{ palette:palette,min:0,max:0,edit:true,callback:pm.callback,place:place,opts:opts });
var pal=pm.getPalette(palette);
var cells=place.getElementsByTagName('td');
for (var i=0; i<cells.length; i++) { var td=cells[i];
td.style.border=0;
var txt=getPlainText(td).trim(); if (!txt.length) continue;
var c=pm.getColor(txt); if (!c && !opts.contains('ALLOWOTHER')) continue;
if (c) { td.style.backgroundColor=c; td.innerHTML=''; td.style.fontSize='70%'; }
td.title=c||txt;
td.style.cursor=c?'crosshair':'pointer';
td.params={ palette:palette, min:0, max:15, edit:true, callback:pm.callback,
place:place, grid:grid, opts:opts, pick:c||txt };
if (pal[txt.toUpperCase()]) {
td.params.names=pal[txt.toUpperCase()];
td.title+='='+td.params.names.join(', ');
if (c) { td.style.color=pm.getTextColor(c); td.innerHTML='√'; }
}
td.onclick=function(ev) { ev=ev||window.event;
var p=Popup.create(this); if(!p)return false;
p.className+=' sticky smallform';
var s=window.paletteMaker.drawList(p,this.params);
s.style.fontSize='80%'; Popup.show(); s.focus();
ev.cancelBubble=true; if(ev.stopPropagation)ev.stopPropagation();
return false;
};
}
},
drawList: function(here,p) {
var pm=window.paletteMaker; // abbrev
var s=createTiddlyElement(here,'select');
s.params=p;
s.options[s.length]=new Option(p.palette+':','_view');
s.options[s.length-1].title='open '+p.palette;
if (p.edit && p.pick!==undefined) {
var c=pm.getColor(p.pick);
s.options[s.length]=new Option('+Add this color...','_add');
if (c) s.options[s.length-1].style.backgroundColor=c;
if (c) s.options[s.length-1].style.color=pm.getTextColor(c);
s.options[s.length-1].title=p.pick;
}
var colors=store.calcAllSlices(p.palette);
for (var x in colors) {
var c=pm.getColor(colors[x]);
var prefix=p.names&&p.names.contains(x)?'=':'\xA0\xA0';
s.options[s.length]=new Option(prefix+x,colors[x]);
if (c) s.options[s.length-1].style.backgroundColor=c;
if (c) s.options[s.length-1].style.color=pm.getTextColor(c)
s.options[s.length-1].title=(!c?'other: "':'')+colors[x]+(!c?'"':'');
}
s.size=p.min&&s.length<p.min?p.min:p.max&&s.length>p.max?p.max:s.length;
s.onclick=function(ev){ ev=ev||window.event;
var name=this.options[this.selectedIndex].text.replace(/[\xA0=]+/,'').trim();
if (this.params.callback) this.params.callback(this,name,this.value,this.params);
return false;
};
s.onkeyup=function(ev){ ev=ev||window.event;
if (ev.keyCode==13) { this.onclick(); Popup.remove(); }
if (ev.keyCode==27) Popup.remove();
return false;
};
return s;
},
callback: function(here,name,val,p){
var pm=window.paletteMaker; // abbrev
if (!val.length) return;
var pick=p.pick!==undefined?p.pick:val;
if (val=='_view') {
story.displayTiddler(story.findContainingTiddler(this.place),p.palette);
Popup.remove();
return false;
} else if (val=='_add') {
var msg='Enter a new name for "'+pick+'"';
name=prompt(msg,'');
var slices=store.calcAllSlices(p.palette);
while (name && slices[name])
name=prompt('"'+name+'" is already in use\n'+msg,name);
} else if (p.edit) {
var allow=p.opts.contains('ALLOWOTHER');
var msg='Change "'+name+'" from "'+val+'" to:';
pick=prompt(msg,pick);
while (pick && !pm.getColor(pick)) {
var err='"'+pick+'" is not a recognized color\n\xa0';
if (!allow) err+='Please try again\n\n';
else err+='Press OK to use this value anyway\n\n';
var pre=pick; pick=prompt(err+msg,pick);
if (pre==pick && allow) break;
}
} else {
// TBD: callback without editing
Popup.remove(); return false;
}
here.selectedIndex=0;
if (!name||!pick) return false;
pm.set(p.palette,name.replace(/ /g,''),pick);
pm.drawGrid(p.place,p.grid,p.palette,p.opts);
Popup.remove();
return false;
},
set: function(palette,name,newval) {
var tid=store.getTiddler(palette);
if (!tid) { var tid=new Tiddler(); tid.text=store.getTiddlerText(palette,''); }
var oldval=store.getTiddlerSlice(palette,name)||'';
var pattern="((?:^|\\n)(?:[\\'\\/]{0,2})~?(?:"
+name.escapeRegExp()
+")\\1\\:[\\t\\x20]*)(?:"
+oldval.escapeRegExp()
+")([\\t\\x20]*(?:\\n|$))";
var t=tid.text; var match=t.match(new RegExp(pattern));
if (match) {
var pos=t.indexOf(match[0]);
var newText=t.substr(0,pos)+
match[1]+newval+match[2]+
t.substr(pos+match[0].length);
} else { // place new slice at top of list or start of tiddler
var match=t.match(store.slicesRE);
var pos=t.indexOf(match?match[0]:'');
var newText=t.substr(0,pos)
+name+': '+newval+(t.length?'\n':'')
+t.substr(pos);
}
var who=config.options.txtUserName; var when=new Date();
if (config.options.chkForceMinorUpdate)
{ var who=tid.modifier; var when=tid.modified; }
displayMessage('setting "'+palette+'::'+name+'" to "'+newval+'"');
store.saveTiddler(palette,palette,newText,who,when,tid.tags,tid.fields);
story.refreshTiddler(palette,null,true);
}
};
'';}}>>
!end
!show
<<tiddler {{
var opts=[]
var palette=('$1'!='$'+'1' && '$1'!='-')?'$1':'ColorPalette';
var grid =('$2'!='$'+'2' && '$2'!='-')?'$2':'PaletteMaker##colorgrid';
opts.push('$3'.toUpperCase());
opts.push('$4'.toUpperCase());
opts.push('$5'.toUpperCase());
if (!place.lastChild||!hasClass(place.lastChild,'colorgrid')) {
var wrapper=createTiddlyElement(place,'span',null,'colorgrid');
window.paletteMaker.drawGrid(wrapper,grid,palette,opts);
}
'';}}>>
!end
%/<<tiddler PaletteMaker##code>>/%
%/<<tiddler {{var src='PaletteMaker'; src+(tiddler&&tiddler.title==src?'##info':'##show');}}
with: [[$1]] [[$2]] [[$3]] [[$4]] [[$5]]>>
/***
|''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"
});
*/
//}}}
@@color:#C06;''» »'' @@You can view the status of projects here or change them in the respective projects.
<<tag Projects {{"Projects ("+store.getTaggedTiddlers("Projects").length +")"}}>><<tag Started {{"Started ("+store.getTaggedTiddlers("Started").length +")"}}>><<tag InProgress {{"InProgress ("+store.getTaggedTiddlers("InProgress").length +")"}}>><<tag Done {{"Done ("+store.getTaggedTiddlers("Done").length +")"}}>><<tag Search {{"Search ("+store.getTaggedTiddlers("Search").length +")"}}>><<tag Insert {{"Insert ("+store.getTaggedTiddlers("Insert").length +")"}}>><<tag Verify {{"Verify ("+store.getTaggedTiddlers("Veryfy").length +")"}}>> <<tiddler RefreshTiddler with: "Refresh Display" "tooltip">>
*''This is the control panel for Projects.''
(You should leave these instructions here for further reference. If not be sure to leave the buttons.)
''Note: ''You can create any status you want by creating a new tiddler with the status name then tag it __status__ and adding another button using an existing one above as a model.
#Tag this tiddler with the heading under which you want Projects to appear. But do not change the Projects tiddler name, all of your projects will be listed under it. (it is originally under TheProjectManager.)
# In the right sidebar under new tiddlers start a new project by clicking __newProject__.
##It will be automatically listed under this (Projects) tiddler.
##It will have a status button to allow you to set it's status
##Further instructions are contained in the new project tiddler.
<<<
''Once the above is done you can add any number of tasks under any project by clicking __add:»subtopic__ in its toolbar above.''
<<<
{{span{<script>
place.style.display=readOnly?'none':'inline';
</script><<tiddler NewProjectTemplate>>}}}<<tiddler TopicsTemplate1 with: [[Projects]]$))>>
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::AltViewToolbar]]'><span macro="hideWhen readOnly"><span style='padding-right: 1.8em;' macro='monkeyTagger status'></span><span style="color:#ccc;"></span><span style='padding-right: 1.8em;' macro='monkeyTagger tabs'></span><span style="color:#ccc;"></span><span style="padding-right:1.8em;" macro='newHere label:"add:»subtopic"'></span></span></div></div>
<span class='big' macro='tiddler TopicsTemplate2'></span>
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
<!--}}}-->
Background: #fff
Foreground: #000
PrimaryPale: #ccaacc
PrimaryLight: #440055
PrimaryMid: #440055
PrimaryDark: #014
SecondaryPale: #885599
SecondaryLight: #885599
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eeddff
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
This package provides a toolbar of interactive 'power tools' that you can use while editing a tiddler to quickly insert TiddlyWiki tiddler links, images, macros, etc. or common formatting sequences directly into tiddler content, as well as perform other functions (such as find/replace, sort, split, convert, etc.) that can be used to modify the current tiddler's source content in a variety of ways.
<<tiddler QuickEditToolbar with: show>>
!!!!!Installation:
<<<
Individual ~QuickEdit buttons are defined in separate tiddlers (e.g., [[QuickEdit_replace]]) that have also been //transcluded// into a single toolbar definition named [[QuickEditToolbar]]. You can edit this definition to add, remove, or rearrange the toolbar buttons to best suit your needs, and then embed the [[QuickEditToolbar]] tiddler into your document's [[EditTemplate]], like this:
{{{
<div macro='tiddler QuickEditToolbar'></div>
}}}
Next, in order to support some of the formatting 'shortcuts' provided by the toolbar, add a reference to the shortcuts CSS class definitions in your [[StyleSheet]]:
{{{
[[StyleSheetShortcuts]]
}}}
By default, the QuickEdit toolbar is hidden until you enable it by using the ''toggleQuickEdit'' command, which you can add to the ~EditToolbar definition in [[ToolbarCommands]]:
{{{
|EditToolbar|... toggleQuickEdit ...|
}}}
You can also toggle the ~QuickEdit toolbar display via a single checkbox option that can be added to [[SideBarOptions]] (or any other desired location):
{{{
<<option chkShowQuickEdit>> show QuickEdit toolbar
}}}
Note: You can 'hard-code' the ''chkShowQuickEdit'' setting, so that the toolbar will be //initially// displayed, by creating a tiddler (e.g., ConfigTweaks), tagged with <<tag systemConfig>>, containing:
{{{
config.options.chkShowQuickEdit=true;
}}}
Alternatively, if you want the toolbar to //always// be displayed, regardless of the option setting, you can add a special keyword, ''show'', to the [[EditTemplate]] syntax, like this:
{{{
<div macro='tiddler QuickEditToolbar with: show'></div>
}}}
<<<
/***
|Name|QuickEditPlugin|
|Source|http://www.TiddlyTools.com/#QuickEditPlugin|
|Documentation|http://www.TiddlyTools.com/#QuickEditPlugin|
|Version|2.4.3|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Description|Support functions for ~QuickEdit package: styles, utility functions, and 'toggleQuickEdit' command|
!!!!!Revisions
<<<
2009.06.11 [2.4.3] added keyup() function to abbreviate listbox handling for CR and ESC
2009.05.07 [2.4.2] added processed() function to abbreviate event handler code
2008.09.07 [2.4.1] added removeCookie() function for compatibility with [[CookieManagerPlugin]]
2008.05.17 [2.4.0] copied code from StickyPopupPlugin to remove dependency
2008.05.12 [2.3.0] added "toggleQuickEdit" command handler (replaces inline script command)
2008.01.11 [2.2.0] converted from inline script
2007.03.29 [1.0.0] initial release (as inline script)
<<<
!!!!!Code
***/
//{{{
version.extensions.QuickEditPlugin= {major: 2, minor: 4, revision: 3, date: new Date(2009,6,11)};
// SET STYLESHEET
setStylesheet("\
.quickEdit a { border:2px outset ButtonFace; padding:0px 3px !important; \
-moz-border-radius:.5em; -webkit-border-radius:.5em; \
-moz-appearance:button !important; -webkit-appearance:push-button !important; \
background-color:ButtonFace; color:ButtonText !important; \
line-height:200%; font-weight:normal; } \
.quickEdit a:hover { border: 2px inset ButtonFace; background-color:ButtonFace; }\
", "quickEditStyles");
// REMOVE COOKIE
if (window.removeCookie===undefined) {
window.removeCookie=function(name) {
document.cookie = name+'=; expires=Thu, 01-Jan-1970 00:00:01 UTC; path=/;';
}
}
// UTILITY FUNCTIONS
config.quickEdit = {
processed: function(ev) { ev=ev||window.event;
ev.cancelBubble=true;
if(ev.stopPropagation) ev.stopPropagation();
return false;
},
keyup: function(ev){ var k=(ev||window.event).keyCode;
if (k==13) this.onclick();
if (k==27) Popup.remove();
},
getField: function(where) {
var here=story.findContainingTiddler(where); if (!here) return null;
var e=story.getTiddlerField(here.getAttribute("tiddler"),"text");
if (e&&e.getAttribute("edit")=="text") return e;
return null;
},
setSelection: function(where,newtext) {
var e=this.getField(where); if (!e) return false;
e.focus(); replaceSelection(e,newtext);
return false;
},
wrapSelection: function(where,before,after) {
var e=this.getField(where); if (!e) return false;
e.focus(); replaceSelection(e,before+config.quickEdit.getSelection(e)+after);
return false;
},
getSelection: function(e) {
var seltext="";
if (e&&e.setSelectionRange)
seltext=e.value.substr(e.selectionStart,e.selectionEnd-e.selectionStart);
else if (document.selection) {
var range = document.selection.createRange();
if (range.parentElement()==e) seltext=range.text
}
return seltext;
},
promptForFilename: function(msg,path,file) {
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.modeOpen);
var thispath = Components.classes['@mozilla.org/file/local;1'].createInstance(Components.interfaces.nsILocalFile);
thispath.initWithPath(path);
picker.displayDirectory=thispath;
picker.defaultExtension='jpg';
picker.defaultString=file;
picker.appendFilters(nsIFilePicker.filterAll|nsIFilePicker.filterImages);
if (picker.show()!=nsIFilePicker.returnCancel)
var result="file:///"+picker.file.persistentDescriptor.replace(/\\/g,'/');
}
catch(e) { alert('error during local file access: '+e.toString()) }
}
else { // IE
try { // XP only
var s = new ActiveXObject('UserAccounts.CommonDialog');
s.Filter='All files|*.*|JPG files|*.jpg|GIF files|*.gif|PNG files|*.png|';
s.FilterIndex=1; // default to JPG
s.InitialDir=path;
s.FileName=file;
if (s.showOpen()) var result=s.FileName;
}
catch(e) { var result=prompt(msg,path+file); } // fallback for non-XP IE
}
return result;
}
}
//}}}
//{{{
if (config.options.chkShowQuickEdit===undefined) config.options.chkShowQuickEdit=false;
config.commands.toggleQuickEdit = {
hideReadOnly: true,
getText: function() { return config.options.chkShowQuickEdit?'\u221Aquickedit':'quickedit'; },
tooltip: 'show QuickEdit toolbar buttons',
handler: function(event,src,title) {
var opt='chkShowQuickEdit';
config.options[opt]=!config.options[opt];
config.macros.option.propagateOption(opt,"checked", config.options[opt],"input");
if (config.options[opt]) saveOptionCookie(opt); else removeCookie(opt);
src.innerHTML=config.commands.toggleQuickEdit.getText();
story.forEachTiddler(function(t,e){if (story.isDirty(t)) refreshElements(e);});
return false;
}
};
//}}}
// // COPIED FROM [[StickyPopupPlugin]] TO ELIMINATE PLUGIN DEPENDENCY
//{{{
if (config.options.chkStickyPopups==undefined) config.options.chkStickyPopups=false;
Popup.stickyPopup_onDocumentClick = function(ev)
{
// if click is in a sticky popup, ignore it so popup will remain visible
var e = ev ? ev : window.event; var target = resolveTarget(e);
var p=target; while (p) {
if (hasClass(p,"popup") && (hasClass(p,"sticky")||config.options.chkStickyPopups)) break;
else p=p.parentNode;
}
if (!p) // not in sticky popup (or sticky popups disabled)... use normal click handling
Popup.onDocumentClick(ev);
return true;
};
try{removeEvent(document,"click",Popup.onDocumentClick);}catch(e){};
try{addEvent(document,"click",Popup.stickyPopup_onDocumentClick);}catch(e){};
//}}}
/%
|Name|QuickEditToolbar|
|Source|http://www.TiddlyTools.com/#QuickEditToolbar|
|Version|2.4.3|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.2|
|Type|transclusion|
|Requires|QuickEditPlugin|
|Optional|QuickEdit_*|
|Description|format/insert TiddlyWiki content using toolbar buttons|
Usage:
* install [[QuickEditPlugin]] (runtime support functions)
* add the toolbar to [[EditTemplate]]:
<div macro='tiddler QuickEditToolbar with: show'></div>
* 'show' (optional) forces the toolbar to always be displayed or,
omit keyword and use <<option chkShowQuickEdit>> setting
* selected QuickEdit buttons can also be added individually to the
regular tiddler toolbar by adding references directly in [[EditTemplate]]:
<span class='toolbar' macro='tiddler QuickEdit_...'></span>
* see [[QuickEditPackage]] for additional installation options
%/{{hidden fine center quickEdit{
<<tiddler {{ // show/hide toolbar
var here=story.findContainingTiddler(place); if (here) var tid=here.getAttribute('tiddler');
var show='$1'!='$'+'1'||config.options.chkShowQuickEdit||tid=='QuickEditToolbar';
place.style.display=show?'block':'none';
'';}}>>/%
TOOLBAR DEFINITION - add, remove, or re-order items as desired:
= = = = = = = = = =
%/<<tiddler QuickEdit_replace>>/%
%/<<tiddler QuickEdit_split>>/%
%/<<tiddler QuickEdit_sort>>/%
%/<<tiddler QuickEdit_convert>>/%
%/ /% (SPACER)
%/<<tiddler QuickEdit_link>>/%
%/<<tiddler QuickEdit_insert>>/%
%/<<tiddler QuickEdit_macro>>/%
%/<<tiddler QuickEdit_image>>/%
%/ /% (SPACER)
%/<<tiddler QuickEdit_format>>/%
%/<<tiddler QuickEdit_align>>/%
%/<<tiddler QuickEdit_color>>/%
%/<<tiddler QuickEdit_font>>/%
%/ /% (SPACER)
%/<<tiddler QuickEdit_custom>>/%
%/}}}
/%
|Name|QuickEdit_align|
|Source|http://www.TiddlyTools.com/#QuickEdit_align|
|Version|2.4.3|
|Author|Eric Shulman|
|License|see http://www.TiddlyTools.com/#QuickEditPlugin|
|Type|html|
|Requires|QuickEditPlugin|
|Description|quickedit - text alignment|
Usage: see http://www.TiddlyTools.com/#QuickEditToolbar
%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1"
title="align text"
onclick="var p=Popup.create(this); if (!p) return false; p.className+=' sticky smallform';
var s=createTiddlyElement(p,'select'); s.button=this;
s.options[0]=new Option('select text alignment...','');
s.options[s.length]=new Option('left','left');
s.options[s.length-1].title='{{left{...}}}';
s.options[s.length]=new Option('center','center');
s.options[s.length-1].title='{{center{...}}}';
s.options[s.length]=new Option('right','right');
s.options[s.length-1].title='{{right{...}}}';
s.options[s.length]=new Option('justify','justify');
s.options[s.length-1].title='{{justify{...}}}';
s.options[s.length]=new Option('float left','floatleft');
s.options[s.length-1].title='{{floatleft{...}}}';
s.options[s.length]=new Option('float right','floatright');
s.options[s.length-1].title='{{floatright{...}}}';
s.size=s.length;
s.onclick=function(){ if (!this.value.length) return;
config.quickEdit.wrapSelection(this.button,'{{'+this.value+'{','}}}');
Popup.remove(); return false;
};
s.onkeyup=config.quickEdit.keyup;
Popup.show();
s.focus();
return config.quickEdit.processed(event);"
>align</a></html>
/%
|Name|QuickEdit_color|
|Source|http://www.TiddlyTools.com/#QuickEdit_color|
|Version|2.4.3|
|Author|Eric Shulman|
|License|see http://www.TiddlyTools.com/#QuickEditPlugin|
|Type|html|
|Requires|QuickEditPlugin|
|Description|quickedit - text/background color|
Usage: see http://www.TiddlyTools.com/#QuickEditToolbar
%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1"
title="text/background color - @@color:#RGB;background-color:#RGB;...@@"
onclick="var p=Popup.create(this,null,'popup sticky smallform'); if (!p) return false;
p.style.padding='2px';
function hex(d) { return '0123456789ABCDEF'.substr(d,1); }
var fg=createTiddlyElement(p,'select'); fg.button=this;
fg.style.width='12em';
fg.options[0]=new Option('text color...','');
fg.options[1]=new Option('\xa0 or enter a value','_ask');
fg.options[2]=new Option('\xa0 or use default color','');
for (var r=0;r<16;r+=3) for (var g=0;g<16;g+=3) for (var b=0;b<16;b+=3) {
var label=hex(r)+hex(g)+hex(b);
fg.options[fg.length]=new Option(label,'#'+label);
fg.options[fg.length-1].style.color='#'+label;
}
fg.onchange=function(){ var val=this.value;
if (val=='_ask') { val=prompt('Enter a CSS color value');
if (!val||!val.length) return false; }
this.options[0].value=val; this.options[0].text=val.length?'text: '+val:'text color...';
var bg=this.nextSibling;
for (var i=3;i<bg.options.length;i++) bg.options[i].style.color=val;
var preview=this.nextSibling.nextSibling.nextSibling;
var t=config.quickEdit.getSelection(config.quickEdit.getField(this.button));
t=t.replace(/^@@(color\:.+;)?(background-color\:.+;)?/,'').replace(/@@$/,'');
if (!t.length) t='~AaBbCcDdEeFfGgHhIiJj 1234567890';
var fg=this.value; if (fg.length) fg='color:'+fg+';';
var bg=this.nextSibling.value; if (bg.length) bg='background-color:'+bg+';';
if (fg.length||bg.length) t='@@'+fg+bg+t+'@@';
removeChildren(preview); wikify(t,preview);
this.selectedIndex=0; return false;
};
var bg=createTiddlyElement(p,'select'); bg.button=this;
bg.style.width='12em';
bg.options[0]=new Option('background color...','');
bg.options[1]=new Option('\xa0 or enter a value','_ask');
bg.options[2]=new Option('\xa0 or use default color','');
for (var r=0;r<16;r+=3) for (var g=0;g<16;g+=3) for (var b=0;b<16;b+=3) {
var label=hex(15-r)+hex(15-g)+hex(15-b);
bg.options[bg.length]=new Option(label,'#'+label);
bg.options[bg.length-1].style.backgroundColor='#'+label;
}
bg.onchange=function(){ var val=this.value;
if (val=='_ask') { val=prompt('Enter a CSS color value');
if (!val||!val.length) return false; }
this.options[0].value=val;
this.options[0].text=val.length?'background: '+val:'background color...';
var fg=this.previousSibling;
for (var i=3;i<fg.options.length;i++) fg.options[i].style.backgroundColor=val;
var preview=this.nextSibling.nextSibling;
var t=config.quickEdit.getSelection(config.quickEdit.getField(this.button));
t=t.replace(/^@@(color\:.+;)?(background-color\:.+;)?/,'').replace(/@@$/,'');
if (!t.length) t='~AaBbCcDdEeFfGgHhIiJj 1234567890';
var fg=this.previousSibling.value; if (fg.length) fg='color:'+fg+';';
var bg=this.value; if (bg.length) bg='background-color:'+bg+';';
if (fg.length||bg.length) t='@@'+fg+bg+t+'@@';
removeChildren(preview); wikify(t,preview);
this.selectedIndex=0; return false;
};
var b=createTiddlyElement(p,'input',null,null,null,{type:'button'}); b.button=this;
b.value='ok'; b.style.width='4em';
b.onclick=function() {
var fg=this.previousSibling.previousSibling.value; if (fg.length) fg='color:'+fg+';';
var bg=this.previousSibling.value; if (bg.length) bg='background-color:'+bg+';';
var t=config.quickEdit.getSelection(config.quickEdit.getField(this.button));
t=t.replace(/^@@(color\:.+;)?(background-color\:.+;)?/,'').replace(/@@$/,'');
if (fg.length||bg.length) config.quickEdit.setSelection(this.button,'@@'+fg+bg+t+'@@');
Popup.remove(); return false;
};
var preview=createTiddlyElement(p,'div',null,'viewer'); var s=preview.style;
s.border='1px solid'; s.margin='2px'; s.width='24em'; s.padding='3px'; s.MozBorderRadius='3px';
s.overflow='hidden'; s.textAlign='center'; s.whiteSpace='normal';
var t=config.quickEdit.getSelection(config.quickEdit.getField(this));
wikify(t.length?t:'~AaBbCcDdEeFfGgHhIiJj 1234567890',preview);
Popup.show();
event.cancelBubble=true;if(event.stopPropagation)event.stopPropagation();return false;"
>color</a></html>
/%
|Name|QuickEdit_convert|
|Source|http://www.TiddlyTools.com/#QuickEdit_convert|
|Version|2.4.3|
|Author|Eric Shulman|
|License|see http://www.TiddlyTools.com/#QuickEditPlugin|
|Type|html|
|Requires|QuickEditPlugin|
|Description|quickedit - convert between comma/tab-separated and TW table format|
Usage: see http://www.TiddlyTools.com/#QuickEditToolbar
%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1"
title="convert between comma/tab-separated and TW table format"
onclick="var e=config.quickEdit.getField(this);
if (e) e.focus(); var txt=config.quickEdit.getSelection(e);
if (txt.indexOf(',')+txt.indexOf('\t')+txt.indexOf('|')==-3) {
alert('Please select text containing tabs, commas, or TiddlyWiki table syntax.');
return false;
}
var p=Popup.create(this); if (!p) return false; p.className+=' sticky smallform';
var s=createTiddlyElement(p,'select'); s.button=this;
s.options[0]=new Option('select a converter...','');
if (txt.indexOf(',')!=-1) {
s.options[s.length]=new Option('commas -> table','commasToTable');
s.options[s.length]=new Option('commas -> tabs','commasToTabs');
}
if (txt.indexOf('\t')!=-1) {
s.options[s.length]=new Option('tabs -> table','tabsToTable');
s.options[s.length]=new Option('tabs -> commas','tabsToCommas');
}
if (txt.indexOf('|')!=-1) {
s.options[s.length]=new Option('table -> tabs','tableToTabs');
s.options[s.length]=new Option('table -> commas','tableToCommas');
}
s.size=s.length;
s.onclick=function(){ if (!this.value.length) return;
var e=config.quickEdit.getField(this.button); if (!e) return false;
e.focus(); var txt=config.quickEdit.getSelection(e);
switch(this.value) {
case 'tabsToTable':
txt=txt.replace(/\t/g,'|').replace(/^|$/g,'|');
txt=txt.replace(/\n/g,'|\n|').replace(/^\|$/g,'');
break;
case 'tableToTabs':
txt=txt.replace(/\t/g,' ').replace(/\|/g,'\t');
txt=txt.replace(/^\t/g,'').replace(/\t$/g,'');
txt=txt.replace(/\n\t/g,'\n').replace(/\t\n/g,'\n');
break;
case 'commasToTable':
txt=txt.replace(/,/g,'|').replace(/^|$/g,'|');
txt=txt.replace(/\n/g,'|\n|').replace(/^\|$/g,'');
break;
case 'tableToCommas':
txt=txt.replace(/,/g,' ').replace(/\|/g,',');
txt=txt.replace(/^,/g,'').replace(/,$/g,'');
txt=txt.replace(/\n,/g,'\n').replace(/,\n/g,'\n');
break;
case 'tabsToCommas':
txt=txt.replace(/\t/g,',');
break;
case 'commasToTabs':
txt=txt.replace(/,/g,'\t');
break;
}
replaceSelection(e,txt);
Popup.remove(); return false;
};
s.onkeyup=config.quickEdit.keyup;
Popup.show();
s.focus();
return config.quickEdit.processed(event);"
>convert</a></html>
/%
|Name|QuickEdit_custom|
|Source|http://www.TiddlyTools.com/#QuickEdit_custom|
|Version|2.4.3|
|Author|Eric Shulman|
|License|see http://www.TiddlyTools.com/#QuickEditPlugin|
|Type|html|
|Requires|QuickEditPlugin|
|Description|quickedit - custom defined formats|
Usage: see http://www.TiddlyTools.com/#QuickEditToolbar
!help
Reminders:
Custom formats are stored as an "HR-separated list" in [[QuickEdit_customList]], where the first line of each list item is the text 'label' to show in the droplist, followed by one or more lines of wiki content to be inserted into the tiddler source.
Substitution markers can be used to dynamically insert values into the formatted output: $1 inserts the tiddler editor's current selected text. $[[message|default value]] interactively prompts for a value to be inserted. $[[message|$1]] uses the selected text as the default value. $[[message|{{javascript}}]] calculates the default value using javascript code.
!end help
%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1" title="custom defined formats"
onclick="var p=Popup.create(this); if (!p) return false; p.className+=' sticky smallform';
var s=createTiddlyElement(p,'select'); s.button=this;
s.options[0]=new Option('select a custom format...','');
var items=store.getTiddlerText('QuickEdit_customList','').split('\n----\n');
for (var i=0; i<items.length; i++) {
if (!items[i].length) continue; var lines=items[i].split('\n');
var label=lines.shift(); var val=lines.join('\n');
s.options[s.length]=new Option(label,val); s.options[s.length-1].title=val;
}
s.options[s.length]=new Option('[Edit custom formats...]','_edit');
s.options[s.length-1].title='add/change custom format definitions...';
s.size=Math.min(s.length,15);
s.onclick=function(){ if (!this.value.length) return;
if (this.value=='_edit') {
alert(store.getTiddlerText('QuickEdit_custom##help'));
story.displayTiddler(story.findContainingTiddler(this.button),
'QuickEdit_customList',DEFAULT_EDIT_TEMPLATE);
} else {
var e=config.quickEdit.getField(this.button); if (!e) return false;
e.focus(); var txt=config.quickEdit.getSelection(e);
replaceSelection(e, this.value.replace(/\$\x31/g,txt)
.replace(/\$\[\[[^\]]+\]\]/g, function(t){
x=t.substr(3,t.length-5).split('|');
var msg=x[0]; var def=x[1]||'';
if (def.startsWith('{{')) {
try{def=eval(def.substr(2,def.length-4))} catch(ex){showException(ex)}
}
return prompt(msg,def)||'';
})
);
}
Popup.remove(); return false;
};
s.onkeyup=config.quickEdit.keyup;
Popup.show();
s.focus();
return config.quickEdit.processed(event);"
>custom</a></html>
timestamp
$[[enter a date|{{new Date().formatString('DDD, MMM DDth, YYYY hh12:0mm:0ssam')}}]]
----
scrollbox
@@display:block;height:10em;overflow:auto;$[[enter scrolling content|$1]]@@@@display:block;text-align:right;^^scroll for more...^^@@
----
nested slider
+++[$1]<<tiddler $1>>===
----
big red
@@font-size:36pt;color:red;$1@@
----
/%
|Name|QuickEdit_font|
|Source|http://www.TiddlyTools.com/#QuickEdit_font|
|Version|2.4.3|
|Author|Eric Shulman|
|License|see http://www.TiddlyTools.com/#QuickEditPlugin|
|Type|html|
|Requires|QuickEditPlugin|
|Description|quickedit - select font family|
Usage: see http://www.TiddlyTools.com/#QuickEditToolbar
%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1"
title="set font-family CSS attribute - @@font-family:facename;...@@"
onclick="var p=Popup.create(this); if (!p) return false; p.className+=' sticky smallform';
var s=createTiddlyElement(p,'select'); s.button=this;
s.options[0]=new Option('select a font family...','');
var fonts=store.getTiddlerText('QuickEdit_fontList','').split('\n');
for (var i=0; i<fonts.length; i++) {
if (!fonts[i].length) continue;
s.options[s.length]=new Option(fonts[i],fonts[i]);
s.options[s.length-1].style.fontFamily=fonts[i];
}
s.options[s.length]=new Option('[Edit font list...]','_edit');
s.options[s.length-1].title='enter fonts, one per line...';
s.size=Math.min(s.length,15);
s.onclick=function(){
if (this.value=='_edit')
story.displayTiddler(story.findContainingTiddler(this.button),'QuickEdit_fontList',DEFAULT_EDIT_TEMPLATE);
else
config.quickEdit.wrapSelection(this.button,'@@font-family:\x22'+this.value+'\x22;','@@');
Popup.remove(); return false;
};
s.onkeyup=config.quickEdit.keyup;
Popup.show();
s.focus();
return config.quickEdit.processed(event);"
>font</a></html>
Arial,helvetica,sans-serif
Times New Roman,times,serif
Courier,monospaced
/%
|Name|QuickEdit_format|
|Source|http://www.TiddlyTools.com/#QuickEdit_format|
|Version|2.4.3|
|Author|Eric Shulman|
|License|see http://www.TiddlyTools.com/#QuickEditPlugin|
|Type|html|
|Requires|QuickEditPlugin|
|Description|quickedit - basic text formats, headings, blockquotes, etc.|
Usage: see http://www.TiddlyTools.com/#QuickEditToolbar
%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1"
title="plain text (remove ALL formatting)" accesskey="P"
onclick="var e=config.quickEdit.getField(this); if (e) e.focus(); var txt=config.quickEdit.getSelection(e);
config.quickEdit.setSelection(e,wikifyPlainText(txt)); return false;"
> ~ </a></html>/%
%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1"
title="''bold''" accesskey="B"
onclick="config.quickEdit.wrapSelection(this,'\x27\x27','\x27\x27'); return false;"
> B </a></html>/%
%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1"
title="//italics//" accesskey="I"
onclick="config.quickEdit.wrapSelection(this,'//','//'); return false;"
> I </a></html>/%
%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1"
title="__underline__" accesskey="U"
onclick="config.quickEdit.wrapSelection(this,'__','__'); return false;"
> U </a></html>/%
%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1"
title="--strikethrough--" accesskey="S"
onclick="config.quickEdit.wrapSelection(this,'--','--'); return false;"
> S </a></html>/%
%/ /% SPACER
%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1"
title="format text"
onclick="var p=Popup.create(this); if (!p) return false; p.className+=' sticky smallform';
var s=createTiddlyElement(p,'select'); s.button=this;
s.options[0]=new Option('select text format...','');
s.options[s.length]=new Option('CSS class wrapper','{{$1{,}}},Enter a CSS classname');
s.options[s.length-1].title='CSS class wrapper - {{classname classname etc{...}}}';
s.options[s.length]=new Option('inline CSS styles','@@$1,@@,Enter CSS (attribute:value;attribute:value;...;)');
s.options[s.length-1].title='inline CSS styles - @@attr:value;attr:value;...@@';
s.options[s.length]=new Option('heading 1','\n!,\n');
s.options[s.length-1].title='H1 heading - !';
s.options[s.length]=new Option('heading 2','\n!!,\n');
s.options[s.length-1].title='H2 heading - !!';
s.options[s.length]=new Option('heading 3','\n!!!,\n');
s.options[s.length-1].title='H3 heading - !!!';
s.options[s.length]=new Option('heading 4','\n!!!!,\n');
s.options[s.length-1].title='H4 heading - !!!!';
s.options[s.length]=new Option('heading 5','\n!!!!!,\n');
s.options[s.length-1].title='H5 heading - !!!!!';
s.options[s.length]=new Option('blockquote','\n\<\<\<\n,\n\<\<\<\n');
s.options[s.length-1].title='indented blockquote - \<\<\<';
s.options[s.length]=new Option('monospaced','{{{,}}}');
s.options[s.length-1].title='inline monospaced text - {{{...}}}';
s.options[s.length]=new Option('plain text','\n{{{\n,\n}}}\n');
s.options[s.length-1].title='multi-line monospaced text box - {{{...}}}';
s.options[s.length]=new Option('superscript','^^,^^');
s.options[s.length-1].title='^^superscript^^';
s.options[s.length]=new Option('subscript','~~,~~');
s.options[s.length-1].title='~~subscript~~';
s.options[s.length]=new Option('HTML','<html>,<\x2fhtml>');
s.options[s.length-1].title='HTML syntax - <html>...<\x2fhtml>';
s.options[s.length]=new Option('comment','/%,%/');
s.options[s.length-1].title='comment (hidden content) - /%...%/';
s.size=s.length;
s.onclick=function(){ if (!this.value.length) return;
var parts=this.value.split(',');
var prefix=parts[0]; var suffix=parts[1]; var ask=parts[2];
if (ask) {
var val=prompt(ask); if (!val) { Popup.remove(); return false; }
prefix=prefix.replace(/\$1/g,val); suffix=suffix.replace(/\$1/g,val);
}
config.quickEdit.wrapSelection(this.button,prefix,suffix);
Popup.remove(); return false;
};
s.onkeyup=config.quickEdit.keyup;
Popup.show();
s.focus();
return config.quickEdit.processed(event);"
>format</a></html>
/%
|Name|QuickEdit_custom|
|Source|http://www.TiddlyTools.com/#QuickEdit_custom|
|Version|2.3.0|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.2|
|Type|script|
|Requires|QuickEditPlugin|
|Overrides||
|Description|provides a droplist of custom-defined formats|
Usage:
in QuickEditToolbar: <<tiddler QuickEdit_custom>>
OR
in EditTemplate: <span class='toolbar' macro='tiddler QuickEdit_custom'></span>
!help
Reminders:
Custom format definitions are stored as an "HR-separated list" in a tiddler named [[QuickEdit_customList]].
The first line of each list item is the text 'label' to show in the droplist, followed by one or more lines of wiki content to be inserted into the tiddler source.
To embed the tiddler editor's current selected text within the formatted output, use "$1" (without quotes) to mark the position(s) where the selection should be inserted.
!end help
%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1"
title="custom defined formats"
onclick="var p=Popup.create(this); if (!p) return false; p.className+=' sticky smallform';
var s=createTiddlyElement(p,'select'); s.button=this;
s.options[0]=new Option('select a custom format...','');
var items=store.getTiddlerText('QuickEdit_heb/gkList','').split('\n----\n');
for (var i=0; i<items.length; i++) {
if (!items[i].length) continue; var lines=items[i].split('\n');
var label=lines.shift(); var val=lines.join('\n');
s.options[s.length]=new Option(label,val); s.options[s.length-1].title=val;
}
s.options[s.length]=new Option('[Edit custom formats...]','_edit');
s.options[s.length-1].title='add/change custom format definitions...';
s.size=Math.min(s.length,15);
s.onclick=function(){ if (!this.value.length) return;
if (this.value=='_edit') {
alert(store.getTiddlerText('QuickEdit_he/gk##help'));
story.displayTiddler(story.findContainingTiddler(this.button),
'QuickEdit_heb/gk',DEFAULT_EDIT_TEMPLATE);
} else {
var e=config.quickEdit.getField(this.button); if (!e) return false;
e.focus(); var txt=config.quickEdit.getSelection(e);
replaceSelection(e,this.value.replace(/\$\x31/g,txt));
}
Popup.remove(); return false;
};
s.onkeyup=function(ev){
var k=(ev||window.event).keyCode; if (k==13) this.onclick(); if (k==27) Popup.remove();
};
Popup.show(p,false);
s.focus();
return config.quickEdit.processed(event);"
>Heb/Gk</a></html>
greek
@@font-family: Gentium;font-size: 16pt;$1@@
----
greek indent1
@@font-family: Gentium;font-size: 16pt;margin-left: 2em;display:block;$1@@
----
greek indent2
@@font-family: Gentium;font-size: 16pt;margin-left: 4em;display:block;$1@@
----
greek indent3
@@font-family: Gentium;font-size: 16pt;margin-left: 6em;display:block;$1@@
----
greek indent4
@@font-family: Gentium;font-size: 16pt;margin-left: 8em;display:block;$1@@
----
greek indent5
@@font-family: Gentium;font-size: 16pt;margin-left: 10em;display:block;$1@@
----
hebrew no align
@@font-family: Gentium;font-size: 20pt;$1@@
----
hebrew right align
@@font-family: Gentium;font-size: 20pt;text-align:right;$1@@
----
hebrew right indent1
@@font-family: Gentium;font-size: 20pt;text-align:right;margin-right: 2em;display:block;$1@@
----
hebrew right indent2
@@font-family: Gentium;font-size: 20pt;text-align:right;margin-right: 4em;display:block;$1@@
----
hebrew right indent3
@@font-family: Gentium;font-size: 20pt;text-align:right;margin-right: 6em;display:block;$1@@
----
hebrew right indent4
@@font-family: Gentium;font-size: 20pt;text-align:right;margin-right: 8em;display:block;$1@@
----
hebrew right indent5
@@font-family: Gentium;font-size: 20pt;text-align:right;margin-right: 10em;display:block;$1@@
/%
|Name|QuickEdit_image|
|Source|http://www.TiddlyTools.com/#QuickEdit_image|
|Version|2.4.3|
|Author|Eric Shulman|
|License|see http://www.TiddlyTools.com/#QuickEditPlugin|
|Type|html|
|Requires|QuickEditPlugin|
|Description|quickedit - embed an image|
Usage: see http://www.TiddlyTools.com/#QuickEditToolbar
%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1"
title="embed an image (jpg/gif/png) - [img[tooltip|URL]] or [img[tooltip|path/to/file.ext]]"
onclick="var fn=config.quickEdit.promptForFilename(
'Enter/select an image file',getLocalPath(document.location.href),'');
if (!fn) return false; /* cancelled by user */
var h=document.location.href; var p=decodeURIComponent(h.substr(0,h.lastIndexOf('/')+1));
if (fn.startsWith(p)) fn=fn.substr(p.length); /* use RELATIVE path/filename.ext */
var tip=prompt('Enter a tooltip for this image',''); if (!tip) tip=''; else tip+='|';
return config.quickEdit.setSelection(this,'[img['+tip+fn+']]');"
>image</a></html>
/%
|Name|QuickEdit_custom|
|Source|http://www.TiddlyTools.com/#QuickEdit_custom|
|Version|2.3.0|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.2|
|Type|script|
|Requires|QuickEditPlugin|
|Overrides||
|Description|provides a droplist of custom-defined formats|
Usage:
in QuickEditToolbar: <<tiddler QuickEdit_custom>>
OR
in EditTemplate: <span class='toolbar' macro='tiddler QuickEdit_custom'></span>
!help
Reminders:
Custom format definitions are stored as an "HR-separated list" in a tiddler named [[QuickEdit_customList]].
The first line of each list item is the text 'label' to show in the droplist, followed by one or more lines of wiki content to be inserted into the tiddler source.
To embed the tiddler editor's current selected text within the formatted output, use "$1" (without quotes) to mark the position(s) where the selection should be inserted.
!end help
%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1"
title="custom defined formats"
onclick="var p=Popup.create(this); if (!p) return false; p.className+=' sticky smallform';
var s=createTiddlyElement(p,'select'); s.button=this;
s.options[0]=new Option('select a custom format...','');
var items=store.getTiddlerText('QuickEdit_indentList','').split('\n----\n');
for (var i=0; i<items.length; i++) {
if (!items[i].length) continue; var lines=items[i].split('\n');
var label=lines.shift(); var val=lines.join('\n');
s.options[s.length]=new Option(label,val); s.options[s.length-1].title=val;
}
s.options[s.length]=new Option('[Edit custom formats...]','_edit');
s.options[s.length-1].title='add/change custom format definitions...';
s.size=Math.min(s.length,15);
s.onclick=function(){ if (!this.value.length) return;
if (this.value=='_edit') {
alert(store.getTiddlerText('QuickEdit_indent##help'));
story.displayTiddler(story.findContainingTiddler(this.button),
'QuickEdit_indent',DEFAULT_EDIT_TEMPLATE);
} else {
var e=config.quickEdit.getField(this.button); if (!e) return false;
e.focus(); var txt=config.quickEdit.getSelection(e);
replaceSelection(e,this.value.replace(/\$\x31/g,txt));
}
Popup.remove(); return false;
};
s.onkeyup=function(ev){
var k=(ev||window.event).keyCode; if (k==13) this.onclick(); if (k==27) Popup.remove();
};
Popup.show(p,false);
s.focus();
return config.quickEdit.processed(event);"
>indent</a></html>
popup
($1((add note here)))
----
dark gray cell
bgcolor(#999999):
----
light gray cell
bgcolor(#dddddd):
----
tudu slider
{{tuduSlider{<<slider chkTIDDLER "TIDDLER" "DISPLAYED TEXT »">>}}}
----
syntax table header row
{{smalltexttable{
|!Versículos|!Traducción|!Función <br>sintáctica|
----
syntax table section header
|>|>|!5.12 - Afirmación|
----
syntax table row
|!5.14a^^1^^|translation|((Función »()))|
----
indent1
@@margin-left: 2em;display:block;$1@@
----
indent2
@@margin-left: 4em;display:block;$1@@
----
indent3
@@margin-left: 6em;display:block;$1@@
----
indent4
@@margin-left: 8em;display:block;$1@@
----
indent5
@@margin-left: 10em;display:block;$1@@
----
/%
|Name|QuickEdit_insert|
|Source|http://www.TiddlyTools.com/#QuickEdit_insert|
|Version|2.4.3|
|Author|Eric Shulman|
|License|see http://www.TiddlyTools.com/#QuickEditPlugin|
|Type|html|
|Requires|QuickEditPlugin|
|Description|quickedit - insert content from another tiddler or external file|
Usage: see http://www.TiddlyTools.com/#QuickEditToolbar
%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1"
title="insert content from another tiddler or external file"
onclick="var p=Popup.create(this); if (!p) return false; p.className+=' sticky smallform';
var s2=createTiddlyElement(p,'select'); s2.title='filter by tag';
s2.options[0]=new Option('filter by tag...','');
s2.options[s2.length]=new Option('[all tiddlers]','');
var tags=store.getTags();
for (var t=0; t<tags.length; t++) s2.options[s2.length]=new Option(tags[t][0],tags[t][0]);
s2.onchange=function(){
var tag=this.value;
var tids=tag.length?store.reverseLookup('tags',tag,true):store.reverseLookup('tags','excludeLists');
var list=this.nextSibling.nextSibling;
while (list.length) list.options[0]=null;
var prompt='select a tiddler or file...';
if (tag.length) prompt='select a tagged tiddler ['+tids.length+' matches]...';
list.options[0]=new Option(prompt,'');
if (!tag.length) list.options[list.length]=new Option('[browse for file...]','_file');
for (var t=0; t<tids.length; t++) {
list.options[list.length]=new Option(tids[t].title,tids[t].title);
list.options[list.length-1].title=tids[t].getSubtitle();
}
list.size=Math.min(list.length,10);
list.selectedIndex=0; list.focus();
this.style.width=list.offsetWidth+'px';
if (!tag.length) this.selectedIndex=0;
};
createTiddlyElement(p,'br');
var s=createTiddlyElement(p,'select'); s.button=this;
s.title='select a tiddler or file';
s.options[0]=new Option('select a tiddler or file...','');
s.options[s.length]=new Option('[browse for file...]','_file');
var tids=store.reverseLookup('tags','excludeLists');
for (var t=0; t<tids.length; t++) {
s.options[s.length]=new Option(tids[t].title,tids[t].title);
s.options[s.length-1].title=tids[t].getSubtitle();
}
s.size=Math.min(s.length,10);
s.onclick=function(){ if (!this.value.length) return false;
if (this.value=='_file') {
var fn=config.quickEdit.promptForFilename(
'Enter/select a text file',getLocalPath(document.location.href),'');
if (!fn) return false; /* cancelled by user */
var txt=loadFile(getLocalPath(fn));
if (!txt) { alert('Error: unable to read contents from \0027'+fn+'\0027'); return; }
}
else var txt=store.getTiddlerText(this.value);
if (!txt) {
displayMessage(this.value+' not found');
this.selectedIndex=0; this.focus();
return false;
}
config.quickEdit.setSelection(this.button,txt);
Popup.remove(); return false;
};
s.onkeyup=config.quickEdit.keyup;
Popup.show();
s2.style.width=s.offsetWidth+'px';
s.focus();
return config.quickEdit.processed(event);"
>insert</a></html>
/%
|Name|QuickEdit_link|
|Source|http://www.TiddlyTools.com/#QuickEdit_link|
|Version|2.4.3|
|Author|Eric Shulman|
|License|see http://www.TiddlyTools.com/#QuickEditPlugin|
|Type|html|
|Requires|QuickEditPlugin|
|Description|quickedit - link to tiddler or external file|
Usage: see http://www.TiddlyTools.com/#QuickEditToolbar
%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1"
title="add a link to a tiddler or external file - [[link text|TiddlerName]]"
onclick="var p=Popup.create(this); if (!p) return false; p.className+=' sticky smallform';
var s2=createTiddlyElement(p,'select'); s2.title='filter by tag';
s2.options[0]=new Option('filter by tag...','');
s2.options[s2.length]=new Option('[all tiddlers]','');
var tags=store.getTags();
for (var t=0; t<tags.length; t++) s2.options[s2.length]=new Option(tags[t][0],tags[t][0]);
s2.onchange=function(){
var tag=this.value;
var tids=tag.length?store.reverseLookup('tags',tag,true):store.reverseLookup('tags','excludeLists');
var list=this.nextSibling.nextSibling;
while (list.length) list.options[0]=null;
var prompt='select a tiddler or file...';
if (tag.length) prompt='select a tagged tiddler ['+tids.length+' matches]...';
list.options[0]=new Option(prompt,'');
if (!tag.length) list.options[list.length]=new Option('[browse for file...]','_file');
for (var t=0; t<tids.length; t++) {
list.options[list.length]=new Option(tids[t].title,tids[t].title);
list.options[list.length-1].title=tids[t].getSubtitle();
}
list.size=Math.min(list.length,10);
list.selectedIndex=0; list.focus();
this.style.width=list.offsetWidth+'px';
if (!tag.length) this.selectedIndex=0;
};
createTiddlyElement(p,'br');
var s=createTiddlyElement(p,'select'); s.button=this;
s.title='select a tiddler or file';
s.options[0]=new Option('select a tiddler or file...','');
s.options[s.length]=new Option('[browse for file...]','_file');
var tids=store.reverseLookup('tags','excludeLists');
for (var t=0; t<tids.length; t++) {
s.options[s.length]=new Option(tids[t].title,tids[t].title);
s.options[s.length-1].title=tids[t].getSubtitle();
}
s.size=Math.min(s.length,10);
s.onclick=function(){ if (!this.value.length) return false;
var title=this.value; var txt=title;
if (title=='_file') {
title=config.quickEdit.promptForFilename('Select a file',
getLocalPath(document.location.href),'');
if (!title) { this.selectedIndex=0; this.focus(); return false; }
var txt=title.substr(title.lastIndexOf('/')+1);
}
var txt=prompt('Enter the text to display for this link',txt);
if (!txt) { this.selectedIndex=0; this.focus(); return false; }
config.quickEdit.setSelection(this.button,'[['+txt+'|'+title+']]');
Popup.remove(); return false;
};
s.onkeyup=config.quickEdit.keyup;
Popup.show();
s2.style.width=s.offsetWidth+'px';
s.focus();
return config.quickEdit.processed(event);"
>link</a></html>
/%
|Name|QuickEdit_macro|
|Source|http://www.TiddlyTools.com/#QuickEdit_macro|
|Version|2.4.3|
|Author|Eric Shulman|
|License|see http://www.TiddlyTools.com/#QuickEditPlugin|
|Type|html|
|Requires|QuickEditPlugin|
|Description|quickedit - embed a macro with 'guide text'|
Usage: see http://www.TiddlyTools.com/#QuickEditToolbar
Note:
Optional 'guideText' can be used to add suggested defaults/placeholders for specific macro parameters.
Add guideText to your own plugin-defined macros using:
config.macros.macroName.guideText='guide text goes here';
%/<<tiddler {{
/* define guide text for a few common TW core macros */
config.macros.edit.guideText='fieldname #rows';
config.macros.view.guideText='fieldname (link,wikified,date) format';
config.macros.slider.guideText='cookie TiddlerName label tooltip';
config.macros.option.guideText='(txtCookieName,chkCookieName)';
config.macros.tiddler.guideText='TiddlerName with: params...';
''; /* must return blank to suppress output */ }}>>/%
%/<html><hide linebreaks><a href='javascript:;' class='tiddlyLink' tabindex='-1'
title='add a macro - \<\<macroName ...\>\>'
onclick="var p=Popup.create(this); if (!p) return false; p.className+=' sticky smallform';
var s=createTiddlyElement(p,'select'); s.button=this;
s.options[0]=new Option('select a macro...','');
var macros=[]; for (var m in config.macros) if (config.macros[m].handler) macros.push(m); macros.sort();
for (var i=0; i<macros.length; i++) { var m=macros[i];
var help=config.macros[m].guideText; if (!help) help=''; else help=' '+help;
s.options[s.length]=new Option(m,m+help);
s.options[s.length-1].title='\<\<'+m+help+'\>\>';
}
s.size=Math.min(s.length,15);
s.onclick=function(){ if (!this.value.length) return;
config.quickEdit.setSelection(this.button,'\<\<'+this.value+'\>\>');
Popup.remove(); return false;
};
s.onkeyup=config.quickEdit.keyup;
Popup.show();
s.focus();
return config.quickEdit.processed(event);"
>macro</a></html>
/%
|Name|QuickEdit_replace|
|Source|http://www.TiddlyTools.com/#QuickEdit_replace|
|Version|2.4.4|
|Author|Eric Shulman|
|License|see http://www.TiddlyTools.com/#QuickEditPlugin|
|Type|html|
|Requires|QuickEditPlugin|
|Description|quickedit - find/replace selected text with replacement text|
Usage: see http://www.TiddlyTools.com/#QuickEditToolbar
%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1"
title="find/replace selected text with replacement text"
onclick="var here=story.findContainingTiddler(this); if (!here) return false;
var e=config.quickEdit.getField(here);
var s=config.quickEdit.getSelection(e);
var p=Popup.create(this,null,'popup sticky smallform'); if (!p) return false;
var t=createTiddlyElement(p,'input'); t.onfocus=function(){this.select()};
t.value=s.length?s:'enter target text';
var r=createTiddlyElement(p,'input'); r.onfocus=function(){this.select()};
r.value='enter replacement text';
var tid=here.getAttribute('tiddler');
var b=createTiddlyElement(p,'button',null,null,'?',{tid:tid});
b.style.width='2em';
b.title='FIND/FIND NEXT target text';
b.onclick=function(ev) { /* FIND */
var e=story.getTiddlerField(this.getAttribute('tid'),'text');
if (!e||e.getAttribute('edit')!='text') return;
var t=this.previousSibling.previousSibling;
var tv=t.value.replace(/\\t/mg,'\t').unescapeLineBreaks();
e.focus();
if (e.setSelectionRange) { /* MOZ */
var newstart=e.value.indexOf(tv,e.selectionStart+1);
if (newstart==-1) newstart=e.value.indexOf(tv); /* wrap around */
if (newstart==-1) { alert('\u0022'+t.value+'\u0022 not found'); t.focus(); return; }
e.setSelectionRange(newstart,newstart+tv.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);
} else if (document.selection) { /* IE */
var range=document.selection.createRange();
if(range.parentElement()==e) {
range.collapse(false);
var found=false; try{found=range.findText(v,e.value.length,4)}catch(e){}
if (found) range.select();
else { alert('\u0022'+t.value+'\u0022 not found'); t.focus(); }
}
}
};
b=createTiddlyElement(p,'button',null,null,'=',{tid:tid});
b.style.width='2em';
b.title='REPLACE selected text';
b.onclick=function(ev) { /* REPLACE */
var e=story.getTiddlerField(this.getAttribute('tid'),'text');
if (!e||e.getAttribute('edit')!='text') return;
var t=this.previousSibling.previousSibling.previousSibling;
var r=this.previousSibling.previousSibling;
var rv=r.value.replace(/\\t/mg,'\t').unescapeLineBreaks();
if ( (e.selectionStart!==undefined && e.selectionEnd==e.selectionStart)
|| (document.selection && document.selection.createRange().text==''))
this.previousSibling.click(); /* no selection... do FIND first */
if ( (e.selectionStart!==undefined && e.selectionEnd==e.selectionStart)
|| (document.selection && document.selection.createRange().text==''))
{ t.focus(); return; } /* still no selection... goto target input */
e.focus(); replaceSelection(e,rv);
};
b=createTiddlyElement(p,'button',null,null,'+',{tid:tid});
b.style.width='2em';
b.title='REPLACE selected text AND FIND NEXT target text';
b.onclick=function(ev) { /* REPLACE and FIND NEXT */
this.previousSibling.click();
this.previousSibling.previousSibling.click();
};
b=createTiddlyElement(p,'button',null,null,'!',{tid:tid});
b.style.width='2em';
b.title='REPLACE ALL occurrences of target text';
b.onclick=function(ev) { /* REPLACE ALL */
var e=story.getTiddlerField(this.getAttribute('tid'),'text');
if (!e||e.getAttribute('edit')!='text') return;
var t=this.previousSibling.previousSibling.previousSibling.previousSibling.previousSibling;
var r=this.previousSibling.previousSibling.previousSibling.previousSibling;
var tv=t.value.replace(/\\t/mg,'\t').unescapeLineBreaks();
var rv=r.value.replace(/\\t/mg,'\t').unescapeLineBreaks();
if (!tv.length) { alert('Please enter the target text'); t.focus(); return; }
var m='This will replace all occurrences of:\n\n'+tv+'\n\nwith:\n\n'+rv+'\n\nAre you sure?';
if (!confirm(m)) { r.focus(); r.select(); return; }
e.value=e.value.replace(new RegExp(tv.escapeRegExp(),'gm'),rv);
e.focus(); e.select(); Popup.remove();
};
Popup.show();
if (!s.length) {t.focus();t.select()} else {r.focus();r.select()}
event.cancelBubble=true;if(event.stopPropagation)event.stopPropagation();return false;"
>replace</a></html>
/%
|Name|QuickEdit_sort|
|Source|http://www.TiddlyTools.com/#QuickEdit_sort|
|Version|2.4.3|
|Author|Eric Shulman|
|License|see http://www.TiddlyTools.com/#QuickEditPlugin|
|Type|html|
|Requires|QuickEditPlugin|
|Description|quickedit - sort lines of text|
Usage: see http://www.TiddlyTools.com/#QuickEditToolbar
%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1"
title="sort lines of text"
onclick="var p=Popup.create(this); if (!p) return false; p.className+=' sticky smallform';
var s=createTiddlyElement(p,'select'); s.button=this;
s.options[0]=new Option('select sort order...','');
s.options[s.length]=new Option('ascending','A');
s.options[s.length-1].title='ascending';
s.options[s.length]=new Option('descending','D');
s.options[s.length-1].title='descending';
s.size=s.length;
s.onclick=function(){ if (!this.value.length) return;
var e=config.quickEdit.getField(this.button); if (!e) return false;
var lines=config.quickEdit.getSelection(e).split('\n').sort();
if (this.value=='D') lines=lines.reverse();
replaceSelection(e,lines.join('\n'));
e.focus();
Popup.remove(); return false;
};
s.onkeyup=config.quickEdit.keyup;
Popup.show();
s.focus();
return config.quickEdit.processed(event);"
>sort</a></html>
/%
|Name|QuickEdit_split|
|Source|http://www.TiddlyTools.com/#QuickEdit_split|
|Version|2.4.3|
|Author|Eric Shulman|
|License|see http://www.TiddlyTools.com/#QuickEditPlugin|
|Type|html|
|Requires|QuickEditPlugin|
|Description|quickedit - move selection to new tiddler and insert link, embedded tiddler, or slider|
Usage: see http://www.TiddlyTools.com/#QuickEditToolbar
Based on ideas originally developed by YannPerrin
(http://yann.perrin.googlepages.com/twkd.html#easySlicer)
%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1"
title="move selection to new tiddler and insert link, embedded tiddler, or slider"
onclick="var p=Popup.create(this); if (!p) return false; p.className+=' sticky smallform';
p.style.whiteSpace='nowrap';
var i=createTiddlyElement(p,'input');
i.defaultValue='Enter a new tiddler title';
i.onfocus=function(){this.select()};
var s=createTiddlyElement(p,'select'); s.button=this;
s.options[0]=new Option('select type...','');
s.options[0].title='select split type';
s.options[1]=new Option('link','link');
s.options[1].title='replace with [[TiddlerName]]';
s.options[2]=new Option('embed','embed');
s.options[2].title='replace with \<\<tiddler TiddlerName\>\>';
s.options[3]=new Option('slider','slider');
s.options[3].title='replace with \<\<slider \u0022\u0022 [[TiddlerName]] [[label]] [[tooltip]]\>\>';
s.onchange=function(){
if (s.previousSibling.value==s.previousSibling.defaultValue)
{ alert('A tiddler title is required'); s.selectedIndex=0; s.previousSibling.focus(); return false; }
var tid=s.previousSibling.value;
if (store.tiddlerExists(tid) && !confirm(config.messages.overwriteWarning.format([tid])))
{ s.previousSibling.focus(); return false; }
switch(s.value) {
case 'link':
var newtxt='[['+tid+']]';
break;
case 'embed':
var newtxt='\<\<tiddler [['+tid+']]\>\>';
break;
case 'slider':
var label=prompt('Enter a slider label',tid);
if (!label) { Popup.remove(); return false; }
var tip=prompt('Enter a slider tooltip',label);
if (!tip) { Popup.remove(); return false; }
var newtxt='\<\<slider \u0022\u0022 [['+tid+']] [['+label+']] [['+tip+']]\>\>';
break;
}
var txt=config.quickEdit.getSelection(config.quickEdit.getField(this.button));
store.saveTiddler(tid,tid,txt,config.options.txtUserName,new Date(),[],{});
story.displayTiddler(story.findContainingTiddler(this.button),tid);
config.quickEdit.setSelection(this.button,newtxt);
Popup.remove(); return false;
};
Popup.show();
event.cancelBubble=true;if(event.stopPropagation)event.stopPropagation();return false;"
>split</a></html>
/%
!info
|Name|QuickNoteMod|
|Source|http://www.TiddlyTools.com/#QuickNote|
|Version|1.0.0|
|Author|Eric Shulman|
|Modder|Måns Mårtensson|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|transcluded|
|Requires||
|Overrides||
|Description|create quick notes using username+timestamp as tiddler titles|
Usage:
<<<
in tiddler content:
{{{
<<tiddler QuickNoteMod with: format tag tag tag tag...>>
}}}
in PageTemplate (added to story column):
{{{
<div id='displayArea'>
<div id='messageArea'></div>
<div macro='tiddler QuickNoteMod with: format'></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.
<<<
Example:
<<<
{{{
<<tiddler QuickNoteMod with: -YYYY0MM0DD0hh0mm0ss>>
}}}
<<tiddler QuickNoteMod with: -YYYY0MM0DD0hh0mm0ss>>
<<<
!end
!show
<html><nowiki><form class="quickNote" style="display:inline;margin:0;padding:0;white-space:nowrap;">tags:<br>
<input type=text name="tags" value="Note" title="tags for new tiddler" style="width:95%"><br>
<input type=button value="Save" style="width:26%" onclick="
var who=config.options.txtUserName;
var when=new Date();
var title=prompt('New note note title:\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;
var tags=this.form.tags.value.readBracketedList();
store.saveTiddler(title,title,text,who,when,tags,{});
story.displayTiddler(null,title);
"><br><textarea name="txt" rows="8" cols="60" style="width:95%"></textarea>
</form></html>
!end
%/<<tiddler {{'QuickNoteMod##'+('$1'=='$'+'1'?'info':'show')}} with: [[$1]]>>
/***
|Name:|QuickOpenTagPlugin|
|Description:|Changes tag links to make it easier to open tags as tiddlers|
|Version:|3.0.1 ($Rev: 3861 $)|
|Date:|$Date: 2008-03-08 10:53:09 +1000 (Sat, 08 Mar 2008) $|
|Source:|http://mptw.tiddlyspot.com/#QuickOpenTagPlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License:|http://mptw.tiddlyspot.com/#TheBSDLicense|
***/
//{{{
config.quickOpenTag = {
dropdownChar: (document.all ? "\u25bc" : "\u25be"), // the little one doesn't work in IE?
createTagButton: function(place,tag,excludeTiddler) {
// little hack so we can do this: <<tag PrettyTagName|RealTagName>>
var splitTag = tag.split("|");
var pretty = tag;
if (splitTag.length == 2) {
tag = splitTag[1];
pretty = splitTag[0];
}
var sp = createTiddlyElement(place,"span",null,"quickopentag");
createTiddlyText(createTiddlyLink(sp,tag,false),pretty);
var theTag = createTiddlyButton(sp,config.quickOpenTag.dropdownChar,
config.views.wikified.tag.tooltip.format([tag]),onClickTag);
theTag.setAttribute("tag",tag);
if (excludeTiddler)
theTag.setAttribute("tiddler",excludeTiddler);
return(theTag);
},
miniTagHandler: function(place,macroName,params,wikifier,paramString,tiddler) {
var tagged = store.getTaggedTiddlers(tiddler.title);
if (tagged.length > 0) {
var theTag = createTiddlyButton(place,config.quickOpenTag.dropdownChar,
config.views.wikified.tag.tooltip.format([tiddler.title]),onClickTag);
theTag.setAttribute("tag",tiddler.title);
theTag.className = "miniTag";
}
},
allTagsHandler: function(place,macroName,params) {
var tags = store.getTags(params[0]);
var filter = params[1]; // new feature
var ul = createTiddlyElement(place,"ul");
if(tags.length == 0)
createTiddlyElement(ul,"li",null,"listTitle",this.noTags);
for(var t=0; t<tags.length; t++) {
var title = tags[t][0];
if (!filter || (title.match(new RegExp('^'+filter)))) {
var info = getTiddlyLinkInfo(title);
var theListItem =createTiddlyElement(ul,"li");
var theLink = createTiddlyLink(theListItem,tags[t][0],true);
var theCount = " (" + tags[t][1] + ")";
theLink.appendChild(document.createTextNode(theCount));
var theDropDownBtn = createTiddlyButton(theListItem," " +
config.quickOpenTag.dropdownChar,this.tooltip.format([tags[t][0]]),onClickTag);
theDropDownBtn.setAttribute("tag",tags[t][0]);
}
}
},
// todo fix these up a bit
styles: [
"/*{{{*/",
"/* created by QuickOpenTagPlugin */",
".tagglyTagged .quickopentag, .tagged .quickopentag ",
" { margin-right:1.2em; border:1px solid #eee; padding:2px; padding-right:0px; padding-left:1px; }",
".quickopentag .tiddlyLink { padding:2px; padding-left:3px; }",
".quickopentag a.button { padding:1px; padding-left:2px; padding-right:2px;}",
"/* extra specificity to make it work right */",
"#displayArea .viewer .quickopentag a.button, ",
"#displayArea .viewer .quickopentag a.tiddyLink, ",
"#mainMenu .quickopentag a.tiddyLink, ",
"#mainMenu .quickopentag a.tiddyLink ",
" { border:0px solid black; }",
"#displayArea .viewer .quickopentag a.button, ",
"#mainMenu .quickopentag a.button ",
" { margin-left:0px; padding-left:2px; }",
"#displayArea .viewer .quickopentag a.tiddlyLink, ",
"#mainMenu .quickopentag a.tiddlyLink ",
" { margin-right:0px; padding-right:0px; padding-left:0px; margin-left:0px; }",
"a.miniTag {font-size:150%;} ",
"#mainMenu .quickopentag a.button ",
" /* looks better in right justified main menus */",
" { margin-left:0px; padding-left:2px; margin-right:0px; padding-right:0px; }",
"#topMenu .quickopentag { padding:0px; margin:0px; border:0px; }",
"#topMenu .quickopentag .tiddlyLink { padding-right:1px; margin-right:0px; }",
"#topMenu .quickopentag .button { padding-left:1px; margin-left:0px; border:0px; }",
"/*}}}*/",
""].join("\n"),
init: function() {
// we fully replace these builtins. can't hijack them easily
window.createTagButton = this.createTagButton;
config.macros.allTags.handler = this.allTagsHandler;
config.macros.miniTag = { handler: this.miniTagHandler };
config.shadowTiddlers["QuickOpenTagStyles"] = this.styles;
store.addNotification("QuickOpenTagStyles",refreshStyles);
}
}
config.quickOpenTag.init();
//}}}
/%
|Name|RefreshPageDisplay|
|Source|http://www.TiddlyTools.com/#RefreshPageDisplay|
|Version|1.0.0|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|script|
|Requires|InlineJavascriptPlugin|
|Overrides||
|Description|Refresh all tiddlers and page elements without restarting|
%/<script label="$1" title="Redisplay current page content WITHOUT RESTARTING!">
story.forEachTiddler(function(t,e){story.refreshTiddler(t,null,true)});
refreshDisplay();
return false;
</script><script>
if ("$1"=="$"+"1") place.lastChild.innerHTML="refresh page display";
</script>
/%
|Name|RefreshTiddler|
|Source|http://www.TiddlyTools.com/#RefreshTiddler|
|Version|0.0.0|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|script|
|Requires|InlineJavascriptPlugin|
|Overrides||
|Description|link that forces a refresh of the current tiddler|
usage: <<tiddler RefreshTiddler with: "label" "tooltip">>
where label and tooltip are optional and default to "refresh" and "redisplay tiddler content", respectively.
%/<script label="refresh" title="redisplay tiddler content">
var here=story.findContainingTiddler(place); if (!here) return false;
story.refreshTiddler(here.getAttribute("tiddler"),null,true);
return false;
</script><script>
if ("$1"!="$"+"1") place.lastChild.innerHTML="$1";
if ("$2"!="$"+"2") place.lastChild.title="$2";
</script>
/***
|Name:|RenameTagsPlugin|
|Description:|Allows you to easily rename or delete tags across multiple tiddlers|
|Version:|3.0 ($Rev: 5501 $)|
|Date:|$Date: 2008-06-10 23:11:55 +1000 (Tue, 10 Jun 2008) $|
|Source:|http://mptw.tiddlyspot.com/#RenameTagsPlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License|http://mptw.tiddlyspot.com/#TheBSDLicense|
Rename a tag and you will be prompted to rename it in all its tagged tiddlers.
***/
//{{{
config.renameTags = {
prompts: {
rename: "Rename the tag '%0' to '%1' in %2 tidder%3?",
remove: "Remove the tag '%0' from %1 tidder%2?"
},
removeTag: function(tag,tiddlers) {
store.suspendNotifications();
for (var i=0;i<tiddlers.length;i++) {
store.setTiddlerTag(tiddlers[i].title,false,tag);
}
store.resumeNotifications();
store.notifyAll();
},
renameTag: function(oldTag,newTag,tiddlers) {
store.suspendNotifications();
for (var i=0;i<tiddlers.length;i++) {
store.setTiddlerTag(tiddlers[i].title,false,oldTag); // remove old
store.setTiddlerTag(tiddlers[i].title,true,newTag); // add new
}
store.resumeNotifications();
store.notifyAll();
},
storeMethods: {
saveTiddler_orig_renameTags: TiddlyWiki.prototype.saveTiddler,
saveTiddler: function(title,newTitle,newBody,modifier,modified,tags,fields,clearChangeCount,created) {
if (title != newTitle) {
var tagged = this.getTaggedTiddlers(title);
if (tagged.length > 0) {
// then we are renaming a tag
if (confirm(config.renameTags.prompts.rename.format([title,newTitle,tagged.length,tagged.length>1?"s":""])))
config.renameTags.renameTag(title,newTitle,tagged);
if (!this.tiddlerExists(title) && newBody == "")
// dont create unwanted tiddler
return null;
}
}
return this.saveTiddler_orig_renameTags(title,newTitle,newBody,modifier,modified,tags,fields,clearChangeCount,created);
},
removeTiddler_orig_renameTags: TiddlyWiki.prototype.removeTiddler,
removeTiddler: function(title) {
var tagged = this.getTaggedTiddlers(title);
if (tagged.length > 0)
if (confirm(config.renameTags.prompts.remove.format([title,tagged.length,tagged.length>1?"s":""])))
config.renameTags.removeTag(title,tagged);
return this.removeTiddler_orig_renameTags(title);
}
},
init: function() {
merge(TiddlyWiki.prototype,this.storeMethods);
}
}
config.renameTags.init();
//}}}
/***
|Name|SaveAsPlugin|
|Source|http://www.TiddlyTools.com/#SaveAsPlugin|
|Documentation|http://www.TiddlyTools.com/#SaveAsPluginInfo|
|Version|2.5.1|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides||
|Description|Save current document to a different path/filename|
Adds 'save as' command to 'backstage' menu and {{{<<saveAs>>}}} macro (to embed command link wherever you like).
>//Note: This plugin replaces functionality previously provided by [[NewDocumentPlugin]], except for the HTML+CSS "snapshot" feature, which has been moved to a separate [[SnapshotPlugin]].//
!!!!!Documentation
<<<
see [[SaveAsPluginInfo]]
<<<
!!!!!Revisions
<<<
2009.04.30 [2.5.1] custom fields in CSV output
| Please see [[SaveAsPluginInfo]] for additional revision details |
2006.02.03 [1.0.0] Created.
<<<
!!!!!Code
***/
//{{{
version.extensions.SaveAsPlugin= {major: 2, minor: 5, revision: 1, date: new Date(2009,4,30)};
config.macros.saveAs = {
label: "save as...",
labelparam: "label:",
prompt: "Save current document to a different path/file",
promptparam: "prompt:",
filePrompt: "Please select or enter a target path/filename",
targetparam: "target:",
defaultFilename: "new.html",
filenameparam: "filename:",
currfilekeyword: "here",
typeparam: "type:",
type_TW: "tw", type_PS: "ps", type_TX: "tx", type_CS: "cs", type_NF: "nf", // file type tokens
type_map: { // map filetype param alternatives/abbreviations 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"
},
replaceparam: "replace",
mergeparam: "merge",
quietparam: "quiet",
openparam: "open",
askParam: "ask",
askMsg: "Enter a tag filter (use * for all tiddlers, 'none' for blank document)",
emptyParam: "none",
confirmmsg: "Found %0 tiddlers matching\n\n'%1'\n\nPress OK to proceed",
mergeprompt: "%0\nalready contains tiddler definitions.\n"
+"\nPress OK to add new/revised tiddlers to current file contents."
+"\nPress Cancel to completely replace file contents",
mergestatus: "Merged %0 new/revised tiddlers and %1 existing tiddlers",
okmsg: "%0 tiddlers written to %1",
failmsg: "An error occurred while creating %1",
filter: "",
handler: function(place,macroName,params) {
if (params[0] && params[0].substr(0,this.labelparam.length)==this.labelparam)
var label=params.shift().substr(this.labelparam.length);
if (params[0] && params[0].substr(0,this.promptparam.length)==this.promptparam)
var prompt=params.shift().substr(this.promptparam.length);
if (params[0] && params[0].substr(0,this.targetparam.length)==this.targetparam)
var target=params.shift().substr(this.targetparam.length);
if (params[0] && params[0].substr(0,this.filenameparam.length)==this.filenameparam)
var filename=params.shift().substr(this.filenameparam.length);
if (params[0] && params[0].substr(0,this.typeparam.length)==this.typeparam)
var filetype=this.type_map[params.shift().substr(this.typeparam.length).toLowerCase()];
var q=(params[0] && params[0]==this.quietparam); if (q) params.shift();
var o=(params[0] && params[0]==this.replaceparam); if (o) params.shift();
var m=(params[0] && params[0]==this.mergeparam); if (m) params.shift();
var a=(params[0] && params[0]==this.openparam); if (a) params.shift();
var btn=createTiddlyButton(place,label||this.label,prompt||this.prompt,
function(){config.macros.saveAs.go(
this.getAttribute('target'),
this.getAttribute('filename'),
this.getAttribute('filetype'),
this.getAttribute('filter'),
this.getAttribute('quiet')=="true",
this.getAttribute('overwrite')=="true",
this.getAttribute('merge')=="true",
this.getAttribute('autoopen')=="true"); return false;}
);
if (target) btn.setAttribute("target",target);
if (filename) btn.setAttribute("filename",filename);
btn.setAttribute("filetype",filetype||this.type_TW);
btn.setAttribute("filter",params.join(" "));
btn.setAttribute("quiet",q?"true":"false");
btn.setAttribute("overwrite",o?"true":"false");
btn.setAttribute("merge",m?"true":"false");
btn.setAttribute("autoopen",a?"true":"false");
},
go: function(target,filename,filetype,filter,quiet,overwrite,merge,autoopen) {
var cm=config.messages; // abbreviation
var cms=config.macros.saveAs; // abbreviation
if (window.location.protocol!="file:") // make sure we are local
{ displayMessage(cm.notFileUrlError); return; }
// get tidders, confirm filtered results
var tids=cms.selectTiddlers(filter);
if (tids===false) return; // cancelled by user
if (cms.filter!=cms.emptyParam && cms.filter.length && !quiet)
if (!confirm(cms.confirmmsg.format([tids.length,cms.filter]))) return;
// get target path/filename
if (!filetype) filetype=this.type_TW;
target=target||cms.getTarget(filename,filetype==this.type_TX?'txt':filetype==this.type_CS?'csv':'html');
if (!target) return; // cancelled by user
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 notes="";
var total={val:0};
var out=this.assembleFile(target,filetype,tids,notes,quiet,overwrite,merge,total);
var ok=saveFile(target,out);
if (ok && autoopen) {
if (!samefile) window.open(link).focus();
else { store.setDirty(false); window.location.reload(); }
}
if (!quiet || !(ok && autoopen))
displayMessage((ok?this.okmsg:this.failmsg).format([total.val,target]),link);
},
selectTiddlers: function(filter) {
var cms=config.macros.saveAs; // abbreviation
cms.filter=filter||"";
if (filter==cms.emptyParam) return [];
if (!filter||!filter.length) return store.getTiddlers("title");
// get filtered tiddlers
if (filter==config.macros.saveAs.askParam) {
filter=prompt(config.macros.saveAs.askMsg,"");
if (!filter) return false; // cancelled by user
cms.filter=filter=="*"?"":filter;
if (filter=="*") return store.getTiddlers("title");
}
return store.filterTiddlers("[tag["+filter+"]]");
},
getTarget: function(defName,defExt) {
var cms=config.macros.saveAs; // abbreviation
// 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
if (!defName||!defName.length) { // use current filename as default
var p=getLocalPath(window.location.href);
var s=p.lastIndexOf("/"); if (s==-1) s=p.lastIndexOf("\\");
if (s!=-1) defName=p.substr(s+1);
}
var defFilename=(defName||cms.defaultFilename).replace(/.html$/,'.'+defExt);
var target=cms.askForFilename(cms.filePrompt,newPath,defFilename,defExt);
if (!target) return; // cancelled by user
// if specified file does not include a path, assemble fully qualified path and filename
var slashpos=target.lastIndexOf("/"); if (slashpos==-1) slashpos=target.lastIndexOf("\\");
if (slashpos==-1) target=target+(defName||cms.defaultFilename).replace(/.html$/,'.'+defExt);
return target;
},
askForFilename: function(msg,path,file,defExt) {
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||'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()) }
}
else { // IE
try { // XP/Vista only
var s = new ActiveXObject('UserAccounts.CommonDialog');
s.Filter='All files|*.*|Text files|*.txt|HTML files|*.htm;*.html|';
s.FilterIndex=(defExt=='txt')?2: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 non-XP IE
}
return result;
},
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,quiet,overwrite,merge,total) {
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.SaveAsPlugin; var pver = v.major+"."+v.minor+"."+v.revision;
var headerargs=[src,title,subtitle,now,user,twver,"SaveAsPlugin",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) { alert(config.messages.cantSaveError); return; }
var posDiv = locateStoreArea(original);
if (!posDiv) { alert(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,quiet,overwrite,merge,fields);
var revised = header+convertUnicodeToUTF8(out.join("\n"))+footer;
// if full TW, insert page title and language attr, and reset MARKUP blocks as needed...
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,quiet,overwrite,merge,fields) {
// 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) {
if (overwrite) return out; // skip merge... forced overwrite
var text=loadFile(target);
if (text && text.length) {
var remoteStore=new TiddlyWiki();
if (remoteStore.importTiddlyWiki(convertUTF8ToUnicode(text))
&& (merge||confirm(this.mergeprompt.format([target])))) {
var existing=remoteStore.getTiddlers("title");
for (var i=0; i<existing.length; i++)
if (!titles.contains(existing[i].title))
out.push(this.formatItem(remoteStore,filetype,existing[i],url));
if (!quiet) displayMessage(this.mergestatus.format([tids.length,out.length-tids.length]));
}
}
}
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||"";
}
};
//}}}
//{{{
// automatically add saveAs to backstage
config.tasks.saveAs = {
text: "saveAs",
tooltip: config.macros.saveAs.prompt,
action: function(){ clearMessage(); config.macros.saveAs.go(); }
}
config.backstageTasks.splice(config.backstageTasks.indexOf("save")+1,0,"saveAs");
//}}}
/***
|Name:|SaveCloseTiddlerPlugin|
|Description:|Provides two extra toolbar commands, saveCloseTiddler and cancelCloseTiddler|
|Version:|3.0 ($Rev: 5502 $)|
|Date:|$Date: 2008-06-10 23:31:39 +1000 (Tue, 10 Jun 2008) $|
|Source:|http://mptw.tiddlyspot.com/#SaveCloseTiddlerPlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License:|http://mptw.tiddlyspot.com/#TheBSDLicense|
To use these you must add them to the tool bar in your EditTemplate
***/
//{{{
merge(config.commands,{
saveCloseTiddler: {
text: 'done/close',
tooltip: 'Save changes to this tiddler and close it',
handler: function(ev,src,title) {
var closeTitle = title;
var newTitle = story.saveTiddler(title,ev.shiftKey);
if (newTitle)
closeTitle = newTitle;
return config.commands.closeTiddler.handler(ev,src,closeTitle);
}
},
cancelCloseTiddler: {
text: 'cancel/close',
tooltip: 'Undo changes to this tiddler and close it',
handler: function(ev,src,title) {
// the same as closeTiddler now actually
return config.commands.closeTiddler.handler(ev,src,title);
}
}
});
//}}}
<<list filter [tag[Search]] [sort[+modified]]>>
//{{{
window.reportSearchResults=function(text,matches)
{
var title=config.macros.search.reportTitle
var q = config.options.chkRegExpSearch ? "/" : "'";
var body="\n";
// numbered list of links to matching tiddlers
body+="\n<<<";
for(var t=0;t<matches.length;t++) {
var date=config.options.chkSearchByDate?(matches[t].modified.formatString('YYYY.0MM.0DD 0hh:0mm')+" "):"";
body+="\n# "+date+"[["+matches[t].title+"]]";
}
body+="\n<<<\n";
// create/update the tiddler
var tiddler=store.getTiddler(title); if (!tiddler) tiddler=new Tiddler();
tiddler.set(title,body,config.options.txtUserName,(new Date()),"excludeLists excludeSearch");
store.addTiddler(tiddler); story.closeTiddler(title);
// use alternate "search again" label in <<search>> macro
var oldprompt=config.macros.search.label;
config.macros.search.label="search again";
// render/refresh tiddler
story.displayTiddler(null,title,1);
store.notify(title,true);
// restore standard search label
config.macros.search.label=oldprompt;
}
//}}}
/***
|Name|SearchOptionsPlugin|
|Source|http://www.TiddlyTools.com/#SearchOptionsPlugin|
|Documentation|http://www.TiddlyTools.com/#SearchOptionsPluginInfo|
|Version|2.6.1|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides|Story.prototype.search, TiddlyWiki.prototype.search, config.macros.search.onKeyPress|
|Description|extend core search function with additional user-configurable options|
Extend core search function with additional user-configurable options including generating a ''list of matching tiddlers'' instead of immediately displaying all matches.
!!!!!Documentation
>see [[SearchOptionsPluginInfo]]
!!!!!Configuration
<<<
<<option chkSearchTitles>> Search in titles
<<option chkSearchText>> Search in tiddler text
<<option chkSearchTags>> Search in tags
<<option chkSearchFields>> Search in data fields
<<option chkSearchShadows>> Search shadow tiddlers
<<option chkSearchTitlesFirst>> Show title matches first
<<option chkSearchByDate>> Sort matching tiddlers by date
<<option chkSearchList>> Show list of matches in [[SearchResults]]
<<option chkSearchIncremental>> Incremental (key-by-key) searching
<<<
!!!!!Revisions
<<<
2007.02.17 [2.6.1] added redefinition of config.macros.search.onKeyPress() to restore check to bypass key-by-key searching (i.e., when chkSearchIncremental==false), which had been unintentionally removed with v2.6.0
|please see [[SearchOptionsPluginInfo]] for additional revision details|
2005.10.18 [1.0.0] Initial Release
<<<
!!!!!Code
***/
//{{{
version.extensions.searchOptions = {major: 2, minor: 6, revision: 1, date: new Date(2007,2,17)};
if (config.options.chkSearchTitles===undefined) config.options.chkSearchTitles=true;
if (config.options.chkSearchText===undefined) config.options.chkSearchText=true;
if (config.options.chkSearchTags===undefined) config.options.chkSearchTags=true;
if (config.options.chkSearchFields===undefined) config.options.chkSearchFields=true;
if (config.options.chkSearchTitlesFirst===undefined) config.options.chkSearchTitlesFirst=false;
if (config.options.chkSearchList===undefined) config.options.chkSearchList=false;
if (config.options.chkSearchByDate===undefined) config.options.chkSearchByDate=false;
if (config.options.chkSearchIncremental===undefined) config.options.chkSearchIncremental=true;
if (config.options.chkSearchShadows===undefined) config.options.chkSearchShadows=false;
if (config.optionsDesc) {
config.optionsDesc.chkSearchTitles="Search in tiddler titles";
config.optionsDesc.chkSearchText="Search in tiddler text";
config.optionsDesc.chkSearchTags="Search in tiddler tags";
config.optionsDesc.chkSearchFields="Search in tiddler data fields";
config.optionsDesc.chkSearchShadows="Search in shadow tiddlers";
config.optionsDesc.chkSearchTitlesFirst="Search results show title matches first";
config.optionsDesc.chkSearchList="Search results show list of matching tiddlers";
config.optionsDesc.chkSearchByDate="Search results sorted by modification date ";
config.optionsDesc.chkSearchIncremental="Incremental searching";
} else {
config.shadowTiddlers.AdvancedOptions += "\n<<option chkSearchTitles>> Search in tiddler titles"
+"\n<<option chkSearchText>> Search in tiddler text"
+"\n<<option chkSearchTags>> Search in tiddler tags"
+"\n<<option chkSearchFields>> Search in tiddler data fields"
+"\n<<option chkSearchShadows>> Search in shadow tiddlers"
+"\n<<option chkSearchTitlesFirst>> Search results show title matches first"
+"\n<<option chkSearchList>> Search results show list of matching tiddlers"
+"\n<<option chkSearchByDate>> Search results sorted by modification date"
+"\n<<option chkSearchIncremental>> Incremental searching";
}
if (config.macros.search.reportTitle==undefined)
config.macros.search.reportTitle="SearchResults";
config.macros.search.onKeyPress = function(e)
{
if(!e) var e = window.event;
switch(e.keyCode)
{
case 13: // Ctrl-Enter
case 10: // Ctrl-Enter on IE PC
config.macros.search.doSearch(this);
break;
case 27: // Escape
this.value = "";
clearMessage();
break;
}
if (config.options.chkSearchIncremental) {
if(this.value.length > 2)
{
if(this.value != this.getAttribute("lastSearchText"))
{
if(config.macros.search.timeout)
clearTimeout(config.macros.search.timeout);
var txt = this;
config.macros.search.timeout = setTimeout(function() {config.macros.search.doSearch(txt);},500);
}
}
else
{
if(config.macros.search.timeout)
clearTimeout(config.macros.search.timeout);
}
}
}
//}}}
//{{{
Story.prototype.search = function(text,useCaseSensitive,useRegExp)
{
highlightHack = new RegExp(useRegExp ? text : text.escapeRegExp(),useCaseSensitive ? "mg" : "img");
var matches = store.search(highlightHack,config.options.chkSearchByDate?"modified":"title","excludeSearch");
if (config.options.chkSearchByDate) matches=matches.reverse(); // most recent changes first
var q = useRegExp ? "/" : "'";
clearMessage();
if (!matches.length) {
if (config.options.chkSearchList) discardSearchResults();
displayMessage(config.macros.search.failureMsg.format([q+text+q]));
} else {
if (config.options.chkSearchList)
reportSearchResults(text,matches);
else {
var titles = []; for(var t=0; t<matches.length; t++) titles.push(matches[t].title);
this.closeAllTiddlers(); story.displayTiddlers(null,titles);
displayMessage(config.macros.search.successMsg.format([matches.length, q+text+q]));
}
}
highlightHack = null;
}
TiddlyWiki.prototype.search = function(searchRegExp,sortField,excludeTag)
{
var candidates = this.reverseLookup("tags",excludeTag,false,sortField);
// scan for matching titles first...
var results = [];
if (config.options.chkSearchTitles) {
for(var t=0; t<candidates.length; t++)
if(candidates[t].title.search(searchRegExp)!=-1)
results.push(candidates[t]);
if (config.options.chkSearchShadows)
for (var t in config.shadowTiddlers)
if ((t.search(searchRegExp)!=-1) && !store.tiddlerExists(t))
results.push((new Tiddler()).assign(t,config.shadowTiddlers[t]));
}
// then scan for matching text, tags, or field data
for(var t=0; t<candidates.length; t++) {
if (config.options.chkSearchText && candidates[t].text.search(searchRegExp)!=-1)
results.pushUnique(candidates[t]);
if (config.options.chkSearchTags && candidates[t].tags.join(" ").search(searchRegExp)!=-1)
results.pushUnique(candidates[t]);
if (config.options.chkSearchFields && store.forEachField!=undefined) // requires TW2.1 or above
store.forEachField(candidates[t],
function(tid,field,val) { if (val.search(searchRegExp)!=-1) results.pushUnique(candidates[t]); },
true); // extended fields only
}
// then check for matching text in shadows
if (config.options.chkSearchShadows)
for (var t in config.shadowTiddlers)
if ((config.shadowTiddlers[t].search(searchRegExp)!=-1) && !store.tiddlerExists(t))
results.pushUnique((new Tiddler()).assign(t,config.shadowTiddlers[t]));
// if not 'titles first', or sorting by modification date, re-sort results to so titles, text, tag and field matches are mixed together
if(!sortField) sortField = "title";
var bySortField=function (a,b) {if(a[sortField] == b[sortField]) return(0); else return (a[sortField] < b[sortField]) ? -1 : +1; }
if (!config.options.chkSearchTitlesFirst || config.options.chkSearchByDate) results.sort(bySortField);
return results;
}
// REPORT GENERATOR
if (!window.reportSearchResults) window.reportSearchResults=function(text,matches)
{
var title=config.macros.search.reportTitle
var q = config.options.chkRegExpSearch ? "/" : "'";
var body="\n";
// summary: nn tiddlers found matching '...', options used
body+="''"+config.macros.search.successMsg.format([matches.length,q+"{{{"+text+"}}}"+q])+"''\n";
body+="^^//searched in:// ";
body+=(config.options.chkSearchTitles?"''titles'' ":"");
body+=(config.options.chkSearchText?"''text'' ":"");
body+=(config.options.chkSearchTags?"''tags'' ":"");
body+=(config.options.chkSearchFields?"''fields'' ":"");
body+=(config.options.chkSearchShadows?"''shadows'' ":"");
if (config.options.chkCaseSensitiveSearch||config.options.chkRegExpSearch) {
body+=" //with options:// ";
body+=(config.options.chkCaseSensitiveSearch?"''case sensitive'' ":"");
body+=(config.options.chkRegExpSearch?"''text patterns'' ":"");
}
body+="^^";
// numbered list of links to matching tiddlers
body+="\n<<<";
for(var t=0;t<matches.length;t++) {
var date=config.options.chkSearchByDate?(matches[t].modified.formatString('YYYY.0MM.0DD 0hh:0mm')+" "):"";
body+="\n# "+date+"[["+matches[t].title+"]]";
}
body+="\n<<<\n";
// open all matches button
body+="<html><input type=\"button\" href=\"javascript:;\" ";
body+="onclick=\"story.displayTiddlers(null,["
for(var t=0;t<matches.length;t++)
body+="'"+matches[t].title.replace(/\'/mg,"\\'")+"'"+((t<matches.length-1)?", ":"");
body+="],1);\" ";
body+="accesskey=\"O\" ";
body+="value=\"open all matching tiddlers\"></html> ";
// discard search results button
body+="<html><input type=\"button\" href=\"javascript:;\" ";
body+="onclick=\"story.closeTiddler('"+title+"'); store.deleteTiddler('"+title+"'); store.notify('"+title+"',true);\" ";
body+="value=\"discard "+title+"\"></html>";
// search again
body+="\n\n----\n";
body+="<<search \""+text+"\">>\n";
body+="<<option chkSearchTitles>>titles ";
body+="<<option chkSearchText>>text ";
body+="<<option chkSearchTags>>tags";
body+="<<option chkSearchFields>>fields";
body+="<<option chkSearchShadows>>shadows";
body+="<<option chkCaseSensitiveSearch>>case-sensitive ";
body+="<<option chkRegExpSearch>>text patterns";
body+="<<option chkSearchByDate>>sort by date";
// create/update the tiddler
var tiddler=store.getTiddler(title); if (!tiddler) tiddler=new Tiddler();
tiddler.set(title,body,config.options.txtUserName,(new Date()),"excludeLists excludeSearch temporary");
store.addTiddler(tiddler); story.closeTiddler(title);
// use alternate "search again" label in <<search>> macro
var oldprompt=config.macros.search.label;
config.macros.search.label="search again";
// render/refresh tiddler
story.displayTiddler(null,title,1);
store.notify(title,true);
// restore standard search label
config.macros.search.label=oldprompt;
}
if (!window.discardSearchResults) window.discardSearchResults=function()
{
// remove the tiddler
story.closeTiddler(config.macros.search.reportTitle);
store.deleteTiddler(config.macros.search.reportTitle);
}
//}}}
//{{{
window.reportSearchResults=function(text,matches)
{
var title=config.macros.search.reportTitle
var q = config.options.chkRegExpSearch ? "/" : "'";
var body="\n";
// numbered list of links to matching tiddlers
body+="\n<<<";
for(var t=0;t<matches.length;t++) {
var date=config.options.chkSearchByDate?(matches[t].modified.formatString('YYYY.0MM.0DD 0hh:0mm')+" "):"";
body+="\n# "+date+"[["+matches[t].title+"]]";
}
body+="\n<<<\n";
// create/update the tiddler
var tiddler=store.getTiddler(title); if (!tiddler) tiddler=new Tiddler();
tiddler.set(title,body,config.options.txtUserName,(new Date()),"excludeLists excludeSearch");
store.addTiddler(tiddler); story.closeTiddler(title);
// use alternate "search again" label in <<search>> macro
var oldprompt=config.macros.search.label;
config.macros.search.label="search again";
// render/refresh tiddler
story.displayTiddler(null,title,1);
store.notify(title,true);
// restore standard search label
config.macros.search.label=oldprompt;
}
//}}}
//{{{
window.reportSearchResults=function(text,matches)
{
var title=config.macros.search.reportTitle
var q = config.options.chkRegExpSearch ? "/" : "'";
var body="\n";
// numbered list of links to matching tiddlers
body+="\n<<<";
for(var t=0;t<matches.length;t++) {
var date=config.options.chkSearchByDate?(matches[t].modified.formatString('YYYY.0MM.0DD 0hh:0mm')+" "):"";
body+="\n# "+date+"[["+matches[t].title+"]]";
}
body+="\n<<<\n";
// create/update the tiddler
var tiddler=store.getTiddler(title); if (!tiddler) tiddler=new Tiddler();
tiddler.set(title,body,config.options.txtUserName,(new Date()),"excludeLists excludeSearch");
store.addTiddler(tiddler); story.closeTiddler(title);
// render/refresh tiddler
story.displayTiddler(null,title,1);
store.notify(title,true);
// restore standard search label
config.macros.search.label=oldprompt;
}
//}}}
<<<
# [[Acknowledgements & license]]
# [[MainMenu]]
# [[MasterTopics]]
# [[New Project Test]]
# [[NoteNote]]
# [[NoteViewTemplate]]
# [[NotesTab]]
# [[PM4NoteStorm]]
# [[Projects]]
# [[ProjectsTab]]
# [[ProjectsViewTemplate]]
# [[Some tweaks to NoteStorm]]
# [[TaggerPlugin]]
# [[TagsDB]]
# [[TheProjectManager]]
# [[TiddlerMakeFile]]
# [[TiddlyWiki]]
# [[TopMenu]]
# [[TopMenu2]]
# [[TopicNote]]
# [[Topics]]
# [[TopicsTemplate1]]
# [[TopicsTemplate2]]
# [[TopicsViewTemplate]]
# [[ViewTemplate]]
# [[statusViewTemplate]]
# [[test]]
<<<
/***
Quick and dirtly palette switcher for 2.1.x
<<selectPalette>>
WARNING this will overwrite your ColorPalette tiddler.
***/
//{{{
merge(config.macros,{
setPalette: {
handler: function(place,macroName,params,wikifier,paramString,tiddler) {
var paletteName = params[0] ? params[0] : tiddler.title;
createTiddlyButton(place,"apply","Apply this palette",function(e) {
config.macros.selectPalette.updatePalette(tiddler.title);
return false;
});
}
},
selectPalette: {
handler: function(place,macroName,params,wikifier,paramString,tiddler) {
createTiddlyDropDown(place,this.onPaletteChange,this.getPalettes());
},
getPalettes: function() {
var result = [
{caption:"-select palette-", name:""},
{caption:"(Default)", name:"(default)"}
];
var tagged = store.getTaggedTiddlers("palette","title");
for(var t=0; t<tagged.length; t++)
result.push({caption:tagged[t].title, name:tagged[t].title});
return result;
},
onPaletteChange: function(e) {
config.macros.selectPalette.updatePalette(this.value);
return true;
},
updatePalette: function(title) {
if (title != "") {
store.deleteTiddler("ColorPalette");
if (title != "(default)")
store.saveTiddler("ColorPalette","ColorPalette",store.getTiddlerText(title),
config.options.txtUserName,undefined,"");
this.refreshPalette();
if(config.options.chkAutoSave)
saveChanges(true);
}
},
refreshPalette: function() {
config.macros.refreshDisplay.onClick();
}
}
});
//}}}
/***
|Name|SetUserNamePlugin|
|Source|http://www.TiddlyTools.com/#SetUserNamePlugin|
|Version|1.0.0|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides||
|Description|prompt for TiddlyWiki username|
!!!!!Usage
<<<
{{{
<<setUserName force>>
}}}
This macro prompts for a new username if the default username ("YourName") is currently set. Use optional 'force' keyword to trigger a prompt even if username has already been set.
If you are using the default (shadow) EditTemplate definition, it will be updated to invoke this macro, via the following template syntax:
{{{
<span macro='setUserName'></span>
}}}
so that whenever a user attempts to edit/create a tiddler AND have not yet entered a username, they will be automatically prompted to enter a new username. If you are using a customized EditTemplate, you will need to edit it yourself to add the above.
<<<
!!!!!Revisions
<<<
2006.12.01 [1.0.0] initial release - converted from SetUserName inline script
<<<
!!!!!Code
***/
//{{{
version.extensions.SetUserNamePlugin= {major: 1, minor: 0, revision: 0, date: new Date(2006,12,1)};
config.macros.setUserName = {
msg: "Skriv venligst dit brugernavn",
handler: function(place,macroName,params) {
// only prompt when needed or forced
var force=params[0]&¶ms[0].toLowerCase()=="force";
if (!force && (readOnly || config.options.txtUserName!="DitNavn")) return;
var opt="txtUserName";
var who=prompt(this.msg,config.options[opt]);
if (!who||!who.trim().length) return; // cancelled by user
config.options[opt]=who;
saveOptionCookie(opt);
config.macros.option.propagateOption(opt,"value",config.options[opt],"input");
}
}
// add trigger to default shadow EditTemplate (custom templates: add this by hand)
config.shadowTiddlers.EditTemplate+="<span macro='setUserName'></span>";
//}}}
/%
!info
|Name|ShowImage|
|Source|http://www.TiddlyTools.com/#ShowImage|
|Version|1.0.1|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|transclusion|
|Requires||
|Description|display attached tiddler image without supporting plugin|
Usage:
<<<
# First, use [[AttachFilePlugin]] to create tiddlers containing base64-encoded image data with a fallback remote URL reference.
# You can then discard the plugin and associated supporting tiddlers ([[AttachFileMIMETypes]], [[AttachFilePluginFormatters]]), leaving only the attachment tiddlers (plus this tiddler, ShowImage, of course).
# Use the following syntax to display the attached images without any plugins:
{{{
<<tiddler ShowImage with: [[TiddlerName]] "tooltip" "width">>
}}}
where:
*''~TiddlerName''<br>title of the attachment tiddler to be displayed
*''tooltip'' //(optional)//<br>mouseover help text for the image (default=attachment title)
*''width'' //(optional)//<br>CSS width measurement - resizes image height proportionally (default=auto)
Note: the fallback remote URL will be used if encoded data is not attached or you are using InternetExplorer, which does not currently support the data:// URI.
<<<
Example:
<<<
{{{
<<tiddler ShowImage with: [[AttachFileSample]] "meow!" "30px">>
}}}
<<tiddler ShowImage with: [[AttachFileSample]] "meow!" "30px">>
<<<
!end
!show
<html><img src="missing.jpg" title="$2" style="width:$3" /></html><<tiddler {{
var src=store.getTiddlerText("$1##data");
if (!src||config.browser.isIE)
src=store.getTiddlerText("$1##url","missing.jpg");
place.lastChild.firstChild.src=src;
}}>>
!end
%/<<tiddler {{"ShowImage##"+("$1"=="$"+"1"?"info":"show")}} with:
[[$1]]
{{"$2"=="$"+"2"?"$1" :"$2"}}
{{"$3"=="$"+"3"?"auto":"$3"}}
>>
/%
!info
|Name|ShowPopup|
|Source|http://www.TiddlyTools.com/#ShowPopup|
|Version|1.1.0|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|transcluded html|
|Requires||
|Overrides||
|Description|display tiddler content in a TiddlyWiki popup panel|
Usage:
<<<
{{{
<<tiddler ShowPopup with: TiddlerName label tooltip buttonClass width popupClass>>
}}}
*{{{TiddlerName}}} is the title of the tiddler whose content is to be displayed
*{{{label}}} is the text of the popup command
*{{{tooltip}}} is the mouseover help text for the command
*{{{buttonClass}}} is a CSS classname applied to the command text (default=button)
*{{{width}}} is the width of the popup (using CSS measurements, default=auto)
*{{{popupClass}}} is a CSS classname applied to the popup panel (default=none). Use 'sticky' for persistent popups (requires StickyPopupPlugin)
<<<
Example:
<<<
{{{
<<tiddler ShowPopup with: ShowPopup [[Try this]] [[show this tiddler in a popup]]>>
}}}
<<tiddler ShowPopup with: ShowPopup [[Try this]] [[show this tiddler in a popup]]>>
<<<
!end
!show
<html><hide linebreaks>
<a href="javascript:;" class="$4" title="$3" onclick="
var p=Popup.create(this);if(!p)return;p.className+=' $6';var t=store.getTiddlerText('$1','');
var d=createTiddlyElement(p,'div');var s=d.style;s.whiteSpace='normal';s.width='$5';s.padding='2px';wikify(t,d);
Popup.show();event.cancelBubble=true;if(event.stopPropagation)event.stopPropagation();return(false);
">$2</a></html>
!end
%/<<tiddler {{'ShowPopup##'+('$1'=='$'+'1'?'info':'show')}} with: [[$1]] [[$2]] [[$3]] [[$4]] [[$5]] [[$6]]>>
<<tiddler ShowSimilarTagsToThis with: "CSS" limit>>
----
<script>
var out=[]; var similar={}; var rank=[];
var here=story.findContainingTiddler(place);
var title='$1'!='$'+'1'?'$1':here?here.getAttribute('tiddler'):'';
var limit='$2'!='$'+'2'?'$2':1;
var tid=store.getTiddler(title); if (!tid) return;
var tids=store.reverseLookup('tags','excludeLists'); // get all tiddlers (including from IncludePlugin)
for (var i=0; i<tids.length; i++) { var t=tids[i];
if (t.title==tid.title) continue;
var tags=[]; for (var j=0; j<t.tags.length; j++)
if (tid.tags.contains(t.tags[j])) tags.push(t.tags[j]);
if (tags.length >= limit) {
similar[tids[i].title]=tags;
if (!rank[tags.length]) rank[tags.length]=new Array();
rank[tags.length].push(tids[i].title);
}
}
for (var r=rank.length-1; r>=0; r--) { if (!rank[r]) continue;
out.push('*%0 shared tags:'.format([r,rank[r].length]));
for (var t=0; t<rank[r].length; t++)
out.push('##[[%0]] ~~("""%1""")~~'.format([rank[r][t],similar[rank[r][t]].join(', ')]));
}
return out.join('\n');
</script>
/***
|Name|ShowUpdatesPlugin|
|Created by|SaqImtiaz|
|Version|0.2 |
|Requires|~TW2.x|
!!!Description:
Allows you to list tiddlers that have changed since the users last visit. You can list only all changed tiddlers, or filter them to only show tiddlers that have or do not have a specific tag. By default a simple list of the titles of changed tiddlers is created. However, using an extremely versatile syntax you can provide a custom template for the generated text.
!!!Examples:
[[ShowUpdatesDocs]]
!!!Installation:
Copy the contents of this tiddler to your TW, tag with systemConfig, save and reload your TW.
!!!Syntax:
{{{<<showUpdates>>}}}
additional optional params:
{{{<showUpdates excludeTag:TagToExclude onlyTag:TagToList maxEntries:10 write:CustomWriteParameter >>}}}
excludeTag: ~TagToExclude
onlyTag: ~TagToList
maxEntries: max number of entries displayed when there are no updates. (default is 10, which can be changed in the config.macros.showUpdates.settings part of the code)
write: if a write parameter is not provided, an un-numbered list of the updates is generated. Alternatively, you can specify a custom 'template' for the text generated. The syntax for the write parameter is identical to that of the forEachTiddler macro. Additonal documentation on this syntax will be provided soon.
Some of the variables available in the write parameter are 'index', 'count' and 'lastVisit' where lastVisit is the date of the last visit in the format YYYYMMDDHHMM. Also areUpdates is a boolean that is true if there are new updates since the users last visit.
!!!To Do:
*refactor code to facilitate translations
*a streamlined version without the custom write parameter
!!!Code
***/
//{{{
window.lewcidLastVisit = '';
window.old_lewcid_whatsnew_restart = window.restart;
window.restart = function()
{
if(config.options.txtLastVisit)
lewcidLastVisit= config.options.txtLastVisit;
config.options.txtLastVisit = (new Date()).convertToYYYYMMDDHHMM();
saveOptionCookie('txtLastVisit');
window.old_lewcid_whatsnew_restart();
}
TiddlyWiki.prototype.lewcidGetTiddlers = function(field,excludeTag,includeTag,updatesOnly)
{
var results = [];
this.forEachTiddler(function(title,tiddler)
{
if(excludeTag == undefined || !tiddler.isTagged(excludeTag))
if(includeTag == undefined || tiddler.isTagged(includeTag))
if ( updatesOnly == false || tiddler.modified.convertToYYYYMMDDHHMM()>lewcidLastVisit)
results.push(tiddler);
});
if(field)
results.sort(function (a,b) {if(a[field] == b[field]) return(0); else return (a[field] < b[field]) ? -1 : +1; });
return results;
}
config.macros.showUpdates={};
config.macros.showUpdates.settings =
{
maxEntries: 10 //max items to show, if there are no updates since last visit
}
config.macros.showUpdates.handler = function(place,macroName,params,wikifier,paramString,tiddler)
{
var args = paramString.parseParams("list",null,true);
var write = getParam(args, "write", undefined);
var onlyTag = getParam(args, "onlyTag", undefined);
var excludeTag = getParam(args, "excludeTag", undefined);
var sortBy = "modified";
var maxEntries = getParam(args,"maxEntries",this.settings.maxEntries);
if (lewcidLastVisit)
{var tiddlers = store.lewcidGetTiddlers(sortBy,excludeTag,onlyTag,true);
var areUpdates = tiddlers.length>0? true:false;}
if (!lewcidLastVisit)
{var countLine = "!!Recent Updates:";
var tiddlers = store.lewcidGetTiddlers(sortBy,excludeTag,onlyTag,false);
var areUpdates = false;}
else if (tiddlers.length == 0)
{var countLine = "!!@@color:red;No new updates@@ since your last visit. @@color:#999;font-size:70%;" + (Date.convertFromYYYYMMDDHHMM(lewcidLastVisit)).formatString(" (DD/MM/YY)") + "@@\n!!Recent Updates:";
var tiddlers = store.lewcidGetTiddlers(sortBy,excludeTag,onlyTag,false);}
else
{var countLine ="!!@@color:red;"+ tiddlers.length + "@@ new " + (tiddlers.length==1?"update":"updates") + " since your last visit: @@color:#999;font-size:70%;" + (Date.convertFromYYYYMMDDHHMM(lewcidLastVisit)).formatString(" (DD/MM/YY)") + "@@";}
tiddlers = tiddlers.reverse();
var lastVisit = lewcidLastVisit? lewcidLastVisit:undefined;
var count = areUpdates == true? tiddlers.length : maxEntries;
var sp = createTiddlyElement(place,"span","showUpdates");
if (write==undefined)
{
wikify(countLine,sp);
var list = createTiddlyElement(sp,"ul");
for (var i = 0; i < count; i++)
{
var tiddler = tiddlers[i];
createTiddlyLink(createTiddlyElement(list,"li"), tiddler.title, true);
}
}
else
{
var list = '';
for (var index = 0; index < count; index++) {
var tiddler = tiddlers[index];
list += eval(write); }
wikify(list, sp);
}
}
//}}}
{{transparent{<<gotoTiddler
inputstyle:"width:85%;font-size:100%;border:1px inset #999;"
liststyle:"font-size:100%;"
search
>>{{span{<script>
place.style.display=readOnly?'none':'inline';
</script><<tiddler NewNote>>}}}<<permaview>>+++[More]<<closeAll>><br><<newTiddler>><br><<newJournal "DD MMM YYYY" "journal">><br><<tiddler NewProjectTemplate>><br><<saveChanges>><br>[[Edit ColorPalette|ColorPaletteEditor]]===<<tiddler [[Edit online]]>><<selectPalette>><<slider chkSliderOptionsPanel OptionsPanel "options »" "Change TiddlyWiki advanced options">>
@@padding:0.6em;<<slider chkSliderSidebarTabs SliderSidebarTabs 'indexes »'>>@@
an astonishingly simple way to organize anything
@@font-size: 1.5em;''~PStorm''@@
Background: #fff
Foreground: #000
PrimaryPale: #bbccdd
PrimaryLight: #224455
PrimaryMid: #224455
PrimaryDark: #014
SecondaryPale: #445566
SecondaryLight: #445566
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #ccccee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
<<tabs txtMainTab "Timeline" "Timeline" TabTimeline "All" "All tiddlers" TabAll "Tags" "All tags" TabTags "More" "More lists" TabMore>>
/***
|Name|SnapshotPlugin|
|Source|http://www.TiddlyTools.com/#SnapshotPlugin|
|Documentation|http://www.TiddlyTools.com/#SnapshotPluginInfo|
|Version|1.3.0|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|save or print HTML+CSS image of rendered document content|
This plugin provides a macro as well as tiddler toolbar commands to create a file or browser window containing the //rendered// CSS-and-HTML that is currently being displayed for selected elements of the current document.
!!!!!Documentation
>see [[SnapshotPluginInfo]]
!!!!!Configuration
<<<
<<option chkSnapshotHTMLOnly>> output HTML only (omit CSS)
<<<
!!!!!Revisions
<<<
2009.10.12 1.3.0 added multi-file story snapshot
|please see [[SnapshotPluginInfo]] for additional revision details|
2008.04.21 1.0.0 initial release - derived from [[NewDocumentPlugin]] with many improvements...
<<<
!!!!!Code
***/
//{{{
version.extensions.SnapshotPlugin= {major: 1, minor: 3, revision: 0, date: new Date(2009,10,12)};
if (config.options.chkSnapshotHTMLOnly===undefined)
config.options.chkSnapshotHTMLOnly=false;
config.macros.snapshot = {
snapLabel: "save a snapshot",
printLabel: "print a snapshot",
snapPrompt: "save an HTML image",
printPrompt: "print an HTML image",
hereID: "here",
viewerID: "viewer",
storyID: "story",
allID: "all",
askID: "ask",
askTiddlerID: "askTiddler",
askDOMID: "askDOM",
askMsg: "select an element...",
hereItem: "tiddler: '%0'",
viewerItem: "tiddler: '%0' (content only)",
storyItem: "story column (one file)",
storyFilesItem: "story column (multiple files)",
allItem: "entire document",
tiddlerItem: "select a tiddler...",
IDItem: "select a DOM element by ID...",
HTMLItem: "[%0] output HTML only (omit CSS)",
fileMsg: "select or enter a target path/filename",
defaultFilename: "snapshot.html",
okmsg: "snapshot written to %0",
failmsg: "An error occurred while creating %0",
handler: function(place,macroName,params,wikifier,paramString,tiddler) {
var printing=params[0]&¶ms[0]=="print"; if (printing) params.shift();
params = paramString.parseParams("anon",null,true,false,false);
var id=getParam(params,"id","here");
var label=getParam(params,"label",printing?this.printLabel:this.snapLabel);
var prompt=getParam(params,"prompt",printing?this.printPrompt:this.snapPrompt);
var btn=createTiddlyButton(place,label,prompt, function(ev){
this.setAttribute("snapID",this.getAttribute("startID"));
config.macros.snapshot.go(this,ev)
});
btn.setAttribute("startID",id);
btn.setAttribute("snapID",id);
btn.setAttribute("printing",printing?"true":"false");
btn.setAttribute("HTMLOnly",config.options.chkSnapshotHTMLOnly?"true":"false");
},
go: function(here,ev) {
var cms=config.macros.snapshot; // abbreviation
var id=here.getAttribute("snapID");
var printing=here.getAttribute("printing")=="true";
var HTMLOnly=here.getAttribute("HTMLOnly")=="true";
if (id==cms.askID||id==cms.askTiddlerID||id==cms.askDOMID) {
cms.askForID(here,ev);
} else if (id==cms.storyID) {
story.forEachTiddler(function(t,e) {
var out=cms.getsnap(e,e.id,printing,HTMLOnly);
if (printing) cms.printsnap(out);
else cms.savesnap(out,e.getAttribute('tiddler')+'.html');
});
} else {
if (id==cms.allID) id="contentWrapper";
var snapElem=document.getElementById(id);
if (id==cms.hereID || id==cms.viewerID)
var snapElem=story.findContainingTiddler(here);
if (snapElem && hasClass(snapElem,"tiddler") && (id==cms.viewerID || HTMLOnly)) {
// find viewer class element within tiddler element
var nodes=snapElem.getElementsByTagName("*");
for (var i=0; i<nodes.length; i++)
if (hasClass(nodes[i],"viewer")) { snapElem=nodes[i]; break; }
}
if (!snapElem) // not in a tiddler or no viewer element or unknown ID
{ e.cancelBubble=true; if(e.stopPropagation)e.stopPropagation(); return(false); }
// write or print snapshot
var out=cms.getsnap(snapElem,id,printing,HTMLOnly);
if (printing) cms.printsnap(out); else cms.savesnap(out);
}
return false;
},
askForID: function(here,ev) {
var ev = ev ? ev : window.event;
var cms=config.macros.snapshot; // abbreviation
var id=here.getAttribute("snapID");
var indent='\xa0\xa0\xa0\xa0';
var p=Popup.create(here); if (!p) return false; p.className+=' sticky smallform';
var s=createTiddlyElement(p,'select'); s.button=here;
if (id==cms.askID) {
s.options[s.length]=new Option(cms.askMsg,cms.askID);
var tid=story.findContainingTiddler(here);
if(tid) {
var title=tid.getAttribute("tiddler");
if (here.getAttribute("HTMLOnly")!="true")
s.options[s.length]=new Option(indent+cms.hereItem.format([title]),cms.hereID);
s.options[s.length]=new Option(indent+cms.viewerItem.format([title]),cms.viewerID);
}
s.options[s.length]=new Option(indent+cms.tiddlerItem,cms.askTiddlerID);
s.options[s.length]=new Option(indent+cms.IDItem,cms.askDOMID);
s.options[s.length]=new Option(indent+cms.storyItem,"tiddlerDisplay");
s.options[s.length]=new Option(indent+cms.storyFilesItem,cms.storyID);
s.options[s.length]=new Option(indent+cms.allItem,"contentWrapper");
}
if (id==cms.askDOMID) {
s.options[s.length]=new Option(cms.IDItem,cms.askDOMID);
var elems=document.getElementsByTagName("*");
var ids=[];
for (var i=0;i<elems.length;i++)
if (elems[i].id.length && elems[i].className!="animationContainer")
ids.push(elems[i].id);
ids.sort();
for (var i=0;i<ids.length;i++) s.options[s.length]=new Option(indent+ids[i],ids[i]);
}
if (id==cms.askTiddlerID) {
s.options[s.length]=new Option(cms.tiddlerItem,cms.askTiddlerID);
var elems=document.getElementsByTagName("div");
var ids=[];
for (var i=0;i<elems.length;i++) { var id=elems[i].id;
if (id.length && id.substr(0,story.idPrefix.length)==story.idPrefix && id!="tiddlerDisplay")
ids.push(id);
}
ids.sort();
for (var i=0;i<ids.length;i++) s.options[s.length]=new Option(indent+ids[i].substr(story.idPrefix.length),ids[i]);
}
s.options[s.length]=new Option(cms.HTMLItem.format([here.getAttribute("HTMLOnly")=="true"?"\u221a":"_"]),cms.HTMLItem);
s.onchange=function(ev){
var ev = ev ? ev : window.event;
var cms=config.macros.snapshot; // abbreviation
var here=this.button;
if (this.value==cms.HTMLItem) {
config.options.chkSnapshotHTMLOnly=!config.options.chkSnapshotHTMLOnly;
here.setAttribute("HTMLOnly",config.options.chkSnapshotHTMLOnly?"true":"false");
config.macros.option.propagateOption("chkSnapshotHTMLOnly","checked",
config.options.chkSnapshotHTMLOnly,"input");
} else
here.setAttribute("snapID",this.value);
config.macros.snapshot.go(here,ev);
return false;
};
Popup.show();
ev.cancelBubble=true;
if(ev.stopPropagation)ev.stopPropagation();
return false;
},
getpath: function() {
// get current path
var path=getLocalPath(window.location.href);
var slashpos=path.lastIndexOf("/");
if (slashpos==-1) slashpos=path.lastIndexOf("\\");
if (slashpos!=-1) path=path.substr(0,slashpos+1); // trim filename
return path;
},
getsnap: function(snapElem,id,printing,HTMLOnly) {
var cms=config.macros.snapshot; // abbreviation
var out='<head><meta http-equiv="Content-Type" content="text/html;charset=utf-8" />';
if (printing)
out+='<base href="file:///'+cms.getpath().replace(/\\/g,'/')+'"></base>\n';
if (!HTMLOnly) {
var styles=document.getElementsByTagName('style');
var fmt='<style>\n/* stylesheet=%0 */\n%1\n\n</style>\n';
for(var i=0; i < styles.length; i++)
out+=fmt.format([styles[i].getAttribute('id'),styles[i].innerHTML]);
}
out+='</head>\n';
var elems=snapElem.getElementsByTagName('input');
for (var i=0; i<elems.length; i++) { var e=elems[i];
if (e.type=='text') e.defaultValue=e.value;
if (e.type=='checkbox') e.defaultChecked=e.checked;
if (e.type=='radiobutton') e.defaultChecked=e.checked;
}
var elems=snapElem.getElementsByTagName('textarea');
for (var i=0; i<elems.length; i++) elems[i].defaultValue=elems[i].value;
var fmt='<body>\n\n<div class="%0">%1</div>\n\n</body>\n';
out+=fmt.format([(id==cms.viewerID?'tiddler viewer':''),snapElem.innerHTML]);
return '<html>\n'+out+'</html>';
},
printsnap: function(out) {
var win=window.open("","_blank","");
win.document.open();
win.document.writeln(out);
win.document.close();
win.focus(); // bring to front
win.print(); // trigger print dialog
},
savesnap: function(out,target) {
var cms=config.macros.snapshot; // abbreviation
// make sure we are local
if (window.location.protocol!="file:")
{ alert(config.messages.notFileUrlError); return; }
var target=target||cms.askForFilename(cms.fileMsg,cms.getpath(),cms.defaultFilename);
if (!target) return; // cancelled by user
// if specified file does not include a path, assemble fully qualified path and filename
var slashpos=target.lastIndexOf("/"); if (slashpos==-1) slashpos=target.lastIndexOf("\\");
if (slashpos==-1) {
var h=document.location.href;
var cwd=getLocalPath(decodeURIComponent(h.substr(0,h.lastIndexOf('/')+1)));
target=cwd+target;
}
var link="file:///"+target.replace(/\\/g,'/'); // link for message text
var ok=saveFile(target,convertUnicodeToUTF8(out));
var msg=ok?cms.okmsg.format([target]):cms.failmsg.format([target]);
displayMessage(msg,link);
},
askForFilename: function(msg,path,file) {
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='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()) }
}
else { // IE
try { // XP/Vista only
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 non-XP IE
}
return result;
}
};
//}}}
// // TOOLBAR DEFINITIONS
//{{{
config.commands.snapshotSave = {
text: "snap",
tooltip: config.macros.snapshot.snapPrompt,
handler: function(ev,src,title) {
src.setAttribute("snapID","ask");
src.setAttribute("printing","false");
src.setAttribute("HTMLOnly",config.options.chkSnapshotHTMLOnly?"true":"false");
config.macros.snapshot.go(src,ev);
return false;
}
};
config.commands.snapshotPrint = {
text: "print",
tooltip: config.macros.snapshot.printPrompt,
handler: function(ev,src,title) {
src.setAttribute("snapID","ask");
src.setAttribute("printing","true");
src.setAttribute("HTMLOnly",config.options.chkSnapshotHTMLOnly?"true":"false");
config.macros.snapshot.go(src,ev);
return false;
}
};
//}}}
// // COPIED FROM [[StickyPopupPlugin]] TO ELIMINATE PLUGIN DEPENDENCY
//{{{
if (config.options.chkStickyPopups==undefined) config.options.chkStickyPopups=false;
Popup.stickyPopup_onDocumentClick = function(ev)
{
// if click is in a sticky popup, ignore it so popup will remain visible
var e = ev ? ev : window.event; var target = resolveTarget(e);
var p=target; while (p) {
if (hasClass(p,"popup") && (hasClass(p,"sticky")||config.options.chkStickyPopups)) break;
else p=p.parentNode;
}
if (!p) // not in sticky popup (or sticky popups disabled)... use normal click handling
Popup.onDocumentClick(ev);
return true;
};
try{removeEvent(document,"click",Popup.onDocumentClick);}catch(e){};
try{addEvent(document,"click",Popup.stickyPopup_onDocumentClick);}catch(e){};
//}}}
Original ~NoteStorm document by Dave Gifford [[here|http://www.giffmex.org/NoteStorm.html]]
Modifications by Måns Mårtensson:
{{twocolumns{
+++[TiddlerBackgrounds]...
*Tag tiddler noteit to get a notepad background
*Tag tidder paper1 to get rough background
*Tag tiddler paper2 to get crumpled paper background
*Tag tiddler mono to get monospaced font preserving wikisyntax.===<br>
+++[ProjectManager]...
*Added TheProjectManager made by Morris Gray for [[TwT-TreeView|http://twt-treeview.tiddlyspot.com]]===<br>
+++[ViewTemplates]...
*Changes to TopicsViewTemplate,
*added ProjectsViewTemplate..===<br>
+++[Buttons and TopMenu]...
*Added newProject button to TopMenu and SideBarOptions
*added {{{<span macro"hideWhen readOnly">}}} in viewtemplates to hide statuschooser and *assign parent topics* ▾ when in read only mode.
*Replaced TopMenu with a modified copy of Eric Shulmans ~StoryMenu from his [[basics document|http://tiddlytools.com/quickstart/basics.html]]===<br>
+++[Search]...
*Added YourSearch bookmarklet in zzConfigOptions (toggle in topmenu or SideBarOptions)
Put a popup of search into the TopMenu===<br>
+++[Plugins]...
*Added RenameTagsPlugin and put an [[Edit|Edit online]] button in the Sidebar and an option to tag tiddlers with "startup" to load at startup
*Replaced QuickEditPlugin with TiddlyTools latest version.
*Installed UnsavedChangesPlugin - put a macro in the TopMenu
*ShowPopup from ~TiddlyTools===<br>
+++[ColorPalettes]...
*Added Palettemaker + MyColorPalette, TWTExecutive ColorPalette and put {{{<<selectPalette>>}}} in the sidebar===<br>
Cleaned up..
regards Måns Mårtensson november 26 2009
Type the text for 'New Tiddler'
<<showUpdates>>
|borderlessmp tablePaddedCell|k
| saved :|<<tiddler [[Status##saved]]>>|
| loaded :|<<tiddler [[Status##restarted]]>>|
| clock :|<<tiddler DigitalClock with: "YYYY.MM.DD hh:0mm:0ss DDD" 1>>|
/%
!saved
{{ts{<script>
if (!config.options.txtStatusTimeFormat) config.options.txtStatusTimeFormat = "%0 %1".format([config.zTweaks.zDateFormat,config.zTweaks.zTimeFormat]);
wikify(new Date(document.lastModified).formatString(config.options.txtStatusTimeFormat+" DDD"),place);
</script>}}}
!visited (not displaying this one, for reference only)
{{ts{<script>
wikify(Date.convertFromYYYYMMDDHHMM(lewcidLastVisit).formatString(config.options.txtStatusTimeFormat),place);
</script>}}}
!restarted
{{span{<script>
wikify(Date.convertFromYYYYMMDDHHMM(config.options.txtLastVisit).formatString(config.options.txtStatusTimeFormat),place);
</script>}}}
!now
{{ts{ <<tiddler DigitalClock with: {{config.options.txtStatusTimeFormat}} 30>>}}}
!end
%/
{{small{
<<tiddler Status>>
}}}
[[JqueryTreeviewCSS-T]]
[[StyleSheetShortcuts]]
[[StyleSheetTiddlersBar]]
/*{{{*/
div[tags~="mono"].tiddler .viewer {
font-family: 'Courier New', Courier;
font-size:16px;
line-height:20px;
}
div[tags~="paper1"].tiddler .viewer {
border:0px solid #dd8;
padding-left:2.0em;
padding-top:1.0em;
padding-bottom:0.5em;
background-image:url('[[rough-1.jpg]]');
background-repeat:repeat-x repeat-y;
background-attachment:scroll;
background-position:0px;
font-family:"Marker Felt", "Comic Sans MS", "Comic Sans", Sans;
font-size:16px;
line-height:20px;
}
div[tags~="paper2"].tiddler .viewer {
border:0px solid #dd8;
padding-left:2.0em;
padding-top:1.0em;
padding-bottom:0.5em;
background-image:url('[[crumpled.jpg]]');
background-repeat:repeat-x repeat-y;
background-attachment:scroll;
background-position:0px;
font-family:"Marker Felt", "Comic Sans MS", "Comic Sans", Sans;
font-size:16px;
line-height:20px;
}
div[tags~="noteit"].tiddler .viewer {
border:0px solid #dd8;
padding-left:2.0em;
padding-top:1.0em;
padding-bottom:0.5em;
background-image:url('[[Notepad.gif]]');
background-repeat:repeat-y;
background-attachment:scroll;
background-position:0px;
font-family:"Marker Felt", "Comic Sans MS", "Comic Sans", Sans;
font-size:16px;
line-height:20px;
}
.postitwhite {
border:0px solid #dd8;
padding-left:2.0em;
padding-top:1.0em;
padding-bottom:0.5em;
background-image:url('[[NotePad.png]]');
background-repeat:repeat-y;
background-attachment:scroll;
background-position:0px;
font-family:"Marker Felt", "Comic Sans MS", "Comic Sans", Sans;
font-size:16px;
line-height:20px;
}
/*TiddlyWiki stuff that remains the same regardless of ColorPalette used*/
.button:hover {background:#fe8;}
#messageArea {background:#fe8;}
.popup li a:hover {background:#fe8;}
.annotation {background:#fe8;}
.highlight, .marked {background:#fe8;}
#backstageArea a:hover {background:#fe8;}
.viewer pre {border:1px solid #fe8; background:#ffc;}
.warning {background:#ffc;}
.popup li a:active {background:#ffc;}
#messageArea .button {background:#ffc;}
.wizard .button {color:[[ColorPalette::Foreground]]; background:#fe8; border: 1px solid;
border-color:#ffc [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryDark]] #ffc;}
/*FONT STUFF*/
body {font-family: Calibri, Arial, sans-serif; font-size: 12pt;}
h1,h2,h3,h4,h5 { color:[[ColorPalette::SecondaryPale]]; background: white; font-family: Verdana; border-bottom: none;}
.editor a {color:#dddddd;}
#editor a {color:#dddddd;}
.nowrap { white-space:nowrap;}
.bluey {font-weight: bold; color:[[ColorPalette::SecondaryPale]] font-size: 1.3em;}
.popup li .tagger a{display:inline}
.fontResizer {color:[[ColorPalette::SecondaryPale]]}
.toolbar a {color:[[ColorPalette::SecondaryLight]];}
.selected .toolbar a {color:[[ColorPalette::SecondaryLight]];}
.selected .toolbar a:hover {color:[[ColorPalette::SecondaryLight]];}
/* SHORTENS THE HEIGHT OF THE HEADER */
.headerShadow {padding: 1em 0em .4em 1em;}
.headerForeground {padding: 1em 0em .4em 1em;}
.siteTitle {font-size:1.5em;}
.siteSubtitle {font-size:1em;}
/*MAINMENU*/
#mainMenu {width: 16.5em; text-align: left; font-size: .85em;}
#sidebar {position:absolute; right:0px; width:12em; font-size:.9em;}
#sidebarTabs .tabContents {width:14,5em; }
#displayArea {margin: 0em 11em 0em 14.5em;}
/*TABLE HEADER*/
.viewer th {color: #000; background-color: #eeeeee;}
/*TIDDLER TOPMARGIN AND BUTTON BORDER*/
a.button{border: 0;}
.viewer { margin-top: .1em; }
.viewer {line-height: 1.7em;}
/*TIDDLER TITLE COLOR MATCH BOTTOM OF HEADER*/
.title {color:[[ColorPalette::PrimaryMid]];}
/*UNORDERED and ORDERED LISTS TWEAK*/
.viewer li {padding-top: 0.5em; padding-bottom: 0.5em;}
/*LINELESS BLOCKQUOTES*/
.viewer blockquote {border-left: 0px; margin-top:0em; margin-bottom:0em; }
/*INVISIBLE TABLE*/
.viewer .invisiblecomm table {border-color: white;}
.viewer .invisiblecomm table td { font-size: 1em; font-family: Verdana; border-color: white; padding: 10px 20px 10px 0px; text-align: left; vertical-align: top; padding: 20px;}
.viewer .invisiblecomm table th { color:[[ColorPalette::SecondaryLight]]; background-color: white; border-color: white; font-family: Verdana; font-size: 1.2em; font-weight: bold; padding: 10px 20px 10px 0px; text-align: left; vertical-align: top;}
.viewer .invisiblecomm table tr.leftColumn { background-color: #bbbbbb; }
/*TOPMENU*/
#topMenu {padding-left: 0em; background-color: [[ColorPalette::PrimaryPale]]; color: #110077; font-family: Trebuchet MS, Verdana; font-size: 10pt; line-height: 2em;}
#topMenu table td {margin: 8px;}
#topMenu .purple a {color:[[ColorPalette::SecondaryPale]]}
/*TABS - see also stylesheettiddlersbar*/
.tabSelected{color:[[ColorPalette::PrimaryDark]];
background:[[ColorPalette::TertiaryPale]];
border-left:1px solid [[ColorPalette::TertiaryLight]];
border-top:1px solid [[ColorPalette::TertiaryLight]];
border-right:1px solid [[ColorPalette::TertiaryLight]];
}
.tabUnselected {color:[[ColorPalette::Background]]; background:[[ColorPalette::TertiaryMid]];}
.tabContents {background:white; border:1px solid [[ColorPalette::TertiaryLight]];}
.tabContents .button {border:0;}
/* TAB COLOR FIX */
.tabUnselected {color:#777777;}
/*ROUNDED CORNERS AND BORDERS*/
.tiddler {
border-top: 1px solid #ccc;
border-left: 1px solid #ccc;
border-bottom: 3px solid #ccc;
border-right: 3px solid #ccc;
margin: 0.5em;
background:#fff;
padding: 0.5em;
-moz-border-radius: 1em; }
#messageArea {
background-color: #eee;
border-color: #8ab;
border-width: 4px;
border-style: dotted;
font-size: 90%;
padding: 0.5em;
-moz-border-radius: 1em; }
/* TAB COLOR FIX */
.tabUnselected {color:#777777;}
/* GIFFMEX TWEAKS TO STYLESHEETPRINT (so that nothing but tiddler title and text are printed) */
@media print {#mainMenu {display: none ! important;}}
@media print {#topMenu {display: none ! important;}}
@media print {#sidebar {display: none ! important;}}
@media print {#messageArea {display: none ! important;}}
@media print {#toolbar {display: none ! important;}}
@media print {.header {display: none ! important;}}
@media print {.tiddler .subtitle {display: none ! important;}}
@media print {.tiddler .toolbar {display; none ! important; }}
@media print {.tiddler .tagging {display; none ! important; }}
@media print {.tiddler .tagged {display; none ! important; }}
@media print {#displayArea {margin: 1em 1em 0em 1em;}}
@media print {.pageBreak {page-break-before: always;}}
@media print {#tiddlersBar {display: none ! important;}}
/*}}}*/
/***
|Name|StyleSheetShortcuts|
|Source|http://www.TiddlyTools.com/#StyleSheetShortcuts|
|Version||
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|CSS|
|Requires||
|Overrides||
|Description|'convenience' classes for common formatting, alignment, boxes, tables, etc.|
These 'style tweaks' can be easily included in other stylesheet tiddler so they can share a baseline look-and-feel that can then be customized to create a wide variety of 'flavors'.
***/
/*{{{*/
/* text alignments */
.left
{ display:block;text-align:left; }
.center
{ display:block;text-align:center; }
.center table
{ margin:auto !important; }
.right
{ display:block;text-align:right; }
.justify
{ display:block;text-align:justify; }
.indent
{ display:block;margin:0;padding:0;border:0;margin-left:2em; }
.floatleft
{ float:left; }
.floatright
{ float:right; }
.valignTop, .valignTop table, .valignTop tbody, .valignTop th, .valignTop tr, .valignTop td
{ vertical-align:top; }
.valignBottom, .valignBottom table, .valignBottom tbody, .valignBottom th, .valignBottom tr, .valignBottom td
{ vertical-align:bottom; }
.clear
{ clear:both; }
.wrap
{ white-space:normal; }
.nowrap
{ white-space:nowrap; }
.hidden
{ display:none; }
.show
{ display:inline !important; }
.span
{ display:span; }
.block
{ display:block; }
.relative
{ position:relative; }
.absolute
{ position:absolute; }
/* font sizes */
.big
{ font-size:14pt;line-height:120% }
.medium
{ font-size:12pt;line-height:120% }
.normal
{ font-size:9pt;line-height:120% }
.small
{ font-size:8pt;line-height:120% }
.fine
{ font-size:7pt;line-height:120% }
.tiny
{ font-size:6pt;line-height:120% }
.larger
{ font-size:120%; }
.smaller
{ font-size:80%; }
/* font styles */
.bold
{ font-weight:bold; }
.italic
{ font-style:italic; }
.underline
{ text-decoration:underline; }
/* plain list items (no bullets or indent) */
.nobullets li { list-style-type: none; margin-left:-2em; }
/* multi-column tiddler content (not supported in Internet Explorer) */
.twocolumns { display:block;
-moz-column-count:2; -moz-column-gap:1em; -moz-column-width:50%; /* FireFox */
-webkit-column-count:2; -webkit-column-gap:1em; -webkit-column-width:50%; /* Safari */
column-count:2; column-gap:1em; column-width:50%; /* Opera */
}
.threecolumns { display:block;
-moz-column-count:3; -moz-column-gap:1em; -moz-column-width:33%; /* FireFox */
-webkit-column-count:3; -webkit-column-gap:1em; -webkit-column-width:33%; /* Safari */
column-count:3; column-gap:1em; column-width:33%; /* Opera */
}
.fourcolumns { display:block;
-moz-column-count:4; -moz-column-gap:1em; -moz-column-width:25%; /* FireFox */
-webkit-column-count:4; -webkit-column-gap:1em; -webkit-column-width:25%; /* Safari */
column-count:4; column-gap:1em; column-width:25%; /* Opera */
}
/* page breaks */
.breakbefore { page-break-before:always; }
.breakafter { page-break-before:always; }
/* show/hide browser-specific content for InternetExplorer vs. non-IE ("moz") browsers */
*[class="ieOnly"]
{ display:none; } /* hide in moz (uses CSS selector) */
* html .mozOnly, *:first-child+html .mozOnly
{ display: none; } /* hide in IE (uses IE6/IE7 CSS hacks) */
/* borderless tables */
.borderless, .borderless table, .borderless td, .borderless tr, .borderless th, .borderless tbody
{ border:0 !important; margin:0 !important; padding:0 !important; }
.widetable, .widetable table
{ width:100%; }
/* thumbnail images (fixed-sized scaled images) */
.thumbnail img { height:5em !important; }
/* stretchable images (auto-size to fit tiddler) */
.stretch img { width:95%; }
/* grouped content */
.outline
{ display:block; padding:1em; -moz-border-radius:1em;-webkit-border-radius:1em; border:1px solid; }
.menubox
{ display:block; padding:1em; -moz-border-radius:1em;-webkit-border-radius:1em; border:1px solid; background:#fff; color:#000; }
.menubox .button, .menubox .tiddlyLinkExisting, .menubox .tiddlyLinkNonExisting
{ color:#009 !important; }
.groupbox
{ display:block; padding:1em; -moz-border-radius:1em;-webkit-border-radius:1em; border:1px solid; background:#ffe; color:#000; }
.groupbox a, .groupbox .button, .groupbox .tiddlyLinkExisting, .groupbox .tiddlyLinkNonExisting
{ color:#009 !important; }
.groupbox code
{ color:#333 !important; }
.borderleft
{ margin:0;padding:0;border:0;margin-left:1em; border-left:1px dotted; padding-left:.5em; }
.borderright
{ margin:0;padding:0;border:0;margin-right:1em; border-right:1px dotted; padding-right:.5em; }
.borderbottom
{ margin:0;padding:1px 0;border:0;border-bottom:1px dotted; margin-bottom:1px; padding-bottom:1px; }
.bordertop
{ margin:0;padding:0;border:0;border-top:1px dotted; margin-top:1px; padding-top:1px; }
/* scrolled content */
.scrollbars { overflow:auto; }
.height10em { height:10em; }
.height15em { height:15em; }
.height20em { height:20em; }
.height25em { height:25em; }
.height30em { height:30em; }
.height35em { height:35em; }
.height40em { height:40em; }
/* compact form */
.smallform
{ white-space:nowrap; }
.smallform input, .smallform textarea, .smallform button, .smallform checkbox, .smallform radio, .smallform select
{ font-size:8pt; }
/* stretchable edit fields and textareas (auto-size to fit tiddler) */
.stretch input { width:99%; }
.stretch textarea { width:99%; }
/* compact input fields (limited to a few characters for entering percentages and other small values) */
.onechar input { width:1em; }
.twochar input { width:2em; }
.threechar input { width:3em; }
.fourchar input { width:4em; }
.fivechar input { width:5em; }
/* text colors */
.white { color:#fff !important }
.gray { color:#999 !important }
.black { color:#000 !important }
.red { color:#f66 !important }
.green { color:#0c0 !important }
.blue { color:#99f !important }
/* rollover highlighting */
.mouseover
{color:[[ColorPalette::TertiaryLight]] !important;}
.mouseover a
{color:[[ColorPalette::TertiaryLight]] !important;}
.selected .mouseover
{color:[[ColorPalette::Foreground]] !important;}
.selected .mouseover .button, .selected .mouseover a
{color:[[ColorPalette::PrimaryDark]] !important;}
/* rollover zoom text */
.zoomover
{ font-size:80% !important; }
.selected .zoomover
{ font-size:100% !important; }
/* [[ColorPalette]] text colors */
.Background { color:[[ColorPalette::Background]]; }
.Foreground { color:[[ColorPalette::Foreground]]; }
.PrimaryPale { color:[[ColorPalette::PrimaryPale]]; }
.PrimaryLight { color:[[ColorPalette::PrimaryLight]]; }
.PrimaryMid { color:[[ColorPalette::PrimaryMid]]; }
.PrimaryDark { color:[[ColorPalette::PrimaryDark]]; }
.SecondaryPale { color:[[ColorPalette::SecondaryPale]]; }
.SecondaryLight { color:[[ColorPalette::SecondaryLight]];}
.SecondaryMid { color:[[ColorPalette::SecondaryMid]]; }
.SecondaryDark { color:[[ColorPalette::SecondaryDark]]; }
.TertiaryPale { color:[[ColorPalette::TertiaryPale]]; }
.TertiaryLight { color:[[ColorPalette::TertiaryLight]]; }
.TertiaryMid { color:[[ColorPalette::TertiaryMid]]; }
.TertiaryDark { color:[[ColorPalette::TertiaryDark]]; }
.Error { color:[[ColorPalette::Error]]; }
/* [[ColorPalette]] background colors */
.BGBackground { background-color:[[ColorPalette::Background]]; }
.BGForeground { background-color:[[ColorPalette::Foreground]]; }
.BGPrimaryPale { background-color:[[ColorPalette::PrimaryPale]]; }
.BGPrimaryLight { background-color:[[ColorPalette::PrimaryLight]]; }
.BGPrimaryMid { background-color:[[ColorPalette::PrimaryMid]]; }
.BGPrimaryDark { background-color:[[ColorPalette::PrimaryDark]]; }
.BGSecondaryPale { background-color:[[ColorPalette::SecondaryPale]]; }
.BGSecondaryLight { background-color:[[ColorPalette::SecondaryLight]]; }
.BGSecondaryMid { background-color:[[ColorPalette::SecondaryMid]]; }
.BGSecondaryDark { background-color:[[ColorPalette::SecondaryDark]]; }
.BGTertiaryPale { background-color:[[ColorPalette::TertiaryPale]]; }
.BGTertiaryLight { background-color:[[ColorPalette::TertiaryLight]]; }
.BGTertiaryMid { background-color:[[ColorPalette::TertiaryMid]]; }
.BGTertiaryDark { background-color:[[ColorPalette::TertiaryDark]]; }
.BGError { background-color:[[ColorPalette::Error]]; }
/*}}}*/
!!!StyleSheetTiddlersBar
/*{{{*/
.button {border:1px; color:#777777;}
.tab {white-space:nowrap;}
{padding : 0.45em 0.5em 0.0em 1.0em;margin-left:0em;margin-right:0em}
{margin-bottom:0px;}
.tabSelected .button:hover {font-size:0.95em; color:[[ColorPalette::SecondaryPale]]; background: #fff;padding : 0px 0px 0px 2px;}
.tabUnselected .button:hover {font-size:0.95em;color:[[ColorPalette::SecondaryPale]]; background: #fff; padding : 0px 0px 0px 2px;}
.tabUnselected .button {font-size:0.95em; color:[[ColorPalette::SecondaryPale]]; padding : 0px 0px 0px 2px;}
.tabSelected .button {font-size:0.95em; font-weight:bold; color:[[ColorPalette::SecondaryPale]];padding : 0px 0px 0px 2px;}
.tabSelected {background-color:white;font-weight:bold;color:[[ColorPalette::PrimaryMid]];border: 0px #c06 solid;border-bottom:0px; font-size:0.95em;}
.tabUnselected {
background-color:[[ColorPalette::TertiaryPale]];
border:0px #eee solid; border-bottom:0px;font-size:0.95em; }
.tabUnselected .tabButton {font-size:0.75em;color:#333;background:transparent; padding : 0px 2px 0px 2px; margin: 0 0 0 1px;}
.tabSelected .tabButton {font-size:0.75em;color:#000;font-weight:bold;background:transparent;padding : 0px 2px 0px 2px; margin: 0 0 0 1px;}
.tabSelected .tabButton:hover {font-weight:bold; color: #f00;background: #fff;}
.tabUnselected .tabButton:hover {color: #f00;background: #fff;}
.tiddler, .tabContents {border-top:0px #fa0 solid;margin-left:0.5em;margin-right:0.5em;}
#tiddlersBar {background:#abf;line-height: 1em;}
#tiddlersBar {background:[[ColorPalette::PrimaryPale]];}
/*}}}*/
TWTExecutive
Background: #222
Foreground: #666
PrimaryPale: #333
PrimaryLight: #555
PrimaryMid: #888
PrimaryDark: #555
SecondaryPale: #ddd
SecondaryLight: #666
SecondaryMid: #222
SecondaryDark: #555
TertiaryPale: #555
TertiaryLight: #555
TertiaryMid: #999
TertiaryDark: #333
Error: #f88
Link: #ccf
Button: #ccf
/***
|Name|TaggedTemplateTweak|
|Source|http://www.TiddlyTools.com/#TaggedTemplateTweak|
|Documentation|http://www.TiddlyTools.com/#TaggedTemplateTweakInfo|
|Version|1.1.0|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides|Story.prototype.chooseTemplateForTiddler()|
|Description|use alternative ViewTemplate/EditTemplate for tiddler's tagged with specific tag values|
This tweak extends story.chooseTemplateForTiddler() so that ''whenever a tiddler is marked with a specific tag value, it can be viewed and/or edited using alternatives to the standard tiddler templates.''
!!!!!Documentation
>see [[TaggedTemplateTweakInfo]]
!!!!!Revisions
<<<
2008.01.22 [*.*.*] plugin size reduction - documentation moved to [[TaggedTemplateTweakInfo]]
2007.06.23 [1.1.0] re-written to use automatic 'tag prefix' search instead of hard coded check for each tag. Allows new custom tags to be used without requiring code changes to this plugin.
| please see [[TaggedTemplateTweakInfo]] for previous revision details |
2007.06.11 [1.0.0] initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.taggedTemplate= {major: 1, minor: 1, revision: 0, date: new Date(2007,6,23)};
Story.prototype.taggedTemplate_chooseTemplateForTiddler = Story.prototype.chooseTemplateForTiddler
Story.prototype.chooseTemplateForTiddler = function(title,template)
{
// get default template from core
var template=this.taggedTemplate_chooseTemplateForTiddler.apply(this,arguments);
// if the tiddler to be rendered doesn't exist yet, just return core result
var tiddler=store.getTiddler(title); if (!tiddler) return template;
// look for template whose prefix matches a tag on this tiddler
for (t=0; t<tiddler.tags.length; t++) {
var tag=tiddler.tags[t];
if (store.tiddlerExists(tag+template)) { template=tag+template; break; }
// try capitalized tag (to match WikiWord template titles)
var cap=tag.substr(0,1).toUpperCase()+tag.substr(1);
if (store.tiddlerExists(cap+template)) { template=cap+template; break; }
}
return template;
}
//}}}
/***
|''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|
|''Requires''|[[DeprecatedFunctionsPlugin]]|
|''Stylesheet Changes''|ViewTemplate|
|See Above|<div class='toolbar'><span style="padding-right:2.45em;" macro='tagger source:TagDB exclude:excludeLists'></span></div>|
***/
//{{{
config.tagger={
defaults:{
label: '*assign parent topics* ',
tooltip: 'Manage tiddler tags',
taglist: 'true',
excludeTags: 'excludeLists',
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.find(tag)==null)
{tiddler.tags.push(tag)}
else if(!newtag)
{tiddler.tags.splice(tiddler.tags.find(tag),1)};
store.saveTiddler(tiddler.title,tiddler.title,tiddler.text,tiddler.modifier,tiddler.modified,tiddler.tags);};
story.refreshTiddler(title,null,true);
if(config.options.chkAutoSave)
saveChanges();
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);}
if(config.options.chkAutoSave)
saveChanges();
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;
};
config.shadowTiddlers.TaggerPluginDocumentation="The documentation is available [[here.|http://tw.lewcid.org/#TaggerPluginDocumentation]]";
config.shadowTiddlers.TaggerPluginSource="The uncompressed source code is available [[here.|http://tw.lewcid.org/#TaggerPluginSource]]";
//}}}
*To add [[Projects]] to your current ~NoteStormTW import all tiddlers from here tagged ~ProjectPackage. Insert {{{<<tiddler NewProjectTemplate>>}}} in TopMenu and SideBarOptions.
+++[The ProjectPackage list]<<tiddler ListTiddlersTaggedProjectPackage>>===
blahdieblah ... blah blah
Yak yak yak ... yaketieyay
Files for making new tiddlers
----
/%
!project
*''Note: Once you are done with the following instructions delete them and start your new project here.''
# Rename this tiddler to your desired project name. It will been added to your projects under the heading Projects
# Set the status above
#''You can add any number of tasks under any project by clicking __add:»subtopic__ in its toolbar above.''
#You can check the status of all projects by calling up the tiddler Projects and clicking on the appropriate button.
''Note: ''You can create any status you want by creating a tiddler with the status name then __tag it status__ and adding another button using the existing ones as a model.
!end
%/
/%
!html
<html><hide linebreaks>
</html>
!end
%/
/%
!iframe
{{borderless center{
|vertical-align:bottom;<<tiddler ToggleRightSidebar with: "Sidebar »">> |<<tiddler NavButtons>>| open in new window[img[New window|http://img229.imageshack.us/img229/1687/extlink7226466sx5.gif][TYPE URL HERE]]|
----
<html><div align="center"><iframe src ="TYPE URL HERE" width="100%" align="center" height="600" scrolling="auto" frameborder="0" allowtransparency style="border:none;"></iframe></div></html>}}}
!end
%/
/%
!journal2
Put your preconfigured journal information here in TiddlerMakeFile
!end
%/
/%
!object
<html><div align="center"> <object width="425" height="350"><param name="movie" value="TYPE URL HERE"></param><param name="wmode" value="transparent"></param><embed src="TYPE URL HERE" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"></embed></object></div></html>
!end
%/
/%
!table
{{floatright{<<tiddler CreateHtmlTable>>}}}{{wrappingClass{<<tabs makeTable "×" "" ""
"Make 2" "create 2 columns" "MakeTable##2"
3 "create 3 columns" "MakeTable##3"
4 "create 4 columns" "MakeTable##4"
"5 columns" "create 5 columns" "MakeTable##5">>}}}/%
!2
<html><hide linebreaks><!-- see HTMLFormattingPlugin --><form action="javascript:;"
onsubmit="
/* validate new title */
var t=this.title.value;
if (!t.length || t==this.title.defaultValue)
{ alert('A title is required'); this.title.focus(); return false; }
if (store.tiddlerExists(t) && !confirm(config.messages.overwriteWarning.format([t])))
{ this.title.focus(); return false; }
/* get current tiddler (if any) */
var tid=store.getTiddler(t);
var who=tid?tid.modifier:config.options.txtUserName;
var when=tid?tid.modified:new Date();
var txt=tid?tid.text:'';
var tags=tid?tid.tags:[];
var fields=tid?tid.fields:{};
/* get form values and construct new tiddler text */
var fmt='|%0|%1|\n%2\n';
var newtxt=fmt.format([this.field1.value,this.field2.value,this.field3.value]);
/* insert new text at marker (or end, if no marker) */
var marker='/*MARKER*/';
if (txt.indexOf(marker)==-1) txt=txt+newtxt;
else txt=txt.replace(new RegExp(marker.escapeRegExp()),newtxt+marker);
/* get new tags and add to existing tags (if any) */
var newtags=this.tagsfield.value.readBracketedList();
for (var i=0; i<newtags.length; i++) tags.pushUnique(newtags[i]);
/* write and show tiddler */
store.saveTiddler(t,t,txt, who, when, tags, fields);
story.displayTiddler(story.findContainingTiddler(this),t);
return false;">
Title <input name="title" value="enter a title" onfocus="this.select()">
Field1 <input name="field1" value="field1 value" onfocus="this.select()">
Field2 <input name="field2" value="field2 value" onfocus="this.select()"><br>
<textarea name="field3" rows=5 style="width:100%;">field3 value goes here</textarea><br>
<input name="tagsfield" value="space-separated tags go here" style="width:100%;"><br>
<input type="submit" value="create tiddler">
</form></html>
!3
<html><hide linebreaks><form action="javascript:;"
onsubmit="
var t=this.title.value;
if (!t.length || t==this.title.defaultValue)
{ alert('A title is required'); this.title.focus(); return false; }
if (store.tiddlerExists(t) && !confirm(config.messages.overwriteWarning.format([t])))
{ this.title.focus(); return false; }
var txt='|%0|%1|%2|\n%3'.format([this.field1.value,this.field2.value,this.field3.value,this.field4.value]);
var tags=this.tagsfield.value.readBracketedList();
store.saveTiddler(t,t,txt, config.options.txtUserName, new Date(), tags, {});
story.displayTiddler(story.findContainingTiddler(this),t);
return false;">
<input name="title" value="enter a title" style="width:23%;" onfocus="this.select()">
<input name="field1" value="field value 1" style="width:23%;" onfocus="this.select()">
<input name="field2" value="field value 2" style="width:23%;" onfocus="this.select()">
<input name="field3" value="field value 3" style="width:23%;" onfocus="this.select()"><br>
<textarea name="field4" rows=5 style="width:99%;"></textarea><br>
<input name="tagsfield" value="space-separated tags go here" style="width:99%;"><br>
<input type="submit" value="create tiddler">
</form></html>
!4
<html><hide linebreaks><form action="javascript:;"
onsubmit="
var t=this.title.value;
if (!t.length || t==this.title.defaultValue)
{ alert('A title is required'); this.title.focus(); return false; }
if (store.tiddlerExists(t) && !confirm(config.messages.overwriteWarning.format([t])))
{ this.title.focus(); return false; }
var txt='|%0|%1|%2|%3|\n%4'.format([this.field1.value,this.field2.value,this.field3.value,this.field4.value,this.field5.value]);
var tags=this.tagsfield.value.readBracketedList();
store.saveTiddler(t,t,txt, config.options.txtUserName, new Date(), tags, {});
story.displayTiddler(story.findContainingTiddler(this),t);
return false;">
<input name="title" value="enter a title" style="width:18%;" onfocus="this.select()">
<input name="field1" value="field value 1" style="width:18%;" onfocus="this.select()">
<input name="field2" value="field value 2" style="width:18%;" onfocus="this.select()">
<input name="field3" value="field value 3" style="width:18%;" onfocus="this.select()">
<input name="field4" value="field value 4" style="width:18%;" onfocus="this.select()"><br>
<textarea name="field5" rows=5 style="width:99%;"></textarea><br>
<input name="tagsfield" value="space-separated tags go here" style="width:99%;"><br>
<input type="submit" value="create tiddler">
</form></html>
!5
<html><hide linebreaks><form action="javascript:;"
onsubmit="
var t=this.title.value;
if (!t.length || t==this.title.defaultValue)
{ alert('A title is required'); this.title.focus(); return false; }
if (store.tiddlerExists(t) && !confirm(config.messages.overwriteWarning.format([t])))
{ this.title.focus(); return false; }
/* extract field values and construct new tiddler text */
var txt='|%0|%1|%2|%3|%4|\n%5'.format([this.field1.value,this.field2.value,this.field3.value,this.field4.value,this.field5.value,this.field6.value]);
/* extract and parse space-separated, bracketed tags into array of strings */
var tags=this.tagsfield.value.readBracketedList();
/* create and show new tiddler */
store.saveTiddler(t,t,txt, config.options.txtUserName, new Date(), tags, {});
story.displayTiddler(story.findContainingTiddler(this),t);
return false;">
<input name="title" value="enter a title" style="width:15%;" onfocus="this.select()">
<input name="field1" value="field value 1" style="width:15%;" onfocus="this.select()">
<input name="field2" value="field value 2" style="width:15%;" onfocus="this.select()">
<input name="field3" value="field value 3" style="width:15%;" onfocus="this.select()">
<input name="field4" value="field value 4" style="width:15%;" onfocus="this.select()">
<input name="field5" value="field value 5" style="width:15%;" onfocus="this.select()"><br>
<textarea name="field6" rows=5 style="width:99%;"></textarea><br>
<input name="tagsfield" value="space-separated tags go here" style="width:99%;"><br>
<input type="submit" value="create tiddler">
</form></html>
!0
%/
/%
!tabs
<<tabs tabsCookie
[[Intro ]] "tooltip 1" [[MakeTabsIntro]]
[[TabTwoName]] "tooltip 2" [[tiddler two]]
[[TabThreeName]] "tooltip 3" [[Tiddler three]]
[[TabFourName]] "tooltip 3" [[Tiddler four]]
>>
OR
Create a tabbed view with one tab for every tiddler containing the tag "YOURTAG" (using the {{{<<tabs...>>}}} macro).
{{{
<<forEachTiddler
where
'tiddler.tags.contains("YOURTAG")'
sortBy
'tiddler.title.toUpperCase()'
write '" [["+tiddler.title+" ]] \"view ["+tiddler.title+"]\" [["+tiddler.title+"]] "'
begin '"<<tabs txtMyAutoTab "'
end '">"+">"'
none '"//No tiddler tagged with \"YOURTAG\"//"'
>>
}}}
!end
%/
/***
|''Name:''|TiddlersBarPluginMG|
|''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|
!Modification
2008.09.06 - Morris Gray (Added http://tw.lewcid.org/#OpenTopPlugin code to this plugin to overcome jumping to the top when invoking any popup. Deleted the offending code)
!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 : "do nothing";
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>");
//}}}
/%
|Name|ToggleLeftSidebar|
|Source|http://www.TiddlyTools.com/#ToggleLeftSidebar|
|Version|2.0.0|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|script|
|Requires|InlineJavascriptPlugin|
|Overrides||
|Description|show/hide left sidebar (MainMenu)|
Usage: <<tiddler ToggleLeftSidebar with: "label">>
Config settings:
config.options.chkShowLeftSidebar (true)
config.options.txtToggleLeftSideBarLabelShow (►)
config.options.txtToggleLeftSideBarLabelHide (◄)
%/<script label="$1" title="show/hide MainMenu content">
var co=config.options;
if (co.chkShowLeftSidebar=='undefined') co.chkShowLeftSidebar=true;
co.chkShowLeftSidebar=!co.chkShowLeftSidebar;
var mm=document.getElementById('mainMenu'); if (!mm) return;
mm.style.display=co.chkShowLeftSidebar?'block':'none';
document.getElementById('displayArea').style.marginLeft=co.chkShowLeftSidebar?'':'1em';
saveOptionCookie('chkShowLeftSidebar');
var labelShow=co.txtToggleLeftSideBarLabelShow||'►';
var labelHide=co.txtToggleLeftSideBarLabelHide||'◄';
if (typeof(place)!='undefined' && '$1'=='$'+'1') {
place.innerHTML=co.chkShowLeftSidebar?labelHide:labelShow;
place.title=(co.chkShowLeftSidebar?'hide':'show')+' left sidebar';
}
var sm=document.getElementById('storyMenu'); if (sm) config.refreshers.content(sm);
</script><script>
var co=config.options;
if (co.chkShowLeftSidebar=='undefined') co.chkShowLeftSidebar=true;
var mm=document.getElementById('mainMenu'); if (!mm) return;
mm.style.display=co.chkShowLeftSidebar?'block':'none';
document.getElementById('displayArea').style.marginLeft=co.chkShowLeftSidebar?'':'1em';
if ('$1'=='$'+'1') {
var labelShow=co.txtToggleLeftSideBarLabelShow||'►';
var labelHide=co.txtToggleLeftSideBarLabelHide||'◄';
place.lastChild.innerHTML=co.chkShowLeftSidebar?labelHide:labelShow;
place.lastChild.title=(co.chkShowLeftSidebar?'hide':'show')+' left sidebar';
}
</script>
/%
|Name|ToggleRightSidebar|
|Source|http://www.TiddlyTools.com/#ToggleRightSidebar|
|Version|2.0.0|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|script|
|Requires|InlineJavascriptPlugin|
|Overrides||
|Description|show/hide right sidebar (MainMenu)|
Usage: <<tiddler ToggleRightSidebar with: "label">>
Config settings:
config.options.chkShowRightSidebar (false)
config.options.txtToggleRightSideBarLabelShow (►)
config.options.txtToggleRightSideBarLabelHide (◄)
%/<script label="$1" title="show/hide right sidebar content">
var co=config.options;
if (co.chkShowRightSidebar=='undefined') co.chkShowRightSidebar=true;
co.chkShowRightSidebar=!co.chkShowRightSidebar;
var sb=document.getElementById('sidebar'); if (!sb) return;
sb.style.display=co.chkShowRightSidebar?'block':'none';
document.getElementById('displayArea').style.marginRight=co.chkShowRightSidebar?'':'1em';
saveOptionCookie('chkShowRightSidebar');
var labelShow=co.txtToggleRightSideBarLabelShow||(config.browser.isSafari?'◀':'◄');
var labelHide=co.txtToggleRightSideBarLabelHide||'►';
if (typeof(place)!='undefined' && '$1'=='$'+'1') {
place.innerHTML=co.chkShowRightSidebar?labelHide:labelShow;
place.title=(co.chkShowRightSidebar?'hide':'show')+' right sidebar';
}
var sm=document.getElementById('storyMenu'); if (sm) config.refreshers.content(sm);
</script><script>
var co=config.options;
if (co.chkShowRightSidebar=='undefined') co.chkShowRightSidebar=true;
var sb=document.getElementById('sidebar'); if (!sb) return;
sb.style.display=co.chkShowRightSidebar?'block':'none';
document.getElementById('displayArea').style.marginRight=co.chkShowRightSidebar?'':'1em';
if ('$1'=='$'+'1') {
var labelShow=co.txtToggleRightSideBarLabelShow||(config.browser.isSafari?'◀':'◄');
var labelHide=co.txtToggleRightSideBarLabelHide||'►';
place.lastChild.innerHTML=co.chkShowRightSidebar?labelHide:labelShow;
place.lastChild.title=(co.chkShowRightSidebar?'hide':'show')+' right sidebar';
}
</script>
/***
|Name:|ToggleTagPlugin|
|Description:|Makes a checkbox which toggles a tag in a tiddler|
|Version:|3.1.0 ($Rev: 4907 $)|
|Date:|$Date: 2008-05-13 03:15:46 +1000 (Tue, 13 May 2008) $|
|Source:|http://mptw.tiddlyspot.com/#ToggleTagPlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License:|http://mptw.tiddlyspot.com/#TheBSDLicense|
!!Usage
{{{<<toggleTag }}}//{{{TagName TiddlerName LabelText}}}//{{{>>}}}
* TagName - the tag to be toggled, default value "checked"
* TiddlerName - the tiddler to toggle the tag in, default value the current tiddler
* LabelText - the text (gets wikified) to put next to the check box, default value is '{{{[[TagName]]}}}' or '{{{[[TagName]] [[TiddlerName]]}}}'
(If a parameter is '.' then the default will be used)
* TouchMod flag - if non empty then touch the tiddlers mod date. Note, can set config.toggleTagAlwaysTouchModDate to always touch mod date
!!Examples
|Code|Description|Example|h
|{{{<<toggleTag>>}}}|Toggles the default tag (checked) in this tiddler|<<toggleTag>>|
|{{{<<toggleTag TagName>>}}}|Toggles the TagName tag in this tiddler|<<toggleTag TagName>>|
|{{{<<toggleTag TagName TiddlerName>>}}}|Toggles the TagName tag in the TiddlerName tiddler|<<toggleTag TagName TiddlerName>>|
|{{{<<toggleTag TagName TiddlerName 'click me'>>}}}|Same but with custom label|<<toggleTag TagName TiddlerName 'click me'>>|
|{{{<<toggleTag . . 'click me'>>}}}|dot means use default value|<<toggleTag . . 'click me'>>|
!!Notes
* If TiddlerName doesn't exist it will be silently created
* Set label to '-' to specify no label
* See also http://mgtd-alpha.tiddlyspot.com/#ToggleTag2
!!Known issues
* Doesn't smoothly handle the case where you toggle a tag in a tiddler that is current open for editing
* Should convert to use named params
***/
//{{{
if (config.toggleTagAlwaysTouchModDate == undefined) config.toggleTagAlwaysTouchModDate = false;
merge(config.macros,{
toggleTag: {
createIfRequired: true,
shortLabel: "[[%0]]",
longLabel: "[[%0]] [[%1]]",
handler: function(place,macroName,params,wikifier,paramString,tiddler) {
var tiddlerTitle = tiddler ? tiddler.title : '';
var tag = (params[0] && params[0] != '.') ? params[0] : "checked";
var title = (params[1] && params[1] != '.') ? params[1] : tiddlerTitle;
var defaultLabel = (title == tiddlerTitle ? this.shortLabel : this.longLabel);
var label = (params[2] && params[2] != '.') ? params[2] : defaultLabel;
var touchMod = (params[3] && params[3] != '.') ? params[3] : "";
label = (label == '-' ? '' : label); // dash means no label
var theTiddler = (title == tiddlerTitle ? tiddler : store.getTiddler(title));
var cb = createTiddlyCheckbox(place, label.format([tag,title]), theTiddler && theTiddler.isTagged(tag), function(e) {
if (!store.tiddlerExists(title)) {
if (config.macros.toggleTag.createIfRequired) {
var content = store.getTiddlerText(title); // just in case it's a shadow
store.saveTiddler(title,title,content?content:"",config.options.txtUserName,new Date(),null);
}
else
return false;
}
if ((touchMod != "" || config.toggleTagAlwaysTouchModDate) && theTiddler)
theTiddler.modified = new Date();
store.setTiddlerTag(title,this.checked,tag);
return true;
});
}
}
});
//}}}
{{left{Tick and <<toolbar closeTiddler>> to toggle ~TiddlerBar tabs off.
----
/%
|Name|ToggleTiddlersBar|
|Source|http://www.TiddlyTools.com/#ToggleBreadcrumbs|
|Version|0.0.0|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|script|
|Requires|BreadcrumbsPlugin, InlineJavascriptPlugin|
|Overrides||
|Description|dynamically enable/disable BreadcrumbsPlugin display|
%/{{nowrap{<script>
if (config.options.chkDisableTabsBar==undefined) config.options.chkDisableTabsBar=true;
</script><<option chkDisableTabsBar>><script>
var chk=place.lastChild;
chk.coreOnChange=chk.onchange;
chk.onchange=function() {
if (this.coreOnChange) this.coreOnChange.apply(this,arguments);
this.checked=config.options.chkDisableTabsBar;
if (config.macros.DisableTabsBar) config.macros.DisableTabsBar.refresh();
return
};
</script>
----
Untick and <<toolbar closeTiddler>> to turn them on again.}}}
You can toggle the ~TiddlerBar tabs on and off for printing. When they are off all open tiddlers will be displayed one after the other.
|~ViewToolbar|snapshotPrint > < * closeTiddler closeOthers +editTiddler > < * fields permalink references jump|
|~AltViewToolbar|snapshotPrint > < *closeTiddler closeOthers +editTiddler > < * fields permalink references jump|
|~EditToolbar|+saveTiddler saveCloseTiddler -cancelTiddler cancelCloseTiddler deleteTiddler toggleQuickEdit|
{{center{
{{floatleft{ <<tiddler ToggleLeftSidebar>>}}}{{floatright{{{smallform{<<unsavedChanges command>>}}} <<tiddler ToggleRightSidebar>> }}}/%
%/{{big{{{span{<script>
place.style.display=readOnly?'none':'inline';
</script><<newTiddler title: 'Give your topic a name here' tag: 'Topics' tag: 'closed' label: 'newTopic' text:"">> <<tiddler NewProjectTemplate>> }}}<<tiddler ShowPopup with: [[TopMenu##Search]] "Search" "search in this document" tiddlyLinkExisting 12em sticky>> {{transparent{<<gotoTiddler
inputstyle:"width:9%;font-size:65%;border:1px inset #999;"
liststyle:"font-size:45%;"
search
>> <<closeAll>> <<fontSize font>> [[(Tabs)|ToggleTiddlersBar]]/%
%/}}}/%
!Search
{{smallform{<<search>><<option chkUseYourSearch>>}}}
!end
%/
|invisiblecomm|k
|@@padding-left: 15px;{{purple{<<newTiddler title: 'Give your topic a name here' tag: 'Topics' tag: 'closed' label: 'New Master Topic' text:"">>}}}@@||padding-left: 15px;{{purple{<<tiddler NewProjectTemplate>>}}}||@@padding-left: 15px;{{purple nowrap{<<search>><<option chkUseYourSearch>>}}}@@||@@padding-left: 15px;{{purple{<<closeAll>>}}}@@||@@padding-left: 15px;{{purple nowrap{<<fontSize font>>}}}@@||@@padding-left: 15px;{{purple{[[(Tabs)|ToggleTiddlersBar]]}}}@@||@@padding-left: 15px;{{purple{<<tiddler ToggleRightSidebar with: "(Sidebar)">>}}}@@|
<!--{{{-->
<a style="color: #5566ff">Looks like you are creating or editing a hierarchy of topics from the top down!<br>Add the name of your topic both in the top window, and in the sitemap slider below.<br>Click 'done', then click the 'create subtopic within this topic' button to create subtopics and notes within this topic.<br>If you wish to add text below, do so below the line with the sitemap slider.</a>
<!--}}}-->
{{treeview{<<treeview2 "$1" "treeview-gray" 'collapsed: true,
antisesame: "closed", animated: "fast", persist: "cookie", cookieId:
"Topics"'>>}}}
{{treeview{<<treeview2 {{story.findContainingTiddler
(place).getAttribute
('tiddler');}} "treeview-gray" 'collapsed: true,
antisesame: "closed", animated: "fast", persist: "cookie", cookieId:
"Topics"'>>}}}
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::AltViewToolbar]]'><span macro="hideWhen readOnly"><span style='padding-right: 1.8em;' macro='newHere label:"*create subtopic notes*"'></span><span style="color:#ccc;"></span><span style="padding-right:1.8em;" macro='tagger'></span ><span style='padding-right: 1.8em;' macro='monkeyTagger tabs'></span><span style="color:#ccc;"></span></span></div></div>
<span class='big' macro='tiddler TopicsTemplate2'></span>
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
<!--}}}-->
/***
|Name|TreeviewPluginPlugin2|
|Source|http://treeview.tiddlyspot.com/|
|Version|0.24|
|Author|MarkS|
|License|Various. See respective libraries for details|
|Type|plugin|
|Requires(1) |jQuery library, treeview plugin libraries and styles |
|Requires(2) |AttachFilePackage and sub-libraries from tiddlytools.com if you want to use embedded images to create the tree|
|Description|Creates a tag tree, formatted as an actual tree |
|Status|Experimental - ALPHA, but built on fairly solid technologies|
|Warning|When creating tag trees, make sure no tiddler loops back on itself, or its likely the script will hang|
!!!!Set up for portability
You will need a version of TW that incorporates the jQuery library. That happens automatically with recent editions of TW. You will also need to install or access the treeview libraries from http:www.dynamicdrive.com. The libraries can be carried as local files, inserted in the MarkupPostBody, or referenced from the dynamicdrive site. Each approach will require a different set up.
You will also need to link in the stylesheet for the treeview objects. A quick way to do this is to put:
>{{{<link rel="stylesheet" type="text/css" href="http://www.dynamicdrive.com/dynamicindex1/treeview/jquery.treeview.css" /> }}}
into the MarkupPreHead tiddler. However, this won't work if you go off line. It also doesn't work permanently if you are hosting your file on a web server. So you may want to download a copy of the stylesheet and attendant image files and change the MarkupPreHead tiddler to pick up the local copy. Or load the stylesheet and images onto your own server where you will be able to access them.
!!!!Usage
{{{<<treeview2 }}}
>{{{<root tag> [tree style] [startup parameters]}}}
{{{ >>}}}
!!!!!Where:
''root tag'' is the tag at the top of your tagging tree, i.e. the mother of all tiddlers related to it by using its name as one of their tags.
''tree style'' indicates which type of tree will be displayed, possibly //treeview//, //filetree//, and //treeview-red//, and //treeview-famfamfam//. There may be other styles too, but those are the ones I know about.
''startup parameters'' are a set of optional parameters given in a comma-separated, key/value string like this:
>{{{'collapsed: false, animated: "normal", persist: true'}}}
There's a list of possible options at:
http://www.dynamicdrive.com/dynamicindex1/treeview/index.htm
However, not all settings may actually work under TW. Mainly, you will probably be interested in controlling the presence of animation, and whether the initial state of the tree is opened or closed.
!!!!Images and stylesheet set-up
The tree is constructed from little bits of images. If you don't want to carry these images in a separate directory, nor reference them remotely, you can embed them in your TW file. To do this, you will need the AttachFilePackage and accompanying plugins from
> www.tiddlytools.com
and you will need the AttachFilePluginFormatters plugin from the same site.
Then import all the tiddlers from this file tagged as treeviewimage . These images are referenced in the StyleSheet. If you import JqueryTreeviewCss from this file, and then put the name in your StyleSheet, the images should be imported without having to access them remotely.
!!!!Persistence
To make persistence work, you will need to have the treeview cookie library loaded. The easiest way to do that is to put:
>{{{<script src="http://www.dynamicdrive.com/dynamicindex1/treeview/lib/jquery.cookie.js" type="text/javascript"></script>}}}
into the MarkupPostBody. However, this technique will only work if you have online access. If you will be working offline, then you will either need to download the cookie library to the same directory as your ~TiddlyWiki file and put the following into your MarkupPostBody:
>>{{{<script src="jquery.cookie.js"></script>}}}
or you will need to put the entire contents of the cookie library into script tags inside the MarkupPostBody.
Then, in any macro that wants its tree to be persistently configured, you will need to use configuration parameter:
>>{{{persist: "cookie", cookieId: "myid"}}}
where //myid// should be an identification that will be unique throughout the entire TW file.
***/
//{{{
config.macros.treeview2 = {
handler: function (place, macroName, params, wikifier, paramString, tiddler)
{ // Code here
var lcTag = params[0] ;
var lcClass = params[1] ? params[1] : "treeview" ;
var DEV_MODE = false ; // Make true when developing code or changes won't show up.
try {
if( MAS === undefined ) MAS = { } ;
} catch(ex) {
MAS = {} ;
}
MAS.treeviewSettings = function(obj) {
var defa = {} ;
defa.collapsed= true;
defa.unique = true ;
//defa.persist= "location" ;
if( obj !== undefined ) {
try {
obj = eval("({" + obj + "})" ) ;
} catch(ex) {
alert("Unable to use your treeview configuration settings!") ;
return defa ;
}
for (var prop in obj) {
defa[prop] =obj[prop] ;
}
}
return defa ;
} ;
if( DEV_MODE || MAS.getTiddlersPerTagAsHtmlList === undefined ) {
MAS.getTiddlersPerTagAsHtmlList = function(tagname,setup) {
var tids = store.getTaggedTiddlers(tagname) ;
var temp = "" ;
var prefix = tids.length > 0 ? "<span class='folder'>" : "<span class='file'>" ;
var statetags = store.getTiddler(tagname).tags ;
var state = "" ;
var lcSesame = setup["sesame"] !== undefined ? setup["sesame"] : "" ;
var lcAntiSesame = setup["antisesame"] !== undefined ? setup["antisesame"] : "" ;
if(statetags.length > 0 ) {
if(lcSesame) state = statetags.contains(lcSesame) ? ' class="open"' : ' class="closed"' ;
if(lcAntiSesame) state = statetags.contains(lcAntiSesame) ? ' class="closed"' : ' class="open"' ;
}
// state="" ; // DEBUG
//var rtn ="<li>" + prefix + tagname + "</a></span>" ;
var rtn = "<li" + state +">" + prefix + "<a href=\"javascript:;\" tiddlylink=\"" + tagname + "\" refresh=\"link\" class='tiddlyLink tiddlyLinkExisting' title='Link to " + tagname + "' >" + tagname + "</a></span>" ;
//wikify(rtn,place) ;
forever:
while(true) {
if(tids.length == 0 ) break ;
rtn = rtn + "<ul>" ;
for(var i=0;i<tids.length;i++) {
temp = MAS.getTiddlersPerTagAsHtmlList(tids[i].title, setup) ;
rtn = rtn + temp ;
}
rtn = rtn + "</ul>\n" ;
break ;
} // forever
rtn = rtn + "</li>\n" ;
return rtn ;
} ; // End of function definition
} // End of checking if function already defined
// The extra set of span tags are needed here because jquery find function ignores
// the outer set of tags. Or at least that's what seems to be happening. So, I give
// it an extra set so it can throw it away without consequence
var loSetup = MAS.treeviewSettings(params[2]) ;
var lcId = "root" + (new Date()).getTime().toString() ;
if(loSetup.cookieId) {
lcId = "root_" + loSetup.cookieId ;
}
//var a = '<span id="' + lcId + '"><ul id="' + "root" + '" >' + MAS.getTiddlersPerTagAsHtmlList(lcTag, loSetup) + "</ul></span>" ;
var a = '<ul id="' + lcId + '" >' + MAS.getTiddlersPerTagAsHtmlList(lcTag, loSetup) + "</ul>" ;
var b = jQuery(a) ;
// A smarter person might have know how to put the onclick function in at the top
b.find("a").each(function(n) {
this.onclick = onClickTiddlerLink ;
}) ;
//b.find(lcId).attr("class",lcClass) ;
//b.find("#root").attr("class",lcClass) ;
jQuery(place).append(b) ;
jQuery(place).find("#" + lcId).attr("class",lcClass).treeview(loSetup) ;
}
};
//}}}
/***
|Name|UnsavedChangesPlugin|
|Source|http://www.TiddlyTools.com/#UnsavedChangesPlugin|
|Version|3.3.3|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides|TiddlyWiki.prototype.setDirty,store.saveTiddler,store.removeTiddler|
|Description|show droplist of tiddlers that have changed since the last time the document was saved|
Display a list of tiddlers that have been changed since the last time the document was saved. The list includes all new/modified tiddlers as well as those changed with "minor edits" enabled and any tiddlers that you import during the session, regardless of their modification date.
!!!!!Usage
<<<
{{{
<<unsavedChanges panel>> or <<unsavedChanges>>
}}}
{{indent{
the ''panel'' keyword displays a 'control panel' interface containing a droplist of unsaved tiddlers and a 'goto' button, along with a command link to 'save changes'. Depending upon what other plugins are installed, several additional elements will also be displayed: When [[NestedSlidersPlugin]] is installed, the entire control panel is contained within a ''SLIDER''. When [[LoadTiddlersPlugin]] is installed, a ''REVERT'' button is added. When [[SaveAsPlugin]] is installed, a ''SAVE AS'' link is added. When [[UploadPlugin]] is installed, an ''UPLOAD'' (or ''save to web'') link is added. When [[TrashPlugin]] is installed and there are tiddlers tagged with<<tag Trash>>, an ''EMPTY TRASH'' link is added.
}}}
{{{
<<unsavedChanges list separator>>
}}}
{{indent{
the ''list'' keyword displays a simple space-separated list of unsaved tiddlers without any other command links. You can specify an optional ''separator'' value that can be used in place of the default space character. For example, you can specify {{{"<br>"}}} as the separator in order to display each link, one per line.
}}}
{{{
<<unsavedChanges command label tip>>
}}}
{{indent{
the ''command'' keyword displays a single 'command link' that, when clicked, displays a ~TiddlyWiki popup containing the list of unsaved tiddlers, the 'save changes' command and, depending upon what other plugins are installed, additional commands for 'save as', 'upload', and 'empty trash' (similar to the panel display described above).
You can specify optional ''label'' and ''tip'' parameters in the macro to customize the command link text and tooltip. The default label for the command link is: "There %1 %0 unsaved tiddler%2...", where:
* %0 is automatically replaced with the number of unsaved changes
* %1 is either "is" (if changes=1) or "are" (if changes>1)
* %2 is either blank (if changes=1) or "s" (if changes>1)
resulting in the text: //"There is 1 unsaved tiddler...", "There are 2 unsaved tiddlers...", etc.//
}}}
<<<
!!!!!Examples
<<<
^^//note: the following examples will not display any output unless you have already created/modified tiddlers in the current document.//^^
{{{<<unsavedChanges>>}}}
<<unsavedChanges>>
----
{{{<<unsavedChanges command>>}}}
<<unsavedChanges command>>
----
{{{<<unsavedChanges list>>}}}
<<unsavedChanges list>>
----
{{{<<unsavedChanges list "<br>">>}}}
<<unsavedChanges list "<br>">>
<<<
!!!!!Revisions
<<<
2009.03.02 [3.3.3] fix handling for titles that contain HTML special chars (lt,gt,quot,amp)
2008.09.02 [3.3.2] cleanup popup list output generation and added timestamps/sizes to popup display
2008.08.23 [3.3.1] added optional custom 'label' and 'tip' params to 'command' mode and defined default values for mode, label, tip, and separator as object properties for I18N/L10N-readiness.
2008.08.21 [3.3.0] complete re-write of rendering and refresh processing to support multiple instances and automatic self-refresh (no longer depends upon core refresh notifications)
2008.08.21 [3.2.0] added 'command' option for link+popup as alternative to 'control panel' interface
2008.04.22 [3.1.2] use SaveAsPlugin instead of obsolete NewDocumentPlugin to add "save as" link
2007.12.22 [3.1.1] hijack removeTiddler() instead of low-level deleteTiddler() to correct tracking and refresh handling issues. in saveTiddler(), check for 'tiddler rename' (title!=newtitle) and adjust list accordingly.
2007.12.21 [3.1.0] added support for {{{<<unsavedChanges list separator>>}}} usage to unsaved tiddlers as a simple list of links, embedded in tiddler content (e.g., [[MainMenu]])
2007.12.20 [3.0.0] rewrite to track ALL changed tiddlers, including imports and minor edits, regardless of saved modification dates. Also, rewrote display logic to directly refresh macro output instead of triggering a page refresh. The entire process is MUCH more efficient now.
2007.08.02 [2.0.0] converted from inline script
2007.01.01 [1.0.0] initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.UnsavedChangesPlugin= {major: 3, minor: 3, revision: 3, date: new Date(2009,3,2)};
config.macros.unsavedChanges = {
changed: [], // list of currently unsaved tiddler titles
defMode: "panel",
defSep: " ",
defLabel: "There %1 %0 unsaved tiddler%2...",
defTip: "view a list of unsaved tiddler changes",
handler: function(place,macroName,params,wikifier,paramString,tiddler) {
var wrapper=createTiddlyElement(place,"span",null,"unsavedChanges");
wrapper.setAttribute("mode",params[0]||this.defMode);
wrapper.setAttribute("sep",params[1]||this.defSep); // for 'list' mode
wrapper.setAttribute("label",params[1]||this.defLabel); // for 'command' mode
wrapper.setAttribute("tip",params[2]||this.defTip); // for 'command' mode
this.render(wrapper);
},
render: function(wrapper) {
removeChildren(wrapper); // make sure its empty
if (!this.changed.length) return; // no changes = no output
switch (wrapper.getAttribute("mode")) {
case "command": this.command(wrapper); break;
case "list": this.list(wrapper); break;
case "panel": default: this.panel(wrapper); break;
}
},
refresh: function() {
var wrappers=document.getElementsByTagName("span");
for (var w=0; w<wrappers.length; w++)
if (hasClass(wrappers[w],"unsavedChanges"))
this.render(wrappers[w]);
},
list: function(place) { // show simple list of unsaved tiddlers
wikify("[["+this.changed.join("]]"+place.getAttribute("sep")+"[[")+"]]",place);
},
command: function(place) { // show command link with popup list
var c=this.changed.length;
var txt=place.getAttribute("label").format([c,c==1?'is':'are',c==1?'':'s']);
var tip=place.getAttribute("tip");
var action=function(ev) { if (!ev) var ev=window.event;
var p=Popup.create(this); if (!p) return false;
var d=createTiddlyElement(p,"div");
d.style.whiteSpace="normal"; d.style.width="auto"; d.style.padding="2px";
// gather pretty links for changed tiddlers
var list=[]; var item=" [[%1 - %0 (%2 bytes)|%0]] ";
for (var i=config.macros.unsavedChanges.changed.length-1; i>=0; i--) {
var tid=store.getTiddler(config.macros.unsavedChanges.changed[i]);
if (!tid) continue;
var when=tid.modified.formatString('YYYY.0MM.0DD 0hh:0mm:0ss');
list.push(item.format([tid.title,when,tid.text.length]));
}
wikify("@@white-space:nowrap;"+list.join("<br>")+"@@",d);
if (!readOnly) {
var t="\n----\n";
t+="@@white-space:nowrap;display:block;text-align:center; ";
t+="<<saveChanges>>";
t+=config.macros.saveAs?" | <<saveAs>>":"";
t+=config.macros.upload?" | <<upload>>":"";
t+=(config.macros.emptyTrash&&store.getTaggedTiddlers("Trash").length)?" | <<emptyTrash>>":"";
t+=" @@";
wikify(t,d);
}
Popup.show(p,false);
ev.cancelBubble=true; if(ev.stopPropagation)ev.stopPropagation();
return(false);
}
createTiddlyButton(place,txt,tip,action,"button");
},
panel: function(place) { // show composite droplist+buttons+commands
// gather changed tiddlers (in reverse order by date - most recent first)
var tids=[]; for (var i=this.changed.length-1; i>=0; i--)
{ var t=store.getTiddler(this.changed[i]); if (t) tids.push(t); }
tids.sort(function(a,b){return a.modified<b.modified?-1:(a.modified==b.modified?0:1);});
// generate droplist items
var list=[]; var item='<option value="%0">%1 - %0 (%2 bytes)</option>';
for (var i=tids.length-1; i>=0; i--) {
var when=tids[i].modified.formatString('YYYY.0MM.0DD 0hh:0mm:0ss');
list.push(item.format([tids[i].title.htmlEncode(),when,tids[i].text.length]));
}
// display droplist, buttons, and command links
var out=''; var c=this.changed.length;
var NSP=config.formatters.findByField("name","nestedSliders");
var summary=this.defLabel.format([c,c==1?'is':'are',c==1?'':'s'])
out+=NSP?'+++(unsaved)['+summary+'|'+this.defTip+']...':(summary+"\n");
out+='<html><form style="display:inline"><!--\
--><select size="1" name="list" \
title="select a tiddler to view" \
onchange="var v=this.value; if (v.length) story.displayTiddler(null,v);"><!--\
-->'+list.join('')+'<!--\
--></select><!--\
--><input type="button" value="goto" onclick="this.form.list.onchange();">';
if (config.macros.loadTiddlers) {
out+='<input type="button" value="revert" \
title="import the last saved version of this tiddler" \
onclick="var v=this.form.list.value; if (!v.length) return; \
var t=\'<\'+\'<loadTiddlers [[tiddler:\'+v+\']] \'; \
t+=document.location.href; \
t+=\' confirm force noreport>\'+\'>\'; \
var e=document.getElementById(\'executeRevert\'); \
if (e) e.parentNode.removeChild(e); \
e=document.createElement(\'span\'); \
e.id=\'executeRevert\'; \
wikify(t,e);">';
}
out+='</form></html>';
if (!readOnly) {
out+='\n{{small nowrap{';
out+="<<saveChanges>>";
out+=config.macros.saveAs?" | <<saveAs>>":"";
out+=config.macros.upload?" | <<upload>>":"";
out+=(config.macros.emptyTrash&&store.getTaggedTiddlers("Trash").length)?" | <<emptyTrash>>":"";
out+='}}}';
}
out+=NSP?'===':'';
wikify(out,place);
}
};
// hijack store.saveTiddler() to track changes to tiddlers
if (store.showUnsaved_saveTiddler==undefined) {
store.showUnsaved_saveTiddler=store.saveTiddler;
store.saveTiddler=function(title,newtitle) {
if (title!=newtitle) {
var i=config.macros.unsavedChanges.changed.indexOf(title);
if (i!=-1) config.macros.unsavedChanges.changed.splice(i,1); // remove old from list
}
var i=config.macros.unsavedChanges.changed.indexOf(newtitle);
if (i!=-1) config.macros.unsavedChanges.changed.splice(i,1); // remove new title from list
config.macros.unsavedChanges.changed.push(newtitle); // add new title to END of list
var t=this.showUnsaved_saveTiddler.apply(this,arguments);
if (!this.notificationLevel) config.macros.unsavedChanges.refresh();
return t;
}
}
// hijack store.removeTiddler() to track changes to tiddlers
if (store.showUnsaved_removeTiddler==undefined) {
store.showUnsaved_removeTiddler=store.removeTiddler;
store.removeTiddler=function(title) {
var i=config.macros.unsavedChanges.changed.indexOf(title);
if (i!=-1) config.macros.unsavedChanges.changed.splice(i,1); // remove from list
this.showUnsaved_removeTiddler.apply(this,arguments);
if (!this.notificationLevel) config.macros.unsavedChanges.refresh();
}
}
// hijack store.setDirty() function to reset change list after file save
// note: do NOT hijack the prototype function. This hijack should only be applied to
// the main 'store' instance only (i.e., don't refresh when loading temporary store
// as part of ImportTiddlers processing)
if (store.showUnsaved_setDirty==undefined) {
store.showUnsaved_setDirty=store.setDirty;
store.setDirty = function(flag) {
var refresh=this.isDirty() && !flag; // 'dirty' to 'clean', force a refresh...
this.showUnsaved_setDirty.apply(this,arguments); // but change the flag first.
if (refresh) {
config.macros.unsavedChanges.changed=[]; // clear changed list
config.macros.unsavedChanges.refresh();
}
}
}
//}}}
| !date | !user | !location | !storeUrl | !uploadDir | !toFilename | !backupdir | !origin |
| 26/11/2009 22:59:31 | YourName | [[/|http://pstorm.tiddlyspot.com/]] | [[store.cgi|http://pstorm.tiddlyspot.com/store.cgi]] | . | [[index.html | http://pstorm.tiddlyspot.com/index.html]] | backup | ok |
| 26/11/2009 23:04:03 | YourName | [[/|http://pstorm.tiddlyspot.com/]] | [[store.cgi|http://pstorm.tiddlyspot.com/store.cgi]] | . | [[index.html | http://pstorm.tiddlyspot.com/index.html]] | backup | ok |
| 26/11/2009 23:08:15 | YourName | [[/|http://pstorm.tiddlyspot.com/]] | [[store.cgi|http://pstorm.tiddlyspot.com/store.cgi]] | . | [[index.html | http://pstorm.tiddlyspot.com/index.html]] | backup | ok |
| 26/11/2009 23:16:03 | YourName | [[/|http://pstorm.tiddlyspot.com/]] | [[store.cgi|http://pstorm.tiddlyspot.com/store.cgi]] | . | [[index.html | http://pstorm.tiddlyspot.com/index.html]] | backup |
| 26/11/2009 23:59:47 | YourName | [[pstorm.html|file:///C:/Documents%20and%20Settings/M%C3%A5ns/Dokumenter/Downloads/pstorm.html]] | [[store.cgi|http://pstorm.tiddlyspot.com/store.cgi]] | . | [[index.html | http://pstorm.tiddlyspot.com/index.html]] | backup |
| 27/11/2009 00:07:10 | YourName | [[/|http://pstorm.tiddlyspot.com/]] | [[store.cgi|http://pstorm.tiddlyspot.com/store.cgi]] | . | [[index.html | http://pstorm.tiddlyspot.com/index.html]] | backup |
| 27/11/2009 15:38:49 | YourName | [[/|http://pstorm.tiddlyspot.com/]] | [[store.cgi|http://pstorm.tiddlyspot.com/store.cgi]] | . | [[index.html | http://pstorm.tiddlyspot.com/index.html]] | backup |
| 27/11/2009 15:51:21 | YourName | [[/|http://pstorm.tiddlyspot.com/]] | [[store.cgi|http://pstorm.tiddlyspot.com/store.cgi]] | . | [[index.html | http://pstorm.tiddlyspot.com/index.html]] | backup | ok |
| 27/11/2009 16:10:14 | YourName | [[/|http://pstorm.tiddlyspot.com/]] | [[store.cgi|http://pstorm.tiddlyspot.com/store.cgi]] | . | [[index.html | http://pstorm.tiddlyspot.com/index.html]] | backup |
| 27/11/2009 16:19:25 | YourName | [[/|http://pstorm.tiddlyspot.com/]] | [[store.cgi|http://pstorm.tiddlyspot.com/store.cgi]] | . | [[index.html | http://pstorm.tiddlyspot.com/index.html]] | backup |
/***
|''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");
//}}}
<<list filter [tag[Verify]] [sort[+modified]]>>
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::ViewToolbar]]'><span macro="hideWhen readOnly"><span macro='newHere tag:"closed" label:"*create subtopic notes*"'></span><span style="padding-right:1.8em;" macro='tagger'></span ><span style='padding-right: 1.8em;' macro='monkeyTagger tabs'></span><span style="color:#ccc;"></span></span</div></div>
<span class='title' macro='view title'></span>
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
<!--}}}-->
~NoteStorm is a free and easy way to take and organize notes. I created it for my seminary students, but am making it available for everyone.
<<tabs txtMenuMenu
"How to download" "How to download" 'How to download'
"How to use" "How to use" 'How to use'
"How to personalize" "How to personalize" 'Personalizing NS'
"Slideshow tutorial" "Slideshow tutorial" SlideShowTutorial
"TiddlyWiki" "TiddlyWiki" TiddlyWiki
>>
| source file:|{{{C:\Users\giffmex\Documents\Art and photos\Art and digital\Digital STUFF I MADE\china crisis 1.jpg}}}|
| attached on:|16 September 2009 by YourName|
| embedded:|[[china crisis 1.jpg|china crisis 1.jpg]] - {{{type=image/jpeg, size=43478 bytes, encoded=58877 bytes}}}|
| local file:|/%LOCAL_LINK%/[[file:///C:/Users/giffmex/Documents/Art and photos/Art and digital/Digital STUFF I MADE/china crisis 1.jpg|file:///C:/Users/giffmex/Documents/Art and photos/Art and digital/Digital STUFF I MADE/china crisis 1.jpg]]|
| remote link:|//none//|
image
<<<
usage: {{{[img[tooltip|china crisis 1.jpg]] or [img[tooltip|china crisis 1.jpg][link]]}}}
[img[tooltip|china crisis 1.jpg]]
<<<
/% DO NOT EDIT BELOW THIS POINT
---BEGIN_DATA---
image/jpeg;base64,
/9j/4AAQSkZJRgABAQEASABIAAD/4RBYRXhpZgAATU0AKgAAAAgAAodpAAQAAAAB
AAAIMuocAAcAAAgMAAAAJgAAAAAc6gAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAB6hwABwAACAwAAAhEAAAAABzqAAAACAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+ELO2h0dHA6Ly9ucy5hZG9i
ZS5jb20veGFwLzEuMC8APD94cGFja2V0IGJlZ2luPSfvu78nIGlkPSdXNU0wTXBD
ZWhpSHpyZVN6TlRjemtjOWQnPz4NCjx4bXA6eG1wbWV0YSB4bWxuczp4bXA9ImFk
b2JlOm5zOm1ldGEvIj48cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMu
b3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPjxyZGY6RGVzY3JpcHRpb24g
cmRmOmFib3V0PSJ1dWlkOmZhZjViZGQ1LWJhM2QtMTFkYS1hZDMxLWQzM2Q3NTE4
MmYxYiIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEv
Ij48ZGM6c3ViamVjdD48cmRmOkJhZyB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMu
b3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPjxyZGY6bGk+cmVkICZhbXA7
IGJsYWNrPC9yZGY6bGk+PC9yZGY6QmFnPg0KCQkJPC9kYzpzdWJqZWN0PjwvcmRm
OkRlc2NyaXB0aW9uPjxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSJ1dWlkOmZh
ZjViZGQ1LWJhM2QtMTFkYS1hZDMxLWQzM2Q3NTE4MmYxYiIgeG1sbnM6TWljcm9z
b2Z0UGhvdG89Imh0dHA6Ly9ucy5taWNyb3NvZnQuY29tL3Bob3RvLzEuMCI+PE1p
Y3Jvc29mdFBob3RvOkxhc3RLZXl3b3JkWE1QPjxyZGY6QmFnIHhtbG5zOnJkZj0i
aHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+PHJk
ZjpsaT5yZWQgJmFtcDsgYmxhY2s8L3JkZjpsaT48L3JkZjpCYWc+DQoJCQk8L01p
Y3Jvc29mdFBob3RvOkxhc3RLZXl3b3JkWE1QPjwvcmRmOkRlc2NyaXB0aW9uPjwv
cmRmOlJERj48L3htcDp4bXBtZXRhPg0KPD94cGFja2V0IGVuZD0ndyc/PiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAg/9sAQwAGBAUGBQQGBgUGBwcGCAoQ
CgoJCQoUDg8MEBcUGBgXFBYWGh0lHxobIxwWFiAsICMmJykqKRkfLTAtKDAlKCko
/9sAQwEHBwcKCAoTCgoTKBoWGigoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo
KCgoKCgoKCgoKCgoKCgoKCgoKCgo/8AAEQgBDgEjAwEiAAIRAQMRAf/EAB8AAAEF
AQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQEC
AwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq
NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqS
k5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk
5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkK
C//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGx
wQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFla
Y2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2
t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQAC
EQMRAD8A6f4g+GH0lJnmkt4LS4Zsy7hjnBwBgHt2HbvwK+e9evoIlFtaRhACSSRg
uT3PTgc4+p9a6T4lfE/VfFt8d7mG1U5it1b5UH9T71zek+G7/Ugt3NBItoTkysMB
vp0z0P5GocUnc1i3bU9L+BXw2sfEED+IPEMkbWEMhRYc/KxxnLHv1HA75B5GK9M1
z4d6FPayLpulrp8DQELKr4eQjB5znAOB0UEDcM84ryL4W6zaeDfG0sN+sf2O72qp
Z1VQ2/gkkA/dLHqo4J+Y7Qfoi/d7tm8+dxaxAG4eI4yevlqQefcg5HHWtL3V0RJv
mPANU8NXVrCtndxrcIvyrMgziRjnr7sp5IyQDjA3CsPwxqI8MeITp15Pv0iaUhot
qgZbAV3JbAHCnJJ2jOMZOfoDxCI9W0+S1igWKMbljGFOG29zhsADr179hXiGt+HL
W4+0xOG87eW80kHf1wpHJJOWOMjJBz0BrGVkzWnKRv8AiXTprqa2g0YpcWs+XTyx
/rORlhzznBP5D2rnNT0+SBlVgc5weOQfSrPw48e3Xg8HRNThL20kwPmyKimDdktu
6HJYqSxJ6Y29x6LrcNlqFw0tnaiGFogI4wS52sRh+cgE5OMnqfXmuHEYKM/eg9T6
nA8RSpL2deN0uvc8dWFobl8cnOOa9H8K2zJZSMPLAJVsOBtxjnLfQ4HPG49OdyXX
h23uJ7hbcIAMNjOREg4wWPJ5xzj19eOl8N+H3MMYS33qSP3rS7MMT1IHP+OR2rPD
4acKt5I0zfOqGIwvs6L1bPNfjRaSxadpkxjby4SzsUbC/MUHC9P4hkkd1yR8qnDs
biSfRYbq68pbUPseWUb1OWzyB2J3epJyckjib45+OrXXNQj0fR1c2VkxWSVyxMsg
IBwDjAGMZxnrzg4rlPB+iax4wvVsNHIjjhXLyOxWNAe/ygkt14wTwa9Rw7HyKlda
nXX+uWiCNJNQkvIwiphQ22NVPCIHYJtxxzk5GPSspvGckLQw6ZawQzBUXCI0krsv
8W1cAHJJ2jv1ziuy0v4Z6TaRMmpzXGqX3lsXQsYYFO4bSFX5iSPlwzfezleAK9HF
zoHhnQ7yDw2bO3uzGJIJ7e0WPe6scxlcbv4cZY7cMTyRzHur4mbUqU6rUacbnhmn
WvjK6R72w03VwHEZSZk8hWOVRSv3cg57YySc+taWnfDTxZqt9Kt6+nWUyBhI08xk
ZBt3DPl565xy3JBHUYPT2vi+4ntJDJL9iZCuPLj2sR8p4Pb7qnPUMM9eaw4davGu
IbiOeSIxsWjUOSU+UjIz7Ej8TXDUx9OFrK59HQ4axNS6lNJ+j/4B2Hwq8JaTod5d
z3V+0viGCEypHcw+QURRu3wqCRg4A3g7scEISQe005mnK/aSYlZIzO7AE7VdV4yf
dzzkAbuBnB4KDxNbXuiR2Gq/aHntzvtbkosvkSli24ozDevO3bwCvBq9pD62Iftk
WuaJItqkKRrJCVkUZDHzEDcqCo+6WPrgriuiniKddqUXsePjcrxOCcvaR0vv0/r1
O3aEmGVJYxFOkY+0OrFiWjjZFG0n+JypGQuBwOeaYjy/2wsB+UT3JgmkQ4Q4BjBH
PIIK9c8ADjkVzLweKrKI30tlYWUd4rIbuaWSZJONoAj2g5IPG4gVk619vtbiSDVN
c057PzRK0VlAJ5SHQ7w7MwCvkkBgWx97g4FXOenNLSxy0sPOrPkpLmuul+36GN4k
+HNjq/iqZfCGqxRhpf3ytAWs4ZOcosgIKnIJ2gFRnBZeFrl38HeNNDa5ksIYZPIQ
vKbO5CMgORyDsfoM4weGB713Ou+LTKLW30QXFhZWoZYIVYYRCAMHBIONv15PrXOa
drVxZtFE1w4i2FFYOf3fBGMc5BBxg8EcVyTzGnz8qV/M+hocMYl0eeckn23fX/gH
O38ninw9eTSXunanbhmKbprYyxuFVhgMv+yTnBB4BOaSPxbb38W26toPN3bjPBgt
wpXBVyF/u5II5A9a9Gi8Y3o1yCG3mGGdd14IAWQNuLNj1wzEj6ck4rqPGGm+EvFU
UtwbSwe5LgRgwkPKoK7n8xArKFyR8xDEA57EdcKlOom4s8nF5diMJb2kbp9VfT10
0PJZNYtLrT5Fk1NVQuZBa3CyugYLhWUMSA2M8ZIGfc1jeMri4tLKGKddiupcEH7w
OCPpwFPXng46Gus1f4VJeSufC9/Pbzqz77W8JdVwcqqyKNwGOpII5XnJNeS64L3T
7ibTNTjZbi2cphjnH+6fTvwccitFG+p510nofQHgmwmtvB2noyhHi3xgzsWAJZum
eRyORxznKqcrWP41t2jneUAHAVRlQMcdPfGCAeeAPoND4MeMLXxJoP8Awjd2hXVb
dGeJt7Kk0S84OM7SAenAxjA4rZ8SeHDLIiyQ/ZyxwA0m7IOCBuA4/kSK58ZRc4WS
PUyXHRwmJ5qjstjyWC2LSSPz0ycVt2ejXd5albSJpJsZCgHt39q6+30S2hefcimW
PadmB8jrjcSOQQe4x0PfHO5Dqum+FdKvLy7tlJhYtHIXIKMf+WeGI6gce4Htjip4
FykvaOyPo8TxLShFqgrvzOY02a007QW1HX3jzEreWh2hpMZJRckAnoQPUYwM4rz2
1juPFOqz6hqM7T+Wh2rtw4XcW2nknoWx1xgKMADFvxJrN98RfEUVzcRG3toVCeUI
1xHkZZmIGQrMobB3bTjk9+r8J+HoG1SFLVXQIFDHKkyYxzwOcgA9OTt7nNelGMaa
5V958pi8XUxVR1JfJdEP0PwdPrV1aR3OLWzST7ifIxRvm+Xg88oQCMdxgYB9PtPh
94XkhZNW0eANK7BLvdkNnI+bBIHOcYAxwMCr9tNbPax2VxEyoEAiki2oyAng8Ed+
D2PHqas3+sDRNFvp9UkRktkLyLIQBMCPlZSxAJJwMZAyevcdEVbY82Te58u/FfwY
3gPxKLaCZZrOZBNDuPzBTng+uMHke2cZFN8J3FpqFzbLMywyp8onI6+gY468AZ44
x0xyuoQr4t17V9SUfup5GEHzBjjjZghVzkAdQpPfJBrndQ03UvD8ytNDJGrfcfHy
uPY9D2/OplaTsjVban01pXhLVLywhuYrdZI5QXV0mADAnrgMMflRXhem/FbxFp9j
DawajcLFEu1R5p4FFChHsZtzudJ8HfhNN4hnj1fXIf8AiTIcom/BnI49Pu54xwT2
r27xNoUeo6UpGMhSkYPAKY+VVHPGAAAFJ6E4xUfgfxzpHjzwsthDOmn6hCqrJbRP
jGPQcZXHp7DNdLLfJY2ZuZVjZVTY4nIIBCnv07d8Z7GtJdiW3c+U/GNlcR3CuJGS
4hYlc5DKwIIIPUdM9M+9e4/DrxZZeLPCaMEih1KJxA8ADFpXAJU7nBH3QWKgtgDq
a8w8e67FO07CCERkv9/G0ck9On8Xrycmo/hB4DvdUE3iSa/v9NslcwH7JOqOcZ3A
4JOA2AyEDg5zxWVLZo0ntc9m137XNAtraXErRLmSe5ChcDICqoB46YA+nPGKoXvh
+1uNDjs7SMxXEZEvnqFHlNnn5gMnOeeh4PPetLWCI73Zc7km3CVBIpcuV6pv47dB
6fWpbx0n0l4JGFvHOd8dxENuc4HDevPHvkUkk3qDuo6I8E8R+Hi80lpfOi3QTeNx
JDAj2z1JOQeTwOO2J4U8a33hm/jt9RJm0gytJMnlBpS5+8c5BLHH8R4GcV2XiHyX
1CUwXss9uFDGW4mGEOPupkDA5GOSNxznBrznVtSk1ZrSwsLD7ROiNGkaIXMmTncF
H8Q/Hj6cpaSsi021qeq3nxo8LwaeqRaVdXU7/O6AqiEqPlQk84ycnA7dOTXEeMPj
BqGvxTRadZrYJKCrM0nmsE6YXIAGRwSQTzxiuH1HwtrtrCt1caVeCBlMnmeWXXaM
EksBgdec1kx7ozh0Kn34P+eK0ZFtRjxsBz1PA9q+l/gho58O/D19RnODrEgMpxho
Y1GIGwfqzbTwRKp6Cvm2aRTggkDkZU4I96+qfBVxHqfw80y7tFgMlyiWq2qx4RZI
1COCuTypRivoDnq2Am3YDN1fWPscUjOU+2RlwXLPtQ7/AG4b5lbC8DjJPAB4XUNW
mnmeQSRsr9VSNY1OMcBVAA4GOla/ibS5GlknjlZ42ZhGzOMPyenPXaFOO4Jx0Ncj
cWjpJmQ7WUklRXhYqpOcrT08j9FyTC4elQVSl7ze7/T5Eslz8+Bwx9+lRmcjHzE+
ueaidGBAx8p796iMRGeTzxXMoRPc5pFpZyVwn0x7VYhv3jxtkKkZ5H9Kzo4yCSxI
BGPepLeJ0AAG7Heq5YrZkOUtjsNU8X67eaNaWV7dS/Yrf/VHPLc8ZPU7RwOfzODX
My3bSYAbcRz/APqq7d3SS6faW8ar5kG/cQMM29g3J74xisZom81WfKhfTvWlV879
59DmwtONGFqcbavb1ZO1xzyQSOfxoWc4HzHI54OM1VaJgxP40qxHO7JxWXJE61KR
fguuNyctnHXpW1pGuzW0jFpof3mMiSIPkc8A43LwSPlIODiuaVGZPm+XPAxVmysZ
WAEeG45O4Aj8TSj7jvF2ZFanGtBwqRun3PX9E1OJ7uJ0YxQpvkmXcznGVJ5YfMTu
jG7jIbOM8V5n+0joMses2HiJlCtqMSpcxryIpUGEGfeMYB7mJiK67wjpk0EiFMTF
0LxRvhklxg4Az90/Pj2XPQ1nftD3lvbeHtNgjkSeTUHS4jZhl0RAwJz2BMiqvH3Q
y8YyfoMNOc43kj8vzGjSo4iUKMrxX9fgeEabc3OnXkF7ZSGKeFt6OADtb1wRivXd
D+Nwt7b7LreiC6jkwJTDcFAORyqkHBxnjPUDGOa8gSQCMDqT+dRrDNcyqkELSOxC
qEUkknoOOp5FbI4mfQt78ZPDNzYiSGyvEumTaysik7gCA4AO3rjPI/HFeZPqWqeM
NVibU5YhGAUUKmxVizuwSASRkAjdnHFYtr4V8Q20Ud02iXpjLHCvCw3YJz8h5I4O
fp7V0Xh3WI7mK0sWSKExu7eYzADJ5289FH49T68KehUTt/CHhyW8lMVlMUt4yY5J
FYqc4OR684GeCM5+h9P1TSLb7Lbi1jNpc2w8sEKq7BjB6AEgnqOOvrXD+CY4GneK
51C5tpVYbYhN+7ZQM7sYwCdpB55Ax2Jr07VJxJbhhGixsnkI7JgueeQfb9Bilyrl
EpPmFs2uZ7ZIr3zFuosxyQFVIlweCM/xYJ5PXngZNeZ/HXxdavbweG9IeOeW6jSS
e6i8xCUOCq4ACsCufm5HYgda9BW0j1PR7qGG7vba1cLGLqzJhk+UjDDg5YngHtXz
14z8KXvgbxbGuoObtLrFwsk0iyZzjduwcnDEDcQu4k4FXFu1ybLmOj+HmjyXc1tb
qdybtzHado5zkgA8cZ6fgK9vufCthqegLo2oRmWxuVyy7uC4GQwOSNwweRwecjtX
nvwt8QwwahbCaCH5gQpkI2gnA6nGOnXnPy+nPrl5GL6BY/MaHzmWUtH8oUYyOvP6
A98VNLuKo3c+aNX+BPii31K4isY4Z7VW/dyFzkr2zx19aK+jbz4o+E9KuXsbnV4j
NBhGJkDHOO59aK6LX+yLmZ8X6TqmqeF9YivtNuJLa6i6MO4PVSO6n0PFeyzfFG28
R2McUUclldhMGItuBc9SrAA4zg7e34c9N8a/CXh7U7gXOltbpqchLTKr4R+PvZxj
PTvXzZqFtNYXeUyoVuCccHr+IrGTv7pcfeV2dldWcniLxPaaXYKHZmAc7+Qu4BsE
KfbsQBliMKcfT0ELW2npp0Kx7reFfsyxx7PMiA5C7cfiMDFeV/s26OLmHUdcg1GG
bUHcRG1bOMD5hk7ueemV4ZSQcdfWtVFq6bkd7S4hUy4PymMjnIJG3H+Ge1NLlViZ
u7MHVIrW504wXEUkKQsWWQsR5a4B6sPlXIPHbHcjnhdW8RXUunNpU0hMaPmSRXZW
kUH7oydu7nGOQSSOK2PF/jK3urf7LH5ZnYfNcQscGNhy2QRx0bgnOT04z43qx1S9
1N9GsJJHEk23GHIQ8qTIBzgdzjtnuazktdDSGqsyreXFzrGoJp2jpKTKcISpOFPG
X2jgYODjjj8a9M8L+ENO8NuJ5LdJ9Tjkz9okX94nI+QqT1XkBgBu545qx4POm/Dy
xTTtTtY5rq4kMk0+5iVcZVMA5BbaxXcNpIPYVW8TeLJ7y686Qh2dPK4AX5ezAL0O
MdPT04rnq16dFb6nq4XKcTi/hjaL2b6ncDxFcRxvEzxxqCHikLZXcBgg+xU9/U+1
UPEGiaF4zheLUmignlwVMi7jEx/iVhgjkdM4Pfk15fea5cz3E5aT55WDO+MEtjr+
p/M13Xhm7n+wfLdFEXGdw+XnnBznHQ9uSOPbOji/az5UtDbMMingqPtXK/ex85+K
vD994b1q407UYXSSNjgkDDrnhxgkYI9/WvTvgD4vsdIj1TQ9ZnSCO7KtbyyuEVGI
2yKCcAFwI/T7nU1t/tAXVrqOk6a8oMl7GMRyFQxIJQld2OerHGT6hTyy+a22gQah
pMUiTf6bny/JGFUg9yx+72/XpgGu5ySPCSutT365jjKsjqPsEkbnopWVQ4LLnHQA
DGONy8Hg1h6/4Iu7Q3NxLZRQiKL7Q6RvuWJOcEbmJOdhbaGJAzxjFeX2UHijw5H5
GmXVzFC6HEEbC4h2ls5EfzY+YfeCjnv1NdXpfxfv49Nk0vX9CttRsZWHmLazNA/D
BsFGLDqAe2OQDjiuepRp1tJHp4HMK+Blels9/wDhr7mZa2k19BNNFC+xMA7sDr1/
InGfXpVaGJZUVhz25OSMCums/HPg+5sx9ts7+wnXYWAtyMfOikq6lgcDceR1PTHB
vaPH4P1jVl8rxHasAzH944gaTEeejhSnJGDgjIYcDmvMqZfUVuT8z6+jxNhXd1U1
by/yObstEu73atvaXEzH7uyFjn34GMVv2PhKJ7WWS51Cwjki2f6O0wEo3glSw/gX
g8tgEA47E9pp2lT6jokthp9r9k0hYWN1NeN898gy/lqi4PlnO3zM8qPlJBzUOheE
9DeS3EGlWrjykBjkh4nbzUXnOeMEHHTHODg10UsBGFlUd2zyMbxNVqNrDLlSe+7/
AB2M/U7bwPfaJp9no17EdXj3ecTOoLc/NyTtY5+6Fz6dOK5zVfCDwzPFp9za6iU2
5WzYyMu5d4DL1Q7ecHk9s849FGiWE5u0mSG9s2jc20EkIIOwHJ9CcfMNvp261k3H
g7R5tUit4baCK8a+ZYrwRn5SDhX4Iyyn5gcckc5BxW1XDwmryVnscGFzrE4WVoy5
lvrrvq9dzzG502W3cLLDLH2w8ZX8DnBzVVIN00USDLvyAGx0r2HV7FLy/t7fxZEt
tcKzB9SjnUW1zuA+Zmx8jfLxGTn5m25HTgjqXg3R4rgSa8lzIsPC2wLmZsMMEoCE
GRk/NkqRg8muCWXVYzstUfTUOJ8LOlzTTUu1rrrs/kZUNhKusRadLC/mzssajaDk
txj88D8R2rvNP8Gy2EE11dWNu0SOI2aR8+S5wUwAQrAll5wwwCBzXMap4+8KW9yY
7DQr7Uo1ZlOYhACBuC4dmyTyufl/hGMcis3xL8VPEvii42WdlZ2W4fKERruXGckn
II5x/c46Acmu2lgYU7uW/wB54mYZ/UxEVCgmk1r0fys/zPUbe6trOX7fqtwsFvG8
kiXM7rGGw2d5PAJBznnPzDjBr54+LviSLxX42vb6yyLGMLDAoHAUAlio9Gcu3Qfe
6Vd1LRtd10tf6vPcXbK7HddXK5Vs5YKpOFPTKgDtx0rK8SaVbafaQx2cxuGZd8hK
YIJHTHPfODzwM56gdsZLY+acdbml8J/Az+LNYMt+DDo1sC1xO3Ck9o85ByfUZxX0
NaT6foFobfRWhjBAQOqCNIh1OFx1/mevasfwTfW1t4AsrPTHEEW4nJwoYlj8x456
DnJ6feYDccDxreTo2WuHZlwQSMHnnPtxj0PIP1zxFb2UeZHXl+CeNrKknY7a91uS
7iljZF+yiPy4wxJ3IBjv6859APxrzHxf4DgZJtR8OQLbXECeY0EKsd53ZLnaSFx9
1VAHJBycVBZeILiN5SMfMEDKOjKuMKT1xwO/au08MeNFsbaT7awNnIxklyinLdvo
M5PH+OeenjYTfLLQ9XE8O4ihFzh73oeYeF9UWW4WC6+0RTJlUYEIyMB1bP3QuCSR
zk/l6vZ63Nr8tvZ38oihRdkuwt+9IwBjccYzgY6nK9Aa5Dx5og8WoviHw9ax2lxb
RYkgQyOXVMCNUA/2RgKABk5zgVh+EtTu5bjzruabzLVFKplt/wAuByc8ZJx1HLDs
MV06NXi9DxKlOVOTjNWkt0fQVuof7NBaWsgaJQE5chWJJJIA+9jBJ4POO4xkfFHS
H8R+DNQtLYRuLX54GVMl5l5baQrMx65xgn7vfNJoHiu31S1isYpI7OSQiKRtwDuz
DJA3dz83QkkDt0HaWEcLRC3sI1mmGUJkB8uNeQckjnv9c10LQ5GfLPg6/wDsgZJN
sdxbSHeqPkcH5sYxu7jIPI5z0rpvEvxfe00J9P0Pzf7R+79t3ALEp+9tGMljj73B
7jrxz3xz02PQPGt59k1RbmS/QTTpzuVm65JYk9M84+8MDjjkvC2iSapeJHIAN3dy
Ao6nk+vHQVFuR3NbKSMGUzTSNLKS8jnczOcliepJ7mivqTw74H8CDRbQX9xMboJ+
927iN2ecfLRV6vW5m6luhxnjLWwtrcTXTB3dztAY/IScnB56YPU9Dx61hXXgjWtR
8IRau6xSjBk8sKwlSMgkhww7YB44+bILZwNX4e2GneLfiQbPUWiaxt0d/LfaQcfK
oALe44+YdiuDX0FqGhWvMulKtsE2rH9mXYEAGANnTHbgDvWUYac3VmkpW0R8ZeHN
e1TwlrKXuk3BhkA5AGVcehHcV30vxE1/xCskGpX6RFYCPOjQRMMHPLDBbjIwTjDH
vXRfEb4d3EhmvrCBGJOZogeAxycjIyMnPXj6Vxfhz4e67fTxyyxiwgdgGWWQb9v3
WAUZIIPGCMe9KU2lZlJKWplS6q5jSx02Bpbhz5alAWklLYwq993GOOD1xnGOw8J6
JD4a0mLWtRXbrM4LwkgYVGwOcHB45GMZDnIOBjpLL4caFpOj6hqazrd3du+6KWXG
6NC3HGeo4O4LnI6H7jVviCWuZba6leOQSRI6uMbuRkgkDB69iw9D1rnxdR0aTnHc
9XJcNDGYqNKe2/rY5nWtRg1HBKgzLx5hGCBxhSO/THXnH0rHuJwxAzyKW5lyfUet
USwaTGBn1rxLuo+aR+jqEaUeWGxPAuJSzfMG6AivRfAkMt1LHbkQRmaRQJJmIA9O
PqBjj2PbHAWYKkgHJx613ngK71qw1hkjWNbdghaOYArIPzyOuRx19jW+Fd6yfQ87
OIXwc1p8/I5j4y+eNV0nTCpLoZCdmSpywwBwT1C5AbHQ46EyaVo02oCKzsoog6Rt
IhmDMmeWwcDIB+X0GcHjIBx/E2rR+LPiJPPGgNuZfLUgDlVdjkkbv4WHXd7bV+Rf
VfhtYQNd3VwJfIOQIfNZXDHHO45PXORkZ9z82PcslK3Q/NJX5TOtPBBvdGhubWWS
G6xEs0E6DZHL/HsIG8DduwF4KrnqcGjrPhe5tLyCw1S00zUZQBEiwqS+yPAYH5C2
SCDg5OMMOor1C91GJrMRzmFYVYNtiwfNzxwQDnjBGOg/Kqq2Vxe+I7u/1Qw+XbKI
pfMBYO78hdn8WDsyAeqD2ySS+yTG63PFf+ESSH7TNe2c0dsCiqitJ8wAHQvGeuM8
91boOawtT8PaetuWiuo0k5H2a5hZNxxklWPyk/gM47da+n7bfbWmpSzo6vFbttSY
As+MqV3YAJL9eOhX1NYOs+AdO123tWlgZLqeRImuopdjr904bqr7VJ5IzuXHQ5Fc
gKq0eGeCvEGo+A751mhkl0ppAlxab+mDktFnID4zweGB57Eez6LrVhqenxX2mukt
niII4Pz28gfBDjgo2FjPY5bgtnI8B+Idrc6V4m1HStTlmlmtJGhAPAK5JUj0Uhgc
e59K7v4F2MMmvXFxJGDD5K7kySWOJCBzxyVI5PGcAjNQ07q/QrS10euXmI7e9hea
Py7VEAUAAgIhhYZHJxv284HODmuX8W+MNO8MIz3cW69cs1pZRMokX5MBnGDsUs75
PH3cAMRur0R9NxaWZubiOWNiglVeNuUPzAnrzhuR0HevlD4gWqWmv6gZEBZplb5d
wwCqsODz0x9Og4qqi1RNNp3TG6yNS8U6tJqerGOQvhx5jEQwISAFUH7qjgdCTjPJ
ya0bPw9pYRG8578lc5hhaNBnoAxVs846L9M9K0/hF4buPGEmp2i3E4sLS3a4kBYK
C/ARMkHBbactjoOOte46foOn+HI7CaxtfIR5Y2ky+6RlLYEju3UgAnHQZGOhNCi3
rIbny+7E8Vt/B7LqE5/sxryFlDxF/MKs21scbMc53HdxjGDjNdFpvhK+1bSpGsTp
kFipMpijDeZkZjOdqjqS2CxweemK9Zv4VGoXIuED2quWkYxfuuMB8juNxTkEAMG7
KBWBZW1zop1W0uiHgUiSUq2/zAxDK2f98ZPHVvc4Uo2YKV0cVrvglrc21rZuLi+n
kXeZkAt4odnzlQg658vHQkMcjiuB8TWJOmyI8LK0BYfdI64J4xx0bORn6bStfRsV
4LjyYRNahUXYJ3xyBz6cnrjj+teQeOdKt11DUYY/MljkjzE+8LkgHqoyTkjI4x6D
ADU526Che+pb+Ecc2r+DoY2aNFtkmEhuCcHnJx8oHPIJ5JJ65yFxvFjSNdszxKAQ
A20lgT3P/wBbt9ckxfBXxI2mX+qaXHHEZriN5IhMoCkgL97kE8I56N3xsGd7tek1
a51G8n1HMmJApl4APGO2fT+nauDMF+7VvU+q4Zj+/lJ27eZywXZIWydp6Adqtxyq
8Xl5+XgE1XuAS5O7pUMMgGeBgV5VuZXPtk7Ox2eja9FYKkdsFiI5ZcbsnnknjsSM
epz9Mfxp4Z/s6aDWfDMMz2cu7zVRRuVhli3B6AZAwMbYySepNa2k3DDHGfzNeh6U
oj8HyW8zQC3uZkiMQxiQHkhs4DZ2/wB7PJ+6vzDuwNeUqnspbHzHEeBpQorEx3Tt
63PMtP1gXdzbNFMLK6RsieFtuSxJBB7YBI65JOSSa3Lj4teJ7CC4trK5gjhDtwIR
nngEt1OOMbvQZzXV+JPhRpUF/MdGu/s06wllhj+75vXcxGcDAPyqB7Y6Hzq68Ba9
a6hHDcWa3CykDzopAyDH3icHIAJAyeeemTXq35XZM+ISUtbHL6fbX3iDV1Zy91eX
MmMvyzsf6133iHw7qXg210ya8aJrWQbXSENuViM5c428nKjPJx90gZPp3w98CTaN
GssnyXrph3Tlo1IztUDgEjHU55r0S58KaNeaZPZ6tb28iyBXBlG9lI77z930yu0g
Hgg8i0nL4iHOz0PGLLVI3tY3iBCMNwCqMDPb5hmivLdVuf7J1S80+IpJHbTPErBM
5AYgfd3D8MnHTNFYuLTsa3TOn8D+NNL8OvdxnT5b2C7dSzyzBXABPQYweG+vGMkY
x6rofxH0q4e3EWouisuAt0m10GeAT0OOuMnj8a8z1n4D+IbHTVu9NuYLtTEJTGAU
IPfBYc/iBjv3I8zt2ntAwfftJ+4R971rWScdTNJSPr28v/7RkDK9tLKy43RMUBUd
ucH8M8Zz7VTbT44yfKjQoWx+/JYo38PrjPQHp9B08y+DE8t1oN0rsZHtrsOVd+Qp
XsSxI6cDABx1yOPTxJatE0dzIURHLLulxkEc4BGD15xg8DrRzqWjBwcdTn/F2bOw
u444JLi7liKosKHeXxjaUzzn2J9skAVwXii5u/s9kl+7tKtsg+dQpKkZXOOOAccE
jrjAOB2Hlz+I/FFkkV3BNZ2jMhnlb5MlQdp+XPQKQeAeucqDXHfEIXMXiK+guzun
jIjZgpG/AwD0Ge3POeua87Gpez0XU+l4aX+1tvpH/I5C5ZmBYA++KjgVifw707a3
mqSTn0NXrSBmfGD64xXmt8qsj7mPvPUVIiY8g4bscZFdzZ6r/ZHhm81GQBWWIKiO
xG47GPGGXHtnrnAOSoL9N8IIumreXtzFbxk7cSdFfONj/wB05I5wQByeK574wXcB
0/StKtrSa0QTSO6yLgNsCjgFeMg54I+9yvzbq7cBh6kZe0loj5fP80w9Wl9WpO7e
/kcz4W025uLoX8IEkpkO4S5LbmByc9c5749yTzn2zQPDdqlkr3TG3uHBAkQ4KnOf
XODg8Y4yowD1848MwQrd6JbhizyANhYy2CQBkArgjrnjGCQePmPvUsnm20cV5pci
nAMckAVsMD0K8e/r1/P1YxUldnxU5NPQoWWmwwusR1GYtDIMLLiOSNiegJByeOSO
46ZrLs/FPhdNUfw/e6tYabNDKFmt7o+Wm1RldrMArByVbGdowR864J1td1/T/Duj
3WoXC3Mfkwfu47hQSz4+WMq5UEg8cNzjrmvmdbJvFmv396EVTfyySooKgEFhgHao
B4/2Vz6Zq7KKuzNXkfSmoeI/D1kbSO917SVt2KXdw4vY98rgMcBt3VisZOMdPSmf
8LL8GW97pUMvibSpBHJI0jRuXUMMgfOFwBznOffpXzlH4Rt43DFUjwSCq4Bz6liT
+X6Gm6/pFrpekvcpb3TsW2JLKQFLYzkY4J/HtS9pHZIfs+4vxj1uLxJ8SdUuba4W
5tYSsEMqOGVwi4JUjjG4vj2wRxXrnwX0pbbw7Y3MgwLrUhGrsCCY1wigf8CD8e3p
XgHhmxN3qCLIrlCwQ+UMvjkkD34r0Wzu/HNlEj6Tqt3BaRXDSx26BHjiIIO1QwPy
DA46cZ65pSlFvUuztZH05qsOPD0cksbqpgdn5yQBEx+bj2xxXzR8c9JMN7pt3twl
1aIxKj5WkVsE5/3WT61qXnj74lX9pJZm+gRZFMeYbCNXI+6wBJIB5xwDXO6lD4l1
FEi8S395fxfZyIlfafKw2Q4AAyc5yepUn2onKL6kxi4m5+zZ4x0rw4Ndsdf1KCxs
mRJ1M74VzyjKB1J/1fA64OO9ep2fxB8GahpFpBceJtMA2PDKrTeQ+04QEbgv1I7g
cZr5HdWt9QDMgKEhyueoPX867seHLOW1imWK7hWRA6ZYBHB9C2OP85qnUS3CUEz6
Itdb8P6hpcc2oa9oaAAQTS/a4grIE3ZPzYwXJbjBzjGKztI8SaJ4ov5odO1GK9nt
Ii09zCSqRMQVwrldrb8Fj6DjkFivz/F4KjmkCxJG74L78BSqjn8frg/1rT+HWtw+
CfGnn3catZ3WbaRmVGIHmAk/Pj+Hceqjud2NrClGbsJxa1R7vd6RBcsU/tOUJCAd
sS/IinHJboev5kZ6Vxvi/QEto/tOlwgg7mIck4BI64JJJGO2eGBOTgejzSWd5AzR
R3s8TtuDRLuBUj75/hxjAGDxuz6YoeKHafw9cxxac8FqEJViA8mFHULgkE8AYyf0
pezQKb6HzlpLS+FvFlhcsQGLKjhW2IFbg7juAABIPJA7kcCu38bOZBuiOY59kgcZ
CjK5xg5IPscEY6ZzXFeJ4YbjQopI2XcshjAwfl6njgj06dMd84Xv/Ck9lrfgbTY7
yFomghKveSJ+7jVHK8AKAMjICqDkqF3EjjkxFKVWm4x3R7WUY2GDxCq1PhejOFuI
8DC+vU8VmyBg3c89q9C8UeFZNLjSVXEyvyNvJ28DeQM4BPAOa4ueJkZjjpn8K8VK
VN8s1Zn6HCvSxMPa0ZXQ23kKFQe/Wu2sbrUDolqbZbia2ivEeVIYg56cE5I+6qk9
TwB0UNng7cMuOSwzk16f8M7K51WDVLaOSGODy1eVpgdrHoqk4Pc9OcnHBxXThVas
jys99/Azv0t+Z2enRR3VtJPCsaRd1kBf5B/Ex/oMk+neriWAD+YI9k2PkRG2qnoS
M4Bx2/lXK+DrhrNF0nVLoRCLMqxbh+9BLEHOABk7iM8nG49a6i5eNl8uEmRUjEaH
ziVJP+0Rj3OAByetexBxir2sfnUk27XLi6/BpllIXuLSCInc+45ZiOOG6e2Sfy4r
iNa+JujxQEyyy353MVt4l2xlh0LMevsRnpXmvxeu5YfFMNqjMywWsYZFPyhjznG4
+ueQD7c5PGabo+p+ItXgstOVpbic7Y88Dpk/oD2+nNVzOYezUTqfEXimx1nWLi/N
iYfN2/IlzPgYUL/C6r27Afj1orpIf2fPEjxq0l/ao56qI3bHtkHFFa2l3JvHufQQ
nWO3aTSZjHNGRlGfdGeec/n14z7da+bfFSWreKddkFpAQGkdXiHyhgTkgbzn5jng
5HoPu170W06WzeS8s/IkjDIZY02bh7gHHcHn29efCvFt7Jb/ANpzs20XBMe8HG7g
+hPPPTPY8lcgxP4RU1qWPgfqMMeq6ra37qlpLGjMGfbliTxgnHOMZwedoyOAe61t
p5LCc6VaSrpkv7tpLttjQPnBBOQVIIK7sEBgOvOOH+FyRaT4Y1DUtTtPMa4mVow6
kFQqb1Iy2D99SMhTg5BIKgrqvie/vIWSSd2j2eWQTglOPlPcjjuT+J5rixWKhRtF
q8j3ssyWtjm6idodf+AT6trMNvYQ2enk4RHBndvnfLEgnphgODtO09gOg5VLpftD
F1VgfvZ4PvyP51DdTZckn3qqAWckMNh6V5bqzqPmkz7ijg6OEgqVFafibum6c+r6
nBa6fHummO1VeRVBPpkkZ/z3rsF0k+HbSWO4t92qOUhjVssqyZ3EMo6gqCNpAJ7M
DgjD8CRf8TiGQXBtjEjyCQHG0qufbPTtn6V2ugw3OreJb7UXvSznatvM8vmBxzwG
DEY+UYxxzkdWA7cJTjJe0tqfOcQY6rQksNCVk1d9/vJ9B00aakFy9qJrqSLE0V0M
rIpznBIG5cZHPbA5xXGfHe3WW50fVHj8oSK0DADhRwQDx6ZxknjoPvGvXWMk0Ad4
o1ZZsAbyAW/iGOm7Oc4IJ44Pbzv4oeHL7WNJS3tLYmaG585VcjiMrztJBOMjpkD+
no8so7bHyCabu9zz7w3r+l2/iLSrmeN44Ld0EsqbM4BHzYKkcdemfxwa+qI4vs2n
Fo3gvbNVLiR32uFyc5J9OfTGOlfFur6Pd2bBZInhZOfLkXaVz3GfyqxpfizxTolu
1vYareRwldhjDnGOnGeRj1B7VVNq1iZwud18SvF7eM9cXTdHeVNEVYnkDzFgWUEn
fgYI5HPzD5FKnBOdz4a+HPP1G1iRQ8MZYk8nBHXs2Oo/X0JrxOw1S8sZG2dSSSzD
nJ68+9evfDf4paLpsAh12K6gmQbY5IIhIuPxO5SOen94/Sm05y8hNcqsj3qTS9OQ
LNc27R+VCGkJcryGUkhs8DAPAPTPpXi/7Q9vZ6Z4W0+IRuLy6vFMQZ2LLHHF85IL
cEtIv04FeseHPEXhbxM8D2niGOVkkTEBlEauwP8AcYBjngf558J/aevRf/EMWtuA
62Fssb7e7sfMP/jpX8a05Ut0Zx3Kf7PGjrrnjCKCaR0jjjkmLxNh1woA/wDQq9zv
fhzbSakltFeZdl8xXdA5A+bg8jptAyOuRkV5R+y/rGi2Or6hbX12trrlygtrGOQ7
Ukycthum7KqNuQTg4HYfQsfmx6lfSwM0jogt4yPX5AcZ/wBonvxjGOtS4LqNydzz
XTPBUl7c2kbX0QFzuGMSMy8Fm3AtjqBnBODjHrXSeHvAFk6s7XcyKpMZWHCEnaDk
44GMkYH1rrDpkVg8lzaRjz4vmIUcqAcHH+8pJPqait3FnfalJLcJDFGftRaRtqhA
zhySSAOMHPbPvS5IroJzfc+IfGdu1j4hurU4BglaLAOSNrEf0r6e+HVppl74L0O/
SOQW89nCjBJnXbKFeJwRuwMuox2zx3r56+Lt/pGseP8AU5/DExu7CaUyCXaQGduX
C5Ayu4nB75446+2fsy3ttc+Btc0u+lSEW0rSM7sBtjkXg5PHBVj9cVfKtSndo9E1
HQrOaxuYba2O55HJcZ2heccc7j07En8a+cfF3h3dK8EoRZY9wRWJx1xjGOuR3GTx
6g17f4h8feEfDgMEviB7qRBnZGfPcj+6NowPUgkfyFeD/ED4hW2rX23QIZUt1O4S
TKEbd3wq8AdAPYD3rOcOqCF0ehfBfx2br/iQ655s+qeasdr5k5y4CfxbsZPy5xuJ
3OcAKOPSPiFPbab4Yvr7V50hhjheNLaAqfNZsKAcgr3AyRgZ/P4+sNd1Sz1eLUtP
keC7hzsaLKgZ6j6H9cn1qxrGsa9r0nmarqFzdHOf3j/Ln6dB1/DPvVcytdj9nroa
N3qNnLYPbCMpPv37yQS344yPw9O/b2v4VRf2V4CsylnFcPdOZwJl4DFvkbkDkYBH
X1BxivD9J8L6jqcQitbZ5n+6CFwiH0Jxj+vIr6E8KabPZaRaW7Qf8e1ssTc4RXIJ
bptBPqSM+/rj732TR8ttTD13THtIRfWELGVnbziVzEAV5xxyw6gnIU5Yg55oal4Y
fWzLfaFbnyCv2gpJKBsjK5BJY+xOSR9K9KmSZkS2g8qMPCCJSxbamfmPbC9OAME9
z1ritMWbTde1GxXUZLa0vSoRhKVEjEfN8pbluT2HTsqgnOrRjNcslc7sDmFbCT5q
ct+nQ8yjMUAO9CzknALYH146/TNJaXzRXJkiOx92crxRq8QSZ19GI9cDJ7//AF6z
FJRmMjDB4XFeLd620P0rlXXW56HFqUOp2trjZFewO7KfMKpNypCv/sgA8D5mJAyB
kN3WnyxpOreIrae2ncF4V+URxoOd78kKASoIznc4HPWvErK5aJg6MdwIII7HtzXZ
6V4rnMkdvqTPPZyP+9j4+fORliSM9f4j/iOqhjkmo1v69T5vM+HOe9XCab3X+Rxf
iu/F/wDEW/eUCSHzljAJ3ZTaMD73HXkZGCTwpyB3nwcYWnibU2soLa3uvJZImk+Y
gZAbB3fTopxjHHfjviTEbPxna6tbwmK1uI4XPl7gqsMgDcWB58tgMBRwdoyGrtPh
/Oja2Jbw/wCj3KKxIxl8DjuOM+3cAADp60XeVz4ypFxVn0PbJDaK5E95deaPvf6Q
V5+gNFZqWWlMuV0YzjJ/eNE7Fj3JODRWmpz2R5/4t1LVEtTDeWZVztDyxgZJycHG
M7uDj1K8HqK8R8QzO2sfYI5XkV5Fjw3z4LDB6Atjg9s8dCRz698R9Va41K2hdobp
LZST5mM8qPvEZORx69V+U/LngPhvZQa98SEe9VHSGTzGQ7X5EikfeJz0I/i6gfKS
rjJL3rHRFq3Mdxrtlb2WnWumQ4WO3hYBXb7p6Hadq98/jn1rzyVmVQjkk44OK7r4
iaHb22rm4hu5nCl1McyFWiI7Z4z3/A9OmeBuznOxske9eJjdazTWp+k5GowwceR3
X9XKcp3NjPNTWyDGG6e1MRcydDn1q7DsRhuJUtwOK55ysrI9SMbu51XhjTDeWN8i
y+Xm3baPL37yOo2/xZGRjBzyODgjvPDlq+naDpskVs8FvLAE85EAV1xn5lxg898c
9e9cr4CXb9sluXkt7UQOJGYZRkIIO5c5PfjDAnj64Wq/FHUbRItK0iKMC0nJNy21
0mO7LAbSSwbk7w2TnqTlj6+Ajeim9D8/4klfGtR1skesXF+bJTO6kRrhJHuJAEIB
wPmyRjtyePbrW1oKQXKI/nyRRSZImhkzhhg7ST0P4e/XmvlLxDd6he3vmapPJOZM
ybJGOFDAcAHoPQdK6XwB46bSblYZ5pfsrYVl3NuQdMqR2A7YPQYrshNpa6ngTguh
9Haj4bEyTOqwTRSD5kmjVo5DkZBHOCePavEPipp+kaFq2n2mn6MLXUZyzywzK7pg
kYIH3cfe5B44BBBBHs9p4sj0jTP7UvJEm02NDIbiB1G/K5UFWwAT25HJ968O1PV5
PHHjJ9da2Kwr5aJGVQHAHGQAepPAbOM43EYNXKyi5EQTbJtC8AJrd0ltKDaXUzkB
NnyAdeRyR0POB0/LM8V/BLxLpVx/oti97CzYD2oL/mByK9g+GunCW7M8dxGksbHy
vM6E8YIyDngE9j065yvorXl5DMTfW8yj1t3HPHof/wBdFNaainJ30PhaK0nsdTlt
b2OSCeLKMrDDKffivoq08BW3jnwBpmoWZVdchhMDNu+W52n5Q5y2GwAAx7EDG3bt
8g+MhjtfivrzIm1JZBIAU2dRkn7q9TznnPqeTXafCP4wQeHQmmanayGxyE8+N8sg
yfmIPux4BxxwMk51s72E7tXPLfFuizaJfTWWoReRcxthopPlIHHOPT0PQ5ByeDXo
Hwo+Kmv6XcQ2erhtZ0wZYJPnz0YEuCsh+9gjOGzyOMYFc78bry01Lx/qGo6bO9xb
XXlyROUK5AjVcAHkDKnAx7/Xqf2dPC8Ws6rd31zbfaYrJYykKyKCzO+0E5x8oAYn
GcjpzwR3Wg3tqehw/GkTsBL4Rvt14Clyr3AMYABAC/Lkg99wXHvXhHxC8e+IPFt0
yardCLTyxKWkGUhC5BG4nl+QDlu4HA6V9l6p4e0x7K/C6VDNvjbbHEQrtjqFJwAf
TkYPtXxj8VdBHhzxrqenR4aKGYiPBBO04YZx32sPf6dKL9iY+ZpfDjwTfeLr9YtO
iDouPOlJwkXPO484PoOpweOCR6D8YPD2neEPC2l6RpzHzZpWubqdvlkmI4GRu4UZ
OBggc4Od2cr9n/xVpPgzStf1HVriZRIsSxQom7zWTfkZ6BsMOSQCPyHL/Ev4it4x
1Mu9r9nijOVXzMnooOeAP4Rz17cgAAatqPW5yOiaBqXiG/lttJsri6dAXZYYyxH5
D/P4V6p4V+BWt3FsbvVI47JAhYJLkucdtoyRV39lh44tS8R3jJKzmOONTCg3DJyQ
GK4Hbjd25BwCPoOOTULmORI4lit2XBkmcEkY56j8M4NJoHJ30PlnWfDyaTDNNY24
uo0jO5riPIU/QHj8uK7v4V6Hout+H4NQs9GjlvQzRzTzoxiibdkYVuMgY4UHB4yT
k0/xppsUN/cwLIJomRsEfdIJPTj0OenUHqQCcn4UeNI/AesT6VqkLLa30qt5iiP9
22CPmJIIHTkngcBckkYw3cWaPWN0e02mhLbM8lzcPEZM5kXAbHfHoCfzrn9cu4NN
InlaNc58vz5NpcZIDEc/h68deBUXjLxQdM0tr2+kFugA8uPfmWYnJUcD5QcegH5V
83+KPE0uvX7NO5lBbKpkhFx06k8+/wBcU3K2iJjHmd2fR4nkGWcTRuT5jHIKMRgD
AP3uvXBxn16c34r0iW+OkSywPBLPdhkuZI/McnBy2Spxgc/hnnbXjfhnXtc0O0ku
NOun8sIYRG+5o0LZ+bb03Dnk59ORxXonhL4gHxPqemWmqrHZzWnKzPtKynIxtxg5
LbTgD5dpY9AUiK5tZM1ty/CjC8WWqxalON29N5Ktg8qDx3P169xnmuXuEO7jFdh4
sSSHVrjz/OK7jmWT5ie/qfUdTn6ZrmZVVvmUEg96+dbcZu5+s0LToQknfRFa3bkY
bvWxpgM97bgkCPfkg8A/U+lYwGCdvH1rRs9rMEZ8HPriiVrpmibs0dd4wsob/wAB
yTKN0+nt5keBlVAbnACcnkdwOmSACa43wRevOryF5HeJVIi3YUg5yCBzj5hkkdCT
6Y9T8C+GbKTw/fxXM8k3m20oMAjHlxg5G5iykHkjGQwGD15FeSaIy6b4o1GyVI5I
xJIhjkbAxv4yA556cEsRzkg5I9+nf2UWfmGYxgsVUjF31/HqexprV2UQy2ILFQcy
SwqxGOCQxB5HPQfQUVm6B4llsdIt7byA3lgjI47nj7h57dSfXmir5PM4OfyPP9Sv
3hgla9NzLPEoiVrhiz4BxgntgAjt1IBB5Nv4NRZfVrpXPnHyypQncVBIOOSCPlI+
76gHO4VwV7qmo2VpNouqwSWhU7vKkjKSK34jJHBxn3weTXpv7PWs6dOl3od1LHDe
yAvb7wcS53ZHB+9g+mSB14AFKLd7ib5UbPjOJ7mMXM3nPI7sXklfJ6dwemeCPqev
8PncoZ5lEfC9MHvXr3iKwleFo1mLTLn5WjKsB3GT7H16YOa5Ox8MO00XmlkJYrI2
MlBjhtvU/TnofbPkYmjJ1Xyq9z7jJs0owwijWmk0c1Z2zS7gq5x6Vv8AhGz/ALRl
e28giUHBc4ww5GCDxz0z7/hXV+G/D9iLuMXkot4XUZkKbwJM9Ow2kjv2P41hfE/x
bo9rbzWXhVQuryOEuJI5cCNVwegBGDkocFWG3OAOTeHwL+ObIx/EdOzp0FdvZ/5m
B461d7hh4X0fyZLbzFWS5RozvJPKuc9m2em0qeuRjN07Q/Kt/KtLeSe9KblVeQuM
7lAHJyMAjGcnjJOA7QtBu4bmK7nuS2oSybmEjktJu/iY4GSSGyQeQc9s17l4T0rT
rawX7aBDdS/vDNuxtJAJBGF56HBHGWxjnPpxinotj42tVlJtyd292cdp/wAKU1fy
V1nVWtLxoAV2RgqckkZzgqegxg8qxz2rzn4pfDnUfAV/5wZ7jS5GCxzqOVP91vQ+
h719R6fcSRLLaXiRzoqZ+Q/LInTcvJ5HcD2z614h8dfEM+q6rZeGtNvzPYxkvINu
WDbmjxnbnjDj5WPBKkAg1rZWMYyd7Hnei6vc3mkyaYNRuYYZG/1SyEJIDjcjD32g
46Hvk4r1fwf4eln+z2SW8qFG3SIoJyCSGI4OOPbt26HwOW3n0q9YSL0PcZDCvafg
58XINFk+wayhNnKwPnZJaI4xn3H05rPl5mipPlWh7nZ6bZxWoNpM6wQuXkt2KnYc
k7hx93JzjHrjFbUNnCLbeS6K64MkTccc89ffk1l6zd2FrAdXm1C0tYwAy3MsqxpI
P7pJIw3Xvxgdea8a8e/Gi0ddQ0TQ0d45gEe5R3jKnkOABt2sCByMhsnPAwdrGO5x
HxI0FfEfj/X7zRFkuUST96oiKFCow2QVUjBBznn1J61xOu+Eta0Vd+oWM8EZGVZl
+Vh14PT8M+lfSfwBs9Ki077XDMrXTAQgyIPmY7mIyc84BOAe3THJ9XvNN04W32e4
jgWCaRj5UhyrOQWbCnjkbiR9T3NDd2NN7I+AI0lvB5ZbCqAME5GM5/8Ar17B+zP4
xtdE8SXGg6p5ccGpOGgnbAKTKpG0k/wsNw9A3+9XKeLvByaH4tvobK9t3sN7SQsJ
AzbSxwCABgjHIwPbjBNK3SK3DpaxCSWThnYdvQeg6VlUrRptxPXwmU1sTaUvdj3e
/wAkfVWi/FHQ9V12+01pIre2tlLwXTP8soUHccY+XABI5OQO1fKHxG8Rr438a3+p
WsKw2bgRWyAYPlIMKWx/ERgn04HapwCGzFNFLN/HGOv4etRz28F5M0igQTv97C4B
Pc47E1nDFRfSx3YvI/t4bp0f6P8AQ5eXzixt8lvm457n0H+eldFp/gTXry2FyunX
BtmYKsm0gMScDGev4ZzzXpP7Pvgq1m8Wyanq1xaSrbqywRBw+9yB820gnABPPHOM
Z5x9OQW1qUgu4RFIRFtilDblCHB47YOB09B6CunS1z5+rCpSlyyVmj56/Z10610f
xDrOnXsskWoTRoRGsXzKqkZ+bZxyQOTgk4wTjHu2o2kKpudWBlJH7w5d88d8+w6c
V4B8XZdO0HxXbanpU7faBJ9pTySYxIGVSCGQr8p9Rk+h7DrPBvxk0rxI80WoSwaX
fgKqvPIVTGAGYk/KihjgDdluOmcU99jHzOw8RaFb3Vo0HmTXWopEfLCkYjPBxgA8
8Dn0HYV4d4z0eTygdsiS2pwbgkgxkYwR6EHnPqe3SvoO+1nS/CejT6neXC/ZcZDp
8zXB4HGB0JI9hmvlj4m/EaXxXqskiQrFBgKkQJKgDpnsTWU431Lpyexz3izXrm+m
VZ725u/LTaryuWY92P4kn3PU5Neg/DX4M3mvaW2q63dvptu4DRApltp6swPYjoO9
eV6Xpd1eySTxGRdgLh1yDuHIx9PpX0t8EvFJ1vwzBZapcie7sCYYrVVCAqm0DgKB
wHXpuxxkgsoqo2fqVJ2WhxviD4f3Oj2LnRLh722FxtctHhyTjB2jIAHLbiRwVyBz
XCazoUcqNNZRmJ4ssYpCCF2rk4z15DZzjJOMev1JfSG/uJFuZY4bKIkO2fvt02R8
474yM859q898e6VB5bXWjxqh2mNmDbiV5JYccjI4yR0A6YFRKK3CE2mcp4S1Q+Lr
MW2oeVBqdooALFDJMMfNIR3wQW6DGVHJGTjarFu1VraK3ZNv3snOSAPy/wA9BXO6
jp2oaI41LSbxg23bLJFIc5JztJxhhypA5yRnpmvYvB2t+FfFGnNE5jstUli33m5x
IYtuRwCBzgA5UYy4wT0rkr4WNdXWjPocszqWBXLNc0enl/wDym6gdXZQACB3pNOB
d1STJJPBr0O98Owy3TspKBnbY2w8oBkDH94nA68DJ57Y0Hh6eC4geEESD5mxztOe
Oen5+3vXlyw1SOjR9XTznCVFdTSfmdRoKzWumpHCbmIzx7W8t+DzwT2HPIPYKP8A
ePk3jQrp3xBvJYiu2THClvvbBnliefmHYdvl24B918OWI8yEfaF8qHLMPKYKuO5I
x6fnmvAvizr+n6v40kOlyCSztyYlmUYEmAMkZyduQfzJwCST7dKnaCXkfnuKxDrV
5TfVs2ZbiAyMUtndTyCNqjnsAwzx05/TpRXMD4h6rABFbtp/lLwnm2sbtjtyef8A
61FVys57I9Q/aH0Jb/w7Y61ZQL5+nyfZ76ROgEoG0A9wjAAkYH70de3z/aTS2txF
cW7FZY3WRWx91gcg4/Cvq/xV5X/CttQ+1eb/AGV9nn87OzzN2x+u7j7+3Z/tdfm2
18qQ4y2dvvt6Z/GrT0TJsfQfhj4w6TqttFD4sla3f7su+Msrk/xKUH44IGO2cYrq
rbWPCd9ZLc2viC1neBc/LIQ5jI3KSvUEHI5GeOnIr5Mn2Y4/TpSRZ3c525HXNOyY
eh7X4z+IMcF7Ppnh9N8qNg3iOjRyKc7lwM7gQeoIKnPtWFomizwyR3F5G89y53BZ
lJZyR/ED94nkEe4x74Phn+yPs1x5u/zdqeVu/v8AfPbbj1/lmvTvCf2r+2l+yfZ/
tHlHf5+/HlY52449fvcbfwrNq7sXzcqOx0vwv/xJpLiaQQagpLiNXOI07KFKnIIH
QE8A4Pr0mh3D3kUkMttGNQidX2iXZvU5GVOevfJ4PGTnINyDP9m2/wBu/wCP/Pz+
TjG3nOe/X1565qKx3b4vMxs3P5e7p5eeM7fmznp7+2KbXKyOa6H+IdTttA8J/wBr
Xs00UdvxbyInmZdvlCZ+UryMckL6mvmzwyk95qVxfXSO81w28l3Ynk9OTu4wBznp
1zWx8aP+En/tWD/hJvsH9nb28v7Lnbv2Lu+/82duN2Pkz75rV8Af2R50HnbtuV3b
/wAP+A+v4ZxziqqvSwQVtT0DR/AthqOjNHrVklwjKEAcFWRmA+YEYYHuARg5HcnP
gnxC8C6j4J1owSb57SQ/uLlUYK/HQ8cMPT9TX2J/ov2M/ZM/ZfKbHm9M4/hx2/3e
Ky/GP9k/8IDdf8J15PlbDny87+vy4x3zjpx07VcUkrEKTPj1LnWL6yS1nvbuWzCK
hh8wlWVSduR3xlsZ6ZPqazr+xktJYwUfcwyDtPQ19IfDP/hW/lQeZt+3eY+P7Qxt
2fNjdu/d5xjO3v7V1nxS/wCEL/4ROP8Atf7B5n2dvsPm7t27YdmMfNjPX8feqSu9
Q5rOx81fDnx9feDdTM0IWWGTCSRSKGDYOQee4PIOa9i1b48eH9c0e50u50m+Ek4M
SMWj2DI4Yk9Du/2Tjg/T5+17+zPt0n9l+b9m3Hb5mM9eP0/Wls/s/nJsz53GNufv
cfj+XNJuxrSVqkWu6OgZMySrJuOwE7c4GfQ1BI6LwR+H+NTTZ+0vjrg5/wA/5/PF
UbrHmfjXjvVn6Mkldjxc7jtYZX0NWIykhHG7JA68j/8AVWednlx437+d2cY/CrVp
90Y/zzSatsO/NubPh+8ttL1qG9vkeeytHEkiFlyyj13Aj8Mc16lq37RWly2EkWl6
RdCQRDaLraVJ6EEAnK4757n058ZbP2W5z1x8358/5/Oucuvs2x/K6579cV6OFfuW
Z8nn6vUgvL9Sz4i1698Q6vc395I0k0xMjEADP4DtiorHTJJrfzhG+AxH3ep61v8A
gL/hHP7Wtv7fz5Pmpu3Z2eXuXdnbznbu/HHvX1rY/wDCGf8ACLWXk/2X/Y2fkzjy
c7T1zxnHr3xjnFdNtLngN8uh8Z6nf6zNCkF9fXU8YfftlkLZIUKM55OFAHPQADsK
9A+D3wwfXnGt65C39lRfNHbyBkN11/i4wnuDn2rrdd/4Vf8A8JLpePtP2PP+keXu
2bsrjd22/ez5ffGOM17lqHTT/wCzfs39lZXfjOeox+GcdOevbNGwr6aHj/jnwumm
Ql7O2RLZMEJGmFVTnjAzgfXGdp9q8x8K6ufCfjyLUJpJrexkJjuGQs2FKk5wGGSM
nrzzwM7a+lvFv9n/ANgXX9o79+0+Xjbt/wCA5+XP65xmvmTx5/Z2ZPIzu3jbjO3q
cfe5x0xjmsfhmXH3o2Z9N3cGLayFqryQMm6BHbyfM4yWIABAweeQ3J74rmNdZry5
Om2CqkahIpZ1O4huOFPr+HbJHArjvgd/wlH9jw/bv7O/sHyx5Xmb/M8vL7duz5du
7O7Pz568Yr0Jd/nRbvM8ra+3G3d5ueenPTGM8/rRU10FDTU4Xxt4cWwi32CJcQbM
TBm80RNnh1OAM4Oc5PtgDjye5tr/AEG4TVdILw+X0KqWC56buzAHbweNw6YyK+kN
e+0fYrf+xvJz/H53Xdx6c53bcfhjmvDNZxsu/tPk7fM/f+Xu8vdu527ufpnnGe9T
KNtSoz6HTeBfG+k66Wh1H/iXzxKEZpZVJmJIBIIAJJOScDAGOnJrqL/xJ4K0YRpe
69aOIsvJDGWlZ5CCcELkgAAe3IGeDXzf4p/sz7dP/Z+/Zu/dZzjbjv33fp+Fc4+d
x3Zx+narSVtgluez/Ev4r/2ro9xouhyO1tcKY5ptgClM/cUMNxz3Y7Txx1rxog78
nOep9h1qeDZxn9a1/CH2P/hMdH/tHb9k+2Q+Zu24xuH3t3y7c4znjbmi4rH0t4C8
F6No/g/S7PXvB7ahqawiSecFR8zkvs5I5XdtPHVe/Wiuysf7Y+xwf8grOwZ+3b/O
zjnft4z+uMZ5zRWljJtnjv7Q+urYeHbHRbKdfP1CT7RfRp0IiA2kDsHYgkDI/dDp
3+f7SGW6uIre3UtLI6xqufvMTgDP410t7peo3tpNrWqzyXZY7fNkkLyM34nIHJxn
3wODXpv7PWjadAl3rl1FHNexgpb7ycRY3ZPA+9geuQD05BMJpmrVjV8MfB7SdKto
pvFkTXD/AHpd8hVUI/hUIfwySc9sZzXVW2j+E7GyW2tfD9rA864+WMlxGBtUFupJ
OTyc89eBVPxFfypC0iwlZmz8zSFmI7nB9h6dMDFcnY+J3WaLzQzkMWkXOC4xwu7q
Prx1Ptjkq4uNKXLI9XCZNiMZS9rTsZ3jP4fRz3s+p+H32Su2TZoiLHGozubIxtAA
6AEsc+1YWia1PNJHb3kjwXKHaGmYhkIH8RP3SOST7DHt6n4b8QWJu4zeRC4hRRmM
vsBkz17jaCe/YfhWF8T/AAlo91bzXvhVg2rxuHuI44siRWwOoIGBgucBmO7GSOBp
Ccaq5oswxGDrYZ8tWLOr0vxR/wASaS3mjE+oMSgkVDiROzBiwwAD1AHBOB6dJodu
9nFJNLcxnUJXVNwi37FGThRjr2weBxkZyR4DoWvXc1zFaT2xXUIpNrGRCGj2/wAL
DJwQS2QBwBjvivcvCeq6dc2C/bSJrqL92YdudxAAJJy3PQZJ5w2M84uKuzjn7qsa
3iHTLbX/AAn/AGTewzSx3HNvGj+Xh1+YPj5i3JzyCvqK+bPDLz2epXFjdO6TW7bC
HRgeD15G7nIPOOvTNfVOn28kqy3d48cCMmPkHyxp12rwOT3I9s+leIfHXw9PpWq2
XiXTbAwWMhKSHdhi25pM43Z5y5+VRwCxJJNayXNGxnB2djs9H8dWGnaM0mtXqW6K
ocFyWZ2UD5QBliewJOBgdwceCfELx1qPjbWjPJvgtIz+4tldiqcdTzyx9f0Fc9Lc
T6resZG6nucBRXtPwc+EcGtSfb9ZciziYDycENKcZx7D6c0oyaVhtKOp5KltrFjZ
JdT2V3FZlFczeWQqqxO3J7Zw2M9cH0NZ1/fSXcsZLvuUYA3HoK+5NZtLC6gOkTaf
aXUZAVbaWJZEjH94gg5br25yOnNeNePfgvaIuoa3obukcIDvbIjyFjyXII3bmJI4
GAuDng5GmnQlSPJ/hz4BvvGWpmGErFDHh5JZGChcnAHPcngDFexat8B/D+h6Pc6p
c6tfGSAGVFKx7DgcKQep3f7QzwPrufAG80qXTvskMKrdKBMBI4+VhuUnBxzgkZA7
9ccD1e81LTjbfaLiSBoIZGHmyDCq4BVsMeOBuBP1HY0r20HTnyzUnsj4sZ8SStJu
G8EbsZGfU1BIiNyT+P8AjWh4u8Yprni2+msrK3Sw3tHCojCttDHBJBOSc8nJ9uMA
Urd4rgO9rKI5Y+WRj29R6jpXnVcO4PQ+5weZ0cTpF2fZlcW207mOF9TViMJGRztw
QenJ/wD104ElsRQxRTfxyDr+HpUc9xBZzNGpE86few2QD3Ge5FZRpymddbE06MOa
b5Uavh+zttU1qGyvneCyu3EcjlVyqn13ED8c8V6lq37OulxWEkul6vdGQxDabraF
B6kkgDC47Y7H145v9n3xraw+LZNM1a3tIluFZoJQgTY4A+XcSDggHjnnGMc5+nIL
m1CQWkJijJi3RRBdqlBgcdsDI6eo9RXpUoeyikfG5rjYYuonBPTQ+B/EWg3vh7V7
mwvI2jmhJjYAg4/EdsVFY6nJDb+SJHwWJ+90PSvb/i7Fp2veK7bTNKgb7QZPsyeS
DIIwqqAAqBvlHoMH0Hc9Z4N+DeleG3ml1CKDVL8hWVJ4yyYwCykH5XUsMg7crx1x
mtTzObQ+bNTsNZhhSe+sbqCMvs3SxlcEqGGc8jKkHnqCD3FegfB74nvoLjRNcmb+
ypfljuJCzm16/wAPOU9gM+9fSt9o2l+LNGn0y8t1+y4wET5WtzweMHoCB7HFfLHx
N+HMvhTVZI0mWWDAZJQCFIPTPYGpbsNPm0Z6j458UJqcJSzuUe2fADxvlWUZ5yMZ
H1zjcfavMfCukHxZ48i0+aOa4sYyZLhUDLlQpGMhTgnB688cHO2uI0vVLqykkgiE
jbwUCLknceBj6/Wvpb4JeFjonhmC91S2EF3fkzRXSsHAV9pHIYjkIvTbnjIJVTUR
T5uZlP3Y2R293Pm2sjas8cCptgd187y+MFSQSSMDngtwe+K5jXVazuTqVgyvGwSW
WBRtJbjlR6/j3wTyK6e+jNhcSNcxRzWUpJdcfcbrvj4x2zgY5z7V57491WDy2tdH
kVztMjKF2kLyCo54GTxkHqD0waJq6FB2aKPjbxGt/FssHS3g2ZmLL5QlbPCKMkZw
MYwPbIPPk9zc3+vXCaVpAebzOgViobHTd2UE7eTxuPXGTRqOo6hrbjTdJs2Lbd0s
cUZzkHG4jOFHCgHjBOOma9i8HaJ4V8L6c0riO91SKLZebkEZl3ZPBJPOCBhTjKDA
HWs99WbxhJ6RV2YHgXwRpOhFptR/4mE8qh2WWJQYSCCQACSCDkHBwRjryK6i/wDD
fgrWRG97oNoglykk0YaJkkAIySuCQQR7cA45NYV74ihiunVQXCu2xd54QjAOf7wO
D05GRx3xoPEM89xAkJJkPytjjcc8cdPz9veuaWOhHRas9aHD+LqJyat6syfiX8KP
7K0e41rQ43W2t1Mk0O8FQmfvqWO4Y7qdx546V40Sd+DnPQ+46V9f+HL4eZCfs6+V
NlWPmsVbPYgZ9fzzXgXxZ0DT9I8aSDS4xHZ3BMqwqciPIGQM4O3JP5EZJBA7Yyur
niyi4ycX0PcvAXjTRtY8H6Xea94wbT9TaERzwAKfmQlN/IPLbdx56t26UV8/j4ea
rOBLbrp/lNynm3UaNjtwef8A61FHOiPZo6fUrB5oJVvRcxTyqJVW4Uq+Cc5I75BJ
79CQCeBb+DUuH1a1VD5w8sKEB3BSSTjgAD5ifvepAzuNdv8AEfSmt9StpnWG1S5U
g+ZjPCj7wGDk8enRfmHy44D4b3sGg/EhEvWREmk8tnO1OTIoH3gMdSf4egPzEKhi
2tjRfDc7HxnK9tGLabzkkR2Dxypg9O5PXHAH0PT+LzuUskymPleuT2r0L4ia5b3O
rm3htJkDF2MkzlmlJ745x3/AdemOBuxjOxcE+1eHin++Z+k5NT5MHBWs9yzZ3LRb
irYz6Vv+Ebz+zpXufPJlJyUOMKOTkk8cdce341xyNiTqc+lXYdjsNwLFeRzWMZOl
LmR6NWjDEQcJ9TT8daQ9uw8UaP5Mdt5itJbIsY2EHlnGO7bPXcWPTAzm6drnm2/m
2lxJBehNqsvAbOdzAjkYGCTnORxgjJ7vwE277ZFcpJcWpgcyKxwioASdzYyO/OVA
PP0wtV+F2o3aRarpEsZF3OQbZtqJCd2GI2gFQvI2BcjHQHKj3MNVdemqnU/N81wc
cDiJUHt09GdLp/xWTSPJbWdKa7vFgAXZIAowSBnOSx6HORyzDHevOfil8RtR8e3/
AJIV7fS42DRwKeWP95vU+g7Vi+IbTULK98vVIJIDHmPfIpwwUDkE9R6HpXS+APAr
atcrNPDL9lXDM21tzjrhQOxHfI6jFdCmzzOVR1MTRdIubPSZNTGnXM0Mbf61YyUj
Axudj7bgM9B3wcV6v4P8QywfZ71LiVy7bZHUkYAJLAcjPHv379R6VaeE49X0z+y7
yNIdNkQxm3gRTswuFJZsgkduDyPavDtT0iTwP4yfQmuS0LeW6SFkJwRxkgjoRwWx
nGdoGBSlF25kKLUtGfQ9nqVnLagWkLtBM5SS4YKN5yRtHP3cjGc+uM1tQ3kJtthD
uqLkxxLxzxz09+DXmPw11ERXZgjt43lkY+V5nQHjAGSMcEjuenTGG9FazvJpiL64
mYelug449T/+utIyurmUlZ2Plj4ka8vhzx/r9nojSWyPJ+9YSly5YZbJLMTkk5zz
6gdK4nXfFuta0uzUL6eeMDCqzfKo6cDp+OPSt/4yCO6+K+vKj7kikEYJff0GCPvN
0PGOMeg5Fdp8I/g/B4iCanqd1ILHIfyI0wzjJ+Uk+6nkDHPByDi3uPS12eLxvLZj
zCuVYA5IwMZx/wDWr2D9mfwda634kuNe1Ty5INNcLBA2CXmZSdxB/hUbj6Fv92uT
+N1naab4/wBQ07TYHt7a18uOJC5bAMatkE8kZY4Ofb6dT+zp4oi0bVbuxubn7NFe
rGEmWNSVZH3AHOflILA4xgdOeQbDb0uj3XRfhdoela7fak0cVxbXKlILVk+WIMDu
Gc/NkEgcDAPevlD4jeHF8EeNb/TbWZZrNAJbZwcnynGVDY/iAwD68HvX2jqniHTE
sr8rqsMOyNtskQDOuepUHIJ9ODk+1fGPxV14eI/Gup6jHhYppiY8AA7RhRnHfao9
/r1ov3NKmIqYiSlUd3scvL5wY3GCvzccdx6H/PWui0/x3r1nbC2XUbgWysGWPcSF
IORjPT8MY5r0T9n/AMK6T4z0rX9O1a3mYRrE0UyPt8pn35OOhbCjgggD8zy/xL+H
TeDtTKPdfaIpDhW8vB6KTnkj+Icde/AIJGrLczdm7M9E/Z11G11jxDrOo3sUkuoQ
xoBIsvzMrEZ+XfzyAeRgEZyDjPu2o3cLJtdmJiJP7wYdMc98ex68188fssJHLqXi
OzZ5VcRxyKIXG44OCQpbB7c7e/JGQD9Bxx6hbRyPHKstuq5McyAEDHPU/jjIoZD3
MDxFrtva2jT+XNa6i8R8sqBiQ8DOQRzyOPQ9xXh3jPWJPKA3SPLdHJtyCTITjAHq
SeMeo79a6jxpqUU1/czrGIYlRsAfdABPTn0GOvUnoSAMn4UeC4/HmsT6rqkzNa2M
qr5amP8AeNgn5gQSR04I5HIbIIODvUlZbGsUoq7PKPFmg3NjMrT2VzaeYm5UlQqw
7MPwIPuOhwa9B+GvxmvNB0ttK1u0fUrdAFiJfDbR1ViewHQ9q9a8ZeFzqeltZX0Y
uEIHlybMSwkZCng/MBn1I/Ovm/xR4Zl0G/ZZ0MQDYV8Eo2enUDn2+uKfM46DVpaM
9G8QfEC51ixcaJbvZWxuNzhpMuCMYG4YBB5XaQeAuSea4TWddjiRobKQyvLlTLIA
A25cHGenJbOc4Izn0j8M6DrmuWklvp1q/llDMJH3LG5XPy7um488HHrwOa9E8JfD
8+GNT0y71Vo7ya74WF9oWI5GNuMnIbaMg/NuKnqA6s5FLlg/MreEtLPhGzFzqHlT
6ndqCAwQSQjHzRk9sklepzhTwTgY2qy7dVa5iuGfd97IxgkD8/8APUVd8WPJNq1x
5/nBdxzFJ8pHb0HoOoz9cVzMrKvyqSAO1eFicU60nFbI/SMpyuGDpKb+KSux91O7
OzAgkjvSacSjq8mQQeBVMHJO3n61o2e1WDsmTn0zXO/dVj1d9T03QWmutNSSEXMp
gj3N5acDngHseeAO4Yf7o8m8aBdR+IN5FEF2x45UN97YM8MBz8o7nt823BHrfgXx
NZR+H7+W5gkh8q2lJnEg8uQDJ2sGYAcgYyVByenJryTRFXUvFGo3qvHHGZJHMki5
GN/GSEHPTkhSecgnIPv0v4Sdz8yzKnyYupHltrf7zRlt4BIwS5dFHAA2sOO4LHPP
Xn9etFegaB4alvtIt7nzwvmAnA57nn74579AfXmiteU8y5peLdN1R7UzXl4WcbS8
UZGQcnAznO7k49C3A6mvEfEMLrrH2+OJ41SRZMt8mSoyehDY5PfPPUE8fUZXTorN
47y88+SQM5ijfftHuQMdgOfb048K8W2Ulx/acDLuFuTJsAzt4PoBzx1x3PAXJA48
upcJ3Z1Ou3tve6da6nDho7iFiGdfvHqdo3N3z+OfSvPJVZlDuCDjgZrpPhc8WreG
NQ03U7vy2t5lWMuxJYMmxQMrgfcUDJY4GAAApC6r4Yv7OFnkgdY9nmEkZITj5j3A
57gfgeK8jMKc+fnS0PveHcbRdD2E5Wmu/U4qUbWzjmprZxjLdPaprqHDkEe1VQSr
kBRsHSuVe/E9+T5Gdx4Y1M2djfOsXmYt22nzNmwnqd38OBk5yMcnk4B7zw5dPqOg
6bHFcvPbxQB/JRwVRcY+Zs4HPbPHTtXnngSX/icQxi3NyZUeMRgZ3Flx7469sfWu
10Ga50nxLfac9kVcbWt4Xi8sIOeQoUDHzDGOOMDoxPpYK3srPufC8Sxti+ZdUv1N
+4sDeqYHYmNsPIlxGCgBOR8uAMd+Rz79K2tBeC2RE8iSWKPIEMMeMscDcQep/H26
8VXYSQwBHljZmmyDsJAb+I56bs5zgEjjkd/O/ih4jvtH0lLi0uSJprnyVZwOYwvO
0Eg4yeuCP6+iuWnofNNSmepaj4kEKTIrQQxRj5nmkVY4zkZJPGSOPavEPipqGka7
q2n3en6yLrUYCySzTM6JgEYAP3cfe4A54JIAAPmOr6xd3jBpJXmZ+PMkbcWx2Gfz
qxpfhPxTrdu1xYaVeSQhd5kCHGOvGeTn0A70K8h8vKehaF4/TRLpLmUm7uoXJD7/
AJCOnJ4J6njJ6/nmeK/jb4l1W4/0W+eyhVshLUlPzI5NedWGl3l9I2zqCQVY85HX
j2r174b/AAt0XUoBNrst1PM43RxwSiNcfiNzE89P7p+tOCs+W4ppbs8iiu577U5b
q9kknnly7MxyzH35r6KtPHtt4G8AaZp9mFbXJoTOy7flttx+UuMLlsEEKewBzt27
u98OeHfC3hl4EtPD0cTPImJzEJFRif77EsMcH/PHhP7T1kLD4hi6tyEW/tlkfb2d
T5Z/8dC/jWpGkjzvxbrU2t3017qEvn3MjZaWT5iRxxn09B0GAMDgV6B8KPhXr+qX
EN5q5bRtMOVDz5892JKALGfu5JxlscnjORWp+y/o+i32r6hc31ot1rlsgubGSQbk
jwcNhem7LKd2CRk4Pc/QsfmyalfRQK0buguIwPX5CcZ/2ge3Oc560aCb6I8wh+Cw
gYGXxdfbrMF7lntwIyCCQV+bIA77i2favCPiF4C8QeErpn1W1EunhiEu4MvCVyAN
wPKckDDdyOT1r7MOpxX7yW1pIPPl+UlTywJycf7qgg+hqK3QXl9qUctuk0Uh+ylZ
F3KULOXBBBB4wMd8e1F+4k2j5H+HHja+8I36y6dKERsedERlJeedw4yfQ9Rk88kH
0H4weIdO8X+FtL1fTlPmwytbXUDfNJCTyMnbypwcHIB5wM7seY/F2w0jR/H+pweG
ITaWEMpjEW4kK68OVyThdwOB2xxx09s/Zlsra28Da5ql9EkwuZWjZHUHdHGvAweO
SzD64o7lWW587aJr+peHr+W50m9uLV3BRmhkKk/kf8/jXqnhX4663b2xtNUkjvUK
FQ8uQ4z33DBNeteIfAPhHxGDPL4fe1kcY3xjyHA/vDacH0JIP8jXg/xA+HttpN9u
0CaV7djtEczB23d8MvBHQj2I96mTstxq0mWNZ8Qpq0M0NjcC1jeM7luJMBj9QOfz
5ru/hXrmi6J4fg0+z1mOK9LNJNBO7CKVt2Bhm4yRjlSMnnAORXgthoWqXmrxabp8
bz3c2dixZYHHU/Qfpg+lWNY0fXtBk8vVdPubU5x+8T5c/Xoen449qzUWldGjV9D7
ItNdW5Z47m3eUx5zGuC2O+PUA/lXP65aQakRBKsbYz5fnx7igySFJ4/D046cGvmP
SfFGo6ZEJbW5eF/vABso59SM4/rwK+hPCmpT3ukWlw0//HzbLK3GUZwCG6bgD6gn
Pt6CmtpEum1qjSEEhyrmaRwfLYYARScEYJ+706ZGcevXm/Fery2J0iKWd55YLsKl
tJJ5bg4OVwWGcjj8ccbq7GZ5lRLmDypAkIAiKldyZ+Yd8r05BwD2HSuK0xptS17U
b5dOkubSyKlFERYRsB83zFeG4Pc9e6sAM3GMXpoaQvLzOG8WXSy6lOduxN5Crk8K
Tx2H06dhnmuXuHO7jFaeryh5nb1Yn0yMnt/9asxQXZhIowOVxXgJe85H6xG0IRgu
1hbdeRhe9bGmEwXtuSAY9+CTyB9R6VWsrZpWCIp3EgADue3FdnpXhScSR3GpK8Fn
G/72Tj5MZOGBBx0/iH+BmMZ1JpQVwr16OGpuVaVlb5/Ij8YXsNh4DkhU7Z9Qby48
HCsC3OCH4PA7EdMggkVxvgiyeBXjKSI8qqBLtyoAzkkjnHyjIJ6Aj0zd+JMpvPGd
rpNvMZbW3jhQ+XuKsxyQdpUnjzGIwWHJ2nJau0+H8CLrYivB/o9siqQMZTI47HjP
v2BBI6/QwjZKJ+XYut7SpKourNpNFuwiCW+AYKBiSKFmAxwCWBPA46n6mivQEvdK
VcLrJgGT+7aV1KnuCMiiq9mu5y+0fYuiBZLdo9JhMk0hGXZNsY55z+XTnHv0r5t8
VPar4p12MXcABaRFSI/KWJOQDsGPmGOBk+p+9U2s/HjxDfaatppttBaKIhEZAS5J
74DHj8Sc9+4Pmdus92GL79oP3yfu+tXU2sKEGtz1P4H6dDJquq3V+ivaRRorFk3Y
YE85IxxnOMjnacHgjutbWeOwnGlXcraZF+8aO7Xe075ySRgliSS23IBYjpznlvgx
BLa6DdM6mN7m7CFnTkqF7AqCevByQM9Mnn08R2qxNJcxl0dyq7os4AHOCTgdOcZP
I6Vm7y06Gl+SXMtzynVtGhuLCG808HDo5MDr86YYgA9csRydo2jsT1PKpar9oYOy
qB97PJ9+B/KvU/Mn8OeKLJ4rSCGzu2ZzBKvyZCgbj82ehUAcgdMZYCuO+IRuZfEV
9PdjbPIRIyhidmRkDqcduOMdMV5mJowgudH2uSZpWxb9hV1aV79f68zK03UX0jU4
LrT5Ns0J3KzxqwB9cEHH+e9dgurHxFaSyXFxt1RCk0bNlVaTO0lmHQBSTuJJHZSc
A+Z7m81QQc+pq9aTsr5yfTOawhiJ0Xdbdj1cXllHHR5Z6S79T17QdSGpJBbPdCG6
jizNLdHCxqM5wCTtXGTz2weM1xnx3uFiudH0t5PNEatOxB4YcAE8+mcZA46H7wrS
03xejaatne20VxGDuzJ0Z853v/eOQOMgEcHiue+MFpANP0rVba7mu0M0iO0jZC7w
p4JbnAGOAfu8t8u2vTw9elWTcXqfDY7K8RgZr2i93ozG8N6Bpdx4i0q2nkeSC4dD
LEmzOCR8uSwHPTrn8cCvqiOX7TpxWNILKzZSgjdNzlcnOQfXn1znrXzf4Znha70S
4ClXjAXKyFckAHAJbAHXPOMAk8fKPepY/Kto5bzVJGOAI44Cq5YnqW59/Tp+XXD4
Tyam54L8SvCDeDNcXUtHSV9EZYkkLwlQGYEHfg4A4HHyj51CjAONz4a+I/I1G1lR
gkMhYEcjJPXuueg/X1Ir1HXdA0/xFo91p9w1zJ50H7uS4YAq+PlkLOGAJPPC8Z6Z
r5nW9bwnr9/ZB1Y2EskSMApAAYYJ2sQOP9pseuaJxv7y3CLurM+s5NU05wsNzcNJ
5sIWQFC3JZQQFxyME8gdM+teL/tD3FnqfhbT5RI5vLW8URFkYM0ckXzgkryQ0a/X
g15xH4ut5HClkkySSy4Jz6FSB+f6im6/q9rqmkvbJcXSMG3pFKAVDYxgY4B/DvS5
5J6oahZ7m/8As8awuh+MIp5o3eOSOSEpEuXbKgj/ANBr3O9+I1tHqSXMVnh1Xy1R
3CEj5uTweu4HA6YGTXyX4ZvjaagjSM4QMHPlHD45BI9+a9Fs7TxzexImk6Vdz2kt
w0UdwhRI5SSBuUsR8hyOenOOuaG5bIfLG92ep6Z41ksrm0kaxiIttxzmRWbgq24l
cdSM4AycY9K6Tw94/skVka0mdWJkLQ4cg7QMHHBzgnI+leQ3ngH4lWFpJeGxgdY1
MmIb+NnA+8xAIAJ4zwRXO6lN4l05El8S2F5YRfZyYmfaPNy2AgIJwc5yOoUH2pP2
i3FywexxHjO4a+8Q3V0cEzytLkDBO5if619PfDq70yy8F6HYJJIbeCzhdikLtulK
vK5J24OHYY7Z57V8nuzXGoBWcBAQhbHQDr+Vd2PEdnFaxQrLdzLGgRMqCiAegbPH
+cVTm0NwurH1BqOu2cNjczW1ydySOCgztK84542np3BH4V84+LvEW2V55SjSybij
MDjrnOc9cnucjj0ArEi8axwyBonjR8FNmQxZTx+H0yP6Vp/DrRIfG3jTyLuRVs7X
NzIrMikjzACPnz/DuHRh2O3O5VZzeoklDU9B+C/gQ2v/ABPtc82DVPNWS18yA5QF
P4t2cH5sZ2g7kOCVPPpHxCgttS8MX1jq8CTQyQvIlzAFHlMuGBOSF7A4Jwcfk+aO
zs4GWKS9giRtoWJtoCgfcP8ADjGCMDnbj0zQ8UI0Hh65ki1F57UoQqkhJMMOgbIJ
I4Ixg/pWnoZ6vc+Y7vTrOKwe5Eheffs2EAFfwzk/h69u/tfwql/tXwFZhLyK3e1c
wAzNwWDfIvJPJyAOnoBjFeS+J5obfQoo41Xc0hkByfm6jjkD06dc9sZbv/CkFlon
gbTZLyZpWnhLPZyP+7kV3LcEMQcDJDKRgsG2gnnnbgk3PY7KdGpWcYU1eTNPXdTe
7hFjYTMJVdvOBbERAXnHPDHoAcBjlSRjihqXid9EMtjoVwfIC/Zy8kQO+MLgAhh7
kYIP1qj4o8VSapGkSoIVTgbeDt4OwkYyAeQMVxc8rOzDPXP415dXG83u0tu59nlv
D0aK9rileXbov8y1GIpwd7lXBOCVyPpx0+uKS0sWluTHEN77sYXms63LNjgqM4Ne
n/DO9udKg1S5jjhkg8tUlWYnap6qxGR3HXjBxyM1lTgqk+Rnq43EvCUJV0r2tp+B
Ri02HTLW1xslvZ3dVHllkh5UBn/2SCeR8ykA4IyV7rT4o3nVfEVzPczoCkLfKY5E
PGx+AGBIUk4zuQHjpWR4Ot2vEXVtUtRKJcxLLtH7oAsAMZIODuAzyM7T0rqLlI1X
zIQY1eMSIPJIUEf7JOPY4JHB6V61Kn7Nfu0fnmNxtTGVHOs79vI8A8V2AsPiLfpK
RHD5yyAkbcJtGD93npycHJB5Y5J7z4OKLvxNqa2U9tcXXks8SyfKSMgtgbfp0YZz
nntxvxetJZvFMN0isqz2sZZ1HylhxjO0emOST78YHGabrGp+HdXgvdOZoriA7o88
jpg/oT3+nNaxfvXOWUbqx9qSC0ZyZ7O680/e/wBHLc/UCivniH9oPxIkarJYWruO
rCR1z74AxRW9kY8kjM8D+C9L8RPdyHUJbKC0dQySwhnIJPQ5wOF+vOcAYz6rofw4
0q3e3MWnO6quQ10+53GeCR0GemcDj8a89+Ht/p3hL4kG81FYlsbhHTzH2gDPzKQS
vsOflHctgV9BahrtrzFpTLch9rR/Zm3hwRkHf0x34J71mkmlJlyunYxLyw/s6QKq
W0UqrnbEpcBT35yfxxzjHvVNtQjkJ8qRAgbP78FS7fw+mcdQOn1HXzn4jfES4jM1
jYTopBxNKBwWGRgZOTg568fWuL8OfELXbGeOKWQX8CMCzSxjft+8xDDBJJ5yTj2q
ZTf2RwhfVnrni7N5YXckc8lvdxRFkaFzvD4zuL44x7Ae2CQa4LxRbXf2eye/R1la
2Q/OwYhQMLnHHIGeAB1xkDJ6Cy+I+hato+oaYsC2l3cPtiilxukQNxzjqeBtDZye
o++tb4ghraW2tZUjjEcSIqDG7gYJIBwOnYKPQda4cemqLk31PoeGZf7aorS6Z5xc
qygqCffFRwMwP4d6vXMWD6D0qiVCyZyM+leVCSkrH38k4u5opKRHgDLdhnArubPS
v7X8M3mnSEMzRBkd1J2nYw4wrZ9s9MZAyFI4KzJYkgYOPSu88BWmtX+sM8bRtbqE
DSTEBYx+WT0wOevsK2wPu1ttTys9gqmDkm0ku/c888Lalc290LCEiOUSHcZchtyg
5GOuc9s+xA5x7ZoHiS1eyVLpTcXCAkRoMljnHpnAyec84U5J6eN+JtJj8J/ESeCN
wLcS+YoBHCs7DBA2/wAKjrt9ty/O3qvw2v4Fu7q3EXnnIMPmqqBTjncMDpjAyc+w
+bPuNNOyPzeVn7x2dlqUMzrKdOmDTSDDS4kkkYHqASMHnkDueuay7Pwt4XfVH8QX
uk2GpTTShpri6HmJtYYXarEqoQhVzjack/IuANK906JbMSTiFoWYLuiwPKxzwARj
jAGOo/Oqq3txZeI7uw1QQ+XcqJZfMJUI6cBt/wDDk7MkDq49sVzOO5nZS1Ra1Dw5
4evTaSXug6S1upS0uEFlHvichhkLt6qWjBxnr6Uz/hWngy4vdKml8M6VGJJJFkWN
Ciljkj5A2COMYx7dK0bbfc2mpRTu7PLbtteYgMmcsW25IBD9eegX0NYOs+PtO0K3
tVlnZ7qCRJWtYot7t90ZboqblB4JzubPQYOvMzOzPn74x6JF4b+JOqW1tbrbWsxW
eGJECqgdckKBxjcHx7YA4r1z4L6qtz4dsbaQ5FrqQkVGJJEbYdSP+BF+ff0rxr4h
3VzqvibUdV1OKaKa7kaYE8gLkhQPVQFAz7H1ru/gXfQx69cW8kgEPkrufBBU4kAP
PHBYnkc4yAcVlKV3obNe6fRmqzZ8PRxyyOyiB1fjBIMTD5uffPFfNHxz1YzXum2m
7KWtoikKflWRmyRj/dVPpX0G+pZtLMXNvHFGpQysvO7CH5QD05wvJ6HtXyh8QLpL
vX9QEjgMsyr8u45AVVHJ56Y+vUcU57kU1c7r9mzwdpXiMa7fa/psF9ZKiQKJ0yqH
l2YHqD/q+R0ycd69Ts/h94M0/SLSe48M6YRseaVmh899ow4A3FvoT2B4xXinwi8S
XHg+TU7tbec2F3btbyEqGAfgo+CRkruOVz0PHSvcdP17T/EcdhDY3XnoksayZTbI
qhsiN0boSCRnocDHUirU7rQU07ktronh/T9Ljh1DQdDcECeaL7JEVVCm3B+XGA4K
8ZOcYzWdpHhvRPC9/NNp2nRWU93EVntoQWSVgC2VQttXZkqfUc8AMG3b+ZTqFybh
wlqzlZFMv7rnBfJ7DcE4AILFuzA1gWVzc60dVu7oBIGIjlCrs8sKQqrj/fODz1X2
OYlNp2CMb6ly71eC2Yv/AGZKUmAG6JvkdRjgr0HT8wM9a43xfr6XMf2bS5gANyku
CMgEdcAEEDHfPLEjIyfQIrMW/kzCG1Kuu8QPjgHj14PXHP8AWvIPHOq27ahqM0fm
RRxx4iTYGwSD1YYIwTgc49DghaiXMi42ehxOkrL4p8WWFswBYMruVXehVeTuG0gg
kAcgjsTyK7fxshjG2IYjg2RhBkqcLjOTgk+5yTnrnNZfwV8Ntqd/qmqRyRCa3jeO
IzMCoJC/e4JHDuOq98bxnY7Xo9WttRvINRzHmQMYuCBxntj1/r3rix+lJJn1HDUE
8S5p6pbfmzBuJMjK+vQ81myFi3cc9qtXBIcjb1qGGMHPIwa8mFoq59xN8zsWLeMu
VJ7da7axtdQGiWotmuIbaW8RJXhlCHpwDkH7ysR0HBHVS2OTto9oywzj8xXoelMJ
PB8lxMsBt7aZJTKMYjA4JbOQuN393PB+8vynowL5q9jxeI7wwL82jr9OljtbaSCF
o3i7tISnyH+Fh/UYI9e1XEvwX8sSb5sfI6LuV/QE4wTjv/OvPvEnxX0qe/mGjWn2
mdoSqzR/d83ptYDGRgn5lJ9s9R51dePdeutQjmuLxbdYiD5MUYVDn7wOBkgkA4PP
HXIr205RdnqfnXKpK+x9ILoEGp2Uge3tJ4gdr7hhlJ54Xp74I/PiuI1r4ZaPLARL
FLYHcwW4ibdGGPQMp6ewGOtW/h747m1mNYpPnvUTLonDSKBjcpHBIGOozxXolz4r
0az0ye81a4t41jCoBKdjMT22H73rhdxIHAJ4N6T23M9Yny54i8LWOjaxcWBvjN5W
350tp8HKhv4UZe/Yn8OlFZOq239rapeahEEjjuZnlVQ+MAsSPu7R+OBnriik5RTt
Y1UWeheMtEDWtxDdKEdHO0hT85BwcDjrk9R0HHpWFdeN9a07whFpDtFEMGPzAzGV
4wCCXLHvkDjj5cALjJ9L+Nfi3w9plwLbS1t31OMlZmVMonH3cZxnp2r5s1C5mv7v
CZYM3AOOT0/AUlHldiU+daml4c0HVPFuspZaTbmaQjkg4VB6k9hXfS/DvX/DyyT6
lYJKWgJ8mNxKxyccqMleMnJGMKe9dZ+zbrAtodR0ODToYdQRxKbps4wflGRt456Z
blmIAx09a1U2qJtRHu7iZTFk/MZCeMAE7cf4471bhGwnNp2PlKXSnEaX2mztFcIf
MUISskRXGGXvu5zxwOmc4z2HhPW4fEukxaLqLbtZgBSEEjDIuDzgYHHAxnAQ5IyM
974v8G29rb/ao/LE6j5reFTgRqOVwAeOi8AYwevGPG9WGqWWpvrNhHIgjm3Zy4Dn
liJCOcHuM98djWU6aa5ZbM6cPiZ0pqcHaSNzWtOg07ALATNz5ZOSRxhie3XPTjP0
rHuIApBxya9G8HjTfiHYpqOp3UcN1byGOaDawLOcsmCcANtUttG4gDuKreJvCc9n
deTIAjInm8EN8vZQV6nGOnr6c15NfBTg+aC0PusBn2HrxUKjtLrc88gbMpVvlC9C
TXovgSaW1ljuCYJDDIpEcykg+nP1Ixz7ntnlrzQ7mC4nDR/PEwV0zkhsdP0P5Gu6
8M2k/wBg+W1Lo2M7j8vHGTnGep78E8e84SD9qntYM8xcI4NqLTv8zhPjL551XSdT
LEO5kB2ZCjDDBHIPUrkhcdBnoBJpWszaeIryyliLvG0aCYsqZ5XJwckD5fUZwOcA
jU/aAtbXTtJ01JSY72QZjjLBSACgLbc8dGGcD0DDlW81ttfg0/SYo0h/03PmecMM
oA7FT97t+vXIFey01Zn5/dSVj2K08bmy0aG2tYpJrrETTTzuNkkv8ewA7yN27BXg
K2OoyKOs+KLm7vIL/VLvTNOlIEqNCxD7JMFifnDZAAGTg4wo6CvPbKfxR4jj8/TL
W5lhRDieNRbw7Q2MCT5c/Mfuhjz26iur0v4QX8mmyapr+u22nWMTDzGtYWnflguS
7BR1IHfPJAxzR70twjFKy6lL/hLUm+0w3t5NJbEoyuqyfKCB0DyDpnHPdm6jisLU
/EOntblYrWN5OT9puZmfacYIVT8oP4nGe/Su0s/A3g+2sx9tvL+/nbYGIuCc/OjE
KihQMjcOT1HXHIvaPJ4P0fVl8rw5aqCzD94gnaPMeOrli/IGBkDJY8jisZ16cLc0
j0KWV4qom4Um7fL8zi/BXh/UfHl87TTSRaUsge4u9nXJwVizgF8Z5PCgc9gfZ9F0
Ww0zT4rHTUSKzxEUQD57iQvklzyXbDRjucrwFxgx6dqs+naJLf6fdfa9IaFhdQ3i
/PYocp5iuuT5Yxu8vHCn5QAMVDoXizQ0ktzBqtqg8pCZJJuIG81G5zjjAAz0xxkZ
NaXi3Fx2OKpCdNyjNWa0sdHeYkt72Z4Y/LukQhgQSQ6GZjgcjOzdzkcZOK5fxb4P
07xOjJdy7b1Cy2l7EqmRvkyFc5G9QyPkc/eyCpO2tca3YQG7eZ4bKzWNxbTyTAAb
wcj0Bx8o2+vfpWTceMdHh1SK4huYJbxb5misxIfmJOVTgHDMflAzwTzgDNEpqVmu
5Kg4O3kvy0PEdZOpeFtWk0zVhHGUwg8xSYZ0BBDKT95TweoIzjg5FaNn4h0soi+S
9gQuMQzNIhx0IUsuOcdG+mOtezavfJZ39vceLJVubhmYvpscCm2ttoHysufnb5uJ
CM/K23A68EdN8G6xFcGTQUtpGh4a2JQwthjkhCA4ycH5chQMDg1E61KEuXmszuoZ
biq9P2saba7/AH/5FC38YM2oTj+02s4VUJEH8wKrbWxzvxxjad3GMYGM10Wm+Lb7
SdKkWxGmT2LExGWMt5mTmQ52sehDYDDA565rM1TwD4UuLkyWGu32mxszMcyicAHc
VwjLkHhc/N/EMZ5NZviX4V+JfC9xvs72zvdo+Uo7WkuM4IOSBxn+/wA9QeDWm93F
3OSpRlStGpFxv3R1Wu+NmuDbXVmgt76CRd4mcG3lh2fOFKHrny8dSApyea4HxNfE
abI7zMzTlj94npgHnPPVs5OfruLVlalrOu6EWsNXguLRmdhturZcs2cMVYjDHplg
T256VleJNVttQtIZLOE27KuyQF8kkDrnjvnA44OMdSW7y3M1FRdz2P4RyTaR4Ohk
ZY3W5SYyC4BwOcHHzEcckjggjpnJbG8WLIt2yvKpAALbQVAPcf8A1+/1yB23gmxt
rnwBZXmmIJ4txGDhgpDH5Tzx1HGB1+6oO0YHjWzndsNburNgAE5PHGPfjHqeAPpx
4+DdP0Pf4cxKp4rlfVHngbfIVwdo6Ed6txxKkXmY+XgkVs2Xh+4keUDHyhCzDoqt
jDEdccjt3rtPDHgtb62k+2qBZxsY5cuow3b6jORx/jjzYYepVdoo+vxGaYbCxcpy
17I5fRtBiv1SS2Kyk8M2duDzwRz2BOfUY+uP408Tf2jNBo3hmaZLOLd5rIw3Mxyp
XgdCMkYONshBHUDZ8ea2PCSL4e8PXUd3cXMWZJ0EiFFfBjZCP9k5DAkZGMYNYfhL
TLuK48m7hm8y6RQr4bf82DyMc4Iz0PKjsc161HDxorzPis1zSWMno/cW3n5mfp+j
i0ubZYoRe3TtgQQruwVJAAHfIBPTIIwQDW5cfCXxPfwXFzZW0EkJduRMM8cgFeoz
xjd6jOK9e0Dwpb6XaxX0Ucd5JGRLIu0F0ZRgkbu4+boAQD36ntLCSFYhcWEiwzHL
kSE+XIvJOQTx3+mK61BLc8KVR7nxXp9zfeH9XVXD2t5bSZw/DIw/rXfeIfEWpeMr
XTIbxYltYxud4S25mAxhxnbwcsM8jP3gDgVPjnqUev8AjW8+yaWttJYIIZ353My9
cgqCOuOc/dGDzzyXhbW5NLvEkkIO3s4BU9RyPXnqKJK2kS1rqex2WlxpaxpESUUb
QVYYOO/zHNFdH4d8ceBDotob+3mF0U/e7dwG7POPmoqFS8yXWfY+b9J0vVPFGsRW
Om28lzdS9FHYDqxPZR6nivZZvhdbeHLGOWKSS9uymTKV2gOOoVQScZwN3f8AHj1H
wP4G0jwH4WW/hgTUNQmVWkuYkznPoecLj09jiullsUvrM20rRqrJvczgAElT26d+
+cdhW0opqxDlbY+Trq8k8O+J7TVLBgjKwLjZyV3AtgBh7dwCMqThjn6egma509NR
haPdcQr9maOTf5cRHJXbn8Tk5rwjx7oUUDTqJ4TGC/38bTyR16fw+nByKj+EHjy9
0sTeG5rC/wBSsmczn7JAruM53E4AOC2CzkngYxzUU3dWKmuqPY9UltbbTjPcSyTJ
MxVYypPmLgDox+Zck8989ieOF1bw7dRac2qzRkRu+JI1RmaNSfvDI27uM54AIJ5r
0DWAJL3fc7nm3CJDIxQoW6vs57dD6fSpbxEg0l55FFxHAdkdvEd2MYPC+vHHvk1N
uZlc3Kj5kvLe50fUE1HR3lBiOUBYjKjnD7TyMDJxxz+FemeF/F+neJHEElwkGpyS
Y+zyN+8fkfOWI6tyQoJ2888VleIfJTUJRBZSwW5UKYriEYc4+8mScjgY4A3DGMCv
OdW02TSWtL+wv/s87o0iSI5Qx4ONoYfxH8OPrxNtbMrmurn0kPDtxJG8rJHIpISK
MrhdxGST7BR39D7VQ8Qa3oXgyF5dSWKeeLAUSNtMrD+FVGSeT1xgd+RXzFqPinXb
qFbW41W8MCqY/L8wou04BBUHB6c5rJj3SHLuWPvyf881fKk7kavRmj4q8QX3iTWr
jUdRmd5JGOASMIueEGABgD29a9O+APhCx1ePVNc1mBJ47QqtvFKgdXYDdIwByCUB
j9fv9BXkU0ajAAJHJwoyT7V9U+CrePTPh5plpaNAJLZEululkyjSSKHclsDli7Bf
UDHVcluWgW6IfcyRhWd2H2CONx1ULEpcBmxnoQRjHG5uByaw9f8AG93dm5t5b2KY
SxfZ3eNNqypzgDcoIxvK7goJGecYrD8TapIsskEcTJGrMY1ZBhOT0467Soz2AOOp
rkbi7d5MSDczEgsK8jEYuTbjT0PuMnyWnCmq2IV29Uu3/BNK1u5rGCaGKZ9j4J3Y
PTr+ZGcevSq0MqxIqjjvyME5FUndiQc/KO3eojKTng8c1wOEp7s+pjKMNUjorLW7
uy2tb3dxCw+7smYY9uDjFb9j4tiS1ljudPsJJJdn+kNCDKdgIUMf415PDZABOOwH
n8chJIYEgDPvUlvK7gEHbntWtOVSj8LOPFYXDYvStBPz6/ej1rU7nwPY6Jp95o1l
ENXk3ecDApK8/NwRtU5+6Vx69Oa5zVfF7zTPLp9ta6cX25azUxs21dgLN1c7eMnk
dsc55+7tUi0+0uI2XzJ9+4A5ZdjBeR2znNYzSt5qq+WDenat62IqT0TsjzsDlODo
+/y8zu9X5O22xtXOpS3DhpZpZO+XkLfic5OaqpPtmilQ4dOAQuetZjSsWI/ClWU5
24OK4/ZO9z3VNW5eh0MN/K2sRajLM/mwMsincBgrzn88H8B2rvNP8ZS38E1rdX1u
sTuJGWRMec4wEwQCqgFV4yowSRzXkyuyp83zY5GKs2V9KoBjwvHI2gk/ga2pV6tN
73R5+Ny/D4uHLJWdtH2PaLe1tryX7Bqtus9vI8kaW06LIFy2NhHIBJznjPyjnAr5
4+LvhuLwp42vbGyybGQLNAwPBUghgp9FcOvU/d617B4R1OaeRAmISiFIpHwqRZwM
g4+6Pnx7NjoKzv2h7O3ufD2mzxxpBJp7pbxqxw7o4YkY7gGNWXn7pZuc4Ht0K0ak
bo/OMbhZ4Ss6U90edfCfxy/hPWDFfkzaNcgrcQNyoPaTGCcj0GM19DWkGn6/aG40
VYZAAHCK4kSUdDhs9f5Hr2r5FSMGMHoR+dRrNNbSq8EzRupDKUYggjoeOh4Fau0t
Gcu2qPr290SS0ilkZ1+ymPzIywI2oRnv6c59QfwrzHxf48gVJtO8OTrc3E6eW08L
MNh3YKHaAGz95WBPIAwM15da+KvENzFHatrd6IwxwzzMduSc/OeQOTn6+9dF4d0e
O2itL5nimMjuvlsoIyON3PVT+HQ+nMySWxUX3LvhfS1iuFnuvtEsz5ZFADs7EdGz
94Nkggc5H5+r2eiTaBLb3l/EJYXXfLsDfuicEY3DGM4OeowvUCsnwTJAs7y3On3N
zKzDbKIf3aqRjbnOCRuJPHAOe5FenapAI7cKJEaNU89EZ8lDzwB7/qMUuR2uHPqJ
bsE+zT2l1IWlUFOHAZgSCCQfvYwCOTxnsM5HxR1d/DngzULu2MaC6+SBVfBSZuG2
gMrKeucZI+92xV5buPTNHupobS9ubVAsgtbMGaT5iMKORhgeQO9fPXjPxXe+OfFs
baghtEtcW6xzRrHjGN27AyMsAdpLbSDg1rGWlzPlu7Eng6w+1hnk2yXFzId7ImBy
fmxjO3ucAcDjHSum8S/CB7vQn1DQ/N/tH732LaCsqj7205yGGfu8nsOnPTfC3w9D
PqFsZp4flBKiQDaSMHoc569OMfL68euXkgsYFk8tpvJZYisfzBhjA68/qT2zUU9f
eY5ys7I+EZRNDI0UoKSIdrK4wVI6gjsaK+5Lz4XeE9VuXvrnSIhNPh2BjCnOO49a
K1tHuLmR89/B34szeHp49I1yb/iTOcI+zJgJ59fu55zyR2r27xNrsenaUoGMlS8Z
PICY+VlPHGCCCGB6A5zXzF8RvBb+FtdnsjcxzeX911BGRj07cHpzWfoXiLULTy7M
zySWrMFEbNwv09O/5mpnLTzGoqWp0XjG9uJLhUEbPcTMQuclmYkAADqeuOufavcf
h14TsvCfhNFDxTalK4necFg0TkEKNrkD7pKlgFyD0FeR/CzSLTxp8RfJvsbIIzNH
G0QZW2uMg5JxwSOjZBIG04YfQ106wzpHKv7i6cQzInZ+m9RjA75459qUFaITetjI
137XDAt1aW8qxNmOe2DBsjIKspA565B+nHOaoXviC1t9DjvLSQy3EhEXkKVPmtnn
5QcjGOep5PHar/irHh+yuJy7uq7mGFH3sDqBjIIIzyO/Y14nreuxQJLcMkjSO5VU
wMDjIO4YIYA9cHkk+1ZyvFlRtJWIPEfiEpNJd3yI10U2DcCAoA9sdCDknkcHnvie
FPBV94mv47jUQYdIErRzP5oWUOPvDGCQwz/EORnFa/wu8Kjx1d3WoXd0+y0eN5IX
AbzlKkgsSDnlQCuOck7s8H13xXZjw/ezWocukMCyhl4IjVgAvoSOxx2o1iuZmsYO
b5IbnGXnwX8Lz6erxardWs6fI7gK6AsPlcg84yMHB79eDXEeMPg/qGgRTS6deLfp
ECzK0flMU65XJIOByQSDxxmvS9Q1T7BeXapGu5XELHHEgPPI7c479z+PR+FtVuZY
FaGXaiYPlvGGBIz3znp/IdqiOIjKXIa1cDXo01VmtGfIDyMRz1HI96+l/ghrB8Rf
D19OnGTo8gEozlpo2GYFyfoy7jwBEo6GuB+PHgS08PalbatpTkWmpSMTCxO6OXqc
Hn5TnPXg8YrjfCPiTUvBuoteaU8bB1xLDKDscD6EEHryMHk1u+xybnuur6P9sikV
wn2yQuShV9rnf7cL8zNhuRzgjkEcLqGkzQTPGI41VOrJIsijOOQykg8HPWuk8D+N
7XxfdXFrBaz2esRWzzTBmDwsAy42tkNkZDcjJYnJ6Ed/rulaXN4e1C8trIQTwxFY
ow5IR/M2NJv6k7mBwQRhcYBOa8/EYNVXeOjPpMpzuWESo1dYvby+d9jwqS2+fI5Y
e3WozATj5SPXPFdYNDj06xc3p8/zGUBgxyvIHTvwfXnk1jvam0naB2V/LYqXAwa8
eopUt2feUZxrfCZawELlPrn2qxDYPJjbGWJzwP6V3Nh4fs08LXOtXjTyLFAbhII3
VfMIk2bSxU7RnuM8flUvh/UNRurZ7a00fRVSdokRpXcyM3Rg7hfukkfdCnjnJJNd
dHCTqJOTtc8LH5/h8NJwgnKSdn0SZiap4Q12z0a0vb21l+xXH+qGOV54yOo3Dkcf
kcCuZltGjwQu0nj/APVXrdxP4puLQW1xfafe29qjuLWSN41QDnKuGLEjHG4Gub17
VXn1NV1XSNPSCWSNBJYSGKQrjaWcFCrNn5sAKOxzwRvVwqkuamzz8JxFyPkxMPO6
89dv+CcG1vzyACePxoWA4HynJ44GcV3fjXw5DoN0ohmlljaR41ZsAnZtzkAAfxCu
atLRJS8s23yreMuyAZLdhzn3rzZ88Kns5bn1dCtSr0VXpu8X/nb8zPgteNqcNnPT
rW1pGhTXMjBoYf3eMmSUJgc8gZ3NwCflBOBmtT+w/L1G31CPAtlZS1v5p+cDgjdj
gkZGfocZr1DV9H0/Ty9np9ojXBkIildiojUMiumATuBPdskAnr0ruoYJz96T0R4W
a53HCr2dNe8193rr/mc9ommRJdxIimWF98czbWQ4yoPDH5SNsZ284C4znmvM/wBp
HXpZNZsPDrMGbTole5kXgSyuMoce0ZyB2MrAVb8SfFaPRtUvLHQLKSXUIJ5Ybi4v
DtTfu2hlVWJI65BYDAXjIryPVp7nVru51G+mMt1MxdyePy9BjAx7CvXhFQVlofBV
Zzqzc5u7ZW022udRvILKyjMs8zbEQEDc3pknFeu6H8ERcW32rW9bFrHHgyiG3Lg8
jhWJGTjPOOpGM811XwO8FW+i+HovE8jrJqd7Gy24wSkUbHByMjLHB9ccYPWtzxRr
U1vOvnSGdl+YEoFAAHHAPJ/rSq1I0ldjoUKmIn7OmrtnN3vwb8M21iI4b28e6VNz
MzqDuIJCAgbeuM8H8M15k+m6p4P1WJdTiiMZBdSr71aLO3JAIIGSAN2M8V7Fb6gJ
ku5WQh9iMz9S7SMB7YGTz7DtnjoYfC0PinQdVju3AiSXyipUEmTO3fk55APH/wBa
lGoquxpVw1XD3VRWsed+EPEctnKZbKEvbyEySRqpY5wcn14yM8gZz9R6fqmr232W
3NrIbu5uR5gAZW3jGT0JIAPU89PWvn7WbeTwL4xk0o3El1s8vzG+6GLJu2nH3lHr
xuwOFrt/DOvw219b3EXmmKUIeUAKZOABg9gCOvZT2od17pjZL3j2GzW5gtklvfMa
6lzJJOWUCLJ4Az/FgHg9OeTg15n8dfCNqlvB4k0hI4JbWNI57WLzHIQYCtkEqoC5
+XgdyT0r1Cxsoms2v5mcxwxb1RduSoJwMkcZIJP4U6bS08TaVc2l4sbG+iOSwDCN
APkVQwIBBwc4PIzjsd4q2hi3rc8M+HmsSWk1tcKNqbtrDcdp5xgkEcc46/ia9vuf
FVhpmgLrOoSGKxtlwzbeA5GAoGANxyeBwOcnvXzC1zHoGt6zYWZLwW00qwnZsxsb
A43NjGMDJY++Sa5zVtXv9akQXdw7IPuIT8qfQdB2/Ks4+62mXKPNqeiav8dvFFxq
VxLYyQwWrN+7jKHIXtnnr60Vw1p4Za4t0lEqDd2K0VtzMm8T/9k=
---END_DATA---
%/
!usage
{{{[img[crumpled.jpg]]}}}
[img[crumpled.jpg]]
!notes
attached by FileDropPlugin
!type
image/jpeg
!file
./crumpled.jpg
!url
http://dl.dropbox.com/u/1064531/crumpled.jpg
!data
data:image/jpeg;base64,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
| source file:|{{{F:\TiddlyWiki\TW jQuery\TreeView\images\file.gif}}}|
| attached on:|31 May 2009 by YourName|
| embedded:|[[file.gif|file.gif]] - {{{type=image/gif, size=145 bytes, encoded=199 bytes}}}|
| local file:|/%LOCAL_LINK%/[[file:///F:/TiddlyWiki/TW jQuery/TreeView/images/file.gif|file:///F:/TiddlyWiki/TW jQuery/TreeView/images/file.gif]]|
| remote link:|/%REMOTE_LINK%/[[http://www.symbex.net.au/Wiki/images/file.gif|http://www.symbex.net.au/Wiki/images/file.gif]]|
image
<<<
usage: {{{[img[tooltip|file.gif]] or [img[tooltip|file.gif][link]]}}}
[img[tooltip|file.gif]]
<<<
/% DO NOT EDIT BELOW THIS POINT
---BEGIN_DATA---
image/gif;base64,
R0lGODlhDwAOALMAAGpsYoy3oamMQdS9fDmJdP////9tcH98XwAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAACH5BAEAAAUALAAAAAAPAA4AAAQ+sBRBK5VYiizH5l82eCBX
jCS2GayRhZOpvkVgHwWg0XKM4azCAaATZnA9pAQ3sAUIhOWxZ/xRlcKDdsuVRAAA
Ow==
---END_DATA---
%/
| source file:|{{{F:\TiddlyWiki\TW jQuery\TreeView\images\folder-closed.gif}}}|
| attached on:|4 June 2009 by YourName|
| embedded:|[[folder-closed.gif|folder-closed.gif]] - {{{type=image/gif, size=887 bytes, encoded=1202 bytes}}}|
| local file:|/%LOCAL_LINK%/[[file:///F:/TiddlyWiki/TW jQuery/TreeView/images/folder-closed.gif|file:///F:/TiddlyWiki/TW jQuery/TreeView/images/folder-closed.gif]]|
| remote link:|/%REMOTE_LINK%/[[http://www.symbex.net.au/Wiki/images/folder-closed.gif|http://www.symbex.net.au/Wiki/images/folder-closed.gif]]|
image
<<<
usage: {{{[img[tooltip|folder-closed.gif]] or [img[tooltip|folder-closed.gif][link]]}}}
[img[tooltip|folder-closed.gif]]
<<<
/% DO NOT EDIT BELOW THIS POINT
---BEGIN_DATA---
image/gif;base64,
R0lGODlhEAAOAPcAAJdaH+C6eP/inq1zLf/////Sg59oJMOHNAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAACH5BAEAAAQALAAAAAAQAA4AAAhUAAkIHEiwoMGDBw8oPIBw
4ACCDxEeEECxQIAACxUSZNiQo8CJFEOKBABRpEkBEQUOOCkyJQEDBWLKnGmAIICZ
OAuQHAhgQE6ZOwcaGEq0aMOjBAICADs=
---END_DATA---
%/
| source file:|{{{F:\TiddlyWiki\TW jQuery\TreeView\images\folder.gif}}}|
| attached on:|31 May 2009 by YourName|
| embedded:|[[folder.gif|folder.gif]] - {{{type=image/gif, size=141 bytes, encoded=190 bytes}}}|
| local file:|/%LOCAL_LINK%/[[file:///F:/TiddlyWiki/TW jQuery/TreeView/images/folder.gif|file:///F:/TiddlyWiki/TW jQuery/TreeView/images/folder.gif]]|
| remote link:|/%REMOTE_LINK%/[[http://www.symbex.net.au/Wiki/images/folder.gif|http://www.symbex.net.au/Wiki/images/folder.gif]]|
image
<<<
usage: {{{[img[tooltip|folder.gif]] or [img[tooltip|folder.gif][link]]}}}
[img[tooltip|folder.gif]]
<<<
/% DO NOT EDIT BELOW THIS POINT
---BEGIN_DATA---
image/gif;base64,
R0lGODlhEAAOALMAAJdaH+C6eP/inq1zLf/////Sg59oJMOHNAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAACH5BAEAAAQALAAAAAAQAA4AAAQ6kMhJq7336IPnoB92CGQR
BJtGcR0rjWQsA6A83HhODDEvx4WPoRAkGo8hQPGInAAGzCbFQK1aO1hCBAA7
---END_DATA---
%/
| source file:|{{{F:\TiddlyWiki\TWExperiments\jQuery\images\leftbackdo6.gif}}}|
| attached on:|31 May 2009 by YourName|
| embedded:|[[leftbackdo6.gif|leftbackdo6.gif]] - {{{type=image/gif, size=64 bytes, encoded=89 bytes}}}|
| local file:|/%LOCAL_LINK%/[[./images/leftbackdo6.gif|./images/leftbackdo6.gif]]|
| remote link:|/%REMOTE_LINK%/[[http://www.symbex.net.au/Wiki/images/leftbackdo6.gif|http://www.symbex.net.au/Wiki/images/leftbackdo6.gif]]|
image
<<<
usage: {{{[img[tooltip|leftbackdo6.gif]] or [img[tooltip|leftbackdo6.gif][link]]}}}
[img[tooltip|leftbackdo6.gif]]
<<<
/% DO NOT EDIT BELOW THIS POINT
---BEGIN_DATA---
image/gif;base64,
R0lGODlhbgACAIAAAHKOqgAzZiH5BAAAAAAALAAAAABuAAIAAAIXDIynyesNn4x0
2lqB3rz7D4biSJZmVwAAOw==
---END_DATA---
%/
| source file:|{{{F:\TiddlyWiki\TW jQuery\TreeView\images\leftbackdrkgreenqu9.jpg}}}|
| attached on:|1 June 2009 by YourName|
| embedded:|[[leftbackdrkgreenqu9.jpg|leftbackdrkgreenqu9.jpg]] - {{{type=image/jpeg, size=992 bytes, encoded=1344 bytes}}}|
| local file:|//none//|
| remote link:|/%REMOTE_LINK%/[[http://www.symbex.net.au/Wiki/images/leftbackdrkgreenqu9.jpg|http://www.symbex.net.au/Wiki/images/leftbackdrkgreenqu9.jpg]]|
image
<<<
usage: {{{[img[tooltip|leftbackdrkgreenqu9.jpg]] or [img[tooltip|leftbackdrkgreenqu9.jpg][link]]}}}
[img[tooltip|leftbackdrkgreenqu9.jpg]]
<<<
/% DO NOT EDIT BELOW THIS POINT
---BEGIN_DATA---
image/jpeg;base64,
/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAUDBAQEAwUEBAQFBQUGBwwIBwcHBw8L
CwkMEQ8SEhEPERETFhwXExQaFRERGCEYGh0dHx8fExciJCIeJBweHx7/2wBDAQUF
BQcGBw4ICA4eFBEUHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4e
Hh4eHh4eHh4eHh4eHh7/wAARCAACAG4DASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEA
AAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIh
MUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6
Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZ
mqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx
8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREA
AgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAV
YnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hp
anN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPE
xcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwCw
mnaem3ZY2q7cbcRKMY24xx28tP8AvhfQUJp2npt2WNqu3G3ESjGNuMcdvLT/AL4X
0FFFfMn5+Cadp6bdljartxtxEoxjbjHHby0/74X0FCadp6bdljartxtxEoxjbjHH
by0/74X0FFFAAmnaem3ZY2q7cbcRKMY24xx28tP++F9BQmnaem3ZY2q7cbcRKMY2
4xx28tP++F9BRRQAJp2npt2WNqu3G3ESjGNuMcdvLT/vhfQUJp2npt2WNqu3G3ES
jGNuMcdvLT/vhfQUUUACadp6bdljartxtxEoxjbjHHby0/74X0FCadp6bdljartx
txEoxjbjHHby0/74X0FFFAAmnaem3ZY2q7cbcRKMY24xx28tP++F9BQmnaem3ZY2
q7cbcRKMY24xx28tP++F9BRRQAJp2npt2WNqu3G3ESjGNuMcdvLT/vhfQU63srO3
YNb2kETKu0FIwpAwoxx2wiD6KPQUUVnV/hy9GJ7H/9k=
---END_DATA---
%/
| source file:|{{{F:\TiddlyWiki\TWExperiments\jQuery\images\mainmenugray7ef.gif}}}|
| attached on:|31 May 2009 by YourName|
| embedded:|[[mainmenugray7ef.gif|mainmenugray7ef.gif]] - {{{type=image/gif, size=105 bytes, encoded=142 bytes}}}|
| local file:|/%LOCAL_LINK%/[[./images/mainmenugray7ef.gif|./images/mainmenugray7ef.gif]]|
| remote link:|/%REMOTE_LINK%/[[http://www.symbex.net.au/Wiki/images/mainmenugray7ef.gif|http://www.symbex.net.au/Wiki/images/mainmenugray7ef.gif]]|
image
<<<
usage: {{{[img[tooltip|mainmenugray7ef.gif]] or [img[tooltip|mainmenugray7ef.gif][link]]}}}
[img[tooltip|mainmenugray7ef.gif]]
<<<
/% DO NOT EDIT BELOW THIS POINT
---BEGIN_DATA---
image/gif;base64,
R0lGODlhAQBkAPMPALa2trm5ub29vb+/v8TExMbGxsvLy9HR0dfX19vb29zc3OHh
4efn5+vr6+zs7O7u7iH5BAAAAAAALAAAAAABAGQAAAQW8D3X2FIJHVPIEAEgjmRp
nmiqrqwZAQA7
---END_DATA---
%/
| source file:|{{{F:\TiddlyWiki\TWExperiments\jQuery\images\minus.gif}}}|
| attached on:|31 May 2009 by YourName|
| embedded:|[[minus.gif|minus.gif]] - {{{type=image/gif, size=837 bytes, encoded=1133 bytes}}}|
| local file:|/%LOCAL_LINK%/[[./images/minus.gif|./images/minus.gif]]|
| remote link:|/%REMOTE_LINK%/[[http://www.symbex.net.au/Wiki/images/minus.gif|http://www.symbex.net.au/Wiki/images/minus.gif]]|
image
<<<
usage: {{{[img[tooltip|minus.gif]] or [img[tooltip|minus.gif][link]]}}}
[img[tooltip|minus.gif]]
<<<
/% DO NOT EDIT BELOW THIS POINT
---BEGIN_DATA---
image/gif;base64,
R0lGODlhCQAJAPcAAAAAAICAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAACH5BAEAAP8ALAAAAAAJAAkAAAgiAAMIHEjwn8GD/wQiPKhw
YcIA/wBIlPjQYUWHDRcS3BggIAA7
---END_DATA---
%/
| source file:|{{{F:\TiddlyWiki\TW jQuery\TreeView\images\navbargray1.gif}}}|
| attached on:|17 June 2009 by YourName|
| embedded:|[[navbargray1.gif|navbargray1.gif]] - {{{type=image/gif, size=837 bytes, encoded=1133 bytes}}}|
| local file:|//none//|
| remote link:|/%REMOTE_LINK%/[[htttp://www/symbex.net.au/Wiki/images/navbargray1.gif|htttp://www/symbex.net.au/Wiki/images/navbargray1.gif]]|
image
<<<
usage: {{{[img[tooltip|navbargray1.gif]] or [img[tooltip|navbargray1.gif][link]]}}}
[img[tooltip|navbargray1.gif]]
<<<
/% DO NOT EDIT BELOW THIS POINT
---BEGIN_DATA---
image/gif;base64,
R0lGODlhbgACAPcAAAAAAGNjY///////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
/////////////////ywAAAAAbgACAAAIKgADABBIcKDBgggPKkzIcKHDhhAfSowY
EYDFixgzatzIsaPHjyBDiswYEAA7
---END_DATA---
%/
| source file:|{{{F:\TiddlyWiki\TW jQuery\TreeView\images\navbargray777.gif}}}|
| attached on:|17 June 2009 by YourName|
| embedded:|[[navbargray777.gif|navbargray777.gif]] - {{{type=image/gif, size=837 bytes, encoded=1133 bytes}}}|
| local file:|//none//|
| remote link:|/%REMOTE_LINK%/[[http://www.symbex.net.au/Wiki//images/navbargray777.gif|http://www.symbex.net.au/Wiki//images/navbargray777.gif]]|
image
<<<
usage: {{{[img[tooltip|navbargray777.gif]] or [img[tooltip|navbargray777.gif][link]]}}}
[img[tooltip|navbargray777.gif]]
<<<
/% DO NOT EDIT BELOW THIS POINT
---BEGIN_DATA---
image/gif;base64,
R0lGODlhbgACAPcAAAAAAHNzc///////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
/////////////////ywAAAAAbgACAAAIKgADABBIcKDBgggPKkzIcKHDhhAfSowY
EYDFixgzatzIsaPHjyBDiswYEAA7
---END_DATA---
%/
| source file:|{{{F:\TiddlyWiki\TWExperiments\jQuery\images\navbargrayhw1.gif}}}|
| attached on:|31 May 2009 by YourName|
| embedded:|[[navbargrayhw1.gif|navbargrayhw1.gif]] - {{{type=image/gif, size=1012 bytes, encoded=1373 bytes}}}|
| local file:|/%LOCAL_LINK%/[[./images/navbargrayhw1.gif|./images/navbargrayhw1.gif]]|
| remote link:|/%REMOTE_LINK%/[[http://www.symbex.net.au/Wiki/images/navbargrayhw1.gif|http://www.symbex.net.au/Wiki/images/navbargrayhw1.gif]]|
image
<<<
usage: {{{[img[tooltip|navbargrayhw1.gif]] or [img[tooltip|navbargrayhw1.gif][link]]}}}
[img[tooltip|navbargrayhw1.gif]]
<<<
/% DO NOT EDIT BELOW THIS POINT
---BEGIN_DATA---
image/gif;base64,
R0lGODlhCgA8APcAAL29zr3GzsbGzsbG1sbO1s7O1s7W3tbW3tbe3t7e597n5+fn
7+fv7+/v7+/v9+/39/f39/f/////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
/////////////////ywAAAAACgA8AAAI2QABCBxIkEEDBggTIkzAsKFDAgUIQJwY
MYDFixYBYNxoUUAAAR5BfhQwgABJAgMEoFQpsaVJiRFjxoRYwECBmjhrGthpk+fO
A0CDCkVwAAFRo0UPOFyKIIECpwyfSp1KdYHVq1gXMLC6davWgw3CGgTbwEFYs2XP
PjC7lq0DCHDjyp1Lt67cCHDx5rXLt6/fv4ADCx5MuDBfvXohJFZcd3Hix3YhM947
Fy9ixnglQNC8GS5nzHEzd+4surRnxpozi07dWTNr1qtby3Y9WzFtCa5dq74dAffm
gAAAOw==
---END_DATA---
%/
| source file:|{{{F:\TiddlyWiki\TW Help\ScienceImages\navbargrayhw1.png}}}|
| attached on:|26 May 2009 by YourName|
| embedded:|[[navbargrayhw1.png|navbargrayhw1.png]] - {{{type=image/png, size=303 bytes, encoded=410 bytes}}}|
| local file:|//none//|
| remote link:|//none//|
image
<<<
usage: {{{[img[tooltip|navbargrayhw1.png]] or [img[tooltip|navbargrayhw1.png][link]]}}}
[img[tooltip|navbargrayhw1.png]]
<<<
/% DO NOT EDIT BELOW THIS POINT
---BEGIN_DATA---
image/png;base64,
iVBORw0KGgoAAAANSUhEUgAAAAoAAAA8CAIAAADQc7xaAAAABmJLR0QA/wD/AP+g
vaeTAAAA5ElEQVR42u2TS67DIAxF7wHvfz0ddd699KO+fqbugDYlQKBSVOkNmgGK
fLDvxQY2252WPw6ncwfb+e/Ww/tjN/tyvfdwDKGHQx/HuAqPiscVxW1dtsX/am2k
/c2JDa4D4O5AAVKwlyrJpt3TkpcwuUtpUVVfwbvFB9o/3MYMJgZyh3JcLsF7oIhq
XuIDa7T0yZw3OW/nZFvyH1PyTAncJRRe0s3zYxliLu2TNkveTJWj7N7LhPCGNC9r
C7aeT1C4PJWo023SrbRBCs9RUfIUtLJbc+uNnudbTVnT58lOug60TpaCD9FINRTx
kClXAAAAAElFTkSuQmCC
---END_DATA---
%/
| source file:|{{{F:\TiddlyWiki\TW jQuery\TreeView\images\navbargreenhw1.gif}}}|
| attached on:|1 June 2009 by YourName|
| embedded:|[[navbargreenhw1.gif|navbargreenhw1.gif]] - {{{type=image/gif, size=966 bytes, encoded=1308 bytes}}}|
| local file:|//none//|
| remote link:|/%REMOTE_LINK%/[[htttp://www.symbex.net.ai/Wiki/images/navbargreenhw1.gif|htttp://www.symbex.net.ai/Wiki/images/navbargreenhw1.gif]]|
image
<<<
usage: {{{[img[tooltip|navbargreenhw1.gif]] or [img[tooltip|navbargreenhw1.gif][link]]}}}
[img[tooltip|navbargreenhw1.gif]]
<<<
/% DO NOT EDIT BELOW THIS POINT
---BEGIN_DATA---
image/gif;base64,
R0lGODlhCgA8APcAAK33nLX/pb3/pb3/rcb/rcb/tc7/tdb/tdb/vd7/vd7/xuf/
xu//xu//zv//////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
/////////////////ywAAAAACgA8AAAIqwABCBxIMEECBQgOJkRooKHDhwMERJwY
IGIAABczYsQYoKPHjyBDigwgsWLJiRMlqkQ5oKXLlgRiypQ5gECBmDdt4tR5s2eB
h0CDAj2AwEBRBAeMGkWKgGnTp1ChGpxKdaoCg1cPal2wdSvXBWAVgE0AtqzZs2jT
ql3Ltq3bt3Djyp1Lt67du3jzzmUAlu8Cv2z5Ci7rt0FZw4T7Kk68ALFhvo//mh0c
mUFAAAA7
---END_DATA---
%/
| source file:|{{{F:\TiddlyWiki\TWExperiments\jQuery\images\navbarred.gif}}}|
| attached on:|31 May 2009 by YourName|
| embedded:|[[navbarred.gif|navbarred.gif]] - {{{type=image/gif, size=984 bytes, encoded=1332 bytes}}}|
| local file:|/%LOCAL_LINK%/[[./images/navbarred.gif|./images/navbarred.gif]]|
| remote link:|/%REMOTE_LINK%/[[http://www.symbex.net.au/Wiki/images/navbarred.gif|http://www.symbex.net.au/Wiki/images/navbarred.gif]]|
image
<<<
usage: {{{[img[tooltip|navbarred.gif]] or [img[tooltip|navbarred.gif][link]]}}}
[img[tooltip|navbarred.gif]]
<<<
/% DO NOT EDIT BELOW THIS POINT
---BEGIN_DATA---
image/gif;base64,
R0lGODlhCgA8APcAAP+9zv/Gzv/G1v/O1v/W3v/e3v/e5//n5//n7//v7//v9//3
9///////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
/////////////////ywAAAAACgA8AAAIvQABCBxIMIHBgwgNKFzIcIDDhxADSJwo
EQDFixgxChgQYKOAAAM+QnwIcqTJAQQcpkyJkoDLlS9jynRZgECBmjdtEmDIs4CB
Az8VAh1KtCiCA0cRJEWKIIFSp06bIpzaVEECq1ivKlhwletWqwvCil2wdazZs2gX
MAi7dm3at3Djyp1Lt67du3jhunWrdixfv4DZiv0buK/hw4MNtz28WHDjvYL7MlhM
2bFktZUhZ8Z8ebPnzJQnY24bekFAAAA7
---END_DATA---
%/
| source file:|{{{F:\TiddlyWiki\TWExperiments\jQuery\images\openbook.gif}}}|
| attached on:|31 May 2009 by YourName|
| embedded:|[[openbook.gif|openbook.gif]] - {{{type=image/gif, size=397 bytes, encoded=540 bytes}}}|
| local file:|/%LOCAL_LINK%/[[./images/openbook.gif|./images/openbook.gif]]|
| remote link:|/%REMOTE_LINK%/[[http://www.symbex.net.au/Wiki/images/openbook.gif|http://www.symbex.net.au/Wiki/images/openbook.gif]]|
image
<<<
usage: {{{[img[tooltip|openbook.gif]] or [img[tooltip|openbook.gif][link]]}}}
[img[tooltip|openbook.gif]]
<<<
/% DO NOT EDIT BELOW THIS POINT
---BEGIN_DATA---
image/gif;base64,
R0lGODlhEAAQANU5AKat0evq6d7d3Zy12tji9pKp16WkuXZ/q7O2xo2MjLi4qoOc
zby8rLS0s8G/u7i2prKxr6WnpJKp2MbU8cTEw7/P772+rFx6tnCLws/b8+bl5cPG
09fh9b/Arru4uK+smfPy6Tlcoqyxr9HQzq2yss/b9LK0p8bT8XCLw4Oczv//+0lq
q8jIyD5Uf2aAtMrO4XRzcy5Sm6WkoZ6z3tnZ2Ts7O0RERMPDw////////wAAAAAA
AAAAAAAAAAAAAAAAACH5BAEAADkALAAAAAAQABAAAAaqwBoqRywajbUU7EgkJAzF
WqGwLN5gCcABmqvNCJ7qNSL4bA63rqSEI8GuAhzugUAUbrXFSS6CxeUmLwEzNjUY
FXI0DjRyOAovNIQ1FxOJECyNDJCSKxlyIzKYchabhSEcOBoUoY0dpTUxBDgCDaxy
LwCDNjctMQMBNDIvOAEAAC8ghDm8vsEsMgChNCrKy70DMjIDLtzc1dYuMS4tvTHm
LTZGNzbsN+7v7kEAOw==
---END_DATA---
%/
!usage
{{{[img[rough-1.jpg]]}}}
[img[rough-1.jpg]]
!notes
attached by FileDropPlugin
!type
image/jpeg
!file
./rough-1.jpg
!url
http://dl.dropbox.com/u/1064531/rough-1.jpg
!data
data:image/jpeg;base64,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
add {{{<<tiddler status##status>>}}} to get a status switch button to any tiddler
add new status by tagging a tiddler (title:new status) "status".
!status
<html><span style="padding-right:0.15em;" macro='monkeyTagger status'></span> </html>
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::ViewToolbar]]'><span macro="hideWhen readOnly"><span style='padding-right: 1.8em;' macro='newHere tag:"closed" label:"*create subtopic notes*"'></span><span style="padding-right:1.8em;" macro='tagger'></span ></span</div></div>
<span class='title' macro='view title'></span>
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
<span macro='tiddler TopicsTemplate1 with: {{tiddler.title}}'></span>
<!--}}}-->
You have to create a tiddler for a tag eg "[[status]]" to be able to make a treeview for the tag "status"
{{{<<tiddler TopicsTemplate1 with: [[status]]>>}}}
<<tiddler TopicsTemplate1 with: [[status]]>>
| source file:|{{{F:\TiddlyWiki\TWExperiments\jQuery\images\treeview-black-line.gif}}}|
| attached on:|31 May 2009 by YourName|
| embedded:|[[treeview-black-line.gif|treeview-black-line.gif]] - {{{type=image/gif, size=1877 bytes, encoded=2543 bytes}}}|
| local file:|/%LOCAL_LINK%/[[./images/treeview-black-line.gif|./images/treeview-black-line.gif]]|
| remote link:|/%REMOTE_LINK%/[[http://www.symbex.net.au/Wiki/images/treeview-black-line.gif|http://www.symbex.net.au/Wiki/images/treeview-black-line.gif]]|
image
<<<
usage: {{{[img[tooltip|treeview-black-line.gif]] or [img[tooltip|treeview-black-line.gif][link]]}}}
[img[tooltip|treeview-black-line.gif]]
<<<
/% DO NOT EDIT BELOW THIS POINT
---BEGIN_DATA---
image/gif;base64,
R0lGODlhEADwBvcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAACH5BAEAAP8ALAAAAAAQAPAGAAj/AP8JHPgPAMGDCA0iXFiQ
4UKFDglCjChwIkWLETE61MgQgMePHx9SlDhyIEeRJRumPJkwpcqSLA/GJLnS5UyT
NnPW3AlTZ0+eI29W9BmU6EWjGZFuVNqRKcqfUIsCPTo1adWlV5tmfSo1KlWvVsFi
FauVLNevXdOiXRtWbVu2Y93GhVtWbl26Z9/qnbv3bt+8fAP7FQx4sOHCiFtuVWyW
sd3EMp06xjv5b2XClw9nhkyzceTFnz13fry5dGjSpymntrwac2vNrznjBD1adW3W
t13nhr1b9lDas0UHR93bdPHYxofbVo6buW7nvKH7fkncpfXr2LNr3869e/TfwsFX
/xe/nHxz88/Rf6denv159+nhrxcqfzr9+5KR6z/OX3py9fbl1x+A/9VXIH7AEbif
fwsqOKCBDUL4IILhScjghAJeqKGDG1rI4YcehkjheCJmCOKI7aH4norxsTifiSUm
GGOFLgYoY40HwohjhDtieKOOQP4oJI1BEjkkiT12mOSJRSLZZIpPrhhli1O+eCSU
V0qZJZVbWmnkl052aSOYWJKppZlcoullmGqOyeabZcJ5ppxp0rlmnHjOmWede96p
5598AupnoIQOaqibfSIqqKKFMnpojmJC2qakdjpqKaWJYrqopo1y+iiPVV4KaqSj
TlpqpZ6K6qOpq6J6aqavbv8aa6ezftoqrLfKmiutu9qqZKipBlurqr+S2iuxTBpb
LKvLunqssM8OC22zuFKrq7W8Yutrssxy66y2yM74rbfVknutudmiu6245bJ7rrvp
wrvukvKGS++9wEqrb7T8gjutuvbm2y/A/9ZbML7KEryvvwsrPLDBDUP8MMLdSszw
xAJfrLHDG1vM8cceh0zxuCJnDPLI7aL8rsrxsjyvySUnHHPFLgcsc80Hw4xzxDtj
fLPOQP8sNM1BEz00yT13nPTJRSPddMpPrxx1y1O/fDTUV0udNdVbW2301053bTPY
WJOttdlco+112GqPzfbbZcN9ttxp07123HjPnXfde9//rffffAPud+CED264230j
LrjihTN+eM5iQ9625HY7bjnliWO+uOaNc/44z1VfDnrko09eeuWei+6z6aujfnrm
r28ee+ezf9467LfLnjvtu9uudOipB1+76r+T3jvxTBtfPOvLu3688M8PD33zuFOv
u/W8Y+978sxz77z2yM/8vffVk3+9+dmjv7345bN/vvvpw7/+0vKHT//9wEuvf/T8
gz+9+vbLX/8A+L/6FRB/yiPg/vy3QAUO0IANhOADEdg9CTJwggK8oAYduEELcvCD
HgwhBccnwgyCcITtQ+H7VBg/Fs7PhCVMYAwr6MIAyrCGB4QhDiO4QwzeUIdA/KEQ
MmkYRCIOkYQ97GAST1hEJDYxhU9cYRRbOMUXHhGKV5RiFqm4RSsa8YtO7KINaQgS
kAQEADs=
---END_DATA---
%/
| source file:|{{{F:\TiddlyWiki\TWExperiments\jQuery\images\treeview-black.gif}}}|
| attached on:|31 May 2009 by YourName|
| embedded:|[[treeview-black.gif|treeview-black.gif]] - {{{type=image/gif, size=1216 bytes, encoded=1649 bytes}}}|
| local file:|/%LOCAL_LINK%/[[./images/treeview-black.gif|./images/treeview-black.gif]]|
| remote link:|/%REMOTE_LINK%/[[http://www.symbex.net.au/Wiki/images/treeview-black.gif|http://www.symbex.net.au/Wiki/images/treeview-black.gif]]|
image
<<<
usage: {{{[img[tooltip|treeview-black.gif]] or [img[tooltip|treeview-black.gif][link]]}}}
[img[tooltip|treeview-black.gif]]
<<<
/% DO NOT EDIT BELOW THIS POINT
---BEGIN_DATA---
image/gif;base64,
R0lGODlhYACFAPcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAACH5BAEAAP8ALAAAAABgAIUAAAj/AP8JHEiwoMGDCBMqXMjw
H4CHABRCbEixosWLBCNi3Mixo0WNHkOKFAlypMmTKFOqPAmx5cOVMEkeLBmz5seB
IGna3LkwJ06eQBlGdOmwZdCjGX8K1In0qM+lTaNCNchU6k6XRq1araoVKdeuQb+C
5Sl2rM2yZmOiTRuS6Vq2Hd3CxThR4kuqcy++Rbg3b9+8gAMLBou17mCTcg8jnql4
Md7GMokShbwxMeW4jC9jfqy5cuG/nTmHljl6JOjSolFzPK1aaWuhmV/3jB3aMN+7
BVmb1e0QNW/ZwIMLF/z5N2TLw3O7Nt74ae/keCVnhe6cueLq0FNPzY7zM/fv4MOL
nR+/m7z21tNn4gaOnHv77O+p0zb/nHxx8fGTYw+/H/xQo5PJt511h/X3XX7D3Uff
ggw26GB9CxLYmYS7racehWNhSJmGxz3o4YcK+jcffCMKqBx/RU0UoH4lsnieiyf6
592HNNZoY20Octicfhbm1qOJEeYoZIM6BhbigS0mmKRwCDKZ4ksrKvmilDEiOSWT
M96o5ZZcdunll2AaFBAAOw==
---END_DATA---
%/
| source file:|{{{F:\TiddlyWiki\TWExperiments\jQuery\images\treeview-default-line.gif}}}|
| attached on:|31 May 2009 by YourName|
| embedded:|[[treeview-default-line.gif|treeview-default-line.gif]] - {{{type=image/gif, size=1993 bytes, encoded=2701 bytes}}}|
| local file:|/%LOCAL_LINK%/[[./images/treeview-default-line.gif|./images/treeview-default-line.gif]]|
| remote link:|/%REMOTE_LINK%/[[http://www.symbex.net.au/Wiki/images/treeview-default-line.gif|http://www.symbex.net.au/Wiki/images/treeview-default-line.gif]]|
image
<<<
usage: {{{[img[tooltip|treeview-default-line.gif]] or [img[tooltip|treeview-default-line.gif][link]]}}}
[img[tooltip|treeview-default-line.gif]]
<<<
/% DO NOT EDIT BELOW THIS POINT
---BEGIN_DATA---
image/gif;base64,
R0lGODlhEADwBvcAAAAAAICAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAACH5BAEAAP8ALAAAAAAQAPAGAAj/AP8JHEiwoEGBAQ4qXHgw
IcOHCx1CnEhQIkWKCTP+03ixYceLFj8yDClSIcmSBk+irLhyZMuIL03G9DizoMqX
N1vmXLkTZc+SP0UG/Ti0Y1GQNW0mZbkUYVOnT49ifLqRqtSJVyFmfbjVZVSrYL+K
bdoV5tilZWWeTZqWJtmwb9fWbJsSLlq7bPHO1TuTrlK5ffnG9Ms0ruG7gAcLxrlY
Z2Oej31GBjpZaGWil6lq3sy5M9fMSBMzFu2YNGTTklFTVm2ZNWbXRkFPhR36cF7a
s23vxY1Vdm/eWn0HB/6ZuFfdgY2bRa5YuVrmo6GXln6aemrrq7G31v6ae2znbhF7
/68tvvzt8bnN70b/m/1w98XhH1efXP5y+s3tP8cfnf90/9UBeJ2A2RG4nYHdIfid
fuGdpyB5Dka43oPpSVgfhe1h+J6G8XE4n4X5eXgfiP2R+J+JAaI4oIoFsnigiwnC
uKCI+8kI4YQ2VojjjhfmmKGPGwLZoZAf8hgikSMaWaKSJzKZopMrQtmilC9SGaOV
MyJZI5Y39siljl6GeeSXP5IZpJlDolmkmEuy2aSbT8IZpZxT0lmlnVfimaWaSerZ
5Zh+ggnooG0S+qahcSI6p6J1Mnqno3lCumegZVJ6pqVpYrqmpH8W6umhnyYa6qKj
Nlrqo6dGmuqknAq6aqegxv8qqqyk0mqqrajiqqqurL7qKq+wzipsrcPeWmyux+6a
bK/A/rpssMRGa6y0yFKrrLXMPussttBO6221314bbrbcbjtut+CmK6665J5rLrvo
ritvu/C+O2+89N5rb7784uvvvv9W2qrAvhLcrMHaIlyuwu4yXK/D+kLcL8AUSxzw
pQNjXLDGB3OcsMcLg9ywyA+THLHJE1tcMcoXZ5qxyxvD3LHMH9Mcss0j41yyzifz
nDLLK/vc8qYxEz2z0TUjfbPSOTO9s9M9Q/2z0EFLPXSfL1tdNdZFc32010mDvbTY
TZP9tNlRoz211iq3DbTbVMPN9tt0x1333Hbnjffeal//vaWmfW/9d9aBy1343Yfr
nTjfg3fd+NePhx352JOXXfnZl6ed+dqLd7653w3y+bngoQM+uuGnI5664qszXjrh
rXv+uuOzQ1675LdTnrvlu2Peu+a/cx778MGDXhd4xzOYPI3Fk768ls2jHr3q07Ne
vevPi3697Nmbvj3x3cP+/fjh016+7efjnr7u6/Pevu/vAx+/8OT/pbz9zM9vPP7Q
6+88/9rzn/QESD0CWs+A2AOg9xDIPQWKj4Hgc6D5JIg+CqrPguzDoPs0CD8Oys+D
9INg/QqTPxDuj4T9M+H/UBhAFQ7QhQWE4QFlmEAWLpCGDbThA3EYQR1O0IcVBOIF
poWYQSJu0IgdROIHlRhCHo5wIISBonBmyMQTShF5ThShFrPIxSqu8Ir38+ILxRhD
MlIRjCU0Yw3RmEI15pCNLXRjD+F4Qzk+ESphpOMO7bhFPnZRjz8EZBAFOURCFtGQ
R0RkEhW5REY20Y+QdKQV8ZhGSX6Rkm205Bg1WUZOnhGTcfTkGkFZR1G+kZR7NOUc
URlIVg7SlYWE5SFlmUhaLtIpGslIQAAAOw==
---END_DATA---
%/
| source file:|{{{F:\TiddlyWiki\TWExperiments\jQuery\images\treeview-default.gif}}}|
| attached on:|31 May 2009 by YourName|
| embedded:|[[treeview-default.gif|treeview-default.gif]] - {{{type=image/gif, size=1222 bytes, encoded=1657 bytes}}}|
| local file:|/%LOCAL_LINK%/[[./images/treeview-default.gif|./images/treeview-default.gif]]|
| remote link:|/%REMOTE_LINK%/[[http://www.symbex.net.au/Wiki/images/treeview-default.gif|http://www.symbex.net.au/Wiki/images/treeview-default.gif]]|
image
<<<
usage: {{{[img[tooltip|treeview-default.gif]] or [img[tooltip|treeview-default.gif][link]]}}}
[img[tooltip|treeview-default.gif]]
<<<
/% DO NOT EDIT BELOW THIS POINT
---BEGIN_DATA---
image/gif;base64,
R0lGODlhYACFAPcAAAAAAICAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAACH5BAEAAP8ALAAAAABgAIUAAAj/AP8JHEiwoMGDCBMqXMjw
H4CHABRCbEixosWLBCNi3Mixo0WNHkOKFAlypMmTKFOqPBmgpUuXK2OKDHCQpsyb
G206HKgTp8+GOkH2/EkUIU2ID//RXFq0KcGgPJ1KfTpQ6NSrQwVmvfrzpVeuYMOK
VTq2rFmnW8+qXTsyLVuSb4uWjBq34USJSetynIvRrd6qfwMLHszV60vCIbf6RcxQ
MeOOjh/ndIiULFPJFCNjtqh5c+aanjkbbhm6tNTFplOvRK26tUnWpvm6Xigbdty7
CXGrls3ZM+/ZwIMLjzua9HC6BW2Hhqr1OHKrzskijchU+WPmZKNjt7658/Di3KOL
ox9Pvrx5ir+jp8dcOXfe1uuP1xYff/j88/iVFhfvXfh2/oA1px1lE1X3XYDZOfff
gAaFJxl4+UUo4YTO1SechcFhSJhuB3EYW4QazhYihSS2BiGDyQHYoIopDjidZQkC
119wM8oImnb7lajjjjz+NSJ8IALnYUbv9aiag0YyhmSSf52o4I1ProgiVS5WZqB/
UB5X42xbuuYkk2CGKeaYZJY5W0AAOw==
---END_DATA---
%/
| source file:|{{{F:\TiddlyWiki\TWExperiments\jQuery\images\treeview-famfamfam-line.gif}}}|
| attached on:|31 May 2009 by YourName|
| embedded:|[[treeview-famfamfam-line.gif|treeview-famfamfam-line.gif]] - {{{type=image/gif, size=807 bytes, encoded=1092 bytes}}}|
| local file:|/%LOCAL_LINK%/[[./images/treeview-famfamfam-line.gif|./images/treeview-famfamfam-line.gif]]|
| remote link:|/%REMOTE_LINK%/[[http://www.symbex.net.au/Wiki/images/treeview-famfamfam-line.gif|http://www.symbex.net.au/Wiki/images/treeview-famfamfam-line.gif]]|
image
<<<
usage: {{{[img[tooltip|treeview-famfamfam-line.gif]] or [img[tooltip|treeview-famfamfam-line.gif][link]]}}}
[img[tooltip|treeview-famfamfam-line.gif]]
<<<
/% DO NOT EDIT BELOW THIS POINT
---BEGIN_DATA---
image/gif;base64,
R0lGODlhAQABAPcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAACH5BAEAAP8ALAAAAAABAAEAAAgEAP8FBAA7
---END_DATA---
%/
| source file:|{{{F:\TiddlyWiki\TWExperiments\jQuery\images\treeview-famfamfam.gif}}}|
| attached on:|31 May 2009 by YourName|
| embedded:|[[treeview-famfamfam.gif|treeview-famfamfam.gif]] - {{{type=image/gif, size=1280 bytes, encoded=1734 bytes}}}|
| local file:|/%LOCAL_LINK%/[[./images/treeview-famfamfam.gif|./images/treeview-famfamfam.gif]]|
| remote link:|/%REMOTE_LINK%/[[http://www.symbex.net.au/Wiki/images/treeview-famfamfam.gif|http://www.symbex.net.au/Wiki/images/treeview-famfamfam.gif]]|
image
<<<
usage: {{{[img[tooltip|treeview-famfamfam.gif]] or [img[tooltip|treeview-famfamfam.gif][link]]}}}
[img[tooltip|treeview-famfamfam.gif]]
<<<
/% DO NOT EDIT BELOW THIS POINT
---BEGIN_DATA---
image/gif;base64,
R0lGODlhYACFAPcAAAAAADFrGDlzIUJzIVKEMXOcY71CAL1KANZaCMZaId5rIfdz
APd7GIS1Y4y9Y5S1e++EQvetc5S1jKW9nLXWlLXGrbnSpN6lhOetjOe1lO+1lNbn
vf/Stf///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAACH5BAEAAP8ALAAAAABgAIUAAAj/AP8JHEiwoMGDCBMqXMjw
H4CHABRCbEixosWLBCNi3Mixo0WNHkOKFAlypMmTKFOqXMmypcuXMGPKnCnQQoEC
BCbQ3JmwQgMKGxwQeMCzKEECFCh0cOBAgNGnSDtIpRDgqdEBDhp0aNDUalEJBBxQ
EErUK08JAwIMkGC2rdu3cOPKnUu3Ls2SdlvizVtxosSHfDfuDYxyMOHDiBMrXsy4
sdsMCQwkuOCYYwYFGjhEUJChMsYEGiAwYAAhgeeLBjhI7cDAwGmLCSIwWLAAgenX
FDEkmI3gAGXcFCFL/g28uPHjyJMrl7icoeHKfhNGB/68ucDq1rNr3869u1WbOHVy
3fcJlCx3pEqZOt0edWrV7Vi1cl2vHaxY89zRqmXrvb///wAGOBB2zRG4GETVTYeb
gcoxmJyDyEEo4IQUHgdeTt2RF9RQ5yW1VFfsKeUed/FtBWJ9YY3FYX5prVXhizDG
eJiExtFYnI18KWiQjqfhuCCAPsoo5JBE8iTcZN1dltlmnW0Hmmik3aZdaqu1xl1s
s9UmZXa68eZbkpEhWeSYZJapUpA9AhkhYNKxaeabcMYp55yMHUmcdkpqxtmVoY1W
GndUSmWlk7LRZht3Xdb2JXd20unoo5BGKumkBwUEADs=
---END_DATA---
%/
| source file:|{{{F:\TiddlyWiki\TW jQuery\TreeView\images\treeview-gold-line.gif}}}|
| attached on:|4 June 2009 by YourName|
| embedded:|[[treeview-gold-line.gif|treeview-gold-line.gif]] - {{{type=image/gif, size=1878 bytes, encoded=2543 bytes}}}|
| local file:|/%LOCAL_LINK%/[[file:///F:/TiddlyWiki/TW jQuery/TreeView/images/treeview-gold-line.gif|file:///F:/TiddlyWiki/TW jQuery/TreeView/images/treeview-gold-line.gif]]|
| remote link:|/%REMOTE_LINK%/[[http://www.symbex.net.au/Wiki/images/treeview-gold-line.gif|http://www.symbex.net.au/Wiki//images/treeview-gold-line.gif]]|
image
<<<
usage: {{{[img[tooltip|treeview-gold-line.gif]] or [img[tooltip|treeview-gold-line.gif][link]]}}}
[img[tooltip|treeview-gold-line.gif]]
<<<
/% DO NOT EDIT BELOW THIS POINT
---BEGIN_DATA---
image/gif;base64,
R0lGODlhEADwBvcAAAAAAPdzc///1v//////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
/////////////////yH5BAEAAAAALAAAAAAQAPAGAAj+AAEIHAhAAMGDCA0iXFiQ
4UKFDglCjChwIkWLETE61MhQgMePHx9SlDhyIEeRJRumPJkwpcqSLA/GJLnS5UyT
NnPW3AlTZ0+eI29W9BmU6EWjGZFuVNqRKcqfUIsCPTo1adWlV5tmfSo1KlWvVsFi
FauVLNevXdOiXRtWbVu2Y93GhVtWbl26Z9/qnbv3bt+8fAP7FQx4sOHCiFtuVWyW
sd3EMp06xjv5b2XClw9nhkyzceTFnz13fry5dGjSpymntrwac2vNrznjBD1adW3W
t13nhr1b9lDas0UHR93bdPHYxofbVo6buW7nvKH7fkncpfXr2LNr3869e/TfwsH+
Vxe/nHxz88/Rf6denv159+nhrxcqfzr9+5KR6z/OX3py9fbl1x+A/9VXIH7AEbif
fwsqOKCBDUL4IILhScjghAJeqKGDG1rI4YcehkjheCJmCOKI7aH4norxsTifiSUm
GGOFLgYoY40HwohjhDtieKOOQP4oJI1BEjkkiT12mOSJRSLZZIpPrhhli1O+eCSU
V0qZJZVbWmnkl052aSOYWJKppZlcoullmGqOyeabZcJ5ppxp0rlmnHjOmWede96p
5598AupnoIQOaqibfSIqqKKFMnpojmJC2qakdjpqKaWJYrqopo1y+iiPVV4KaqSj
TlpqpZ6K6qOpq6J6aqb+r24aa6ezftoqrLfKmiutu9qqZKipBlurqr+S2iuxTBpb
LKvLunqssM8OC22zuFKrq7W8Yutrssxy66y2yM74rbfVknutudmiu6245bJ7rrvp
wrvukvKGS++9wEqrb7T8gjutuvbm2y/A/9ZbML7KEryvvwsrPLDBDUP8MMLdSszw
xAJfrLHDG1vM8cceh0zxuCJnDPLI7aL8rsrxsjyvySUnHHPFLgcsc80Hw4xzxDtj
fLPOQP8sNM1BEz00yT13nPTJRSPddMpPrxx1y1O/fDTUV0udNdVbW2301053bTPY
WJOttdlco+112GqPzfbbZcN9ttxp07123HjPnXf+3XvfrffffAPud+CED264230j
LrjihTN+eM5iQ9625HY7bjnliWO+uOaNc/44z1VfDnrko09eeuWei+6z6aujfnrm
r28ee+ezf9467LfLnjvtu9uudOipB1+76r+T3jvxTBtfPOvLu3688M8PD33zuFOv
u/W8Y+978sxz77z2yM/8vffVk3+9+dmjv7345bN/vvvpw7/+0vKHT//9wEuvf/T8
gz+9+vbLX/8A+L/6FRB/yiPg/vy3QAUO0IANhOADEdg9CTJwggK8oAYduEELcvCD
HgwhBccnwgyCcITtQ+H7VBg/Fs7PhCVMYAwr6MIAyrCGB4QhDiO4QwzeUIc3QPyh
EGkYRCIOkYQ97GAST1hEJDYxhU9cYRRbOMUXHhGKV5RiFqm4RSsa8YtO7KINaQgS
kAQEAAA7
---END_DATA---
%/
| source file:|{{{F:\TiddlyWiki\TW jQuery\TreeView\images\treeview-gold.gif}}}|
| attached on:|5 June 2009 by YourName|
| embedded:|[[treeview-gold.gif|treeview-gold.gif]] - {{{type=image/gif, size=1179 bytes, encoded=1596 bytes}}}|
| local file:|//none//|
| remote link:|/%REMOTE_LINK%/[[http://www.symbex.net.au/Wiki/images/treeview-gold.gif|http://www.symbex.net.au/Wiki/images/treeview-gold.gif]]|
image
<<<
usage: {{{[img[tooltip|treeview-gold.gif]] or [img[tooltip|treeview-gold.gif][link]]}}}
[img[tooltip|treeview-gold.gif]]
<<<
/% DO NOT EDIT BELOW THIS POINT
---BEGIN_DATA---
image/gif;base64,
R0lGODlhYACFAPcAAAAAAP//1v//////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
/////////////////yH5BAEAAAAALAAAAABgAIUAAAj+AAEIHEiwoMGDCBMqXMiw
ocOHECNKnEixosWLGDNq3Mixo8ePIEMKDECyZEmRKCUGOLgypcuGLQHEjPmyJsuB
M23qNLgygICTJmnudJlz5NCjRWUeHSrU6FKdQU0+Xdp06s6qVm1izfpyK9eUXr+K
DCsWJNmyHs+i5ah2rca2buPKnUtXbtSTdTNWhZs34d6+GP8CtthTgOGeUgdHFKx4
IuPGi29CVnmX7+SCli9L1kyY88XMnnGGrgh6dOnQpz2n5rx6tOvXsGNzrdw672PZ
op0qxY05927eon0CTYw7ae26xoETvM2btvLn0KNLn069uvWvxyFnb7xdcffB3+l5
OofOvLjv8GuTk5f5k6RM4rLVP5evvHz8ytfz69/Pv7///wAGKOCABJqF33o8RWdf
bAvCVthh7+FlXoII9lbhcgoeWOCGHHbo4YcgOqgferaNaCJ14823WX0rAtfga4i1
F6F7zbVYI4Uq4lifhiH26OOPQAYppEsBAQA7
---END_DATA---
%/
| source file:|{{{F:\TiddlyWiki\TWExperiments\jQuery\images\treeview-gray-line.gif}}}|
| attached on:|31 May 2009 by YourName|
| embedded:|[[treeview-gray-line.gif|treeview-gray-line.gif]] - {{{type=image/gif, size=1877 bytes, encoded=2543 bytes}}}|
| local file:|/%LOCAL_LINK%/[[./images/treeview-gray-line.gif|./images/treeview-gray-line.gif]]|
| remote link:|/%REMOTE_LINK%/[[http://www.symbex.net.au/Wiki/images/treeview-default.gif|http://www.symbex.net.au/Wiki/images/treeview-default.gif]]|
image
<<<
usage: {{{[img[tooltip|treeview-gray-line.gif]] or [img[tooltip|treeview-gray-line.gif][link]]}}}
[img[tooltip|treeview-gray-line.gif]]
<<<
/% DO NOT EDIT BELOW THIS POINT
---BEGIN_DATA---
image/gif;base64,
R0lGODlhEADwBvcAAAAAAICAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAACH5BAEAAP8ALAAAAAAQAPAGAAj/AP8JHPgvAMGDCA0iXFiQ
4UKFDglCjChwIkWLETE61MgwgMePHx9SlDhyIEeRJRumPJkwpcqSLA/GJLnS5UyT
NnPW3AlTZ0+eI29W9BmU6EWjGZFuVNqRKcqfUIsCPTo1adWlV5tmfSo1KlWvVsFi
FauVLNevXdOiXRtWbVu2Y93GhVtWbl26Z9/qnbv3bt+8fAP7FQx4sOHCiFtuVWyW
sd3EMp06xjv5b2XClw9nhkyzceTFnz13fry5dGjSpymntrwac2vNrznjBD1adW3W
t13nhr1b9lDas0UHR93bdPHYxofbVo6buW7nvKH7fkncpfXr2LNr3869e/TfwsFX
/xe/nHxz88/Rf6denv159+nhrxcqfzr9+5KR6z/OX3py9fbl1x+A/9VXIH7AEbif
fwsqOKCBDUL4IILhScjghAJeqKGDG1rI4YcehkjheCJmCOKI7aH4norxsTifiSUm
GGOFLgYoY40HwohjhDtieKOOQP4oJI1BEjkkiT12mOSJRSLZZIpPrhhli1O+eCSU
V0qZJZVbWmnkl052aSOYWJKppZlcoullmGqOyeabZcJ5ppxp0rlmnHjOmWede96p
5598AupnoIQOaqibfSIqqKKFMnpojmJC2qakdjpqKaWJYrqopo1y+iiPVV4KaqSj
TlpqpZ6K6qOpq6J6aqavbv8aa6ezftoqrLfKmiutu9qqZKipBlurqr+S2iuxTBpb
LKvLunqssM8OC22zuFKrq7W8Yutrssxy66y2yM74rbfVknutudmiu6245bJ7rrvp
wrvukvKGS++9wEqrb7T8gjutuvbm2y/A/9ZbML7KEryvvwsrPLDBDUP8MMLdSszw
xAJfrLHDG1vM8cceh0zxuCJnDPLI7aL8rsrxsjyvySUnHHPFLgcsc80Hw4xzxDtj
fLPOQP8sNM1BEz00yT13nPTJRSPddMpPrxx1y1O/fDTUV0udNdVbW2301053bTPY
WJOttdlco+112GqPzfbbZcN9ttxp07123HjPnXfde9//rffffAPud+CED264230j
LrjihTN+eM5iQ9625HY7bjnliWO+uOaNc/44z1VfDnrko09eeuWei+6z6aujfnrm
r28ee+ezf9467LfLnjvtu9uudOipB1+76r+T3jvxTBtfPOvLu3688M8PD33zuFOv
u/W8Y+978sxz77z2yM/8vffVk3+9+dmjv7345bN/vvvpw7/+0vKHT//9wEuvf/T8
gz+9+vbLX/8A+L/6FRB/yiPg/vy3QAUO0IANhOADEdg9CTJwggK8oAYduEELcvCD
HgwhBccnwgyCcITtQ+H7VBg/Fs7PhCVMYAwr6MIAyrCGB4QhDiO4QwzeUIdA/KEQ
MmkYRCIOkYQ97GAST1hEJDYxhU9cYRRbOMUXHhGKV5RiFqm4RSsa8YtO7KINaQgS
kAQEADs=
---END_DATA---
%/
| source file:|{{{F:\TiddlyWiki\TWExperiments\jQuery\images\treeview-gray.gif}}}|
| attached on:|31 May 2009 by YourName|
| embedded:|[[treeview-gray.gif|treeview-gray.gif]] - {{{type=image/gif, size=1230 bytes, encoded=1665 bytes}}}|
| local file:|/%LOCAL_LINK%/[[./images/treeview-gray.gif|./images/treeview-gray.gif]]|
| remote link:|/%REMOTE_LINK%/[[http://www.symbex.net.au/Wiki/images/treeview-gray.gif|http://www.symbex.net.au/Wiki/images/treeview-gray.gif]]|
image
<<<
usage: {{{[img[tooltip|treeview-gray.gif]] or [img[tooltip|treeview-gray.gif][link]]}}}
[img[tooltip|treeview-gray.gif]]
<<<
/% DO NOT EDIT BELOW THIS POINT
---BEGIN_DATA---
image/gif;base64,
R0lGODlhYACFAPcAAAAAAICAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAACH5BAEAAP8ALAAAAABgAIUAAAj/AP8JHEiwoMGDCBMqXMjw
H4CHABRCbEixosWLBCNi3Mixo0WNHkOKFAlypMmTKFOqPBmgpUuXK2OKDHCQpsyb
G206HKgTp8+GOkH2/EkUIU2ID/+9HFq0aFCeTaMafCqQqVSnNa9qXfpSq9eqX8OC
FfvVKlmsZ7emVbv2ZkmobWW+HRu34kSJSafW/RjS7N6Dc/8KHkw4LVeYhUda9ZvY
4uLGM7NC9ngUqdKuky8+zsxxM2eMnj87PsxYNMPSpimiTn2adV/XlGF3XA07MG3X
tlPfTbib4O29gR3rlk28uPHjVUkjl1zwd2qqSpfrFShUenOHlpdah+7cNHfrvpmD
qyfdHbz58+jTqzcZHH1705Z55y2e+3x98/fB518ffT159KFtN1B1531XIHYTaSed
geYxOJ542ynH34QUVmjhThW+h99xvQE2H3Ea6mdhiBeWWKCEDUK4oIrLBbgiUhEp
2CKLyLk443QNomjijjz2mBmJ0gG5nJCTdViQkTdSWB5xS8rWJGxPivbfgTg+WKWA
V76YHWZJhkfldV96meNhPpZp5plopqnmmggFBAA7
---END_DATA---
%/
| source file:|{{{F:\TiddlyWiki\TW jQuery\TreeView\images\treeview-red-line.gif}}}|
| attached on:|31 May 2009 by YourName|
| embedded:|[[treeview-red-line.gif|treeview-red-line.gif]] - {{{type=image/gif, size=1877 bytes, encoded=2543 bytes}}}|
| local file:|/%LOCAL_LINK%/[[file:///F:/TiddlyWiki/TW jQuery/TreeView/images/treeview-red-line.gif|file:///F:/TiddlyWiki/TW jQuery/TreeView/images/treeview-red-line.gif]]|
| remote link:|/%REMOTE_LINK%/[[http://www.symbex.net.au/Wiki/images/treeview-red-line.gif|http://www.symbex.net.au/Wiki/images/treeview-red-line.gif]]|
image
<<<
usage: {{{[img[tooltip|treeview-red-line.gif]] or [img[tooltip|treeview-red-line.gif][link]]}}}
[img[tooltip|treeview-red-line.gif]]
<<<
/% DO NOT EDIT BELOW THIS POINT
---BEGIN_DATA---
image/gif;base64,
R0lGODlhEADwBvcAAAAAAPV2dgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAACH5BAEAAP8ALAAAAAAQAPAGAAj/AP8JHPgvAMGDCA0iXFiQ
4UKFDglCjChwIkWLETE61MgwgMePHx9SlDhyIEeRJRumPJkwpcqSLA/GJLnS5UyT
NnPW3AlTZ0+eI29W9BmU6EWjGZFuVNqRKcqfUIsCPTo1adWlV5tmfSo1KlWvVsFi
FauVLNevXdOiXRtWbVu2Y93GhVtWbl26Z9/qnbv3bt+8fAP7FQx4sOHCiFtuVWyW
sd3EMp06xjv5b2XClw9nhkyzceTFnz13fry5dGjSpymntrwac2vNrznjBD1adW3W
t13nhr1b9lDas0UHR93bdPHYxofbVo6buW7nvKH7fkncpfXr2LNr3869e/TfwsFX
/xe/nHxz88/Rf6denv159+nhrxcqfzr9+5KR6z/OX3py9fbl1x+A/9VXIH7AEbif
fwsqOKCBDUL4IILhScjghAJeqKGDG1rI4YcehkjheCJmCOKI7aH4norxsTifiSUm
GGOFLgYoY40HwohjhDtieKOOQP4oJI1BEjkkiT12mOSJRSLZZIpPrhhli1O+eCSU
V0qZJZVbWmnkl052aSOYWJKppZlcoullmGqOyeabZcJ5ppxp0rlmnHjOmWede96p
5598AupnoIQOaqibfSIqqKKFMnpojmJC2qakdjpqKaWJYrqopo1y+iiPVV4KaqSj
TlpqpZ6K6qOpq6J6aqavbv8aa6ezftoqrLfKmiutu9qqZKipBlurqr+S2iuxTBpb
LKvLunqssM8OC22zuFKrq7W8Yutrssxy66y2yM74rbfVknutudmiu6245bJ7rrvp
wrvukvKGS++9wEqrb7T8gjutuvbm2y/A/9ZbML7KEryvvwsrPLDBDUP8MMLdSszw
xAJfrLHDG1vM8cceh0zxuCJnDPLI7aL8rsrxsjyvySUnHHPFLgcsc80Hw4xzxDtj
fLPOQP8sNM1BEz00yT13nPTJRSPddMpPrxx1y1O/fDTUV0udNdVbW2301053bTPY
WJOttdlco+112GqPzfbbZcN9ttxp07123HjPnXfde9//rffffAPud+CED264230j
LrjihTN+eM5iQ9625HY7bjnliWO+uOaNc/44z1VfDnrko09eeuWei+6z6aujfnrm
r28ee+ezf9467LfLnjvtu9uudOipB1+76r+T3jvxTBtfPOvLu3688M8PD33zuFOv
u/W8Y+978sxz77z2yM/8vffVk3+9+dmjv7345bN/vvvpw7/+0vKHT//9wEuvf/T8
gz+9+vbLX/8A+L/6FRB/yiPg/vy3QAUO0IANhOADEdg9CTJwggK8oAYduEELcvCD
HgwhBccnwgyCcITtQ+H7VBg/Fs7PhCVMYAwr6MIAyrCGB4QhDiO4QwzeUIdA/KEQ
MmkYRCIOkYQ97GAST1hEJDYxhU9cYRRbOMUXHhGKV5RiFqm4RSsa8YtO7KINaQgS
kAQEADs=
---END_DATA---
%/
| source file:|{{{F:\TiddlyWiki\TWExperiments\jQuery\images\treeview-red.gif}}}|
| attached on:|31 May 2009 by YourName|
| embedded:|[[treeview-red.gif|treeview-red.gif]] - {{{type=image/gif, size=1230 bytes, encoded=1665 bytes}}}|
| local file:|/%LOCAL_LINK%/[[./images/treeview-red.gif|./images/treeview-red.gif]]|
| remote link:|/%REMOTE_LINK%/[[http://www.symbex.net.au/Wiki/images/treeview-red.gif|http://www.symbex.net.au/Wiki/images/treeview-red.gif]]|
image
<<<
usage: {{{[img[tooltip|treeview-red.gif]] or [img[tooltip|treeview-red.gif][link]]}}}
[img[tooltip|treeview-red.gif]]
<<<
/% DO NOT EDIT BELOW THIS POINT
---BEGIN_DATA---
image/gif;base64,
R0lGODlhYACFAPcAAAAAAPV2dgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAACH5BAEAAP8ALAAAAABgAIUAAAj/AP8JHEiwoMGDCBMqXMjw
H4CHABRCbEixosWLBCNi3Mixo0WNHkOKFAlypMmTKFOqPBmgpUuXK2OKDHCQpsyb
G206HKgTp8+GOkH2/EkUIU2ID/+9HFq0aFCeTaMafCqQqVSnNa9qXfpSq9eqX8OC
FfvVKlmsZ7emVbv2ZkmobWW+HRu34kSJSafW/RjS7N6Dc/8KHkw4LVeYhUda9ZvY
4uLGM7NC9ngUqdKuky8+zsxxM2eMnj87PsxYNMPSpimiTn2adV/XlGF3XA07MG3X
tlPfTbib4O29gR3rlk28uPHjVUkjl1zwd2qqSpfrFShUenOHlpdah+7cNHfrvpmD
qyfdHbz58+jTqzcZHH1705Z55y2e+3x98/fB518ffT159KFtN1B1531XIHYTaSed
geYxOJ542ynH34QUVmjhThW+h99xvQE2H3Ea6mdhiBeWWKCEDUK4oIrLBbgiUhEp
2CKLyLk443QNomjijjz2mBmJ0gG5nJCTdViQkTdSWB5xS8rWJGxPivbfgTg+WKWA
V76YHWZJhkfldV96meNhPpZp5plopqnmmggFBAA7
---END_DATA---
%/
/***
Do not rename - ''z'' positions this systemConfig module to be loaded after all other plugins.
***/
/***
!!!! my variables
***/
//{{{
config.zTweaks = {
zDateFormat : "YYYY.0MM.0DD",
// zTimeFormat : "0hh:0mm:0ss",
zTimeFormat : "0hh:0mm",
zWeekFormat : "W0WW",
zJournalFormat : "%0 %1 (%2)".format([this.zDateFormat,this.zTimeFormat,this.zWeekFormat])
};
//}}}
/***
!!!! shorthand
***/
//{{{
var c = config;
var o = c.options;
var s = c.shadowTiddlers;
var v = c.views;
var m = c.macros;
var M = c.messages;
var z = c.zTweaks;
//}}}
/***
! core
***/
/***
!!!! options
***/
//{{{
o.chkRegExpSearch = false; /* default DO NOT ENABLE to make full use of YourSearchPlugin */
o.chkCaseSensitiveSearch= false; /* set to TRUE for proper case-sensitive regexp search */
//}}}
/***
!!!! shadow tiddlers
***/
//{{{
s.SiteTitle = "[[∑|SiteTitle]]";
s.SiteSubtitle = "{{small{[[SiteSubtitle]]}}}";
s.SiteUrl = 'http://'+config.tiddlyspotSiteId+'.tiddlyspot.com';
s.DefaultTiddlers = s.DefaultTiddlers.replace(/^/,"[[Important]][[Hi there!]][[The problem]]");
//}}}
/***
!!!! macros
***/
//{{{
m.timeline.dateFormat = z.zDateFormat+" ddd";
m.tagging.label = "%0 (%1)";
/*
Disable keyboard shortcut for newTiddler macro because it appears in every tiddler (ViewTemplate, «span macro='newHere»)
Instead, the same shortcut is assigned to the <<newTiddler>> that is in MainMenu
*/
m.newTiddler.accessKey = undefined;
//}}}
/***
!!!! messages
***/
//{{{
M.backstage.open.text = "";
M.backstage.close.text = "";
M.backstage.prompt = "";
//}}}
/***
!!!! views
***/
//{{{
v.editor.orderKeyPrompt = "Key: ";
v.editor.defaultText = "";
v.wikified.dateFormat = z.zDateFormat;
//}}}
/***
! plugins
***/
/***
!!!! options
***/
//{{{
o.chkSearchAsYouType = false; /* YourSearchPlugin */
o.chkUploadLog = false; /* UploadPlugin */
o.chkReorderBreadcrumbs = true; /* BreadcrumbsPlugin */
o.chkEncryptShowEncrypted = true; /* TiddlerEncryptionPlugin */
o.chkTOCIncludeHidden = true; /* TableOfContentsPlugin */
o.txtTOCListSize = 42; /* * */
o.chkTopOfPageMode = true; /* SinglePageModePlugin */
o.chkSinglePageAutoScroll = false; /* * do not set to true, see SiteStartup */
/* TextAreaPlugin
ctrl-f, ctrl-g in text area
don't need, Fx built-in search works fine */
o.chkTextAreaExtensions = false;
/* StickyPopupPlugin
make individual popups sticky, otherwise tag dropdowns remain open */
o.chkStickyPopups = false;
/* StorySaverPlugin
keep the story (open tiddlers) in a cookie */
o.chkSaveStory = true;
/* DisableWikiLinksPlugin
disable links to non-existing tiddlers */
o.chkDisableNonExistingWikiLinks= true;
/* GotoPlugin
show dropdown only after n characters entered (press Down to force earlier) */
o.txtIncrementalSearchMin = 1;
/* CoreTweaks##637 TiddlyLink tooltip - custom formatting */
//o.txtTiddlerLinkTootip=
o.txtTiddlerLinkTooltipDate = '%0 %1'.format([z.zDateFormat,z.zTimeFormat]);
//}}}
/***
!!!! macros
***/
/***
!!!! other
***/
//{{{
/* placeholder */
//}}}
//{{{
config.options.chkHttpReadOnly = false;
config.options.chkAutoSave = false;
config.options.chkSaveBackups = false;
config.options.chkAnimate = false;
if (window.location.protocol!="file:") showBackstage=false;
config.options.chkShowRightSidebar= false;
config.options.chkShowLeftSidebar= true;
config.options.chkSearchTitles=true;
config.options.chkSearchText=true;
config.options.chkSearchTags=true;
config.options.chkSearchFields=true;
config.options.chkSearchTitlesFirst=false;
config.options.chkSearchList=true;
config.options.chkSearchByDate=false;
config.options.chkSearchIncremental=true;
config.options.chkSearchShadows=false;
config.options.chkShowQuickEdit=true;
//}}}
/***
!
Name: YourSearchBookmarklet
Version: 2.1.4
Source: http://tiddlywiki.abego-software.de/#YourSearchPlugin
Author: UdoBorkowski, XavierVergés
Licence: BSD open source license (abego Software)
Copyright: © 2005-2008 http://www.abego-software.de
Community: http://xdexavier.googlepages.com/yoursearch.html
***/
//{{{
(function(){var a=document.createElement("script");a.src="http://tiddlywiki.abego-software.de/archive/YourSearchPlugin/YourSearchPlugin.js";a.onload=function(){refreshPageTemplate();displayMessage("YourSearch is loaded")};document.getElementsByTagName("head")[0].appendChild(a)})();
//}}}