Welcome to TiddlyWiki created by Jeremy Ruston; Copyright © 2004-2007 Jeremy Ruston, Copyright © 2007-2011 UnaMesa Association
Type the text for '20100822-2304'
|Ref.|10npi079|
|Qty|1|
|Process|Assemblage|
|Masse|11g|
|Volume| |
|Finish|-|
|PU| |
!Todo
!Description
Rotule-vis serrée et maintenue par une vis auto-taraudeuse
!Nomenclature
<<tiddler AutoRefresh>><<tiddler [[FetNomenclature]] with:{{tiddler.title}}>>
|Ref.|10npi076|
|Qty|1|
|Material|-|
|Process|Assemblage|
|Masse|100g|
|Volume| |
|Finish|-|
|PU| |
!Todo
!Description
Paliers Igus épais autour d'une entretoise.
Rattrapage de jeux par un écrou et rondelle frein.
!Nomenclature
<<tiddler AutoRefresh>><<tiddler [[FetNomenclature]] with:{{tiddler.title}}>>
|Ref.|10npi081|
|Qty|2|
|Process|Assemblage|
|Masse|38g|
|Volume| |
|Finish|-|
|PU| |
!Todo
!Description
Bagues Igus à collerette.
Arrêt et rattrapage de jeux par une rondelle vague élastique.
!Nomenclature
<<tiddler AutoRefresh>><<tiddler [[FetNomenclature]] with:{{tiddler.title}}>>
!usage
{{{[[AccastillageDeLaDirection_10npi076.PDF|AccastillageDeLaDirection_10npi076.PDF]]}}}
[[AccastillageDeLaDirection_10npi076.PDF|AccastillageDeLaDirection_10npi076.PDF]]
!notes
attached by FileDropPlugin
!type
application
!file
./Plans/AccastillageDeLaDirection_10npi076.PDF
!url
!data
!usage
{{{[[AccastillageFusee_10npi081.PDF|AccastillageFusee_10npi081.PDF]]}}}
[[AccastillageFusee_10npi081.PDF|AccastillageFusee_10npi081.PDF]]
!notes
attached by FileDropPlugin
!type
application
!file
./Plans/AccastillageFusee_10npi081.PDF
!url
!data
Pas de panique, c'est un Tiddly Wiki !
...un bloc-notes personnel et vous ne pouvez pas encore l'abîmer :-)
Chacun y trouvera ses ressources sur le projet : spécifications, support graphiques, planning, fichiers...
Toutes les éléments s'affichent dans la même page.
Cherchez en haut à droite.
Naviguez dans le menu à gauche et au travers des liens internes ou des tags.
Éclaircissez en cliquant //close others// en haut à droite de l'élément que vous lisez ou //close all// tout en haut à droite.
Nous bous efforçons de rendre cet outil plus agréable et efficace peu à peu, votre expérience nous intéresse.
Bonne journée à tous.
!!Load
<<loadTiddlers label:Z_AirbankBlankPackage tag:AirbankBlankPackage file:///Z:/airbank_tw/index.html >>
<<loadTiddlers label:W_AirbankBlankPackage tag:AirbankBlankPackage file:///W:/Groups/airbank_tw__/airbank_tw/index.html >>
!!Todo
Recréer un Sommaire JBo
Rendre les tags visibles JBo
Moins de liens JBo
paragraphes plus consistants JBo
entrer tiddlers loadés dans sync JBo
drop txt application JBo
!Liste
<<tiddler AutoRefresh>><<tiddler NewTaggedTiddler with: {{tiddler.title}} {{tiddler.title}} Blank>>
<<tiddler FetTop2000Tag with:{{tiddler.title}} {{tiddler.title}}>>
!!Load
<<loadTiddlers label:Z_AirbankCataloguePackage tag:AirbankCataloguePackage file:///Z:/airbank_tw/index.html >>
<<loadTiddlers label:W_AirbankCataloguePackage tag:AirbankCataloguePackage file:///W:/Groups/airbank_tw__/airbank_tw/index.html >>
!
<<tiddler AutoRefresh>><<tiddler NewTaggedTiddler with: {{tiddler.title}} {{tiddler.title}} Blank>>
<<tiddler FetTop2000Tag with:{{tiddler.title}} {{tiddler.title}}>>
!!Todo
Initials JBo
!
<<tiddler AutoRefresh>><<tiddler NewTaggedTiddler with: {{tiddler.title}} {{tiddler.title}} Blank>>
<<tiddler FetTop2000Tag with:{{tiddler.title}} {{tiddler.title}}>>
<<grid filter:[[$1 AND NOT attachment]]
columns:[[!Description !Todo]] inline wikify>>
<<grid filter:[[$1 AND NOT attachment]]
columns:[[Ref. Qty Material Process Masse Volume Finish PU]] inline wikify>>
<<grid filter:[[$1 AND NOT attachment]]
columns:[[!Spécification]] inline wikify>>
<<grid filter:[[$1 AND NOT attachment]]
columns:[[!Spécifications]] inline wikify>>
Type the text for 'AirbankPluginPackage'
<<tiddler AutoRefresh>><<tiddler NewTaggedTiddler with: {{tiddler.title}} {{tiddler.title}} Blank>>
<<tiddler FetTop2000Tag with:{{tiddler.title}} {{tiddler.title}}>>
|Material|Aluminium|
|Process|Usinage|
|PU|290€/ECI|
!!Todo
monter avec goupille JBo
!!Avancement
!Description
Prototypage rapide
!
<<tiddler AutoRefresh>><<tiddler [[FetDescription]] with:{{tiddler.title}}>>
|Ref.|10npi036|
|Qty|1|
|Material|-|
|Process|Assemblage|
|Masse|556g|
|Volume|31.6|
|Finish|-|
|PU| |
!Todo
!Description
Tige de selle et son système de réglage
Insertion mini 60mm
<<tiddler [[AirbankGridDescription]] with:{{tiddler.title}}>>
!Nomenclature
<<tiddler [[AirbankGridNomenclature]] with:{{tiddler.title}}>>
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
----
application/edrawing
.eprt .easm
----
application/solidworks
.sldprt .sldasm .slddrw
----
application/Ooo
.odt .ods
----
application/x-7z-compressed
.7z
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
----
application/edrawing
.eprt .easm
----
application/solidworks
.sldprt .sldasm .slddrw
----
application/Ooo
.odt .ods
----
application/x-7z-compressed
.7z
/***
|Name|AttachFilePlugin|
|Source|http://www.TiddlyTools.com/#AttachFilePlugin|
|Documentation|http://www.TiddlyTools.com/#AttachFilePluginInfo|
|Version|4.0.1|
|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
<<<
2011.02.14 4.0.1 fix OSX error: use picker.file.path
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: 1, date: new Date(2011,2,14)};
// 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.path;
}
catch(ex) { displayMessage(ex.toString()); }
return result;
}
}
//}}}
/***
|Name|AttachFilePluginFormatters|
|Source|http://www.TiddlyTools.com/#AttachFilePluginFormatters|
|Version|4.0.1|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1.3|
|Type|plugin|
|Description|run-time library for displaying attachment tiddlers|
Runtime processing for //rendering// attachment tiddlers created by [[AttachFilePlugin]]. Attachment tiddlers are tagged with<<tag attachment>>and contain binary file content (e.g., jpg, gif, pdf, mp3, etc.) that has been stored directly as base64 text-encoded data or can be loaded from external files stored on a local filesystem or remote web server. Note: after creating new attachment tiddlers, you can remove [[AttachFilePlugin]], as long as you retain //this// tiddler (so that images can be rendered later on).
!!!!!Formatters
<<<
This plugin extends the behavior of the following TiddlyWiki core "wikify()" formatters:
* embedded images: {{{[img[tooltip|image]]}}}
* linked embedded images: {{{[img[tooltip|image][link]]}}}
* external/"pretty" links: {{{[[label|link]]}}}
''Please refer to AttachFilePlugin (source: http://www.TiddlyTools.com/#AttachFilePlugin) for additional information.''
<<<
!!!!!Revisions
<<<
2009.10.10 [4.0.1] in fileExists(), check for IE to avoid hanging Chrome during startup
2009.06.04 [4.0.0] changed attachment storage format to use //sections// instead of embedded substring markers.
2008.01.08 [*.*.*] plugin size reduction: documentation moved to ...Info
2007.12.04 [*.*.*] update for TW2.3.0: replaced deprecated core functions, regexps, and macros
2007.10.29 [3.7.0] more code reduction: removed upload handling from AttachFilePlugin (saves ~7K!)
2007.10.28 [3.6.0] removed duplicate formatter code from AttachFilePlugin (saves ~10K!) and updated documentation accordingly. This plugin ([[AttachFilePluginFormatters]]) is now //''required''// in order to display attached images/binary files within tiddler content.
2006.05.20 [3.4.0] through 2007.03.01 [3.5.3] sync with AttachFilePlugin
2006.05.13 [3.2.0] created from AttachFilePlugin v3.2.0
<<<
!!!!!Code
***/
// // version
//{{{
version.extensions.AttachFilePluginFormatters= {major: 4, minor: 0, revision: 1, date: new Date(2009,10,10)};
//}}}
//{{{
if (config.macros.attach==undefined) config.macros.attach= { };
//}}}
//{{{
if (config.macros.attach.isAttachment==undefined) config.macros.attach.isAttachment=function (title) {
var tiddler = store.getTiddler(title);
if (tiddler==undefined || tiddler.tags==undefined) return false;
return (tiddler.tags.indexOf("attachment")!=-1);
}
//}}}
//{{{
// test for local file existence - returns true/false without visible error display
if (config.macros.attach.fileExists==undefined) config.macros.attach.fileExists=function(f) {
if(window.Components) { // MOZ
try { netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); }
catch(e) { return false; } // security access denied
var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
try { file.initWithPath(f); }
catch(e) { return false; } // invalid directory
return file.exists();
}
else if (config.browser.isIE) { // IE
var fso = new ActiveXObject("Scripting.FileSystemObject");
return fso.FileExists(f);
}
else return true; // other browsers: assume file exists
}
//}}}
//{{{
if (config.macros.attach.getAttachment==undefined) config.macros.attach.getAttachment=function(title) {
// extract embedded data, local and remote links (if any)
var text=store.getTiddlerText(title,'');
var embedded=store.getTiddlerText(title+'##data','').trim();
var locallink=store.getTiddlerText(title+'##file','').trim();
var remotelink=store.getTiddlerText(title+'##url','').trim();
// backward-compatibility for older attachments (pre 4.0.0)
var startmarker="---BEGIN_DATA---\n";
var endmarker="\n---END_DATA---";
var pos=0; var endpos=0;
if ((pos=text.indexOf(startmarker))!=-1 && (endpos=text.indexOf(endmarker))!=-1)
embedded="data:"+(text.substring(pos+startmarker.length,endpos)).replace(/\n/g,'');
if ((pos=text.indexOf("/%LOCAL_LINK%/"))!=-1)
locallink=text.substring(text.indexOf("|",pos)+1,text.indexOf("]]",pos));
if ((pos=text.indexOf("/%REMOTE_LINK%/"))!=-1)
remotelink=text.substring(text.indexOf("|",pos)+1,text.indexOf("]]",pos));
// if there is a data: URI defined (not supported by IE)
if (embedded.length && !config.browser.isIE) return embedded;
// document is being served remotely... use remote URL (if any) (avoids security alert)
if (remotelink.length && document.location.protocol!="file:")
return remotelink;
// local link only... return link without checking file existence (avoids security alert)
if (locallink.length && !remotelink.length)
return locallink;
// local link, check for file exist... use local link if found
if (locallink.length) {
locallink=locallink.replace(/^\.[\/\\]/,''); // strip leading './' or '.\' (if any)
if (this.fileExists(getLocalPath(locallink))) return locallink;
// maybe local link is relative... add path from current document and try again
var pathPrefix=document.location.href; // get current document path and trim off filename
var slashpos=pathPrefix.lastIndexOf("/"); if (slashpos==-1) slashpos=pathPrefix.lastIndexOf("\\");
if (slashpos!=-1 && slashpos!=pathPrefix.length-1) pathPrefix=pathPrefix.substr(0,slashpos+1);
if (this.fileExists(getLocalPath(pathPrefix+locallink))) return locallink;
}
// no embedded data, no local (or not found), fallback to remote URL (if any)
if (remotelink.length) return remotelink;
// attachment URL doesn't resolve, just return input as is
return title;
}
//}}}
//{{{
if (config.macros.attach.init_formatters==undefined) config.macros.attach.init_formatters=function() {
if (this.initialized) return;
// find the formatter for "image" and replace the handler
for (var i=0; i<config.formatters.length && config.formatters[i].name!="image"; i++);
if (i<config.formatters.length) config.formatters[i].handler=function(w) {
this.lookaheadRegExp.lastIndex = w.matchStart;
var lookaheadMatch = this.lookaheadRegExp.exec(w.source)
if(lookaheadMatch && lookaheadMatch.index == w.matchStart) // Simple bracketted link
{
var e = w.output;
if(lookaheadMatch[5])
{
var link = lookaheadMatch[5];
// ELS -------------
var external=config.formatterHelpers.isExternalLink(link);
if (external)
{
if (config.macros.attach.isAttachment(link))
{
e = createExternalLink(w.output,link);
e.href=config.macros.attach.getAttachment(link);
e.title = config.macros.attach.linkTooltip + link;
}
else
e = createExternalLink(w.output,link);
}
else
e = createTiddlyLink(w.output,link,false,null,w.isStatic);
// ELS -------------
addClass(e,"imageLink");
}
var img = createTiddlyElement(e,"img");
if(lookaheadMatch[1])
img.align = "left";
else if(lookaheadMatch[2])
img.align = "right";
if(lookaheadMatch[3])
img.title = lookaheadMatch[3];
img.src = lookaheadMatch[4];
// ELS -------------
if (config.macros.attach.isAttachment(lookaheadMatch[4]))
img.src=config.macros.attach.getAttachment(lookaheadMatch[4]);
// ELS -------------
w.nextMatch = this.lookaheadRegExp.lastIndex;
}
}
//}}}
//{{{
// find the formatter for "prettyLink" and replace the handler
for (var i=0; i<config.formatters.length && config.formatters[i].name!="prettyLink"; i++);
if (i<config.formatters.length) {
config.formatters[i].handler=function(w) {
this.lookaheadRegExp.lastIndex = w.matchStart;
var lookaheadMatch = this.lookaheadRegExp.exec(w.source);
if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
var e;
var text = lookaheadMatch[1];
if(lookaheadMatch[3]) {
// Pretty bracketted link
var link = lookaheadMatch[3];
if (config.macros.attach.isAttachment(link)) {
e = createExternalLink(w.output,link);
e.href=config.macros.attach.getAttachment(link);
e.title=config.macros.attach.linkTooltip+link;
}
else e = (!lookaheadMatch[2] && config.formatterHelpers.isExternalLink(link))
? createExternalLink(w.output,link)
: createTiddlyLink(w.output,link,false,null,w.isStatic);
} else {
e = createTiddlyLink(w.output,text,false,null,w.isStatic);
}
createTiddlyText(e,text);
w.nextMatch = this.lookaheadRegExp.lastIndex;
}
}
} // if "prettyLink" formatter found
this.initialized=true;
}
//}}}
//{{{
config.macros.attach.init_formatters(); // load time init
//}}}
//{{{
if (TiddlyWiki.prototype.coreGetRecursiveTiddlerText==undefined) {
TiddlyWiki.prototype.coreGetRecursiveTiddlerText = TiddlyWiki.prototype.getRecursiveTiddlerText;
TiddlyWiki.prototype.getRecursiveTiddlerText = function(title,defaultText,depth) {
return config.macros.attach.isAttachment(title)?
config.macros.attach.getAttachment(title):this.coreGetRecursiveTiddlerText.apply(this,arguments);
}
}
//}}}
{{fourcolumns{<<forEachTiddler
where
'!tiddler.tags.contains("systemConfig") && !tiddler.tags.contains("settings") && !tiddler.tags.contains("transclusion")'
sortBy
tiddler.modified
descending
script '
window.fetItemsPerPage = 43;
function getHeader(context,count) {
if (!window.fetStartIndex || window.fetStartIndex < 0)
window.fetStartIndex = 0;
// ensure not to page behind the last page
if (window.fetStartIndex >= count)
window.fetStartIndex = Math.min(Math.max(window.fetStartIndex-window.fetItemsPerPage,0),count-1);
createTiddlyButton(context.place,"<",null,
function(e) {
window.fetStartIndex -= window.fetItemsPerPage;
story.refreshTiddler(context.viewerTiddler.title,null,true);
});
createTiddlyButton(context.place,">",null,
function(e) {
window.fetStartIndex += window.fetItemsPerPage;
story.refreshTiddler(context.viewerTiddler.title,null,true);
});
var startNo = window.fetStartIndex+1;
var endNo = Math.min(count,window.fetStartIndex+window.fetItemsPerPage);
return "("+startNo+" - "+endNo+ " of "+ count + " items)\n";
}
'
write
'(index >= window.fetStartIndex) && (index < window.fetStartIndex + 43) ? "[["+tiddler.title+"]] ("+tiddler.modified.formatString("YYYY-0MM-0DD")+")\n" : ""'
begin
'getHeader(context,count)'
>>}}}
/%
!info
|Name|AutoRefresh|
|Source|http://www.TiddlyTools.com/#AutoRefresh|
|Version|2.0.0|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|transclusion|
|Description|set/clear tiddler refresh flags to force/prevent re-rendering when changes occur|
Usage:
<<<
{{{
<<tiddler AutoRefresh>>
<<tiddler AutoRefresh with: mode id>>
}}}
*''mode'' (optional), one of:
**''off'' or ''disable'' - prevents refresh of rendered content (except when PageTemplate is changed!)
**''on'' or ''enable'' - re-render content whenever corresponding tiddler source is changed (default)
**''force'' - re-render content whenever //''ANY''// tiddler is changed
*''id'' (optional), is a unique DOM element identifier on which to operate (e.g., 'mainMenu'). If omitted, the current tiddler (if any) is implied.
<<<
!end
!show
<<tiddler {{
var here=story.findContainingTiddler(place);
var target=document.getElementById('$2')||here||place.parentNode;
if (target==here) { // in a tiddler, get viewer element
var elems=target.getElementsByTagName('*');
for (var i=0;i<elems.length;i++)
if (hasClass(elems[i],'viewer')) { target=elems[i]; break; }
}
if (target) {
var mode='$1'; if (mode=='$'+'1') mode='on';
if (['on','enable','force'].contains(mode.toLowerCase())) {
var title=target.getAttribute('tiddler');
if (!title&&here) title=here.getAttribute('tiddler');
if (title) target.setAttribute('tiddler',title);
target.setAttribute('refresh','content');
target.setAttribute('force',(mode=='force')?'true':'');
} else if (['off','disable'].contains(mode.toLowerCase())) {
target.setAttribute('refresh','');
target.setAttribute('force','');
}
}
'';}}>>
!end
%/<<tiddler {{var src='AutoRefresh'; src+(tiddler&&tiddler.title==src?'##info':'##show');}}
with: [[$1]] [[$2]]>>
|Ref.|10npi051a|
|Qty|1 (2/kiffy)|
|Material|2014-T4|
|Process|Tournage|
|Masse|1.15g|
|Volume|D10 L15mm|
|Finish|Sablé|
|PU|1p ITI 26-07-10|
!Todo
!Description
rev.a
BON POUR EXECUTION
general tolerance ±0.2mm ( 0.5mm )
Entretoise autour de sa vis.
|Name|Benjamin CHOUVION|
|Title|Calcul|
|Company|[[Capsule]]|
|Phone|04.84.25.07.00|
|Fax||
|Email|bchouvion@capsule-ea.fr|
|Adress||
|Website||
<<tiddler AutoRefresh>><<tiddler FetTodoText with: {{tiddler.title}}>>
|Ref.|11npi007a|
|Qty|2|
|Material|6061|
|Process||
|Masse|38.82g|
|Volume||
|Finish|black anodized|
|PU|78@ECI 30@Dornberger 13@TAT|
!Todo
Usinage JBo > DOrn
!Description
Filetages à droite a gauche
|Ref.|11npi010|
|Qty|2|
|Material|Aluminium|
|Masse|41|
|Process|Tournage|
|Volume| |
|Finish|-|
|PU||
!!Todo
!!Avancement
Attente usinage
!Description
Rev a
<<tiddler AutoRefresh>><<tiddler [[FetDescription]] with:{{tiddler.title}}>>
!Nomenclature
<<tiddler AutoRefresh>><<tiddler [[FetNomenclature]] with:{{tiddler.title}}>>
/***
|Name|BreadcrumbsPlugin|
|Author|Eric Shulman|
|Source|http://www.TiddlyTools.com/#BreadcrumbsPlugin|
|Documentation|http://www.TiddlyTools.com/#BreadcrumbsPluginInfo|
|Version|2.1.4|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|list/jump to tiddlers viewed during this session plus "back" button/macro|
This plugin provides a list of links to all tiddlers opened during the session, creating a "trail of breadcrumbs" from one tiddler to the next, allowing you to quickly navigate to any previously viewed tiddler, or select 'home' to reset the display to the initial set of tiddlers that were open at the start of the session (i.e., when the document was loaded into the browser).
!!!!!Documentation
<<<
see [[BreadcrumbsPluginInfo]]
<<<
!!!!!Configuration
<<<
<<option chkCreateDefaultBreadcrumbs>> automatically create breadcrumbs display (if needed)
<<option chkShowBreadcrumbs>> show/hide breadcrumbs display
<<option chkReorderBreadcrumbs>> re-order breadcrumbs when visiting a previously viewed tiddler
<<option chkBreadcrumbsHideHomeLink>> omit 'Home' link from breadcrumbs display
<<option chkBreadcrumbsSave>> prompt to save breadcrumbs when 'Home' link is pressed
<<option chkShowStartupBreadcrumbs>> show breadcrumbs for 'startup' tiddlers
<<option chkBreadcrumbsReverse>> show breadcrumbs in reverse order (most recent first)
<<option chkBreadcrumbsLimit>> limit breadcrumbs display to {{twochar{<<option txtBreadcrumbsLimit>>}}} items
<<option chkBreadcrumbsLimitOpenTiddlers>> limit open tiddlers to {{twochar{<<option txtBreadcrumbsLimitOpenTiddlers>>}}} items
<<<
!!!!!Revisions
<<<
2011.02.16 2.1.4 in refresh(), use 'inline' instead of 'block' style (avoids unwanted linebreak). In previousTiddler(), allow handling even if not in a tiddler so that back button can be placed in ~MainMenu or ~SidebarOptions.
| Please see [[BreadcrumbsPluginInfo]] for previous revision details |
2006.02.01 1.0.0 initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.BreadcrumbsPlugin= {major: 2, minor: 1, revision: 4, date: new Date(2011,2,16)};
var defaults={
chkShowBreadcrumbs: true,
chkReorderBreadcrumbs: true,
chkCreateDefaultBreadcrumbs: true,
chkShowStartupBreadcrumbs: false,
chkBreadcrumbsReverse: false,
chkBreadcrumbsLimit: false,
txtBreadcrumbsLimit: 5,
chkBreadcrumbsLimitOpenTiddlers:false,
txtBreadcrumbsLimitOpenTiddlers:3,
chkBreadcrumbsHideHomeLink: false,
chkBreadcrumbsSave: false,
txtBreadcrumbsHomeSeparator: ' | ',
txtBreadcrumbsCrumbSeparator: ' > '
};
for (var id in defaults) if (config.options[id]===undefined)
config.options[id]=defaults[id];
config.macros.breadcrumbs = {
crumbs: [], // the list of current breadcrumbs
askMsg: "Save current breadcrumbs before clearing?\n"
+"Press OK to save, or CANCEL to continue without saving.",
saveMsg: 'Enter the name of a tiddler in which to save the current breadcrumbs',
saveTitle: 'SavedBreadcrumbs',
handler: function(place,macroName,params,wikifier,paramString,tiddler) {
var area=createTiddlyElement(place,"span",null,"breadCrumbs",null);
area.setAttribute("homeSep",params[0]||config.options.txtBreadcrumbsHomeSeparator);
area.setAttribute("crumbSep",params[1]||config.options.txtBreadcrumbsCrumbSeparator);
this.render(area);
},
add: function (title) {
var thisCrumb = title;
var ind = this.crumbs.indexOf(thisCrumb);
if(ind === -1)
this.crumbs.push(thisCrumb);
else if (config.options.chkReorderBreadcrumbs)
this.crumbs.push(this.crumbs.splice(ind,1)[0]); // reorder crumbs
else
this.crumbs=this.crumbs.slice(0,ind+1); // trim crumbs
if (config.options.chkBreadcrumbsLimitOpenTiddlers)
this.limitOpenTiddlers();
this.refresh();
return false;
},
getAreas: function() {
var crumbAreas=[];
// find all DIVs with classname=="breadCrumbs"
var all=document.getElementsByTagName("*");
for (var i=0; i<all.length; i++)
try{ if (hasClass(all[i],"breadCrumbs")) crumbAreas.push(all[i]); } catch(e) {;}
// or, find single DIV w/fixed ID (backward compatibility)
var byID=document.getElementById("breadCrumbs")
if (byID && !hasClass(byID,"breadCrumbs")) crumbAreas.push(byID);
if (!crumbAreas.length && config.options.chkCreateDefaultBreadcrumbs) {
// no crumbs display... create one
var defaultArea = createTiddlyElement(null,"span",null,"breadCrumbs",null);
defaultArea.style.display= "none";
var targetArea= document.getElementById("tiddlerDisplay");
targetArea.parentNode.insertBefore(defaultArea,targetArea);
crumbAreas.push(defaultArea);
}
return crumbAreas;
},
refresh: function() {
var crumbAreas=this.getAreas();
for (var i=0; i<crumbAreas.length; i++) {
crumbAreas[i].style.display = config.options.chkShowBreadcrumbs?"inline":"none";
removeChildren(crumbAreas[i]);
this.render(crumbAreas[i]);
}
},
render: function(here) {
var co=config.options; var out=""
if (!co.chkBreadcrumbsHideHomeLink) {
createTiddlyButton(here,"Home",null,this.home,"tiddlyLink tiddlyLinkExisting");
out+=here.getAttribute("homeSep")||config.options.txtBreadcrumbsHomeSeparator;
}
for (c=0; c<this.crumbs.length; c++) // remove non-existing tiddlers from crumbs
if (!store.tiddlerExists(this.crumbs[c]) && !store.isShadowTiddler(this.crumbs[c]))
this.crumbs.splice(c,1);
var count=this.crumbs.length;
if (co.chkBreadcrumbsLimit && co.txtBreadcrumbsLimit<count) count=co.txtBreadcrumbsLimit;
var list=[];
for (c=this.crumbs.length-count; c<this.crumbs.length; c++) list.push('[['+this.crumbs[c]+']]');
if (co.chkBreadcrumbsReverse) list.reverse();
out+=list.join(here.getAttribute("crumbSep")||config.options.txtBreadcrumbsCrumbSeparator);
wikify(out,here);
},
home: function() {
var cmb=config.macros.breadcrumbs;
if (config.options.chkBreadcrumbsSave && confirm(cmb.askMsg)) cmb.saveCrumbs();
story.closeAllTiddlers(); restart();
cmb.crumbs = []; var crumbAreas=cmb.getAreas();
for (var i=0; i<crumbAreas.length; i++) crumbAreas[i].style.display = "none";
return false;
},
saveCrumbs: function() {
var tid=prompt(this.saveMsg,this.saveTitle); if (!tid||!tid.length) return; // cancelled by user
var t=store.getTiddler(tid);
if(t && !confirm(config.messages.overwriteWarning.format([tid]))) return;
var who=config.options.txtUserName;
var when=new Date();
var text='[['+this.crumbs.join(']]\n[[')+']]';
var tags=t?t.tags:[]; tags.pushUnique('story');
var fields=t?t.fields:{};
store.saveTiddler(tid,tid,text,who,when,tags,fields);
story.displayTiddler(null,tid);
story.refreshTiddler(tid,null,true);
displayMessage(tid+' has been '+(t?'updated':'created'));
},
limitOpenTiddlers: function() {
var limit=config.options.txtBreadcrumbsLimitOpenTiddlers; if (limit<1) limit=1;
for (c=this.crumbs.length-1; c>=0; c--) {
var tid=this.crumbs[c];
var elem=story.getTiddler(tid);
if (elem) { // tiddler is displayed
if (limit <=0) { // display limit has been reached
if (elem.getAttribute("dirty")=="true") { // tiddler is being edited
var msg= "'"+tid+"' is currently being edited.\n\n"
+"Press OK to save and close this tiddler\n"
+"or press Cancel to leave it opened";
if (confirm(msg)) {
story.saveTiddler(tid);
story.closeTiddler(tid);
}
}
else story.closeTiddler(this.crumbs[c]);
}
limit--;
}
}
}
};
//}}}
// // PreviousTiddler ('back') command and macro
//{{{
config.commands.previousTiddler = {
text: 'back',
tooltip: 'view the previous tiddler',
handler: function(event,src,title) {
var crumbs=config.macros.breadcrumbs.crumbs;
if (crumbs.length<2) config.macros.breadcrumbs.home();
else story.displayTiddler(story.findContainingTiddler(src),crumbs[crumbs.length-2]);
return false;
}
};
config.macros.previousTiddler= {
label: 'back',
prompt: 'view the previous tiddler',
handler: function(place,macroName,params,wikifier,paramString,tiddler) {
var label=params.shift(); if (!label) label=this.label;
var prompt=params.shift(); if (!prompt) prompt=this.prompt;
createTiddlyButton(place,label,prompt,function(ev){
return config.commands.previousTiddler.handler(ev,this)
});
}
}
//}}}
// // HIJACKS
//{{{
// update crumbs when a tiddler is displayed
if (Story.prototype.breadCrumbs_coreDisplayTiddler==undefined)
Story.prototype.breadCrumbs_coreDisplayTiddler=Story.prototype.displayTiddler;
Story.prototype.displayTiddler = function(srcElement,tiddler) {
var title=(tiddler instanceof Tiddler)?tiddler.title:tiddler;
this.breadCrumbs_coreDisplayTiddler.apply(this,arguments);
if (!startingUp || config.options.chkShowStartupBreadcrumbs)
config.macros.breadcrumbs.add(title);
}
// update crumbs when a tiddler is deleted
if (TiddlyWiki.prototype.breadCrumbs_coreRemoveTiddler==undefined)
TiddlyWiki.prototype.breadCrumbs_coreRemoveTiddler=TiddlyWiki.prototype.removeTiddler;
TiddlyWiki.prototype.removeTiddler= function() {
this.breadCrumbs_coreRemoveTiddler.apply(this,arguments);
config.macros.breadcrumbs.refresh();
}
//}}}
|Ref.|Béné Inox - 218702-4X18|
|Qty|1|
|Material|Inox|
|Process|Standard|
|Masse||
|Volume||
|Finish||
|PU||
!!Todo
!!Avancement
Commandé JBo
!Description
Goupille élastique
4 x 18
|Ref.|10npi015|
|Qty|1|
|Material|-|
|Process|Assemblage|
|Masse|176g|
|Volume|D8|
|Finish| |
|PU| |
!Todo
Comprendre collision roues avant JBo
Souder MGp
!Description
Hauteur des pivots 120 pour 145mm au plan
se déplie par l'arrière
Dépliage au pied (320mm de haut)
<<tiddler AutoRefresh>><<tiddler [[FetDescription]] with:{{tiddler.title}}>>
!Nomenclature
<<tiddler AutoRefresh>><<tiddler [[FetNomenclature]] with:{{tiddler.title}}>>
<<tiddler AutoRefresh>><<tiddler FetTodoText with: {{tiddler.title}}>>
|Ref.|10npi037b|
|Qty|1|
|Material|6060 ; 6061|
|Process|Soudure|
|Masse|860g|
|Volume| |
|Finish|Peint Cyan pantone 299 C|
|PU| |
!!Todo
!Description
Aléser tube de selle
Percer TS pour retenir [[Dahon - Turtleneck]]
Rev b
!
<<tiddler AutoRefresh>><<tiddler [[FetDescription]] with:{{tiddler.title}}>>
!Nomenclature
<<tiddler AutoRefresh>><<tiddler [[FetNomenclature]] with:{{tiddler.title}}>>
|Ref.|10npi003c|
|Qty|1|
|Material|6061|
|Process|Soudage|
|Masse|540g|
|Volume| |
|Finish|painted Orange|
|PU|?@ArtCadre|
!!Todo
re-souder JBo > CBr
!Description
Reçu + gabarit, pas encore assemblé
ne changer que les bras de fourche sur le [[Cadre Avant 2011-02-06]]
!Nomenclature
<<tiddler AutoRefresh>><<tiddler [[FetNomenclature]] with:{{tiddler.title}}>>
|Ref.|10npi100a|
|Qty|1|
|Material|steel tube 25CrMo4|
|Process|soudage|
|Masse|1782g|
|Volume|D10|
|Finish|painted black|
|PU| |
!!Todo
!Description
--D8--
rev.a
--6061-T6 (SS)--
<<tiddler AutoRefresh>><<tiddler [[FetDescription]] with:{{tiddler.title}}>>
!Nomenclature
<<tiddler AutoRefresh>><<tiddler [[FetNomenclature]] with:{{tiddler.title}}>>
|Ref.|10npi004a|
|Qty|1 (2/Kiffy)|
|Material|Pa6|
|Process|Tournage (Injection)|
|Masse|7g|
|Volume|D28.6 L20 d8mm|
|Finish|Noir|
|PU|erreur 1p ITI 26-07-10|
!Todo
!Description
rev.a
BON POUR EXECUTION
general tolerance ±0.2mm ( 0.5mm )
Ajustements
Interface avec le porteur.
Étanchéité de la ligne d'axe.
|Name|Capsule|
|Phone|...|
|Fax|...|
|Email|...|
|Adress|...|
|Website|...|
!Description
...
<<tiddler AutoRefresh>><<tiddler FetTitleList with:[[Produits commerciaux]] {{tiddler.title}}>>
<<tiddler AutoRefresh>><<tiddler FetTitleList with:[[Contacts]] {{tiddler.title}}>>
<<tiddler AutoRefresh>><<forEachTiddler
where
'tiddler.tags.contains(context.inTiddler.title)'
sortBy
tiddler.title
ascending
write
'((index == 0) ? "|borderless|k\n" : "\n")+"| ![["+tiddler.title+"]]|<<tiddler FetListDash with:[["+tiddler.title+"]] [["+tiddler.title+"]]$))|"'
>>
|Ref.| |
|Qty|1|
|Material|Acier|
|Process|Standard|
|Masse|260g|
|Volume|3/32|
|Finish| |
|PU|19€ Public TTC |
!Todo
sourcer KMC (CK)attente
!Description
Background: white
Foreground: #000
PrimaryPale: #eee
PrimaryLight: #ddd
PrimaryMid: blue
PrimaryDark: #014
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #ccc
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
<<tiddler NewTaggedTiddler with:{{tiddler.title}} {{tiddler.title}} TemplateCompany>>
<<tiddler AutoRefresh>><<tiddler FetCompanyTagTag with: {{tiddler.title}} {{tiddler.title}}>>
<<tiddler NewTaggedTiddler with:[[Contacts]] {{tiddler.title}} TemplateContact>>
<<tiddler AutoRefresh>><<tiddler FetContactTagTag with:[[Contacts]] {{tiddler.title}}>>
/***
|Name|CopyTiddlerPlugin|
|Source|http://www.TiddlyTools.com/#CopyTiddlerPlugin|
|Version|3.2.5|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.3|
|Type|plugin|
|Description|Quickly create a copy of any existing tiddler|
!!!Usage
<<<
The plugin automatically updates the default (shadow) ToolbarCommands definitions to insert the ''copyTiddler'' command, which will appear as ''copy'' when a tiddler is rendered. If you are already using customized toolbar definitions, you will need to manually add the ''copyTiddler'' toolbar command to your existing ToolbarCommands tiddler, e.g.:
{{{
|EditToolbar|... copyTiddler ... |
}}}
When the ''copy'' command is selected, a new tiddler is created containing an exact copy of the current text/tags/fields, using a title of "{{{TiddlerName (n)}}}", where ''(n)'' is the next available number (starting with 1, of course). If you copy while //editing// a tiddler, the current values displayed in the editor are used (including any changes you may have already made to those values), and the new tiddler is immediately opened for editing.
The plugin also provides a macro that allows you to embed a ''copy'' command directly in specific tiddler content:
{{{
<<copyTiddler TidderName label:"..." prompt:"...">>
}}}
where
* ''TiddlerName'' (optional)<br>specifies the //source// tiddler to be copied. If omitted, the current containing tiddler (if any) will be copied.
* ''label:"..."'' (optional)<br>specifies text to use for the embedded link (default="copy TiddlerName")
* ''prompt:"..."'' (optional)<br>specifies mouseover 'tooltip' help text for link
//Note: to use non-default label/prompt values with the current containing tiddler, use "" for the TiddlerName//
<<<
!!!Configuration
<<<
<<option chkCopyTiddlerDate>> use date/time from existing tiddler (otherwise, use current date/time)
{{{<<option chkCopyTiddlerDate>>}}}
<<<
!!!Revisions
<<<
2009.06.08 [3.2.5] added option to use timestamp from source tiddler
2009.03.09 [3.2.4] fixed IE-specific syntax error
2009.03.02 [3.2.3] refactored code (again) to restore use of config.commands.copyTiddler.* custom settings
2009.02.13 [3.2.2] in click(), fix calls to displayTiddler() to use current tiddlerElem and use getTiddlerText() to permit copying of shadow tiddler content
2009.01.30 [3.2.1] fixed handling for copying field values when in edit mode
2009.01.23 [3.2.0] refactored code and added {{{<<copyTiddler TiddlerName>>}}} macro
2008.12.18 [3.1.4] corrected code for finding next (n) value when 'sparse' handling is in effect (thanks to RussThomas for identifying and diagnosing the problem)
2008.11.14 [3.1.3] added optional 'sparse' setting (avoids 'filling in' missing numbers that may have been previously deleted)
2008.11.14 [3.1.2] added optional 'zeroPad' setting
2008.11.14 [3.1.1] moved hard-coded '(n)' regex into 'suffixPattern' object property so it can be customized
2008.09.26 [3.1.0] changed new title generation to use '(n)' suffix instead of 'Copy of' prefix
2008.05.20 [3.0.3] in handler, when copying from VIEW mode, create duplicate array from existing tags array before saving new tiddler.
2007.12.19 [3.0.2] in handler, when copying from VIEW mode, duplicate custom fields before saving new tiddler. Thanks to bug report from Ken Girard.
2007.09.26 [3.0.1] in handler, use findContainingTiddler(src) to get tiddlerElem (and title). Allows 'copy' command to find correct tiddler when transcluded using {{{<<tiddler>>}}} macro or enhanced toolbar inclusion (see [[CoreTweaks]])
2007.06.28 [3.0.0] complete re-write to handle custom fields and alternative view/edit templates
2007.05.17 [2.1.2] use store.getTiddlerText() to retrieve tiddler content, so that SHADOW tiddlers can be copied correctly when in VIEW mode
2007.04.01 [2.1.1] in copyTiddler.handler(), fix check for editor fields by ensuring that found field actually has edit=='text' attribute
2007.02.05 [2.1.0] in copyTiddler.handler(), if editor fields (textfield and/or tagsfield) can't be found (i.e., tiddler is in VIEW mode, not EDIT mode), then get text/tags values from stored tiddler instead of active editor fields. Allows use of COPY toolbar directly from VIEW mode (based on a request from LaurentCharles)
2006.12.12 [2.0.0] completely rewritten so plugin just creates a new tiddler EDITOR with a copy of the current tiddler EDITOR contents, instead of creating the new tiddler in the STORE by copying the current tiddler values from the STORE.
2005.xx.xx [1.0.0] original version by Tim Morgan
<<<
!!!Code
***/
//{{{
version.extensions.CopyTiddlerPlugin= {major: 3, minor: 2, revision: 5, date: new Date(2009,6,8)};
// automatically tweak shadow EditTemplate to add 'copyTiddler' toolbar command (following 'cancelTiddler')
config.shadowTiddlers.ToolbarCommands=config.shadowTiddlers.ToolbarCommands.replace(/cancelTiddler/,'cancelTiddler copyTiddler');
if (config.options.chkCopyTiddlerDate===undefined) config.options.chkCopyTiddlerDate=false;
config.commands.copyTiddler = {
text: 'copy',
hideReadOnly: true,
tooltip: 'Make a copy of this tiddler',
notitle: 'this tiddler',
prefix: '',
suffixText: ' (%0)',
suffixPattern: / \(([0-9]+)\)$/,
zeroPad: 0,
sparse: false,
handler: function(event,src,title)
{ return config.commands.copyTiddler.click(src,event); },
click: function(here,ev) {
var tiddlerElem=story.findContainingTiddler(here);
var template=tiddlerElem?tiddlerElem.getAttribute('template'):null;
var title=here.getAttribute('from');
if (!title || !title.length) {
if (!tiddlerElem) return false;
else title=tiddlerElem.getAttribute('tiddler');
}
var root=title.replace(this.suffixPattern,''); // title without suffix
// find last matching title
var last=title;
if (this.sparse) { // don't fill-in holes... really find LAST matching title
var tids=store.getTiddlers('title','excludeLists');
for (var t=0; t<tids.length; t++) if (tids[t].title.startsWith(root)) last=tids[t].title;
}
// get next number (increment from last matching title)
var n=1; var match=this.suffixPattern.exec(last); if (match) n=parseInt(match[1])+1;
var newTitle=this.prefix+root+this.suffixText.format([String.zeroPad(n,this.zeroPad)]);
// if not sparse mode, find the next hole to fill in...
while (store.tiddlerExists(newTitle)||document.getElementById(story.idPrefix+newTitle))
{ n++; newTitle=this.prefix+root+this.suffixText.format([String.zeroPad(n,this.zeroPad)]); }
if (!story.isDirty(title)) { // if tiddler is not being EDITED
// duplicate stored tiddler (if any)
var text=store.getTiddlerText(title,'');
var who=config.options.txtUserName;
var when=new Date();
var newtags=[]; var newfields={};
var tid=store.getTiddler(title); if (tid) {
if (config.options.chkCopyTiddlerDate) var when=tid.modified;
for (var t=0; t<tid.tags.length; t++) newtags.push(tid.tags[t]);
store.forEachField(tid,function(t,f,v){newfields[f]=v;},true);
}
store.saveTiddler(newTitle,newTitle,text,who,when,newtags,newfields,true);
story.displayTiddler(tiddlerElem,newTitle,template);
} else {
story.displayTiddler(tiddlerElem,newTitle,template);
var fields=config.commands.copyTiddler.gatherFields(tiddlerElem); // get current editor fields
var newTiddlerElem=document.getElementById(story.idPrefix+newTitle);
for (var f=0; f<fields.length; f++) { // set fields in new editor
if (fields[f].name=='title') fields[f].value=newTitle; // rename title in new tiddler
var fieldElem=config.commands.copyTiddler.findField(newTiddlerElem,fields[f].name);
if (fieldElem) {
if (fieldElem.getAttribute('type')=='checkbox')
fieldElem.checked=fields[f].value;
else
fieldElem.value=fields[f].value;
}
}
}
story.focusTiddler(newTitle,'title');
return false;
},
findField: function(tiddlerElem,field) {
var inputs=tiddlerElem.getElementsByTagName('input');
for (var i=0; i<inputs.length; i++) {
if (inputs[i].getAttribute('type')=='checkbox' && inputs[i].field == field) return inputs[i];
if (inputs[i].getAttribute('type')=='text' && inputs[i].getAttribute('edit') == field) return inputs[i];
}
var tas=tiddlerElem.getElementsByTagName('textarea');
for (var i=0; i<tas.length; i++) if (tas[i].getAttribute('edit') == field) return tas[i];
var sels=tiddlerElem.getElementsByTagName('select');
for (var i=0; i<sels.length; i++) if (sels[i].getAttribute('edit') == field) return sels[i];
return null;
},
gatherFields: function(tiddlerElem) { // get field names and values from current tiddler editor
var fields=[];
// get checkboxes and edit fields
var inputs=tiddlerElem.getElementsByTagName('input');
for (var i=0; i<inputs.length; i++) {
if (inputs[i].getAttribute('type')=='checkbox')
if (inputs[i].field) fields.push({name:inputs[i].field,value:inputs[i].checked});
if (inputs[i].getAttribute('type')=='text')
if (inputs[i].getAttribute('edit')) fields.push({name:inputs[i].getAttribute('edit'),value:inputs[i].value});
}
// get textareas (multi-line edit fields)
var tas=tiddlerElem.getElementsByTagName('textarea');
for (var i=0; i<tas.length; i++)
if (tas[i].getAttribute('edit')) fields.push({name:tas[i].getAttribute('edit'),value:tas[i].value});
// get selection lists (droplist or listbox)
var sels=tiddlerElem.getElementsByTagName('select');
for (var i=0; i<sels.length; i++)
if (sels[i].getAttribute('edit')) fields.push({name:sels[i].getAttribute('edit'),value:sels[i].value});
return fields;
}
};
//}}}
// // MACRO DEFINITION
//{{{
config.macros.copyTiddler = {
label: 'copy',
prompt: 'Make a copy of %0',
handler: function(place,macroName,params,wikifier,paramString,tiddler) {
var title=params.shift();
params=paramString.parseParams('anon',null,true,false,false);
var label =getParam(params,'label',this.label+(title?' '+title:''));
var prompt =getParam(params,'prompt',this.prompt).format([title||this.notitle]);
var b=createTiddlyButton(place,label,prompt,
function(ev){return config.commands.copyTiddler.click(this,ev)});
b.setAttribute('from',title||'');
}
};
//}}}
|Ref.|10npi052a|
|Qty|1 (2/Kiffy)|
|Material|Acier allié|
|Process|Fraisage|
|Masse|5g|
|Volume|L15x w12 h5mm|
|Finish|Anti-corrosion noir|
|PU|erreur 1p ITI 26-07-10|
!Todo
!Description
BON POUR EXECUTION
general tolerance ±0.2mm ( 0.5mm )
rev.a
Écrou gradué pour régler le parallélisme.
|Ref.| |
|Qty|1|
|Material|Aluminium|
|Process|Standard|
|Masse|25g|
|Volume|40mm|
|Finish| |
|PU|ok Capsule|
!Todo
Sourcer en noir JBo
!Description
Collier de selle.
Sizes 40 mm and 41mm
[[https://sslrelay.com|https://sslrelay.com/s75353868.oneandoneshop.co.uk/sess/utn;jsessionid=154bf284dbd9eed/shopdata/0005_DAHON+SPARES+AND+ACCESSORIES/0190_Dahon+Seat+Clamps=2C+Q-Release+=26amp=3B+Seatpost+Shims+etc/product_details.shopscript?article=0020_Dahon%2BTurtleneck%2BSeatpost%2BClamp%2B%2BSilver%2B%2B40mm%2B%3D28DAHTURTCLSIL40%3D29]]
!!Todo
!Avancement
!Description
Levier mini 15mm au lieu de 20 pour réduite la longueur du levier de direction
+5° au lieu de -5° pour accentuer le ratio Cintre-Roues
Point d'attache des rotules éloigné de l'axe de fusée favorable pour réduire levier
Fusées écartées favorables pour réduire le levier
Sur la base du cadre avant tel qu'il avait été conçu en premier lieu
Jeu de direction sans rabattage des roues.
!Nomenclature
<<tiddler AutoRefresh>><<tiddler [[FetNomenclature]] with:{{tiddler.title}}>>
/***
|Name|DisableWikiLinksPlugin|
|Source|http://www.TiddlyTools.com/#DisableWikiLinksPlugin|
|Version|1.6.0|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|selectively disable TiddlyWiki's automatic ~WikiWord linking behavior|
This plugin allows you to disable TiddlyWiki's automatic ~WikiWord linking behavior, so that WikiWords embedded in tiddler content will be rendered as regular text, instead of being automatically converted to tiddler links. To create a tiddler link when automatic linking is disabled, you must enclose the link text within {{{[[...]]}}}.
!!!!!Usage
<<<
You can block automatic WikiWord linking behavior for any specific tiddler by ''tagging it with<<tag excludeWikiWords>>'' (see configuration below) or, check a plugin option to disable automatic WikiWord links to non-existing tiddler titles, while still linking WikiWords that correspond to existing tiddlers titles or shadow tiddler titles. You can also block specific selected WikiWords from being automatically linked by listing them in [[DisableWikiLinksList]] (see configuration below), separated by whitespace. This tiddler is optional and, when present, causes the listed words to always be excluded, even if automatic linking of other WikiWords is being permitted.
Note: WikiWords contained in default ''shadow'' tiddlers will be automatically linked unless you select an additional checkbox option lets you disable these automatic links as well, though this is not recommended, since it can make it more difficult to access some TiddlyWiki standard default content (such as AdvancedOptions or SideBarTabs)
<<<
!!!!!Configuration
<<<
<<option chkDisableWikiLinks>> Disable ALL automatic WikiWord tiddler links
<<option chkAllowLinksFromShadowTiddlers>> ... except for WikiWords //contained in// shadow tiddlers
<<option chkDisableNonExistingWikiLinks>> Disable automatic WikiWord links for non-existing tiddlers
Disable automatic WikiWord links for words listed in: <<option txtDisableWikiLinksList>>
Disable automatic WikiWord links for tiddlers tagged with: <<option txtDisableWikiLinksTag>>
<<<
!!!!!Revisions
<<<
2008.07.22 [1.6.0] hijack tiddler changed() method to filter disabled wiki words from internal links[] array (so they won't appear in the missing tiddlers list)
2007.06.09 [1.5.0] added configurable txtDisableWikiLinksTag (default value: "excludeWikiWords") to allows selective disabling of automatic WikiWord links for any tiddler tagged with that value.
2006.12.31 [1.4.0] in formatter, test for chkDisableNonExistingWikiLinks
2006.12.09 [1.3.0] in formatter, test for excluded wiki words specified in DisableWikiLinksList
2006.12.09 [1.2.2] fix logic in autoLinkWikiWords() (was allowing links TO shadow tiddlers, even when chkDisableWikiLinks is TRUE).
2006.12.09 [1.2.1] revised logic for handling links in shadow content
2006.12.08 [1.2.0] added hijack of Tiddler.prototype.autoLinkWikiWords so regular (non-bracketed) WikiWords won't be added to the missing list
2006.05.24 [1.1.0] added option to NOT bypass automatic wikiword links when displaying default shadow content (default is to auto-link shadow content)
2006.02.05 [1.0.1] wrapped wikifier hijack in init function to eliminate globals and avoid FireFox 1.5.0.1 crash bug when referencing globals
2005.12.09 [1.0.0] initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.DisableWikiLinksPlugin= {major: 1, minor: 6, revision: 0, date: new Date(2008,7,22)};
if (config.options.chkDisableNonExistingWikiLinks==undefined) config.options.chkDisableNonExistingWikiLinks= false;
if (config.options.chkDisableWikiLinks==undefined) config.options.chkDisableWikiLinks=false;
if (config.options.txtDisableWikiLinksList==undefined) config.options.txtDisableWikiLinksList="DisableWikiLinksList";
if (config.options.chkAllowLinksFromShadowTiddlers==undefined) config.options.chkAllowLinksFromShadowTiddlers=true;
if (config.options.txtDisableWikiLinksTag==undefined) config.options.txtDisableWikiLinksTag="excludeWikiWords";
// find the formatter for wikiLink and replace handler with 'pass-thru' rendering
initDisableWikiLinksFormatter();
function initDisableWikiLinksFormatter() {
for (var i=0; i<config.formatters.length && config.formatters[i].name!="wikiLink"; i++);
config.formatters[i].coreHandler=config.formatters[i].handler;
config.formatters[i].handler=function(w) {
// supress any leading "~" (if present)
var skip=(w.matchText.substr(0,1)==config.textPrimitives.unWikiLink)?1:0;
var title=w.matchText.substr(skip);
var exists=store.tiddlerExists(title);
var inShadow=w.tiddler && store.isShadowTiddler(w.tiddler.title);
// check for excluded Tiddler
if (w.tiddler && w.tiddler.isTagged(config.options.txtDisableWikiLinksTag))
{ w.outputText(w.output,w.matchStart+skip,w.nextMatch); return; }
// check for specific excluded wiki words
var t=store.getTiddlerText(config.options.txtDisableWikiLinksList);
if (t && t.length && t.indexOf(w.matchText)!=-1)
{ w.outputText(w.output,w.matchStart+skip,w.nextMatch); return; }
// if not disabling links from shadows (default setting)
if (config.options.chkAllowLinksFromShadowTiddlers && inShadow)
return this.coreHandler(w);
// check for non-existing non-shadow tiddler
if (config.options.chkDisableNonExistingWikiLinks && !exists)
{ w.outputText(w.output,w.matchStart+skip,w.nextMatch); return; }
// if not enabled, just do standard WikiWord link formatting
if (!config.options.chkDisableWikiLinks)
return this.coreHandler(w);
// just return text without linking
w.outputText(w.output,w.matchStart+skip,w.nextMatch)
}
}
Tiddler.prototype.coreAutoLinkWikiWords = Tiddler.prototype.autoLinkWikiWords;
Tiddler.prototype.autoLinkWikiWords = function()
{
// if all automatic links are not disabled, just return results from core function
if (!config.options.chkDisableWikiLinks)
return this.coreAutoLinkWikiWords.apply(this,arguments);
return false;
}
Tiddler.prototype.disableWikiLinks_changed = Tiddler.prototype.changed;
Tiddler.prototype.changed = function()
{
this.disableWikiLinks_changed.apply(this,arguments);
// remove excluded wiki words from links array
var t=store.getTiddlerText(config.options.txtDisableWikiLinksList,"").readBracketedList();
if (t.length) for (var i=0; i<t.length; i++)
if (this.links.contains(t[i]))
this.links.splice(this.links.indexOf(t[i]),1);
};
//}}}
|Ref.|10npi050a|
|Qty|1|
|Material|7075 - T6 (SN)|
|Process|Tournage, perçage|
|Masse|17.57g|
|Volume|D45 L13|
|Finish|Anodisé argent --noir--|
|PU|1p ITI 26-07-10|
!Description
rev.a
BON POUR EXECUTION
general tolerance ±0.2mm ( 0.5mm )
tolérance générale 0,2
ajustements
Encoche pour rondelle frein
Écrou de compression du jeu de compression.
Actionné par la clef de boitier de pédalier Shimano D44.1 z16
!Todo
Bienvenu <<option txtUserName>> !
<<newJournal "YYYY-0MM-0DDT0hh:0mm" label:"+ Nouveau cadre blanc" >>
<<tiddler [[Templates]]>>
<<permaview>>
<<tiddler ToggleRightSidebar>>
<!--{{{-->
<div >
<span class='title' macro='view title'></span>
<span class='toolbar' macro='toolbar [[ToolbarCommands::EditToolbar]]'></span>
</div>
<div macro='tiddler "FetThumbnails" thumbnails with:{{tiddler.title}}'></div>
<div class='editor' macro='edit title'></div>
<div class='editor' macro='edit tags'></div>
<div macro='annotations'></div>
<div class='editor' macro='edit text'></div>
<div class='filesCabinet' macro='tiddler FetFiles with:{{tiddler.title}}'></div>
<!--}}}-->
|Ref.|10npi007a|
|Qty|1|
|Material|Alliage 1060|
|Process|Tournage|
|Masse|50.50g|
|Volume|D35 L140 d31.8mm|
|Finish|-|
|PU|1p ITI 26-07-10|
!Description
rev.a
BON POUR EXECUTION
general tolerance ±0.2mm ( 0.5mm )
Ajustement IT7
Gorges intérieurs pour indexer les billes.
Entretoise entre les paliers Igus.
!Todo
<<tiddler AutoRefresh>><<tiddler NewTaggedTiddler with: {{tiddler.title}} {{tiddler.title}} TemplateBlank>>
<<tiddler FetTop2000Tag with:{{tiddler.title}} {{tiddler.title}}>>
<<forEachTiddler
where
'tiddler.tags.contains("$1") && !tiddler.tags.contains("attachment")'
sortBy
'tiddler.title'
script
'
function initColumns() {
context["lines"] = [];
// Add one array to context.lines per row/line you will generate
// If you want to have an initial "header" column add its items here
// TODO: Modify this according to your need
context.lines.push(["!Tiddler"]);
context.lines.push(["!~Abstract"]);
context.lines.push(["!~Sortie"]);
// No output yet. Postponed to the end.
return "";
}
function addColumn(tiddler) {
// TODO: Modify this according to your need
context.lines[0].push(tiddler.title);
context.lines[1].push(store.getTiddlerSlice(tiddler.title,"Abstract"));
context.lines[2].push(store.getTiddlerSlice(tiddler.title,"Sortie"));
// No output yet. Postponed to the end.
return "";
}
function getTransposedTable() {
var s = "";
for (var y = 0; y < context.lines.length; y++) {
var line = context.lines[y]
for (var x = 0; x < line.length; x++) {
s += "|"+line[x];
}
s += "|\n";
}
return s;
}'
write
'addColumn(tiddler)'
begin
'initColumns()'
end
'getTransposedTable()'
>>
See also: [[Create a table with one row per tiddler ("Horizontal Report")]]
<<forEachTiddler
where
'tiddler.tags.contains("$1") && tiddler.title!="$2" && !tiddler.tags.contains("hidden") && !tiddler.tags.contains("Trash")'
sortBy
'tiddler.title'
script
'
function initColumns() {
context["lines"] = [];
// Add one array to context.lines per row/line you will generate
// If you want to have an initial "header" column add its items here
// TODO: Modify this according to your need
context.lines.push(["!Nom "]);
context.lines.push([" Referent"]);
context.lines.push([" Accroche"]);
context.lines.push(["!Stratégie "]);
context.lines.push([" Mise sur le marche"]);
context.lines.push([" Priorite"]);
context.lines.push([" Avancement"]);
context.lines.push([" Attrait utilisateur"]);
context.lines.push([" Attrait Look"]);
context.lines.push([" Frein utilisateur"]);
context.lines.push([" Frein Look"]);
context.lines.push(["!Marketing "]);
context.lines.push([" Mix Marketing"]);
context.lines.push([" Timing"]);
context.lines.push(["!Ingénierie "]);
context.lines.push([" Valeurs"]);
// No output yet. Postponed to the end.
return "";
}
function addColumn(tiddler) {
// TODO: Modify this according to your need
context.lines[0].push("![["+tiddler.title+"]]");
context.lines[1].push(store.getTiddlerText(tiddler.title+"::Referent",""));
context.lines[2].push(store.getTiddlerText(tiddler.title+"::Accroche",""));
context.lines[3].push("![["+tiddler.title+"]]");
context.lines[4].push(store.getTiddlerText(tiddler.title+"::Mise_sur_le_marche",""));
context.lines[5].push(store.getTiddlerText(tiddler.title+"::Priorite",""));
context.lines[6].push("<<tiddler [["+tiddler.title+"##Avancement]]$))");
context.lines[7].push("<<tiddler [["+tiddler.title+"##Attraits utilisateur]]$))");
context.lines[8].push("<<tiddler [["+tiddler.title+"##Attraits Look]]$))");
context.lines[9].push("<<tiddler [["+tiddler.title+"##Freins utilisateur]]$))");
context.lines[10].push("<<tiddler [["+tiddler.title+"##Freins Look]]$))");
context.lines[11].push("![["+tiddler.title+"]]");
context.lines[12].push(store.getTiddlerText(tiddler.title+"::Mix_Marketing",""));
context.lines[13].push(store.getTiddlerText(tiddler.title+"::Timing",""));
context.lines[14].push("![["+tiddler.title+"]]");
context.lines[15].push(store.getTiddlerText(tiddler.title+"::Valeurs",""));
// No output yet. Postponed to the end.
return "";
}
function getTransposedTable() {
var s = "";
for (var y = 0; y < context.lines.length; y++) {
var line = context.lines[y]
for (var x = 0; x < line.length; x++) {
s += "|"+line[x];
}
s += "|\n";
}
return s;
}'
write
'addColumn(tiddler)'
begin
'initColumns()'
end
'getTransposedTable()'
>>
<<forEachTiddler
where
'tiddler.tags.contains("$1") && !tiddler.tags.contains("attachment")'
sortBy
tiddler.modified
descending
write
'((index == 0) ? "" : "\n")+"|[["+tiddler.title+"|"+tiddler.title+"]]|<<tiddler [["+tiddler.title+"::Email]]$))<br$)<<tiddler [["+tiddler.title+"::Phone]]$))<br$)<<tiddler [["+tiddler.title+"::Website]]$))|<<tiddler [["+tiddler.title+"##Notes]]$))|"'
>>
<<forEachTiddler
where
'tiddler.tags.contains("$1") && tiddler.tags.contains("$2") && !tiddler.tags.contains("attachment")'
sortBy
tiddler.modified
descending
write
'((index == 0) ? "" : "\n")+"|[["+tiddler.title+"|"+tiddler.title+"]]|<<tiddler [["+tiddler.title+"::Email]]$))<br$)<<tiddler [["+tiddler.title+"::Phone]]$))<br$)<<tiddler [["+tiddler.title+"::Website]]$))|<<tiddler [["+tiddler.title+"##Notes]]$))|"'
>>
<<forEachTiddler
where
'tiddler.tags.contains("$1") && tiddler.tags.contains("$2") && !tiddler.tags.contains("attachment")'
sortBy
tiddler.title
ascending
write
'((index == 0) ? "" : "\n")+"|[["+tiddler.title+"|"+tiddler.title+"]]|<<tiddler [["+tiddler.title+"::Title]]$))<br$)<<tiddler [["+tiddler.title+"::Company]]$))|<<tiddler [["+tiddler.title+"::Email]]$))<br$)<<tiddler [["+tiddler.title+"::Phone]]$))<br$)<<tiddler [["+tiddler.title+"::Website]]$))|"'
>>
<<forEachTiddler
where
'tiddler.tags.contains("$1") && !tiddler.tags.contains("attachment")'
sortBy
tiddler.modified
descending
write
'((index == 0) ? "|borderless|k\n" : "\n")+"|\>|[["+tiddler.title+"|"+tiddler.title+"]]|<<tiddler FetThumbnails1 with: [["+tiddler.title+"]]\>\>|h\n|<<tiddler [["+tiddler.title+"##Todo]]$))|<<tiddler [["+tiddler.title+"##Description]]$))|~|"'
>>
<<forEachTiddler
where
'tiddler.tags.contains("$1") && tiddler.tags.contains("$2") && !tiddler.tags.contains("attachment") && !tiddler.tags.contains("Trash")'
sortBy
tiddler.modified
descending
write
'((index == 0) ? "|borderless|k\n|||Todo|h\n" : "\n")+"|[["+tiddler.title+"|"+tiddler.title+"]]<br$)<<tiddler FetThumbnails1 with: [["+tiddler.title+"]]\>\>|<<tiddler [["+tiddler.title+"##Description]]$))|<<tiddler [["+tiddler.title+"##Todo]]$))|"'
>>
<<forEachTiddler
where
'tiddler.tags.contains("$1") && tiddler.tags.contains("$2") && !tiddler.tags.contains("attachment") && !tiddler.tags.contains("Produits commerciaux") && !tiddler.tags.contains("Contacts") && !tiddler.tags.contains("Journal") && !tiddler.tags.contains("Trash")'
sortBy
tiddler.modified
descending
write
'((index == 0) ? "|borderless|k\n" : "\n")+"|\>|[["+tiddler.title+"|"+tiddler.title+"]]<br$)<<tiddler FetThumbnails1 with: [["+tiddler.title+"]]\>\>|<<tiddler [["+tiddler.title+"##Description]]$))|<<tiddler [["+tiddler.title+"##Todo]]$))|"'
>>
<<tiddler NewTaggedTiddler with: [[$1]] [[$1]] TemplatePart>>
<<forEachTiddler
where
'tiddler.tags.contains("$1") && tiddler.tags.contains("$2") && !tiddler.tags.contains("attachment")'
sortBy
tiddler.title
ascending
write
'((index == 0) ? "|Nom|Ref.|Qty|Material|Process|Masse|Finish|PU|Fichiers|h\n" : "\n")+"|[["+tiddler.title+"|"+tiddler.title+"]]|<<tiddler [["+tiddler.title+"::Ref.]]$))|<<tiddler [["+tiddler.title+"::Qty]]$))|<<tiddler [["+tiddler.title+"::Material]]$))|<<tiddler [["+tiddler.title+"::Process]]$))|<<tiddler [["+tiddler.title+"::Masse]]$))|<<tiddler [["+tiddler.title+"::Finish]]$))|<<tiddler [["+tiddler.title+"::PU]]$))|<<tiddler FetPlansTagTag with: [["+tiddler.title+"]][["+tiddler.title+"]]\>\>|"'"'
>>
<<tiddler AutoRefresh>><<forEachTiddler
where
'tiddler.tags.contains("attachment") && tiddler.tags.contains("$1") && !tiddler.text.contains("image")'
sortBy
tiddler.modified
descending
write
'"[["+tiddler.title+"|"+tiddler.title+"]] ("+tiddler.modified.formatString("YYYY-0MM-0DD")+")\n"'
>>
<<tiddler AutoRefresh>><<forEachTiddler
where
'tiddler.tags.contains("attachment") && tiddler.tags.contains("$1") && tiddler.tags.contains("$2") && !tiddler.text.contains("image")'
sortBy
tiddler.modified
descending
write
'((index == 0) ? "" : "\n")+"[["+tiddler.title+"|"+tiddler.title+"]]"'
>>
<<forEachTiddler
where
'tiddler.tags.contains("$1") && tiddler.tags.contains("$2") && !tiddler.tags.contains("attachment") && !tiddler.tags.contains("trash")'
sortBy
tiddler.modified
descending
write
'((index == 0) ? "|borderless|k\n|||Todo|h\n" : "\n")+"|[["+tiddler.title+"|"+tiddler.title+"]]<br$)<<tiddler [["+tiddler.title+"##Ordre du jour]]$))|<<tiddler [["+tiddler.title+"##Description]]$))|<<tiddler [["+tiddler.title+"##Todo]]$))|"'
>>
<<forEachTiddler
where
'tiddler.tags.contains("$1") && tiddler.tags.contains("$2") && !tiddler.tags.contains("attachment")'
sortBy
tiddler.title
ascending
write
'((index == 0) ? "" : "\n")+"*[["+tiddler.title+"|"+tiddler.title+"]]"'
>>
<<forEachTiddler
where
'tiddler.tags.contains("$1") && tiddler.tags.contains("$2") && !tiddler.tags.contains("attachment") && !tiddler.tags.contains("trash")'
sortBy
tiddler.modified
descending
write
'((index == 0) ? "" : " - ")+"[["+tiddler.title+"|"+tiddler.title+"]]"'
>>
<<forEachTiddler
where
'tiddler.text.contains("$1") && !tiddler.tags.contains("attachment")'
sortBy
tiddler.modified
descending
write
'((index == 0) ? "" : "\n")+"*[["+tiddler.title+"|"+tiddler.title+"]]"'
>>
<<forEachTiddler
where
'tiddler.tags.contains("$1")'
sortBy
tiddler.title
ascending
write
'((index == 0) ? "|borderless|k\n" : "\n")+"| ![["+tiddler.title+"]]|<<tiddler NewTaggedTiddler with: [["+tiddler.title+"]] [[Top 2000]] TemplateTop2000$))|<<tiddler FetListDash with:[["+tiddler.title+"]] [["+tiddler.title+"]]$))|"'
>>
<<tiddler NewTaggedTiddler with: [[$1]] [[$1]] TemplatePart>>
<<forEachTiddler
where
'tiddler.tags.contains("$1") && !tiddler.tags.contains("attachment") && !tiddler.tags.contains("Fonctions")'
sortBy
tiddler.title
ascending
write
'((index == 0) ? "| |Ref.|Qty|Material|Process|Masse|Volume|Finish|PU|Files|h\n" : "\n")+"|[["+tiddler.title+"|"+tiddler.title+"]]|<<tiddler [["+tiddler.title+"::Ref.]]$))|<<tiddler [["+tiddler.title+"::Qty]]$))|<<tiddler [["+tiddler.title+"::Material]]$))|<<tiddler [["+tiddler.title+"::Process]]$))|<<tiddler [["+tiddler.title+"::Masse]]$))|<<tiddler [["+tiddler.title+"::Volume]]$))|<<tiddler [["+tiddler.title+"::Finish]]$))|<<tiddler [["+tiddler.title+"::PU]]$))|<<tiddler FetFilesTagTag with: [["+tiddler.title+"]][["+tiddler.title+"]]\>\>|"'"'
>>
<<forEachTiddler
where
'tiddler.tags.contains("$1") && tiddler.tags.contains("$2") && !tiddler.tags.contains("attachment") && !tiddler.tags.contains("Fonctions") && !tiddler.tags.contains("Trash")'
sortBy
tiddler.title
ascending
write
'((index == 0) ? "|Nom| | | | |Ref.|Qty|Material|Process|Masse|Finish|PU|Fichiers|h\n" : "\n")+"|[["+tiddler.title+"|"+tiddler.title+"]]| | | | |<<tiddler [["+tiddler.title+"::Ref.]]$))|<<tiddler [["+tiddler.title+"::Qty]]$))|<<tiddler [["+tiddler.title+"::Material]]$))|<<tiddler [["+tiddler.title+"::Process]]$))|<<tiddler [["+tiddler.title+"::Masse]]$))|<<tiddler [["+tiddler.title+"::Finish]]$))|<<tiddler [["+tiddler.title+"::PU]]$))|<<tiddler FetPlansTagTag with: [["+tiddler.title+"]][["+tiddler.title+"]]\>\>|\n<<tiddler FetNomenclatureTreeTagTag2 with: [["+tiddler.title+"]][["+tiddler.title+"]]\>\>"'
>>
<<forEachTiddler
where
'tiddler.tags.contains("$1") && tiddler.tags.contains("$2") && !tiddler.tags.contains("attachment") && !tiddler.tags.contains("Fonctions") && !tiddler.tags.contains("Trash")'
sortBy
tiddler.title
ascending
write
'((index == 0) ? "\n" : "\n")+"| |[["+tiddler.title+"|"+tiddler.title+"]]| | | |<<tiddler [["+tiddler.title+"::Ref.]]$))|<<tiddler [["+tiddler.title+"::Qty]]$))|<<tiddler [["+tiddler.title+"::Material]]$))|<<tiddler [["+tiddler.title+"::Process]]$))|<<tiddler [["+tiddler.title+"::Masse]]$))|<<tiddler [["+tiddler.title+"::Finish]]$))|<<tiddler [["+tiddler.title+"::PU]]$))|<<tiddler FetPlansTagTag with: [["+tiddler.title+"]][["+tiddler.title+"]]\>\>|\n<<tiddler FetNomenclatureTreeTagTag3 with: [["+tiddler.title+"]][["+tiddler.title+"]]\>\>"'
>>
<<forEachTiddler
where
'tiddler.tags.contains("$1") && tiddler.tags.contains("$2") && !tiddler.tags.contains("attachment") && !tiddler.tags.contains("Fonctions") && !tiddler.tags.contains("Trash")'
sortBy
tiddler.title
ascending
write
'((index == 0) ? "\n" : "\n")+"| | |[["+tiddler.title+"|"+tiddler.title+"]]| | |<<tiddler [["+tiddler.title+"::Ref.]]$))|<<tiddler [["+tiddler.title+"::Qty]]$))|<<tiddler [["+tiddler.title+"::Material]]$))|<<tiddler [["+tiddler.title+"::Process]]$))|<<tiddler [["+tiddler.title+"::Masse]]$))|<<tiddler [["+tiddler.title+"::Finish]]$))|<<tiddler [["+tiddler.title+"::PU]]$))|<<tiddler FetPlansTagTag with: [["+tiddler.title+"]][["+tiddler.title+"]]\>\>|\n<<tiddler FetNomenclatureTreeTagTag4 with: [["+tiddler.title+"]][["+tiddler.title+"]]\>\>"'
>>
<<tiddler AutoRefresh>><<forEachTiddler
where
'tiddler.tags.contains("attachment") && tiddler.tags.contains("$1") && tiddler.tags.contains("$2") && !tiddler.text.contains("image") && (tiddler.text.contains("pdf") || tiddler.text.contains("zip"))'
sortBy
tiddler.modified
descending
write
'((index == 0) ? "" : "\n")+"[["+tiddler.title+"|"+tiddler.title+"]]"'
>>
<<forEachTiddler
where
'tiddler.tags.contains("$1") && !tiddler.tags.contains("attachment")'
sortBy
tiddler.modified
descending
write
'((index == 0) ? "" : "\n")+"|[["+tiddler.title+"|"+tiddler.title+"]]|<<tiddler [["+tiddler.title+"::Email]]$))<br$)<<tiddler [["+tiddler.title+"::Phone]]$))<br$)<<tiddler [["+tiddler.title+"::Website]]$))|<<tiddler [["+tiddler.title+"##Notes]]$))|<<tiddler [["+tiddler.title+"##Tracking]]$))|"'
>>
<<forEachTiddler
where
'tiddler.tags.contains("$1") && tiddler.tags.contains("$2") && !tiddler.tags.contains("attachment")'
sortBy
tiddler.modified
descending
write
'((index == 0) ? "|!|!|!Notes|!Todo|\n" : "\n")+"|[["+tiddler.title+"|"+tiddler.title+"]]<br$)<<tiddler [["+tiddler.title+"::CA]]$))<br$)<<tiddler [["+tiddler.title+"::Effectifs]]$))<br$)<<tiddler [["+tiddler.title+"::Capital]]$))<br$)<<tiddler [["+tiddler.title+"::Créé]]$))|<<tiddler [["+tiddler.title+"::Email]]$))<br$)<<tiddler [["+tiddler.title+"::Phone]]$))<br$)<<tiddler [["+tiddler.title+"::Website]]$))|<<tiddler [["+tiddler.title+"##Notes]]$))|<<tiddler [["+tiddler.title+"##Todo]]$))<br$)<<tiddler [["+tiddler.title+"##Avancement]]$))|"'
>>
<<tiddler AutoRefresh>><<forEachTiddler
where
'tiddler.tags.contains("attachment") && tiddler.tags.contains("$1") && tiddler.text.contains("image") '
sortBy
tiddler.created
descending
write
'"[img(,5em+)["+tiddler.title+"]] "'>>
<<forEachTiddler
where
'tiddler.tags.contains("attachment") && tiddler.tags.contains("$1") && tiddler.text.contains("image") '
sortBy
tiddler.created
descending
write
'((index == 0) ? "[img(,5em+)["+tiddler.title+"]] " : "")'>>
<<forEachTiddler
where
'tiddler.tags.contains("attachment") && tiddler.tags.contains("$1") && tiddler.text.contains("image") '
sortBy
tiddler.created
descending
write
'((index <= 2) ? "[img(,5em+)["+tiddler.title+"]] " : "")'>>
<<forEachTiddler
where
'tiddler.tags.contains("$1") && tiddler.tags.contains("$2") && !tiddler.tags.contains("attachment")'
sortBy
tiddler.title
ascending
write
'((index == 0) ? "!$1\n" : "\n")+"*[["+tiddler.title+"|"+tiddler.title+"]]"'
>>
<<forEachTiddler
where
'tiddler.tags.contains("$1") && tiddler.tags.contains("$2") && !tiddler.tags.contains("attachment")'
sortBy
tiddler.modified
descending
write
'((index == 0) ? "|!|!Todo|!Avancement|!|\n" : "\n")+"|[["+tiddler.title+"|"+tiddler.title+"]]|<<tiddler [["+tiddler.title+"##Todo]]$))|<<tiddler [["+tiddler.title+"##Avancement]]$))|<<tiddler FetThumbnails3 with: [["+tiddler.title+"]]\>\>|"'
>>
<<forEachTiddler
where
'tiddler.text.contains("$1") &&
!tiddler.tags.contains("attachment") &&
!tiddler.title.contains("ImportedTiddlers")'
sortBy
tiddler.modified
descending
write
'((index == 0) ? "|!|!Todo|\n" : "\n")+"|[["+tiddler.title+"|"+tiddler.title+"]]|<<tiddler [["+tiddler.title+"##Todo]]$))|"'
>>
<<forEachTiddler
where
'tiddler.tags.contains("$1") && tiddler.tags.contains("$2") && !tiddler.tags.contains("trash") && !tiddler.tags.contains("attachment")'
sortBy
tiddler.modified
descending
write
'((index == 0) ? "|borderless|k\n|||Plus|Moins|h\n" : "\n")+"|[["+tiddler.title+"|"+tiddler.title+"]]<br$)<<tiddler FetThumbnails3 with: [["+tiddler.title+"]]\>\>|<<tiddler [["+tiddler.title+"::Accroche]]$))<br$)<<tiddler [["+tiddler.title+"::Referent]]$))|<<tiddler [["+tiddler.title+"##Plus]]$))<<tiddler [["+tiddler.title+"##Attraits utilisateur]]$))<<tiddler [["+tiddler.title+"##Attraits porteur]]$))<<tiddler [["+tiddler.title+"##Attraits partenaire]]$))|<<tiddler [["+tiddler.title+"##Moins]]$))<<tiddler [["+tiddler.title+"##Freins utilisateur]]$))<<tiddler [["+tiddler.title+"##Freins porteur]]$))<<tiddler [["+tiddler.title+"##Freins partenaire]]$))|"'
>>
{{twocolumns{<<forEachTiddler
where
'tiddler.tags.contains("attachment")'
sortBy
tiddler.created
descending
write
'(index < 50) ? "[["+tiddler.title+"]] ("+tiddler.created.formatString("YYYY-0MM-0DD")+")\n" : ""'
>>}}}
/***
|Name|FileDropPlugin|
|Source|http://www.TiddlyTools.com/#FileDropPlugin|
|Version|2.1.4|
|Author|BradleyMeck and Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|drag-and-drop files/directories to create tiddlers|
''requires FireFox or another Mozilla-compatible browser.''
!!!!!Usage
<<<
This plugin automatically creates tiddlers from files that are dropped onto an open TiddlyWiki document. You can drop multiple selected files and/or folders to create many tiddlers at once. New tiddler titles are created using the filename of each dropped file (i.e., omitting the path). If a title is already in use, you are prompted to enter a new title for that file. If you drop a folder, you will be asked if you want to create a simple 'directory list' of files in a single tiddler or create one tiddler for each file in that folder.
By default, it is assumed that all dropped files contain text. However, if [[AttachFilePlugin]], [[AttachFilePluginFormatters]] and [[AttachFileMIMETypes]] are installed, then you can drop ''//binary data files//'' as well as text files. If the MIME type of a dropped file is not "text/plain", then AttachFilePlugin is used to create an 'attachment' tiddler, rather than creating a simple text tiddler.
When creating text tiddlers, you can embed a //link// to the original external file at the top of the new tiddler, in addition to (or instead of) the text content itself. The format for this link (see Configuration, below) uses embedded ''//replacement markers//'' that allow you to generate a variety of wiki-formatted output, where:
*%0 = filename (without path)
*%1 = local """file://...""" URL
*%2 = local path and filename (OS-native format)
*%3 = relative path (if subdirectory of current document directory)
*%4 = file size
*%5 = file date
*%6 = current date
*%7 = current ~TiddlyWiki username
*\n = newline
By default, the link format uses the filename (%0) and local URL (%1), enclosed within a //hidden section// syntax, like this:
{{{
/%
!link
[[%0|%1]]
!end
%/
}}}
This permits the link to be embedded along with the text content, without changing the appearance of that content when the tiddler is viewed. To display the link in your tiddler content, use:
{{{
<<tiddler TiddlerName##link>>
}}}
<<<
!!!!!Configuration
<<<
__FileDropPlugin options:__
<<option chkFileDropContent>>Copy file content into tiddlers if smaller than: <<option txtFileDropDataLimit>> bytes
//(note: excess text content will be truncated, oversized binary files will skipped, 0=no limit)//
<<option chkFileDropLink>>Generate external links to files, using this format:{{editor{<html><nowiki><textarea rows="4" onchange="
config.macros.option.propagateOption('txtFileDropLinkFormat','value',this.value.escapeLineBreaks(),'input');
"></textarea></html><<tiddler {{
var ta=place.lastChild.getElementsByTagName('textarea')[0];
var v=config.options.txtFileDropLinkFormat.unescapeLineBreaks();
ta.value=v;
"";}}>>}}}<<option chkFileDropTrimFilename>>Omit file extensions from tiddler titles
<<option chkFileDropDisplay>>Automatically display newly created tiddlers
Tag newly created tiddlers with: <<option txtFileDropTags>>
__FileDropPlugin+AttachFilePlugin options:__ //(binary file data as encoded 'base64' text)//
<<option chkFileDropAttachLocalLink>> attachment includes reference to local path/filename
>Note: if the plugin does not seem to work, enter ''about:config'' in the Firefox address bar, and make sure that {{{signed.applets.codebase_principal_support}}} is set to ''true''
<<<
!!!!!Examples (custom handler functions)
<<<
Adds a single file with confirmation and prompting for title:
{{{
config.macros.fileDrop.addEventListener('application/x-moz-file',
function(nsiFile) {
var msg='You have dropped the file:\n'
+nsiFile.path+'\n'
+'onto the page, it will be imported as a tiddler. Is that ok?'
if(confirm(msg)) {
var newDate = new Date();
var title = prompt('what would you like to name the tiddler?');
store.saveTiddler(title,title,loadFile(nsiFile.path),config.options.txtUserName,newDate,[]);
}
return true;
});
}}}
Adds a single file without confirmation, using path/filename as tiddler title:
{{{
config.macros.fileDrop.addEventListener('application/x-moz-file',
function(nsiFile) {
var newDate = new Date();
store.saveTiddler(nsiFile.path,nsiFile.path,loadFile(nsiFile.path),config.options.txtUserName,newDate,[]);
story.displayTiddler(null,nsiFile.path)
return true;
});
}}}
<<<
!!!!!Revisions
<<<
2010.03.06 2.1.4 added event listener for 'dragover' (for FireFox 3.6+)
2009.10.10 2.1.3 fixed IE code error
2009.10.08 2.1.2 fixed chkFileDropContent bypass handling for binary attachments
2009.10.07 2.1.0 added chkFileDropContent and chkFileDropLink/txtFileDropLinkFormat
2009.08.19 2.0.0 fixed event listener registration for FireFox 3.5+. Also, merged with FileDropPluginConfig, with code cleanup/reduction
2008.08.11 1.5.1 added chkFileDropAttachLocalLink option to allow suppression of local path/file link
2007.xx.xx *.*.* add suspend/resume of notifications to improve performance when multiple files are handled
2007.01.01 0.9.9 extensions for AttachFilePlugin
2006.11.04 0.1.1 initial release by Bradley Meck
<<<
!!!!!Code
***/
//{{{
version.extensions.FileDropPlugin={major:2, minor:1, revision:4, date: new Date(2010,3,6)};
config.macros.fileDrop = {
customDropHandlers: [],
addEventListener: function(paramflavor,func,inFront) {
var obj={}; obj.flavor=paramflavor; obj.handler=func;
if (!inFront) this.customDropHandlers.push(obj);
else this.customDropHandlers.shift(obj);
},
dragDropHandler: function(evt) {
netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
var dragService = Components.classes['@mozilla.org/widget/dragservice;1'].getService(Components.interfaces.nsIDragService);
var dragSession = dragService.getCurrentSession();
var transferObject = Components.classes['@mozilla.org/widget/transferable;1'].createInstance();
transferObject = transferObject.QueryInterface(Components.interfaces.nsITransferable);
transferObject.addDataFlavor('application/x-moz-file');
var numItems = dragSession.numDropItems;
if (numItems>1) {
clearMessage();
displayMessage('Reading '+numItems+' files...');
store.suspendNotifications();
}
for (var i = 0; i < numItems; i++) {
dragSession.getData(transferObject, i);
var dataObj = {};
var dropSizeObj = {};
for(var ind=0; ind<config.macros.fileDrop.customDropHandlers.length; ind++) {
var item = config.macros.fileDrop.customDropHandlers[ind];
if(dragSession.isDataFlavorSupported(item.flavor)) {
transferObject.getTransferData(item.flavor, dataObj, dropSizeObj);
var droppedFile = dataObj.value.QueryInterface(Components.interfaces.nsIFile);
var result = item.handler.call(item,droppedFile);
evt.stopPropagation();
evt.preventDefault();
if (result) break;
}
}
}
if (numItems>1) {
store.resumeNotifications();
store.notifyAll();
displayMessage(numItems+' files have been processed');
}
}
}
//}}}
/***
!!!!!window event handlers
***/
//{{{
if(!window.event) {
window.addEventListener('dragdrop', // FireFox3.1-
config.macros.fileDrop.dragDropHandler, true);
window.addEventListener('drop', // FireFox3.5+
config.macros.fileDrop.dragDropHandler, true);
window.addEventListener('dragover', // FireFox3.6+
function(e){e.stopPropagation();e.preventDefault();}, true);
}
//}}}
/***
!!!!!handler for files, directories and binary attachments (see [[AttachFilePlugin]])
***/
//{{{
var defaults={
chkFileDropDisplay: true,
chkFileDropTrimFilename: false,
chkFileDropContent: true,
chkFileDropLink: true,
txtFileDropLinkFormat: '/%\\n!link\\n[[%0|%1]]\\n!end\\n%/',
txtFileDropDataLimit: '32768',
chkFileDropAttachLocalLink: true,
txtFileDropTags: ''
};
for (var id in defaults) if (config.options[id]===undefined)
config.options[id]=defaults[id];
config.macros.fileDrop.addEventListener('application/x-moz-file',function(nsiFile) {
var co=config.options; // abbrev
var header='Index of %0\n^^(as of %1)^^\n|!filename| !size | !modified |\n';
var item='|[[%0|%1]]| %2|%3|\n';
var footer='Total of %0 bytes in %1 files\n';
var now=new Date();
var files=[nsiFile];
if (nsiFile.isDirectory()) {
var folder=nsiFile.directoryEntries;
var files=[];
while (folder.hasMoreElements()) {
var f=folder.getNext().QueryInterface(Components.interfaces.nsILocalFile);
if (f instanceof Components.interfaces.nsILocalFile && !f.isDirectory()) files.push(f);
}
var msg=nsiFile.path.replace(/\\/g,'/')+'\n\n';
msg+='contains '+files.length+' files... ';
msg+='select OK to attach all files or CANCEL to create a list...';
if (!confirm(msg)) { // create a list in a tiddler
var title=nsiFile.leafName; // tiddler name is last directory name in path
while (title && title.length && store.tiddlerExists(title)) {
if (confirm(config.messages.overwriteWarning.format([title]))) break;
title=prompt('Enter a new tiddler title',nsiFile.path.replace(/\\/g,'/'));
}
if (!title || !title.length) return true; // cancelled
var text=header.format([nsiFile.path.replace(/\\/g,'/'),now.toLocaleString()]);
var total=0;
for (var i=0; i<files.length; i++) { var f=files[i];
var name=f.leafName;
if (co.chkFileDropTrimFilename)
{ var p=name.split('.'); if (p.length>1) p.pop(); name=p.join('.'); }
var path='file:///'+f.path.replace(/\\/g,'/');
var size=f.fileSize; total+=size;
var when=new Date(f.lastModifiedTime).formatString('YYYY.0MM.0DD 0hh:0mm:0ss');
text+=item.format([name,path,size,when]);
}
text+=footer.format([total,files.length]);
var newtags=co.txtFileDropTags?co.txtFileDropTags.readBracketedList():[];
store.saveTiddler(null,title,text,co.txtUserName,now,newtags);
if (co.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 (co.chkFileDropTrimFilename)
{ var p=title.split('.'); if (p.length>1) p.pop(); title=p.join('.'); }
var name=file.leafName;
var path=file.path;
var url='file:///'+path.replace(/\\/g,'/');
var size=file.fileSize;
var when=new Date(file.lastModifiedTime);
var now=new Date();
var who=config.options.txtUserName;
var h=document.location.href;
var cwd=getLocalPath(decodeURIComponent(h.substr(0,h.lastIndexOf('/')+1)));
var relpath=path.startsWith(cwd)?'./'+path.substr(cwd.length):path;
while (title && title.length && store.tiddlerExists(title)) {
if (confirm(config.messages.overwriteWarning.format([title]))) break;
title=prompt('Enter a new tiddler title',path.replace(/\\/g,'/'));
}
if (!title || !title.length) continue; // cancelled
if (config.macros.attach) {
type=config.macros.attach.getMIMEType(name,'');
if (!type.length)
type=prompt('Unknown file type. Enter a MIME type','text/plain');
if (!type||!type.length) continue; // cancelled
}
var newtags=co.txtFileDropTags?co.txtFileDropTags.readBracketedList():[];
if (type=='text/plain' || !co.chkFileDropContent) {
var txt=''; var fmt=co.txtFileDropLinkFormat.unescapeLineBreaks();
if (co.chkFileDropLink) txt+=fmt.format([name,url,path,relpath,size,when,now,who]);
if (co.chkFileDropContent) {
var out=loadFile(path); var lim=co.txtFileDropDataLimit;
txt+=co.txtFileDropDataLimit?out.substr(0,lim):out;
if (size>lim) txt+='\n----\nfilesize ('+size+')'
+' is larger than FileDrop limit ('+lim+')...\n'
+'additional content has been omitted';
}
store.saveTiddler(null,title,txt,co.txtUserName,now,newtags);
} else {
var embed=co.chkFileDropContent
&& (!co.txtFileDropDataLimit||size<co.txtFileDropDataLimit);
newtags.push('attachment'); newtags.push('excludeMissing');
config.macros.attach.createAttachmentTiddler(path,
now.formatString(config.macros.timeline.dateFormat),
'attached by FileDropPlugin', newtags, title,
embed, co.chkFileDropAttachLocalLink, false,
relpath, '', type,!co.chkFileDropDisplay);
}
if (co.chkFileDropDisplay) story.displayTiddler(null,title);
}
if (files.length>1) { store.resumeNotifications(); store.notifyAll(); }
return true;
})
//}}}
Title: TimesNewRoman
Text: TimesNewRoman
System: TimesNewRoman
/***
|''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.
***/
|Ref.|10npi010c|
|Qty|1+1sym|
|Material|6061|
|Process|Soudure|
|Masse|124g|
|Volume| |
|Finish|painted black|
|PU|?@ArtCadre|
!!Todo
Re-souder JBo > CBr
!!Avancement
!Description
Le jeu roue-rotule est trop faible 2mm sur le levier 2mm sur la roue
rev.c
rev.b
!Nomenclature
<<tiddler AutoRefresh>><<tiddler [[FetNomenclature]] with:{{tiddler.title}}>>
|Ref.|11npi011|
|Qty||
|Material|carton ep3|
|Process||
|Masse||
|Volume||
|Finish||
|PU||
!!Todo
!!Avancement
!Nomenclature
<<tiddler AutoRefresh>><<tiddler [[FetNomenclature]] with:{{tiddler.title}}>>
|Ref.||
|Qty|1|
|Material|Inox|
|Process|Standard|
|Masse|2g|
|Volume| |
|Finish| |
|PU| |
!Description
3.6 x 31.6 mm
http://www.bene-inox.com/visserie-raccord-robinetterie-tuyauterie-inox/visserie-boulonnerie-inox/bene_bv/bene_bv/s-18/218702/
!Todo
/***
|Name|GridPlugin|
|Source|http://www.TiddlyTools.com/#GridPlugin|
|Documentation|http://www.TiddlyTools.com/#GridPluginInfo|
|Version|2.0.6|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1.3|
|Type|plugin|
|Description|Display/edit slices, sections and fields in a grid (table) for a 'birds-eye' view of your document|
!!!!!Documentation
>see [[GridPluginInfo]]
!!!!!Revisions
<<<
2009.09.26 [2.0.6] fixed setSlice() for existing slices with empty values
|please see [[GridPluginInfo]] for additional revision details|
2007.01.30 [0.0.1] started
<<<
!!!!!Code
***/
//{{{
version.extensions.GridPlugin= {major: 2, minor: 0, revision: 6, date: new Date(2009,9,26)};
config.macros.grid= {
sizeSliceName: 'TiddlerSize', // fake slice to show # of bytes in tiddler
noColsMsg: '@@display:block;border:1px solid;there are no columns to display@@',
showHeaders:'►►►',
showHeadersTip:'show column headings',
hideHeaders:'◄◄◄',
hideHeadersTip:'hide column headings',
slicesRE: /(?:^\|\s*[\'\/]*~?(\w+)\:?[\'\/]*\s*\|\s*(.*?)\s*\|$)/gm,
handler: function(place,macroName,params,wikifier,paramString,tiddler) {
var edit=params.contains('edit') && !readOnly; // no editing if readOnly
var wiki=params.contains('wikify');
var inline=params.contains('inline');
if (inline) var heads=true;
var all=params.contains('all');
params=paramString.parseParams('name',null,true,false,true); // for NAMED VALUES
var filter=getParam(params,'filter',''); // core or MatchTagsPlugin tag filter syntax
if (filter.length && !filter.startsWith('[tag[')) filter='[tag['+filter+']]';
var tags=this.getList(getParam(params,'tags'),true); // older "match at least one tag" syntax
if (tags.length) filter='[tag['+tags.join(']][tag[')+']]'+filter;
var names=this.getList(getParam(params,'columns')); // slices/sections/fields to use as columns
var clip=getParam(params,'clip',0); // 0=no clipping
var width=getParam(params,'width','auto');
var rc=this.getRowsAndCols(filter,names,all);
if (!rc.cols.length) wikify(this.noColsMsg,place);
else this.renderTable(place,rc.rows,rc.cols,inline,heads,wiki,edit,clip,width);
},
getList: function(t,gettags) {
var items=(t||'').readBracketedList();
for (var i=0;i<items.length;i++) { var item=items[i];
// replace item with list based on item prefix:
// +name contents of tiddler (space-separated list)
// @name slices/tags,
// @!name sections
// @=name fields
if ('@+'.indexOf(item.substr(0,1))!=-1) {
var title=item.substr(1); var type=title.substr(0,1);
if ('=!'.indexOf(type)!=-1) title=title.substr(1);
if (title=='here')
title=story.findContainingTiddler(place).getAttribute('tiddler');
var tid=store.getTiddler(title); if (tid) {
var list=[];
if (item.substr(0,1)=='+') list=tid.text.readBracketedList(); // contents
else if (gettags) list=tid.tags; // tags
else if (type=='!') list=this.getSections(tid.title); // sections
else if (type=='=') list=this.getFields(tid.title); // fields
else for (var s in this.getSlices(tid.title)) list.push(s); // slices
items.splice(i,1); // remove item
for (var j=0;j<list.length;j++,i++) items.splice(i,0,list[j]); // add list
}
}
}
return items;
},
getRowsAndCols: function(filter,names,all) {
var rows=[]; var cols=[]; // get rows (tiddlers) and columns (slices)
var tiddlers=filter&&filter.length?store.filterTiddlers(filter):store.getTiddlers();
for (i=0; i<tiddlers.length; i++) {
var slices=this.getSlices(tiddlers[i].title);
var include=false; for (var s in slices) { cols.pushUnique(s); include=true; }
if (include||all) rows.push(tiddlers[i].title);
}
rows=rows.sort();
// use specified list instead of collected slice names
if (names.length) var cols=names;
return {rows:rows,cols:cols};
},
renderTable: function(place,rows,cols,inline,heads,wiki,edit,clip,width) {
var span=createTiddlyElement(place,'span')
span.innerHTML=this.generateTable(rows,cols,inline,heads,wiki,edit,clip,width)
// replace TD content with wikified elements
var tds=span.getElementsByTagName('td');
for (var t=0; t<tds.length; t++) {
if (hasClass(tds[t],'wiki')) {
var txt=getPlainText(tds[t]);
if (hasClass(tds[t],'grid_heading')) txt='[['+txt+']]';
removeChildren(tds[t]);
wikify(txt,tds[t]);
}
}
},
generateTable: function(rows,cols,inline,heads,wiki,edit,clip,width) {
var out= "<html><table style='border:0;padding:0;spacing:0;"
+"border-collapse:collapse;width:"+width+"'>";
// column headings
out+= "<tr style='border:0;vertical-align:bottom'>"
+"<td style='text-align:left;border:0;'>"
+"<a href='javascript:;' style='font-size:80%;'"
+" title='"+(heads?this.hideHeadersTip:this.showHeadersTip)+"'"
+" onclick='return config.macros.grid.toggleHeaders("
+" this,event,"+(heads?"true":"false")+")'>"
+(heads?this.hideHeaders:this.showHeaders)
+"</a>"
+"</td>";
for (var i=0;i<cols.length;i++) {
out+= "<td style='text-align:left;cursor:pointer;"
+" border:0;padding:.5em .5em .1em .5em ;font-weight:bold;' "
+"<span style='display:"+(heads?"block":"none")+"'>"
+cols[i].replace(/^[=!]/,'')
+"</span></td>";
}
out+="</tr>";
// row heading format ('fake' tiddler link)
// %0=cell width, %1=tiddler name, %2='wiki' classname (optional), %3='inline' classname (optional)
var head="<td style='text-align:left;border:0;padding:.5em;white-space:nowrap;%0;'>"
+"<a href='javascript:;' tid=\"%1\" class='grid_heading %2 %3' "
+"onclick='story.displayTiddler("
+" this,this.getAttribute(\"tid\"));return false'>%1</a></td>";
// row value format
// %0=bgcolor, %1=cellwidth, %2=cell alignment, %3=tiddler name
// %4=slice/section/field name, %5=tooltip, %6='wiki' classname (optional),
// %7='inline' classname (optional), %8=cell content value
var cell="<td style='background-color:%0;border:1 solid;%1;%2;' tid=\"%3\" ";
if (edit) cell+="onclick='return config.macros.grid.editInPlace("
+"this,event,this.getAttribute(\"tid\"),\"%4\");' ";
cell+="title=\"%5\" class='grid_content %6 %7'>%8</td>";
// generate rows
for (var i=0;i<rows.length;i++) {
var tiddlersrc=rows[i].replace(/"/g,""");
out+="<tr style='border:0;vertical-align:top'>";
out+=head.format([inline?'width:1%':'',tiddlersrc,wiki?'wiki':'',inline?'inline':'']);
for (var j=0;j<cols.length;j++) { var c=cols[j];
var val=this.get(rows[i],c);
var content=" ";
if (val.length && inline) {
content=val.htmlEncode();
if (c=='=text'||clip) // truncate
content=val.substr(0,clip||500)
+(val.length>(clip||500)?"...":"");
if (c=='=text') // format tiddler source
content='<html><code style="line-height:100%">'
+content.replace(/\n/g,'<br>')
+'</code></html>';
}
var title=this.showName(tiddlersrc,c)+(!inline?'='+val:'');
out+=cell.format([
val.length&&!inline?'#999':'transparent', !inline?'width:1em;':'',
inline&&!isNaN(parseFloat(val))?'text-align:left !important;':'',
tiddlersrc, c, title, wiki?'wiki':'', inline?'inline':'', content]);
}
out+='</tr>';
}
out+="</table></html>";
return out;
},
showName: function(tid,name) {
if (name==this.sizeSliceName) var fmt='%0 - size (in bytes)'; // fake slice
var fmt=(name.substr(0,1)=='=')?'%1@%0':(name.substr(0,1)=='!')?'%1##%0':'%0::%1';
return fmt.format([tid,name.replace(/^[=!]/,'')]);
},
toggleHeaders: function(here,event,defOpen) {
if (here.expanded==undefined) here.expanded=defOpen;
var ex=here.expanded=!here.expanded;
here.innerHTML=ex?this.hideHeaders:this.showHeaders;
here.title=ex?this.hideHeadersTip:this.showHeadersTip;
var cells=here.parentNode.parentNode.getElementsByTagName('td');
for (i=1; i<cells.length; i++) cells[i].firstChild.style.display=ex?'inline':'none';
event.cancelBubble=true;if(event.stopPropagation)event.stopPropagation();return false;
},
editInPlace: function(here,event,tid,name) {
if (here.editing) return false; // already editing, don't re-init
if (name==this.sizeSliceName) return false; // read-only fake slice
var v=this.get(tid,name); // current value
var lines=v.split('\n').length;
var title=this.showName(tid,name);
var style=lines>1?'font-size:90%;width:99%;':'font-size:100%;width:95%;line-height:100%;'
var maxlines=Math.min(lines,config.options['txtMaxEditRows']); // for textarea
var html=lines>1?'<textarea rows='+maxlines:'<input type="text"';
html +=' tid="'+tid.replace(/"/g,'"')+'"'
+' name="'+name.replace(/"/g,'"')+'"'
+' style="margin:0px;padding:1px 0px 1px 3px;border:0;'+style+'"'
+' title="'+title+' (ENTER=submit, ESC=cancel)"'
+' onblur="config.macros.grid.blur(this,event)"'
+' onkeydown="config.macros.grid.keydown(this,event)"';
html+=lines>1?'></textarea>':'>';
here.editing=true;
here.setAttribute('savedWidth',here.style.width);
here.setAttribute('savedPadding',here.style.padding);
here.setAttribute('savedColor',here.style.backgroundColor);
if (!hasClass(here,'inline')) here.style.width='99%';
here.style.padding='0px';
here.style.backgroundColor='#fff';
here.innerHTML=html;
var ta=here.firstChild; ta.value=v; ta.focus(); ta.select();
event.cancelBubble=true;if(event.stopPropagation)event.stopPropagation();return false;
},
keydown: function(here,ev) { ev=ev||window.event;
var tid=here.getAttribute('tid');
var name=here.getAttribute('name');
if (ev.keyCode==27) {
var currval=this.get(tid,name);
if (here.value==currval) { here.blur(); return false; }
here.asking=true; // prevents blur handling during confirm()
var discard=confirm('OK to discard changes to '+this.showName(tid,name)+'?');
here.asking=false;
if (discard) { here.value=currval; here.blur(); }
return false;
}
else if (ev.keyCode==13 && !ev.ctrlKey) {
this.set(tid,name,here.value);
here.blur();
return false;
}
},
blur: function(here,ev) { ev=ev||window.event;
if (here.asking) return false;
var tid=here.getAttribute('tid');
var name=here.getAttribute('name');
var currval=this.get(tid,name);
var msg=this.showName(tid,name)+' has changed... OK to save changes?';
if (here.value!=currval && confirm(msg))
{ this.set(tid,name,here.value); currval=this.get(tid,name); }
var target=here.parentNode;
target.editing=false;
target.style.backgroundColor=target.getAttribute('savedColor');
target.style.padding=target.getAttribute('savedPadding');
target.style.width=target.getAttribute('savedWidth');
if (name=='=text') currval='<html><code>'+currval.substr(0,500).replace(/\\n/g,'<br>')+'</code></html>';
if (hasClass(target,'wiki')) { removeChildren(target); wikify(currval,target); }
else target.innerHTML=hasClass(target,'inline')?currval:' ';
},
get: function(tid,name) {
if (name.substr(0,1)=='=') var v=store.getValue(tid,name.substr(1)); // field
else if (name.substr(0,1)=='!') var v=store.getTiddlerText(tid+'##'+name.substr(1)); // section
else if (name==this.sizeSliceName) var v=store.getTiddlerText(tid,'').length.toString(); // fake slice
else var v=store.getTiddlerSlice(tid,name); // real slice
return v||'';
},
set: function(tid,name,val) {
if (val==this.get(tid,name)) return false; // unchanged... do nothing
if (name.substr(0,1)=='=') // field
{ name=name.substr(1); store.setValue(tid,name,val); }
else if (name.substr(0,1)=='!') // section
{ name=name.substr(1); this.setSection(tid,name,val); }
else // slice
{ this.setSlice(tid,name,val); }
displayMessage(this.showName(tid,name)+' has been updated');
return false;
},
setSection: function(tid,name,newval) {
var t=store.getTiddler(tid); if (!t) { var t=new Tiddler(); t.text=''; }
var oldval=this.get(tid,name).escapeRegExp();
var pattern=new RegExp('(.*!{1,6}'+name+'\\n)'+oldval+'((?:\\n!{1,6}|$).*)');
var newText=t.text.replace(pattern,'$1'+newval+'$2');
var who=config.options.txtUserName; var when=new Date();
if (config.options.chkForceMinorUpdate) { var who=t.modifier; var when=t.modified; }
store.saveTiddler(tid,tid,newText,who,when,t.tags,t.fields);
story.refreshTiddler(tid,null,true);
},
setSlice: function(tid,name,newval) {
var t=store.getTiddler(tid); if (!t) { var t=new Tiddler(); t.text=''; }
var oldval=this.get(tid,name)||'';
var pattern="((?:^|\\n)\\|\\s*[\\'\\/]*~?(?:"
+name.escapeRegExp()
+")\\:?[\\'\\/]*\\s*\\|\\s*)(?:"
+oldval.escapeRegExp()
+")(\\s*\\|(?:\\n|$))";
var match=t.text.match(new RegExp(pattern));
if (match) {
var pos=t.text.indexOf(match[0]);
var newText=t.text.substr(0,pos)
+match[1]+newval+match[2]
+t.text.substr(pos+match[0].length);
} else { // create new slice at start of tiddler or after last existing slice (if any)
var match=t.text.match(this.slicesRE); if (match) var last=match[match.length-1];
var pos=last?t.text.indexOf(last)+last.length+1:0;
var newText=t.text.substr(0,pos)+'|'+name+'|'+newval+'|\n'+t.text.substr(pos);
}
var who=config.options.txtUserName; var when=new Date();
if (config.options.chkForceMinorUpdate) { var who=t.modifier; var when=t.modified; }
store.saveTiddler(tid,tid,newText,who,when,t.tags,t.fields);
story.refreshTiddler(tid,null,true);
},
getSlices: function(tid) {
var slices = {};
var text = store.getTiddlerText(tid,'');
slices[this.sizeSliceName]=text.length.toString(); // fake slice
this.slicesRE.lastIndex = 0;
do {
var m = this.slicesRE.exec(text);
if (m) { if (m[1]) slices[m[1]] = m[2]; else slices[m[3]] = m[4]; }
} while(m);
return slices;
},
getSections: function(tid) {
var s=[];
var t=store.getTiddlerText(tid,'');
var p=/(?:^|\n)!{1,6}([^\n]*)\n/gm;
do { var m=p.exec(t); if (m) { s.push(m[1]); } } while(m);
return s;
},
getFields: function(tid) {
var t=store.getTiddler(tid); if (!t) return [];
var fields=['=created','=modified','=modifier','=text','=tags'];
for (var f in t.fields) fields.push('='+f);
return fields;
}
};
//}}}
|Ref.|Igus - GFI-1214-12|
|Qty|1 (2/kiffy)|
|Material|Pa6|
|Process|Standard|
|Masse|3g|
|Volume|D22,23 d19,05 L19,05|
|Finish| |
|PU| |
!Todo
!Description
Palier lisse à collerette
|Ref.|Igus - JFM-1719-21|
|Qty|1 (2/kiffy)|
|Material|Pa6|
|Process|Standard|
|Masse|2g|
|Volume|D19 d17 L21|
|Finish| |
|PU| |
!Todo
!Description
Palier lisse à collerette
/***
|Name|ImageSizePlugin|
|Source|http://www.TiddlyTools.com/#ImageSizePlugin|
|Version|1.2.1|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|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)?'':'')
+'Shift + Click : pleine largeur | Ctrl + Click : taille initiale';
// 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='100%'; 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;
};
}
//}}}
On samedi 22 octobre 2011 16:58:04, JBouchez loaded 1 tiddlers from
[[file:///W:/Groups/airbank_tw__/airbank_tw/index.html|file:///W:/Groups/airbank_tw__/airbank_tw/index.html]]:
<<<
#[[TemplateCompany]] - updated
<<<
----
On samedi 22 octobre 2011 16:57:50, JBouchez loaded 1 tiddlers from
[[file:///W:/Groups/airbank_tw__/airbank_tw/index.html|file:///W:/Groups/airbank_tw__/airbank_tw/index.html]]:
<<<
#[[FetContactTagTag]] - updated
<<<
----
On samedi 22 octobre 2011 16:57:27, JBouchez loaded 8 tiddlers from
[[file:///W:/Groups/airbank_tw__/airbank_tw/index.html|file:///W:/Groups/airbank_tw__/airbank_tw/index.html]]:
<<<
#[[AirbankBlankPackage]] - updated
#[[BreadcrumbsPlugin]] - updated
#[[EditTemplate]] - updated
#[[TemplateBlank]] - updated
#[[TemplateDescription+List]] - added
#[[TemplatePart]] - updated
#[[Timeline]] - added
#[[z_configOptions]] - updated
<<<
----
On jeudi 13 octobre 2011 23:15:40, JBouchez loaded 6 tiddlers from
[[file:///W:/Groups/npi_kiffy3__/npi_kiffy3/index.html|file:///W:/Groups/npi_kiffy3__/npi_kiffy3/index.html]]:
<<<
#[[Béquille 2011-06-03]] - added
#[[Cage du porteur 2011-06-06]] - added
#[[Kiffy_Porter_2011-06-03.SLDASM]] - added
#[[Lame Béquille 2011-06-07]] - added
#[[Manette de la béquille 2011-06-06]] - added
#[[Ressort de la béquille 2011-08-24]] - added
<<<
----
On jeudi 13 octobre 2011 23:14:24, JBouchez loaded 4 tiddlers from
[[file:///W:/Groups/npi_kiffy3__/npi_kiffy3/index.html|file:///W:/Groups/npi_kiffy3__/npi_kiffy3/index.html]]:
<<<
#[[Kiffy2_ClampingLever_2011-02-21.SLDDRW]] - added
#[[Kiffy2_ClampingLever_2011-02-21.SLDPRT]] - added
#[[LevierAncrage_11npi008.PDF]] - added
#[[LevierAncrage_11npi008.igs.zip]] - added
<<<
----
On jeudi 13 octobre 2011 23:13:51, JBouchez loaded 4 tiddlers from
[[file:///W:/Groups/npi_kiffy3__/npi_kiffy3/index.html|file:///W:/Groups/npi_kiffy3__/npi_kiffy3/index.html]]:
<<<
#[[Kiffy2_ClampingPin_2011-02-21.SLDDRW]] - added
#[[Kiffy2_ClampingPin_2011-02-21.SLDPRT]] - added
#[[PionAncrage_11npi009.PDF]] - added
#[[PionAncrage_11npi009.igs.zip]] - added
<<<
----
On jeudi 13 octobre 2011 23:12:02, JBouchez loaded 14 tiddlers from
[[file:///W:/Groups/npi_kiffy3__/npi_kiffy3/index.html|file:///W:/Groups/npi_kiffy3__/npi_kiffy3/index.html]]:
<<<
#[[Béné Inox - 218702-4X18]] - added
#[[Kiffy2_AncrageProto1.JPG]] - added
#[[Kiffy2_AncrageProto2.JPG]] - added
#[[Kiffy2_Ancrage_2011-02-18.3gp]] - added
#[[Kiffy2_ClampingMaster_2011-02-02.SLDPRT]] - added
#[[Kiffy2_ClampingMaster_2011-02-02.jpg]] - added
#[[Kiffy2_ClampingMaster_2011-02-02.stl.zip]] - added
#[[Kiffy2_ClampingMaster_2011-02-03.igs.zip]] - added
#[[Kiffy2_ClampingMaster_2011-02-08.jpg]] - added
#[[Kiffy2_Clamping_2011-02-18.SLDASM]] - added
#[[Kiffy_2011-05-19T08-26-54.jpg]] - added
#[[Levier ancrage 2011-02-21]] - added
#[[Pion ancrage 2011-02-21]] - added
#[[Smalley - CM10-M2]] - added
<<<
----
On jeudi 13 octobre 2011 23:06:37, JBouchez loaded 2 tiddlers from
[[file:///W:/Groups/npi_kiffy3__/npi_kiffy3/index.html|file:///W:/Groups/npi_kiffy3__/npi_kiffy3/index.html]]:
<<<
#[[Barre de direction 2011-06-09]] - added
#[[Kiffy2_SteeringLink_2011-06-09.SLDASM]] - added
<<<
----
On jeudi 13 octobre 2011 23:06:20, JBouchez loaded 15 tiddlers from
[[file:///W:/Groups/npi_kiffy3__/npi_kiffy3/index.html|file:///W:/Groups/npi_kiffy3__/npi_kiffy3/index.html]]:
<<<
#[[AccastillageFusee_10npi081.PDF]] - added
#[[Axe de la rotule 20100430]] - added
#[[Capot des tubes de fusée 20100421]] - added
#[[Curseur de la rotule 20100430]] - added
#[[Igus - GFI-1214-12]] - added
#[[Igus - JFM-1719-21]] - added
#[[Kiffy_KingpinFitting_20100517.jpg]] - added
#[[LJF - 106417]] - added
#[[LJF - 121415]] - added
#[[NPI_Kiffy_KingpinFitting_20100511.SLDASM]] - added
#[[NPI_Kiffy_KingpinFitting_20100511.jpg]] - added
#[[NPI_Kiffy_KingpinFitting_20100607.SLDDRW]] - added
#[[Rondelle de la fusée 20100430]] - added
#[[Smalley - WHW-75]] - added
#[[Vis ISO 7380 06x25]] - added
<<<
----
On jeudi 13 octobre 2011 23:06:01, JBouchez loaded 10 tiddlers from
[[file:///W:/Groups/npi_kiffy3__/npi_kiffy3/index.html|file:///W:/Groups/npi_kiffy3__/npi_kiffy3/index.html]]:
<<<
#[[AccastillageDeLaDirection_10npi076.PDF]] - added
#[[Ecrou de la direction 20100511]] - added
#[[Entretoise de la direction 20100421]] - added
#[[Goupille de la direction 20100601]] - added
#[[Kiffy_SteeringFitting_201000604.SLDDRW]] - added
#[[Kiffy_SteeringFitting_20100511.SLDASM]] - added
#[[Kiffy_SteeringFitting_20100511.jpg]] - added
#[[Kiffy_SteeringFitting_20100517.jpg]] - added
#[[Kiffy_SteeringFitting_20100604.jpg]] - added
#[[Rondelle-frein 20100614]] - added
<<<
----
On jeudi 13 octobre 2011 23:05:14, JBouchez loaded 14 tiddlers from
[[file:///W:/Groups/npi_kiffy3__/npi_kiffy3/index.html|file:///W:/Groups/npi_kiffy3__/npi_kiffy3/index.html]]:
<<<
#[[Accastillage biellette 20100430]] - added
#[[Accastillage de la direction 2010051]] - added
#[[Accastillage fusée 20100430]] - added
#[[Biellette de direction 2011-06-08]] - added
#[[Cadre avant 2011-06-03]] - added
#[[Direction 2011-06-03]] - added
#[[Fusée 2011-06-03]] - added
#[[Gabarit 2011-06-07]] - added
#[[Kiffy_FrontBike_2011-06-07.SLDASM]] - added
#[[Kiffy_FrontBike_2011-07-27.jpg]] - added
#[[Ligne de roue avant 2011-06-03]] - added
#[[Porteur 2011-06-03]] - added
#[[Roue 349 2011-06-03]] - added
#[[Sac 20101001]] - added
<<<
----
On jeudi 13 octobre 2011 23:04:57, JBouchez loaded 10 tiddlers from
[[file:///W:/Groups/npi_kiffy3__/npi_kiffy3/index.html|file:///W:/Groups/npi_kiffy3__/npi_kiffy3/index.html]]:
<<<
#[[Ancrage 2011-02-02]] - added
#[[Assise 20100423]] - added
#[[Cadre arrière 2011-02-07]] - added
#[[Chaine 20100426]] - added
#[[Dahon - Turtleneck]] - added
#[[KMC - Demi maillon 3/32]] - added
#[[Ligne de roue arrière 2011-01-27]] - added
#[[Pédalier 20100426]] - added
#[[Roue 2011-01-25]] - added
#[[VeloArriere_10npi049.PDF]] - added
<<<
----
On jeudi 13 octobre 2011 23:04:30, JBouchez loaded 2 tiddlers from
[[file:///W:/Groups/npi_kiffy3__/npi_kiffy3/index.html|file:///W:/Groups/npi_kiffy3__/npi_kiffy3/index.html]]:
<<<
#[[Vélo arrière 2011-02-07]] - added
#[[Vélo avant 2011-06-03]] - added
<<<
----
On jeudi 13 octobre 2011 22:58:56, JBouchez loaded 2 tiddlers from
[[file:///W:/Groups/airbank_tw__/airbank_tw/index.html|file:///W:/Groups/airbank_tw__/airbank_tw/index.html]]:
<<<
#[[AirbankProspectPackage]] - added
#[[FetProspectTagTag]] - added
<<<
----
On jeudi 13 octobre 2011 22:58:49, JBouchez loaded 11 tiddlers from
[[file:///W:/Groups/airbank_tw__/airbank_tw/index.html|file:///W:/Groups/airbank_tw__/airbank_tw/index.html]]:
<<<
#[[AirbankContactPackage]] - added
#[[Contacts]] - added
#[[FetCompanyTagTag]] - added
#[[FetDevisTagTag]] - added
#[[FetPlansTagTag]] - added
#[[Réunions]] - added
#[[TemplateCompany]] - added
#[[TemplateContact]] - added
#[[TemplateJournal]] - added
#[[TemplateProduct]] - added
#[[Équipe projet]] - added
<<<
----
On jeudi 13 octobre 2011 22:58:18, JBouchez loaded 12 tiddlers from
[[file:///W:/Groups/airbank_tw__/airbank_tw/index.html|file:///W:/Groups/airbank_tw__/airbank_tw/index.html]]:
<<<
#[[AirbankCataloguePackage]] - added
#[[Catalogue]] - added
#[[FetContactTagTag]] - added
#[[FetListDash]] - added
#[[FetN1]] - added
#[[FetThumbnails3]] - added
#[[FetTop2000Tag]] - added
#[[Livres]] - added
#[[Sources]] - added
#[[TemplateBlank]] - added
#[[TemplateThème]] - added
#[[Thèmes]] - added
<<<
----
On jeudi 13 octobre 2011 22:57:41, JBouchez loaded 64 tiddlers from
[[file:///W:/Groups/airbank_tw__/airbank_tw/index.html|file:///W:/Groups/airbank_tw__/airbank_tw/index.html]]:
<<<
#[[AirbankBlankPackage]] - updated
#[[AirbankGridDescription]] - updated
#[[AttachFileMIMETypes]] - updated
#[[AttachFileMIMETypes (1)]] - updated
#[[AttachFilePlugin]] - updated
#[[AutoRefresh]] - added
#[[BCh]] - added
#[[BreadcrumbsPlugin]] - added
#[[CCa]] - added
#[[Capsule]] - added
#[[Company]] - added
#[[CopyTiddlerPlugin]] - updated
#[[DefaultTiddlers]] - added
#[[Edit]] - added
#[[FetAnticipation]] - added
#[[FetAnticipationTag]] - added
#[[FetCompany]] - added
#[[FetDescription]] - added
#[[FetDescriptionTagTag]] - added
#[[FetDescriptionTagTagNot]] - added
#[[FetFiles]] - updated
#[[FetFilesTagTag]] - added
#[[FetJournalTagTag]] - added
#[[FetList]] - updated
#[[FetListText]] - added
#[[FetNomenclature]] - added
#[[FetProspect]] - added
#[[FetThumbnails]] - updated
#[[FetThumbnails1]] - added
#[[FetTitleList]] - added
#[[FetTodoTagTag]] - added
#[[FetTodoText]] - added
#[[FileDropPlugin]] - updated
#[[ForEachTiddlerPlugin]] - updated
#[[ImageSizePlugin]] - updated
#[[IntelliTaggerPlugin]] - updated
#[[JBo]] - added
#[[JBo Snip]] - added
#[[LessBackupsPlugin]] - updated
#[[LineBreakHack]] - added
#[[LoadTiddlersPlugin]] - updated
#[[MainMenu]] - updated
#[[Mentions légales]] - added
#[[Mémo]] - updated
#[[NestedSlidersPlugin]] - added
#[[NewTaggedTiddler]] - added
#[[Packages]] - added
#[[PageTemplate]] - updated
#[[ProjectMainMenu]] - added
#[[RenameTagsPlugin]] - updated
#[[SaveCloseTiddlerPlugin]] - updated
#[[SideBarOptions]] - updated
#[[StyleSheet]] - updated
#[[StyleSheetPrint]] - added
#[[TemplatePart]] - added
#[[Templates]] - updated
#[[TiddlerTweakerPlugin]] - added
#[[TiddlyLockPlugin]] - added
#[[Todo]] - added
#[[ToggleRightSidebar]] - updated
#[[ViewTemplate]] - updated
#[[W Load Package]] - added
#[[YourSearchPlugin]] - added
#[[z_configOptions]] - updated
<<<
----
On dimanche 22 août 2010 23:01:22, GUEST loaded 29 tiddlers from
[[file:///C:/Documents%20and%20Settings/Julien%20BOUCHEZ/My%20Documents/Capsule/blank.html|file:///C:/Documents%20and%20Settings/Julien%20BOUCHEZ/My%20Documents/Capsule/blank.html]]:
<<<
#[[AirbankGridDescription]] - added
#[[AirbankGridNomenclature]] - added
#[[AirbankPluginPackage]] - added
#[[AttachFileMIMETypes]] - added
#[[AttachFileMIMETypes (1)]] - added
#[[AttachFilePlugin]] - added
#[[AttachFilePluginFormatters]] - added
#[[CopyTiddlerPlugin]] - added
#[[DisableWikiLinksPlugin]] - added
#[[FetFiles]] - added
#[[FetList]] - added
#[[FetThumbnails]] - added
#[[FileDropPlugin]] - added
#[[ForEachTiddlerPlugin]] - added
#[[GridPlugin]] - added
#[[ImageSizePlugin]] - added
#[[IntelliTaggerPlugin]] - added
#[[LessBackupsPlugin]] - added
#[[LoadTiddlersPlugin]] - updated
#[[MatchTagsPlugin]] - added
#[[PartTiddlerPlugin]] - added
#[[PluginConfigOptions]] - added
#[[RenameTagsPlugin]] - added
#[[SaveCloseTiddlerPlugin]] - added
#[[SearchOptionsPlugin]] - added
#[[TagGridPlugin]] - added
#[[TaskTimerPlugin]] - added
#[[TaskTimerPluginConfig]] - added
#[[ToggleRightSidebar]] - added
<<<
----
On dimanche 22 août 2010 23:01:04, GUEST loaded 20 tiddlers from
[[file:///C:/Documents%20and%20Settings/Julien%20BOUCHEZ/My%20Documents/Capsule/blank.html|file:///C:/Documents%20and%20Settings/Julien%20BOUCHEZ/My%20Documents/Capsule/blank.html]]:
<<<
#[[Aide]] - added
#[[AirbankBlankPackage]] - added
#[[AirbankGridProduct]] - added
#[[AirbankGridSpécifications]] - added
#[[Aujourd'hui]] - added
#[[ColorPalette]] - added
#[[EditTemplate]] - added
#[[Fichiers joints]] - added
#[[FontPalette]] - added
#[[Load Package]] - added
#[[MainMenu]] - added
#[[MarkupPreHead]] - added
#[[Mémo]] - added
#[[PageTemplate]] - added
#[[SideBarOptions]] - added
#[[StyleSheet]] - added
#[[Templates]] - added
#[[ToolbarCommands]] - added
#[[ViewTemplate]] - added
#[[z_configOptions]] - added
<<<
/***
|''Name:''|IntelliTaggerPlugin|
|''Version:''|1.0.2 (2007-07-25)|
|''Type:''|plugin|
|''Source:''|http://tiddlywiki.abego-software.de/#IntelliTaggerPlugin|
|''Author:''|Udo Borkowski (ub [at] abego-software [dot] de)|
|''Documentation:''|[[IntelliTaggerPlugin Documentation]]|
|''~SourceCode:''|[[IntelliTaggerPlugin SourceCode]]|
|''Licence:''|[[BSD open source license (abego Software)]]|
|''~CoreVersion:''|2.0.8|
|''Browser:''|Firefox 1.5.0.2 or better|
***/
/***
!Version History
* 1.0.2 (2007-07-25):
** Feature: "Return" key may be used to accept first tag suggestion (beside "Alt-1")
** Bugfix: Keyboard shortcuts (Alt+3 etc.) shifted
* 1.0.1 (2007-05-18): Improvement: Speedup when using TiddlyWikis with many tags
* 1.0.0 (2006-04-26): Initial release
***/
// /%
if(!version.extensions.IntelliTaggerPlugin){if(!window.abego){window.abego={};}if(!abego.internal){abego.internal={};}abego.alertAndThrow=function(s){alert(s);throw s;};if(version.major<2){abego.alertAndThrow("Use TiddlyWiki 2.0.8 or better to run the IntelliTagger Plugin.");}version.extensions.IntelliTaggerPlugin={major:1,minor:0,revision:2,date:new Date(2007,6,25),type:"plugin",source:"http://tiddlywiki.abego-software.de/#IntelliTaggerPlugin",documentation:"[[IntelliTaggerPlugin Documentation]]",sourcecode:"[[IntelliTaggerPlugin SourceCode]]",author:"Udo Borkowski (ub [at] abego-software [dot] de)",licence:"[[BSD open source license (abego Software)]]",tiddlywiki:"Version 2.0.8 or better",browser:"Firefox 1.5.0.2 or better"};abego.createEllipsis=function(_2){var e=createTiddlyElement(_2,"span");e.innerHTML="…";};abego.isPopupOpen=function(_4){return _4&&_4.parentNode==document.body;};abego.openAsPopup=function(_5){if(_5.parentNode!=document.body){document.body.appendChild(_5);}};abego.closePopup=function(_6){if(abego.isPopupOpen(_6)){document.body.removeChild(_6);}};abego.getWindowRect=function(){return {left:findScrollX(),top:findScrollY(),height:findWindowHeight(),width:findWindowWidth()};};abego.moveElement=function(_7,_8,_9){_7.style.left=_8+"px";_7.style.top=_9+"px";};abego.centerOnWindow=function(_a){if(_a.style.position!="absolute"){throw "abego.centerOnWindow: element must have absolute position";}var _b=abego.getWindowRect();abego.moveElement(_a,_b.left+(_b.width-_a.offsetWidth)/2,_b.top+(_b.height-_a.offsetHeight)/2);};abego.isDescendantOrSelf=function(_c,e){while(e){if(_c==e){return true;}e=e.parentNode;}return false;};abego.toSet=function(_e){var _f={};for(var i=0;i<_e.length;i++){_f[_e[i]]=true;}return _f;};abego.filterStrings=function(_11,_12,_13){var _14=[];for(var i=0;i<_11.length&&(_13===undefined||_14.length<_13);i++){var s=_11[i];if(s.match(_12)){_14.push(s);}}return _14;};abego.arraysAreEqual=function(a,b){if(!a){return !b;}if(!b){return false;}var n=a.length;if(n!=b.length){return false;}for(var i=0;i<n;i++){if(a[i]!=b[i]){return false;}}return true;};abego.moveBelowAndClip=function(_1b,_1c){if(!_1c){return;}var _1d=findPosX(_1c);var _1e=findPosY(_1c);var _1f=_1c.offsetHeight;var _20=_1d;var _21=_1e+_1f;var _22=findWindowWidth();if(_22<_1b.offsetWidth){_1b.style.width=(_22-100)+"px";}var _23=_1b.offsetWidth;if(_20+_23>_22){_20=_22-_23-30;}if(_20<0){_20=0;}_1b.style.left=_20+"px";_1b.style.top=_21+"px";_1b.style.display="block";};abego.compareStrings=function(a,b){return (a==b)?0:(a<b)?-1:1;};abego.sortIgnoreCase=function(arr){var _27=[];var n=arr.length;for(var i=0;i<n;i++){var s=arr[i];_27.push([s.toString().toLowerCase(),s]);}_27.sort(function(a,b){return (a[0]==b[0])?0:(a[0]<b[0])?-1:1;});for(i=0;i<n;i++){arr[i]=_27[i][1];}};abego.getTiddlerField=function(_2d,_2e,_2f){var _30=document.getElementById(_2d.idPrefix+_2e);var e=null;if(_30!=null){var _32=_30.getElementsByTagName("*");for(var t=0;t<_32.length;t++){var c=_32[t];if(c.tagName.toLowerCase()=="input"||c.tagName.toLowerCase()=="textarea"){if(!e){e=c;}if(c.getAttribute("edit")==_2f){e=c;}}}}return e;};abego.setRange=function(_35,_36,end){if(_35.setSelectionRange){_35.setSelectionRange(_36,end);var max=0+_35.scrollHeight;var len=_35.textLength;var top=max*_36/len,bot=max*end/len;_35.scrollTop=Math.min(top,(bot+top-_35.clientHeight)/2);}else{if(_35.createTextRange!=undefined){var _3b=_35.createTextRange();_3b.collapse();_3b.moveEnd("character",end);_3b.moveStart("character",_36);_3b.select();}else{_35.select();}}};abego.internal.TagManager=function(){var _3c=null;var _3d=function(){if(_3c){return;}_3c={};store.forEachTiddler(function(_3e,_3f){for(var i=0;i<_3f.tags.length;i++){var tag=_3f.tags[i];var _42=_3c[tag];if(!_42){_42=_3c[tag]={count:0,tiddlers:{}};}_42.tiddlers[_3f.title]=true;_42.count+=1;}});};var _43=TiddlyWiki.prototype.saveTiddler;TiddlyWiki.prototype.saveTiddler=function(_44,_45,_46,_47,_48,_49){var _4a=this.fetchTiddler(_44);var _4b=_4a?_4a.tags:[];var _4c=(typeof _49=="string")?_49.readBracketedList():_49;_43.apply(this,arguments);if(!abego.arraysAreEqual(_4b,_4c)){abego.internal.getTagManager().reset();}};var _4d=TiddlyWiki.prototype.removeTiddler;TiddlyWiki.prototype.removeTiddler=function(_4e){var _4f=this.fetchTiddler(_4e);var _50=_4f&&_4f.tags.length>0;_4d.apply(this,arguments);if(_50){abego.internal.getTagManager().reset();}};this.reset=function(){_3c=null;};this.getTiddlersWithTag=function(tag){_3d();var _52=_3c[tag];return _52?_52.tiddlers:null;};this.getAllTags=function(_53){_3d();var _54=[];for(var i in _3c){_54.push(i);}for(i=0;_53&&i<_53.length;i++){_54.pushUnique(_53[i],true);}abego.sortIgnoreCase(_54);return _54;};this.getTagInfos=function(){_3d();var _56=[];for(var _57 in _3c){_56.push([_57,_3c[_57]]);}return _56;};var _58=function(a,b){var a1=a[1];var b1=b[1];var d=b[1].count-a[1].count;return d!=0?d:abego.compareStrings(a[0].toLowerCase(),b[0].toLowerCase());};this.getSortedTagInfos=function(){_3d();var _5e=this.getTagInfos();_5e.sort(_58);return _5e;};this.getPartnerRankedTags=function(_5f){var _60={};for(var i=0;i<_5f.length;i++){var _62=this.getTiddlersWithTag(_5f[i]);for(var _63 in _62){var _64=store.getTiddler(_63);if(!(_64 instanceof Tiddler)){continue;}for(var j=0;j<_64.tags.length;j++){var tag=_64.tags[j];var c=_60[tag];_60[tag]=c?c+1:1;}}}var _68=abego.toSet(_5f);var _69=[];for(var n in _60){if(!_68[n]){_69.push(n);}}_69.sort(function(a,b){var d=_60[b]-_60[a];return d!=0?d:abego.compareStrings(a.toLowerCase(),b.toLowerCase());});return _69;};};abego.internal.getTagManager=function(){if(!abego.internal.gTagManager){abego.internal.gTagManager=new abego.internal.TagManager();}return abego.internal.gTagManager;};(function(){var _6e=2;var _6f=1;var _70=30;var _71;var _72;var _73;var _74;var _75;var _76;if(!abego.IntelliTagger){abego.IntelliTagger={};}var _77=function(){return _72;};var _78=function(tag){return _75[tag];};var _7a=function(s){var i=s.lastIndexOf(" ");return (i>=0)?s.substr(0,i):"";};var _7d=function(_7e){var s=_7e.value;var len=s.length;return (len>0&&s[len-1]!=" ");};var _81=function(_82){var s=_82.value;var len=s.length;if(len>0&&s[len-1]!=" "){_82.value+=" ";}};var _85=function(tag,_87,_88){if(_7d(_87)){_87.value=_7a(_87.value);}story.setTiddlerTag(_88.title,tag,0);_81(_87);abego.IntelliTagger.assistTagging(_87,_88);};var _89=function(n){if(_76&&_76.length>n){return _76[n];}return (_74&&_74.length>n)?_74[n]:null;};var _8b=function(n,_8d,_8e){var _8f=_89(n);if(_8f){_85(_8f,_8d,_8e);}};var _90=function(_91){var pos=_91.value.lastIndexOf(" ");var _93=(pos>=0)?_91.value.substr(++pos,_91.value.length):_91.value;return new RegExp(_93.escapeRegExp(),"i");};var _94=function(_95,_96){var _97=0;for(var i=0;i<_95.length;i++){if(_96[_95[i]]){_97++;}}return _97;};var _99=function(_9a,_9b,_9c){var _9d=1;var c=_9a[_9b];for(var i=_9b+1;i<_9a.length;i++){if(_9a[i][1].count==c){if(_9a[i][0].match(_9c)){_9d++;}}else{break;}}return _9d;};var _a0=function(_a1,_a2){var _a3=abego.internal.getTagManager().getSortedTagInfos();var _a4=[];var _a5=0;for(var i=0;i<_a3.length;i++){var c=_a3[i][1].count;if(c!=_a5){if(_a2&&(_a4.length+_99(_a3,i,_a1)>_a2)){break;}_a5=c;}if(c==1){break;}var s=_a3[i][0];if(s.match(_a1)){_a4.push(s);}}return _a4;};var _a9=function(_aa,_ab){return abego.filterStrings(abego.internal.getTagManager().getAllTags(_ab),_aa);};var _ac=function(){if(!_71){return;}var _ad=store.getTiddlerText("IntelliTaggerMainTemplate");if(!_ad){_ad="<b>Tiddler IntelliTaggerMainTemplate not found</b>";}_71.innerHTML=_ad;applyHtmlMacros(_71,null);refreshElements(_71,null);};var _ae=function(e){if(!e){var e=window.event;}var tag=this.getAttribute("tag");if(_73){_73.call(this,tag,e);}return false;};var _b2=function(_b3){createTiddlyElement(_b3,"span",null,"tagSeparator"," | ");};var _b4=function(_b5,_b6,_b7,_b8,_b9){if(!_b6){return;}var _ba=_b8?abego.toSet(_b8):{};var n=_b6.length;var c=0;for(var i=0;i<n;i++){var tag=_b6[i];if(_ba[tag]){continue;}if(c>0){_b2(_b5);}if(_b9&&c>=_b9){abego.createEllipsis(_b5);break;}c++;var _bf="";var _c0=_b5;if(_b7<10){_c0=createTiddlyElement(_b5,"span",null,"numberedSuggestion");_b7++;var key=_b7<10?""+(_b7):"0";createTiddlyElement(_c0,"span",null,"suggestionNumber",key+") ");var _c2=_b7==1?"Return or ":"";_bf=" (Shortcut: %1Alt-%0)".format([key,_c2]);}var _c3=config.views.wikified.tag.tooltip.format([tag]);var _c4=(_78(tag)?"Remove tag '%0'%1":"Add tag '%0'%1").format([tag,_bf]);var _c5="%0; Shift-Click: %1".format([_c4,_c3]);var btn=createTiddlyButton(_c0,tag,_c5,_ae,_78(tag)?"currentTag":null);btn.setAttribute("tag",tag);}};var _c7=function(){if(_71){window.scrollTo(0,ensureVisible(_71));}if(_77()){window.scrollTo(0,ensureVisible(_77()));}};var _c8=function(e){if(!e){var e=window.event;}if(!_71){return;}var _cb=resolveTarget(e);if(_cb==_77()){return;}if(abego.isDescendantOrSelf(_71,_cb)){return;}abego.IntelliTagger.close();};addEvent(document,"click",_c8);var _cc=Story.prototype.gatherSaveFields;Story.prototype.gatherSaveFields=function(e,_ce){_cc.apply(this,arguments);var _cf=_ce.tags;if(_cf){_ce.tags=_cf.trim();}};var _d0=function(_d1){story.focusTiddler(_d1,"tags");var _d2=abego.getTiddlerField(story,_d1,"tags");if(_d2){var len=_d2.value.length;abego.setRange(_d2,len,len);window.scrollTo(0,ensureVisible(_d2));}};var _d4=config.macros.edit.handler;config.macros.edit.handler=function(_d5,_d6,_d7,_d8,_d9,_da){_d4.apply(this,arguments);var _db=_d7[0];if((_da instanceof Tiddler)&&_db=="tags"){var _dc=_d5.lastChild;_dc.onfocus=function(e){abego.IntelliTagger.assistTagging(_dc,_da);setTimeout(function(){_d0(_da.title);},100);};_dc.onkeyup=function(e){if(!e){var e=window.event;}if(e.altKey&&!e.ctrlKey&&!e.metaKey&&(e.keyCode>=48&&e.keyCode<=57)){_8b(e.keyCode==48?9:e.keyCode-49,_dc,_da);}else{if(e.ctrlKey&&e.keyCode==32){_8b(0,_dc,_da);}}if(!e.ctrlKey&&(e.keyCode==13||e.keyCode==10)){_8b(0,_dc,_da);}setTimeout(function(){abego.IntelliTagger.assistTagging(_dc,_da);},100);return false;};_81(_dc);}};var _e0=function(e){if(!e){var e=window.event;}var _e3=resolveTarget(e);var _e4=_e3.getAttribute("tiddler");if(_e4){story.displayTiddler(_e3,_e4,"IntelliTaggerEditTagsTemplate",false);_d0(_e4);}return false;};var _e5=config.macros.tags.handler;config.macros.tags.handler=function(_e6,_e7,_e8,_e9,_ea,_eb){_e5.apply(this,arguments);abego.IntelliTagger.createEditTagsButton(_eb,createTiddlyElement(_e6.lastChild,"li"));};var _ec=function(){if(_71&&_72&&!abego.isDescendantOrSelf(document,_72)){abego.IntelliTagger.close();}};setInterval(_ec,100);abego.IntelliTagger.displayTagSuggestions=function(_ed,_ee,_ef,_f0,_f1){_74=_ed;_75=abego.toSet(_ee);_76=_ef;_72=_f0;_73=_f1;if(!_71){_71=createTiddlyElement(document.body,"div",null,"intelliTaggerSuggestions");_71.style.position="absolute";}_ac();abego.openAsPopup(_71);if(_77()){var w=_77().offsetWidth;if(_71.offsetWidth<w){_71.style.width=(w-2*(_6e+_6f))+"px";}abego.moveBelowAndClip(_71,_77());}else{abego.centerOnWindow(_71);}_c7();};abego.IntelliTagger.assistTagging=function(_f3,_f4){var _f5=_90(_f3);var s=_f3.value;if(_7d(_f3)){s=_7a(s);}var _f7=s.readBracketedList();var _f8=_f7.length>0?abego.filterStrings(abego.internal.getTagManager().getPartnerRankedTags(_f7),_f5,_70):_a0(_f5,_70);abego.IntelliTagger.displayTagSuggestions(_a9(_f5,_f7),_f7,_f8,_f3,function(tag,e){if(e.shiftKey){onClickTag.call(this,e);}else{_85(tag,_f3,_f4);}});};abego.IntelliTagger.close=function(){abego.closePopup(_71);_71=null;return false;};abego.IntelliTagger.createEditTagsButton=function(_fb,_fc,_fd,_fe,_ff,id,_101){if(!_fd){_fd="[edit]";}if(!_fe){_fe="Edit the tags";}if(!_ff){_ff="editTags";}var _102=createTiddlyButton(_fc,_fd,_fe,_e0,_ff,id,_101);_102.setAttribute("tiddler",(_fb instanceof Tiddler)?_fb.title:String(_fb));return _102;};abego.IntelliTagger.getSuggestionTagsMaxCount=function(){return 100;};config.macros.intelliTagger={label:"intelliTagger",handler:function(_103,_104,_105,_106,_107,_108){var _109=_107.parseParams("list",null,true);var _10a=_109[0]["action"];for(var i=0;_10a&&i<_10a.length;i++){var _10c=_10a[i];var _10d=config.macros.intelliTagger.subhandlers[_10c];if(!_10d){abego.alertAndThrow("Unsupported action '%0'".format([_10c]));}_10d(_103,_104,_105,_106,_107,_108);}},subhandlers:{showTags:function(_10e,_10f,_110,_111,_112,_113){_b4(_10e,_74,_76?_76.length:0,_76,abego.IntelliTagger.getSuggestionTagsMaxCount());},showFavorites:function(_114,_115,_116,_117,_118,_119){_b4(_114,_76,0);},closeButton:function(_11a,_11b,_11c,_11d,_11e,_11f){var _120=createTiddlyButton(_11a,"close","Close the suggestions",abego.IntelliTagger.close);},version:function(_121){var t="IntelliTagger %0.%1.%2".format([version.extensions.IntelliTaggerPlugin.major,version.extensions.IntelliTaggerPlugin.minor,version.extensions.IntelliTaggerPlugin.revision]);var e=createTiddlyElement(_121,"a");e.setAttribute("href","http://tiddlywiki.abego-software.de/#IntelliTaggerPlugin");e.innerHTML="<font color=\"black\" face=\"Arial, Helvetica, sans-serif\">"+t+"<font>";},copyright:function(_124){var e=createTiddlyElement(_124,"a");e.setAttribute("href","http://tiddlywiki.abego-software.de");e.innerHTML="<font color=\"black\" face=\"Arial, Helvetica, sans-serif\">© 2006-2007 <b><font color=\"red\">abego</font></b> Software<font>";}}};})();config.shadowTiddlers["IntelliTaggerStyleSheet"]="/***\n"+"!~IntelliTagger Stylesheet\n"+"***/\n"+"/*{{{*/\n"+".intelliTaggerSuggestions {\n"+"\tposition: absolute;\n"+"\twidth: 600px;\n"+"\n"+"\tpadding: 2px;\n"+"\tlist-style: none;\n"+"\tmargin: 0;\n"+"\n"+"\tbackground: #eeeeee;\n"+"\tborder: 1px solid DarkGray;\n"+"}\n"+"\n"+".intelliTaggerSuggestions .currentTag {\n"+"\tfont-weight: bold;\n"+"}\n"+"\n"+".intelliTaggerSuggestions .suggestionNumber {\n"+"\tcolor: #808080;\n"+"}\n"+"\n"+".intelliTaggerSuggestions .numberedSuggestion{\n"+"\twhite-space: nowrap;\n"+"}\n"+"\n"+".intelliTaggerSuggestions .intelliTaggerFooter {\n"+"\tmargin-top: 4px;\n"+"\tborder-top-width: thin;\n"+"\tborder-top-style: solid;\n"+"\tborder-top-color: #999999;\n"+"}\n"+".intelliTaggerSuggestions .favorites {\n"+"\tborder-bottom-width: thin;\n"+"\tborder-bottom-style: solid;\n"+"\tborder-bottom-color: #999999;\n"+"\tpadding-bottom: 2px;\n"+"}\n"+"\n"+".intelliTaggerSuggestions .normalTags {\n"+"\tpadding-top: 2px;\n"+"}\n"+"\n"+".intelliTaggerSuggestions .intelliTaggerFooter .button {\n"+"\tfont-size: 10px;\n"+"\n"+"\tpadding-left: 0.3em;\n"+"\tpadding-right: 0.3em;\n"+"}\n"+"\n"+"/*}}}*/\n";config.shadowTiddlers["IntelliTaggerMainTemplate"]="<!--\n"+"{{{\n"+"-->\n"+"<div class=\"favorites\" macro=\"intelliTagger action: showFavorites\"></div>\n"+"<div class=\"normalTags\" macro=\"intelliTagger action: showTags\"></div>\n"+"<!-- The Footer (with the Navigation) ============================================ -->\n"+"<table class=\"intelliTaggerFooter\" border=\"0\" width=\"100%\" cellspacing=\"0\" cellpadding=\"0\"><tbody>\n"+" <tr>\n"+"\t<td align=\"left\">\n"+"\t\t<span macro=\"intelliTagger action: closeButton\"></span>\n"+"\t</td>\n"+"\t<td align=\"right\">\n"+"\t\t<span macro=\"intelliTagger action: version\"></span>, <span macro=\"intelliTagger action: copyright \"></span>\n"+"\t</td>\n"+" </tr>\n"+"</tbody></table>\n"+"<!--\n"+"}}}\n"+"-->\n";config.shadowTiddlers["IntelliTaggerEditTagsTemplate"]="<!--\n"+"{{{\n"+"-->\n"+"<div class='toolbar' macro='toolbar +saveTiddler -cancelTiddler'></div>\n"+"<div class='title' macro='view title'></div>\n"+"<div class='tagged' macro='tags'></div>\n"+"<div class='viewer' macro='view text wikified'></div>\n"+"<div class='toolbar' macro='toolbar +saveTiddler -cancelTiddler'></div>\n"+"<div class='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser'></span></div>\n"+"<!--\n"+"}}}\n"+"-->\n";config.shadowTiddlers["BSD open source license (abego Software)"]="See [[Licence|http://tiddlywiki.abego-software.de/#%5B%5BBSD%20open%20source%20license%5D%5D]].";config.shadowTiddlers["IntelliTaggerPlugin Documentation"]="[[Documentation on abego Software website|http://tiddlywiki.abego-software.de/doc/IntelliTagger.pdf]].";config.shadowTiddlers["IntelliTaggerPlugin SourceCode"]="[[Plugin source code on abego Software website|http://tiddlywiki.abego-software.de/archive/IntelliTaggerPlugin/Plugin-IntelliTagger-src.1.0.2.js]]\n";(function(){var _126=restart;restart=function(){setStylesheet(store.getTiddlerText("IntelliTaggerStyleSheet"),"IntelliTaggerStyleSheet");_126.apply(this,arguments);};})();}
// %/
|Name|Julien BOUCHEZ|
|Title|R&D|
|Company|[[Capsule]]|
|Phone|04.84.25.07.00|
|Fax||
|Email|jbouchez@capsule-ea.fr|
|Adress||
|Website||
<<tiddler AutoRefresh>><<tiddler FetTodoText with: {{tiddler.title}}>>
<<loadTiddlers label:Importer tag:gfdskfghldghdhdkdkghgdsrr file:///D:/jbouchez/Documents/APPS/TiddlySnip/JulienSnip.html init autosave>>
|Ref.|KMC 3/32 |
|Qty|1|
|Material|Acier|
|Process|Standard|
|Masse| |
|Volume| |
|Finish| |
|PU| 3€ Prix public|
!Description
Pour le réglage de la longueur de la chaine en l'absence de système de tendeur ou pattes arrières réglables.
!Todo
!usage
{{{[img[Kiffy2_AncrageProto1.JPG]]}}}
[img[Kiffy2_AncrageProto1.JPG]]
!notes
attached by FileDropPlugin
!type
image/jpeg
!file
./CKopp/Pict/Kiffy2_AncrageProto1.JPG
!url
!data
!usage
{{{[img[Kiffy2_AncrageProto2.JPG]]}}}
[img[Kiffy2_AncrageProto2.JPG]]
!notes
attached by FileDropPlugin
!type
image/jpeg
!file
./CKopp/Pict/Kiffy2_AncrageProto2.JPG
!url
!data
!usage
{{{[[Kiffy2_Ancrage_2011-02-18.3gp|Kiffy2_Ancrage_2011-02-18.3gp]]}}}
[[Kiffy2_Ancrage_2011-02-18.3gp|Kiffy2_Ancrage_2011-02-18.3gp]]
!notes
attached by FileDropPlugin
!type
video
!file
./JBouchez/Pict/Kiffy2_Ancrage_2011-02-18.3gp
!url
!data
!usage
{{{[[Kiffy2_ClampingLever_2011-02-21.SLDDRW|Kiffy2_ClampingLever_2011-02-21.SLDDRW]]}}}
[[Kiffy2_ClampingLever_2011-02-21.SLDDRW|Kiffy2_ClampingLever_2011-02-21.SLDDRW]]
!notes
attached by FileDropPlugin
!type
application/solidworks
!file
./Cao/Kiffy2_ClampingLever_2011-02-21.SLDDRW
!url
!data
!usage
{{{[[Kiffy2_ClampingLever_2011-02-21.SLDPRT|Kiffy2_ClampingLever_2011-02-21.SLDPRT]]}}}
[[Kiffy2_ClampingLever_2011-02-21.SLDPRT|Kiffy2_ClampingLever_2011-02-21.SLDPRT]]
!notes
attached by FileDropPlugin
!type
application/solidworks
!file
./Cao/Kiffy2_ClampingLever_2011-02-21.SLDPRT
!url
!data
!usage
{{{[[Kiffy2_ClampingMaster_2011-02-02.SLDPRT|Kiffy2_ClampingMaster_2011-02-02.SLDPRT]]}}}
[[Kiffy2_ClampingMaster_2011-02-02.SLDPRT|Kiffy2_ClampingMaster_2011-02-02.SLDPRT]]
!notes
attached by FileDropPlugin
!type
application/solidworks
!file
./JBouchez/Cao/Kiffy2_ClampingMaster_2011-02-02.SLDPRT
!url
!data
!usage
{{{[img[Kiffy2_ClampingMaster_2011-02-02.jpg]]}}}
[img[Kiffy2_ClampingMaster_2011-02-02.jpg]]
!notes
attached by FileDropPlugin
!type
image/jpeg
!file
./JBouchez/Pict/Kiffy2_ClampingMaster_2011-02-02.jpg
!url
!data
!usage
{{{[[Kiffy2_ClampingMaster_2011-02-02.stl.zip|Kiffy2_ClampingMaster_2011-02-02.stl.zip]]}}}
[[Kiffy2_ClampingMaster_2011-02-02.stl.zip|Kiffy2_ClampingMaster_2011-02-02.stl.zip]]
!notes
attached by FileDropPlugin
!type
application/x-zip-compressed
!file
./JBouchez/Export/Kiffy2_ClampingMaster_2011-02-02.stl.zip
!url
!data
!usage
{{{[[Kiffy2_ClampingMaster_2011-02-03.igs.zip|Kiffy2_ClampingMaster_2011-02-03.igs.zip]]}}}
[[Kiffy2_ClampingMaster_2011-02-03.igs.zip|Kiffy2_ClampingMaster_2011-02-03.igs.zip]]
!notes
attached by FileDropPlugin
!type
application/x-zip-compressed
!file
./JBouchez/Export/Kiffy2_ClampingMaster_2011-02-03.igs.zip
!url
!data
!usage
{{{[img[Kiffy2_ClampingMaster_2011-02-08.jpg]]}}}
[img[Kiffy2_ClampingMaster_2011-02-08.jpg]]
!notes
attached by FileDropPlugin
!type
image/jpeg
!file
./JBouchez/Pict/Kiffy2_ClampingMaster_2011-02-08.jpg
!url
!data
!usage
{{{[[Kiffy2_ClampingPin_2011-02-21.SLDDRW|Kiffy2_ClampingPin_2011-02-21.SLDDRW]]}}}
[[Kiffy2_ClampingPin_2011-02-21.SLDDRW|Kiffy2_ClampingPin_2011-02-21.SLDDRW]]
!notes
attached by FileDropPlugin
!type
application/solidworks
!file
./Shared/Cao/Kiffy2_ClampingPin_2011-02-21.SLDDRW
!url
!data
!usage
{{{[[Kiffy2_ClampingPin_2011-02-21.SLDPRT|Kiffy2_ClampingPin_2011-02-21.SLDPRT]]}}}
[[Kiffy2_ClampingPin_2011-02-21.SLDPRT|Kiffy2_ClampingPin_2011-02-21.SLDPRT]]
!notes
attached by FileDropPlugin
!type
application/solidworks
!file
./Shared/Cao/Kiffy2_ClampingPin_2011-02-21.SLDPRT
!url
!data
!usage
{{{[[Kiffy2_Clamping_2011-02-18.SLDASM|Kiffy2_Clamping_2011-02-18.SLDASM]]}}}
[[Kiffy2_Clamping_2011-02-18.SLDASM|Kiffy2_Clamping_2011-02-18.SLDASM]]
!notes
attached by FileDropPlugin
!type
application/solidworks
!file
./Shared/Cao/Kiffy2_Clamping_2011-02-18.SLDASM
!url
!data
!usage
{{{[[Kiffy2_SteeringLink_2011-06-09.SLDASM|Kiffy2_SteeringLink_2011-06-09.SLDASM]]}}}
[[Kiffy2_SteeringLink_2011-06-09.SLDASM|Kiffy2_SteeringLink_2011-06-09.SLDASM]]
!notes
attached by FileDropPlugin
!type
application/solidworks
!file
./Cao/Kiffy2_SteeringLink_2011-06-09.SLDASM
!url
!data
!usage
{{{[img[Kiffy_2011-05-19T08-26-54.jpg]]}}}
[img[Kiffy_2011-05-19T08-26-54.jpg]]
!notes
attached by FileDropPlugin
!type
image/jpeg
!file
./Pict/Kiffy_2011-05-19T08-26-54.jpg
!url
!data
!usage
{{{[[Kiffy_FrontBike_2011-06-07.SLDASM|Kiffy_FrontBike_2011-06-07.SLDASM]]}}}
[[Kiffy_FrontBike_2011-06-07.SLDASM|Kiffy_FrontBike_2011-06-07.SLDASM]]
!notes
attached by FileDropPlugin
!type
application/solidworks
!file
./Cao/Kiffy_FrontBike_2011-06-07.SLDASM
!url
!data
!usage
{{{[img[Kiffy_FrontBike_2011-07-27.jpg]]}}}
[img[Kiffy_FrontBike_2011-07-27.jpg]]
!notes
attached by FileDropPlugin
!type
image/jpeg
!file
./Pict/Kiffy_FrontBike_2011-07-27.jpg
!url
!data
!usage
{{{[img[Kiffy_KingpinFitting_20100517.jpg]]}}}
[img[Kiffy_KingpinFitting_20100517.jpg]]
!notes
attached by FileDropPlugin
!type
image
!file
./CKopp/Picts/Kiffy_KingpinFitting_20100517.jpg
!url
!data
!usage
{{{[[Kiffy_Porter_2011-06-03.SLDASM|Kiffy_Porter_2011-06-03.SLDASM]]}}}
[[Kiffy_Porter_2011-06-03.SLDASM|Kiffy_Porter_2011-06-03.SLDASM]]
!notes
attached by FileDropPlugin
!type
application/solidworks
!file
./Cao/Kiffy_Porter_2011-06-03.SLDASM
!url
!data
!usage
{{{[[Kiffy_SteeringFitting_201000604.SLDDRW|Kiffy_SteeringFitting_201000604.SLDDRW]]}}}
[[Kiffy_SteeringFitting_201000604.SLDDRW|Kiffy_SteeringFitting_201000604.SLDDRW]]
!notes
attached by FileDropPlugin
!type
application
!file
./CKopp/Cao/Kiffy_SteeringFitting_201000604.SLDDRW
!url
!data
!usage
{{{[[Kiffy_SteeringFitting_20100511.SLDASM|Kiffy_SteeringFitting_20100511.SLDASM]]}}}
[[Kiffy_SteeringFitting_20100511.SLDASM|Kiffy_SteeringFitting_20100511.SLDASM]]
!notes
attached by FileDropPlugin
!type
application/solidworks
!file
./Cao/Kiffy_SteeringFitting_20100511.SLDASM
!url
!data
!usage
{{{[img[Kiffy_SteeringFitting_20100511.jpg]]}}}
[img[Kiffy_SteeringFitting_20100511.jpg]]
!notes
attached by FileDropPlugin
!type
image
!file
./CKopp/Picts/Kiffy_SteeringFitting_20100511.jpg
!url
!data
!usage
{{{[img[Kiffy_SteeringFitting_20100517.jpg]]}}}
[img[Kiffy_SteeringFitting_20100517.jpg]]
!notes
attached by FileDropPlugin
!type
image
!file
./CKopp/Picts/Kiffy_SteeringFitting_20100517.jpg
!url
!data
!usage
{{{[img[Kiffy_SteeringFitting_20100604.jpg]]}}}
[img[Kiffy_SteeringFitting_20100604.jpg]]
!notes
attached by FileDropPlugin
!type
image
!file
./CKopp/Picts/Kiffy_SteeringFitting_20100604.jpg
!url
!data
|Ref.|LJF - 106417|
|Qty|1 (2/kiffy)|
|Material|Caoutchouc|
|Process|Standard|
|Masse| 1g|
|Volume|d8 e1,78|
|Finish| |
|PU| |
!Todo
!Description
Joint torique intérieur des [[Capot des tubes de fusée 20100421]]
|Ref.|LJF - 121415|
|Qty|1 (2/kiffy)|
|Material|Caoutchouc|
|Process|Standard|
|Masse|1g|
|Volume|d21 e2|
|Finish| |
|PU| |
!Todo
!Description
Joint torique extérieur des [[Capot des tubes de fusée 20100421]]
|Ref.|11npi018a|
|Qty||
|Material|Inox 304L ep1mm|
|Process||
|Masse||
|Volume||
|Finish||
|PU|20,46@Laser Fusion 22,40€Laser Centre|
!!Todo
Prix JBo
!Description
Allonger 10 mm pour stabilité expo et laissaire passer les roues en Caddy
Livré
/***
|Name:|LessBackupsPlugin|
|Description:|Intelligently limit the number of backup files you create|
|Version:|3.0.1 ($Rev: 2320 $)|
|Date:|$Date: 2007-06-18 22:37:46 +1000 (Mon, 18 Jun 2007) $|
|Source:|http://mptw.tiddlyspot.com/#LessBackupsPlugin|
|Author:|Simon Baird|
|Email:|simon.baird@gmail.com|
|License:|http://mptw.tiddlyspot.com/#TheBSDLicense|
!!Description
You end up with just backup one per year, per month, per weekday, per hour, minute, and second. So total number won't exceed about 200 or so. Can be reduced by commenting out the seconds/minutes/hours line from modes array
!!Notes
Works in IE and Firefox only. Algorithm by Daniel Baird. IE specific code by by Saq Imtiaz.
***/
//{{{
var MINS = 60 * 1000;
var HOURS = 60 * MINS;
var DAYS = 24 * HOURS;
if (!config.lessBackups) {
config.lessBackups = {
// comment out the ones you don't want or set config.lessBackups.modes in your 'tweaks' plugin
modes: [
["YYYY", 365*DAYS], // one per year for ever
["MMM", 31*DAYS], // one per month
["ddd", 7*DAYS], // one per weekday
//["d0DD", 1*DAYS], // one per day of month
["h0hh", 24*HOURS], // one per hour
//["m0mm", 1*HOURS], // one per minute
//["s0ss", 1*MINS], // one per second
["latest",0] // always keep last version. (leave this).
]
};
}
window.getSpecialBackupPath = function(backupPath) {
var now = new Date();
var modes = config.lessBackups.modes;
for (var i=0;i<modes.length;i++) {
// the filename we will try
var specialBackupPath = backupPath.replace(/(\.)([0-9]+\.[0-9]+)(\.html)$/,
'$1'+now.formatString(modes[i][0]).toLowerCase()+'$3')
// open the file
try {
if (config.browser.isIE) {
var fsobject = new ActiveXObject("Scripting.FileSystemObject")
var fileExists = fsobject.FileExists(specialBackupPath);
if (fileExists) {
var fileObject = fsobject.GetFile(specialBackupPath);
var modDate = new Date(fileObject.DateLastModified).valueOf();
}
}
else {
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
file.initWithPath(specialBackupPath);
var fileExists = file.exists();
if (fileExists) {
var modDate = file.lastModifiedTime;
}
}
}
catch(e) {
// give up
return backupPath;
}
// expiry is used to tell if it's an 'old' one. Eg, if the month is June and there is a
// June file on disk that's more than an month old then it must be stale so overwrite
// note that "latest" should be always written because the expiration period is zero (see above)
var expiry = new Date(modDate + modes[i][1]);
if (!fileExists || now > expiry)
return specialBackupPath;
}
}
// hijack the core function
window.getBackupPath_mptw_orig = window.getBackupPath;
window.getBackupPath = function(localPath) {
return getSpecialBackupPath(getBackupPath_mptw_orig(localPath));
}
//}}}
|Ref.|11npi008|
|Qty|1|
|Material|6061|
|Process||
|Masse|20.98g|
|Volume||
|PU|47€/ECI 158€/Dornberger 59€/TAT|
|Finish|
!!Todo
réduire point de pivot slw pour augmenter la course JBo
!usage
{{{[[LevierAncrage_11npi008.PDF|LevierAncrage_11npi008.PDF]]}}}
[[LevierAncrage_11npi008.PDF|LevierAncrage_11npi008.PDF]]
!notes
attached by FileDropPlugin
!type
application/pdf
!file
./Plans/LevierAncrage_11npi008.PDF
!url
!data
!usage
{{{[[LevierAncrage_11npi008.igs.zip|LevierAncrage_11npi008.igs.zip]]}}}
[[LevierAncrage_11npi008.igs.zip|LevierAncrage_11npi008.igs.zip]]
!notes
attached by FileDropPlugin
!type
application/x-zip-compressed
!file
./Shared/Export/LevierAncrage_11npi008.igs.zip
!url
!data
!!Todo
Axe plus long et serré JBo
décaler bandes de frein JBo
anti-rotation JBo
!!Avancement
!Description
!
<<tiddler AutoRefresh>><<tiddler [[FetDescription]] with:{{tiddler.title}}>>
!Nomenclature
<<tiddler AutoRefresh>><<tiddler [[FetNomenclature]] with:{{tiddler.title}}>>
|Ref.|10npi012|
|Qty|2|
|Process|Assemblage|
|Masse|213g|
|Volume| |
|Finish|-|
|PU| |
!Todo
!Description
Fixation par circlip
!Nomenclature
<<tiddler AutoRefresh>><<tiddler [[FetNomenclature]] with:{{tiddler.title}}>>
/***
|''Name''|LineBreakHack|
|''Description''|formatter modifying TiddlyWiki's handling of line breaks, before and after headings, lists and quots|
|''Author:''|Piesch Mario|
|''Version''|0.2|
|''Status''|@@beta@@|
|''Source''|http://a-pm-experimental.tiddlyspot.com/#LineBreakHack|
|''License''|[[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]]|
!Description
This formatter modifies the way line breaks in ~TiddlyWiki markup are rendered;
A linebreak at the end of the line and all following empty lines are replaced by: one {{{<br>}}}
One linebreak in front of a heading will be removed.
!!Examples
{{{
<<<
!Heading 1 at the beginning
Some distance also in editmode possible. As many lines as you wish.
!!Heading 2
Some text
Some more text<br>
Break the line with {{{<br>}}} <br>
forced linebreak and "new Line" produce an empty line
<<<
<<<
# numbered list
# one empty line <br> a line after a < br>
## doesn't break the list
# two empty lines do <br><br><br>
# br in front: does never break the list
<<<
<<<
>Quote by Line
>one empty line
>two empty lines
<<<
}}}
<<<
!Heading 1 at the beginning
Some distance also in editmode possible. As many lines as you wish.
!!Heading 2
Some text
Some more text<br>
Break the line with {{{<br>}}} <br>
forced linebreak and "new Line" produce an empty line
<<<
<<<
# numbered list
# one empty line <br>a line after a < br>
## doesn't break the list
# two empty lines do <br><br><br>
# br in front: does never break the list
<<<
<<<
>Quote by Line
>one empty line
>two empty lines
<<<
!Revision History
!!V0.2 (2010-01-01)
* removes all linebreaks after headings
* deals with lists
* changes blockqoute and linequote
!!V0.1 (2009-12-20)
* initial release
!ToDo
*--Doesn't work right after a heading.--
*--There are some more inconsistencies. lists, qouts-- ..
!Code
***/
//{{{
(function(formatters) { //# set up alias
// modify line-break formatter to find more than one \n
var lineBreak = formatters[formatters.findByField("name", "lineBreak")];
lineBreak.match = "\\n+|<br ?/?>";
// lineBreak.match = "\\n{1,2}|<br ?/?>";
//remove one line break before heading.
var heading = formatters[formatters.findByField("name", "heading")];
merge( heading, {termRegExp: /(\n+)/mg});
heading.match = "^\n?!{1,6}";
heading.handler = function(w) {
if (w.matchText[0]=='\n') w.matchLength = w.matchLength - 1;
w.subWikifyTerm(createTiddlyElement(w.output,"h" + w.matchLength), this.termRegExp);
};
for (var i=0; i<formatters.length; i++) {
if (formatters[i].name == "list") {
merge( formatters[i], {termRegExp: /(\n{1,2})/mg});
}
if (formatters[i].name == "quoteByBlock") {
merge( formatters[i], {termRegExp: /(^<<<(\n{1,2}|$))/mg});
}
if (formatters[i].name == "quoteByLine") {
merge( formatters[i], {termRegExp: /(\n{1,2})/mg});
break;
} // if ..
} // for ..
})(config.formatters); //# end of alias
//}}}
<<tiddler AutoRefresh>><<tiddler NewTaggedTiddler with: {{tiddler.title}} {{tiddler.title}} Blank>>
<<tiddler FetTop2000Tag with:{{tiddler.title}} {{tiddler.title}}>>
''Load :''
<<loadTiddlers label:WAirbankProspectPackage tag:AirbankProspectPackage file:///W:/Groups/airbank_tw__/airbank_tw/index.html init autosave>>
<<loadTiddlers label:AirbankBikePackage tag:AirbankBikePackage file:///Z:/airbank_tw/index.html init autosave>>
<<loadTiddlers label:AirbankLookPackage tag:AirbankLookPackage file:///Z:/airbank_tw/index.html init autosave>>
<<loadTiddlers label:AirbankPiPackage tag:AirbankPiPackage file:///Z:/airbank_tw/index.html>>
<<loadTiddlers label:AirbankMaterialPackage tag:AirbankMaterialPackage file:///Z:/airbank_tw/index.html init autosave>>
<<loadTiddlers label:AirbankMeetingPackage tag:AirbankMeetingPackage file:///Z:/airbank_tw/index.html init autosave>>
<<loadTiddlers label:WAirbankObjectsPackage tag:AirbankObjectsPackage file:///W:/Groups/airbank_tw__/airbank_tw/index.html init autosave>>
<<loadTiddlers label:AirbankStrategyPackage tag:AirbankStrategyPackage file:///Z:/airbank_tw/index.html init autosave>>
<<loadTiddlers label:WAirbankCataloguePackage tag:AirbankCataloguePackage file:///W:/Groups/airbank_tw__/airbank_tw/index.html init autosave>>
<<loadTiddlers label:AnticipationPackage tag:AnticipationPackage file:///Z:/airbank_tw/index.html init autosave>>
<<loadTiddlers label:AirbankAsitPackage tag:AirbankAsitPackage file:///Z:/airbank_tw/index.html init autosave>>
<<loadTiddlers label:AirBankValueEngineeringPackage tag:AirBankValueEngineeringPackage file:///Z:/airbank_tw/index.html init autosave>>
<<loadTiddlers label:WAirbankBlankPackage tag:AirbankBlankPackage file:///W:/Groups/airbank_tw__/airbank_tw/index.html >>
<<loadTiddlers label:AirbankProjectPackage tag:AirbankProjectPackage file:///Z:/airbank_tw/index.html init autosave>>
<<loadTiddlers label:AirbankCreativitePackage tag:AirbankCreativitePackage file:///Z:/airbank_tw/index.html init autosave>>
<<loadTiddlers label:WAirbankContactPackage tag:AirbankContactPackage file:///W:/Groups/airbank_tw__/airbank_tw/index.html init autosave>>
<<loadTiddlers label:AirbankPluginPackage tag:AirbankPluginPackage file:///Z:/airbank_tw/index.html init autosave>>
<<loadTiddlers label:AirbankControlePackage tag:AirbankControlePackage file:///Z:/airbank_tw/index.html init autosave>>
<<loadTiddlers label:AirbankSavoirPackage tag:AirbankSavoirPackage file:///Z:/airbank_tw/index.html init autosave>>
<<loadTiddlers label:AirbankSujetsPackage tag:AirbankSujetsPackage file:///Z:/airbank_tw/index.html init autosave>>
/***
|''Name:''|LoadRemoteFileThroughProxy (previous LoadRemoteFileHijack)|
|''Description:''|When the TiddlyWiki file is located on the web (view over http) the content of [[SiteProxy]] tiddler is added in front of the file url. If [[SiteProxy]] does not exist "/proxy/" is added. |
|''Version:''|1.1.0|
|''Date:''|mar 17, 2007|
|''Source:''|http://tiddlywiki.bidix.info/#LoadRemoteFileHijack|
|''Author:''|BidiX (BidiX (at) bidix (dot) info)|
|''License:''|[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D ]]|
|''~CoreVersion:''|2.2.0|
***/
//{{{
version.extensions.LoadRemoteFileThroughProxy = {
major: 1, minor: 1, revision: 0,
date: new Date("mar 17, 2007"),
source: "http://tiddlywiki.bidix.info/#LoadRemoteFileThroughProxy"};
if (!window.bidix) window.bidix = {}; // bidix namespace
if (!bidix.core) bidix.core = {};
bidix.core.loadRemoteFile = loadRemoteFile;
loadRemoteFile = function(url,callback,params)
{
if ((document.location.toString().substr(0,4) == "http") && (url.substr(0,4) == "http")){
url = store.getTiddlerText("SiteProxy", "/proxy/") + url;
}
return bidix.core.loadRemoteFile(url,callback,params);
}
//}}}
/***
|Name|LoadTiddlersPlugin|
|Source|http://www.TiddlyTools.com/#LoadTiddlersPlugin|
|Documentation|http://www.TiddlyTools.com/#LoadTiddlersPluginInfo|
|Version|3.9.0|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|macro for automated updates or one-click installations of tiddlers from remote sources|
!!!!!Documentation
>see [[LoadTiddlersPluginInfo]]
!!!!!Configuration
<<<
<<option chkLoadTiddlersShowReport>>after loading tiddlers, automatically display [[ImportedTiddlers]] (if created)
__password-protected server settings //(optional, if needed)//:__
>username: <<option txtRemoteUsername>> password: <<option txtRemotePassword>>
>{{{usage: <<option txtRemoteUsername>> <<option txtRemotePassword>>}}}
>''note: these settings are also used by [[ExternalTiddlersPlugin]] and [[ImportTiddlersPlugin]]''
<<<
!!!!!Revisions
<<<
2010.08.11 3.9.0 added 'autosave' optional param
|please see [[LoadTiddlersPluginInfo]] for additional revision details|
2005.07.20 1.0.0 Initial Release
<<<
!!!!!Code
***/
//{{{
version.extensions.LoadTiddlersPlugin= {major: 3, minor: 9, revision: 0, date: new Date(2010,8,11)};
if (config.options.chkLoadTiddlersShowReport===undefined)
config.options.chkLoadTiddlersShowReport=true;
config.macros.loadTiddlers = {
label: '',
tip: "add/update tiddlers from '%0'",
lockedTag: 'noReload', // if existing tiddler has this tag value, don't overwrite it, even if inbound tiddler is newer
askMsg: 'Please enter a local path/filename or a remote URL',
openMsg: 'Opening %0',
openErrMsg: 'Could not open %0 - error=%1',
readMsg: 'Read %0 bytes from %1',
foundMsg: 'Found %0 tiddlers in %1',
nochangeMsg: "'%0' is up-to-date... skipped.",
lockedMsg: "'%0' is tagged '%1'... skipped.",
skippedMsg: 'skipped (cancelled by user)',
loadedMsg: 'Loaded %0 of %1 tiddlers from %2',
reportTitle: 'ImportedTiddlers',
warning: "Warning!! Processing '%0' as a systemConfig (plugin) tiddler may produce unexpected results! Press OK to proceed.",
autosaveMsg: 'Save current document? Press OK to proceed.',
handler: function(place,macroName,params) {
var label=(params[0] && params[0].substr(0,6)=='label:')?params.shift().substr(6):this.label;
var tip=(params[0] && params[0].substr(0,7)=='prompt:')?params.shift().substr(7):this.tip;
var filter='updates';
if (params[0] && (params[0]=='all' || params[0]=='new' || params[0]=='changes' || params[0]=='updates'
|| params[0].substr(0,8)=='tiddler:' || params[0].substr(0,4)=='tag:'))
filter=params.shift();
var src=params.shift(); if (!src || !src.length) return; // filename is required
var quiet=(params[0]=='quiet'); if (quiet) params.shift();
var ask=(params[0]=='confirm'); if (ask) params.shift();
var force=(params[0]=='force'); if (force) params.shift();
var init=(params[0]=='init'); if (init) params.shift();
var nodirty=(params[0]=='nodirty'); if (nodirty) params.shift();
var norefresh=(params[0]=='norefresh'); if (norefresh) params.shift();
var noreport=(params[0]=='noreport'); if (noreport) params.shift();
var autosave=(params[0]=='autosave'); if (autosave) params.shift();
this.newTags=[]; if (params[0]) this.newTags=params; // any remaining params are used as 'autotags'
var flags={quiet:quiet, ask:ask, filter:filter, force:force, init:init,
nodirty:nodirty, norefresh:norefresh, noreport:noreport, autosave:autosave};
if (label.trim().length) { // CLICKABLE LINK
createTiddlyButton(place,
label.format([src.replace(/%20/g,' ')]),
tip.format([src.replace(/%20/g,' ')]),
function() {
var cml=config.macros.loadTiddlers;
cml.loadFile(src,cml.doImport,flags);
return false;
})
}
else // IMMEDIATE IMPORT
this.loadFile(src,this.doImport,flags);
},
loadFile: function(src,callback,params) {
var quiet=params.quiet;
if (src=='ask') src=prompt(this.askMsg);
if (src==undefined || !src.length) return null; // filename is required
if (!quiet) clearMessage();
if (!quiet) displayMessage(this.openMsg.format([src.replace(/%20/g,' ')]));
// if working locally and src is not a URL, read from local filesystem
if (document.location.protocol=='file:' && src.substr(0,5)!='http:' && src.substr(0,5)!='file:') {
var txt=loadFile(src);
if (!txt) { // file didn't load, might be relative path.. try fixup
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);
src=pathPrefix+src;
if (pathPrefix.substr(0,5)!='http:') src=getLocalPath(src);
var txt=loadFile(src);
}
if (!txt) { // file still didn't load, report error
if (!quiet) displayMessage(this.openErrMsg.format([src.replace(/%20/g,' '),'(unknown)']));
} else {
if (!quiet) displayMessage(this.readMsg.format([txt.length,src.replace(/%20/g,' ')]));
if (version.major+version.minor*.1+version.revision*.01!=2.52)
txt=convertUTF8ToUnicode(txt);
if (callback) callback(true,params,txt,src,null);
}
} else { // use XMLHttpRequest
doHttp('GET',src,null,null,config.options.txtRemoteUsername,config.options.txtRemotePassword,callback,params,null);
}
},
readTiddlersFromHTML: function(html) {
// for TW2.2+
if (TiddlyWiki.prototype.importTiddlyWiki!=undefined) {
var remoteStore=new TiddlyWiki();
remoteStore.importTiddlyWiki(html);
return remoteStore.getTiddlers('title');
}
},
readTiddlersFromCSV: function(CSV) {
var remoteStore=new TiddlyWiki();
// GET NAMES
var lines=CSV.replace(/\r/g,'').split('\n');
var names=lines.shift().replace(/"/g,'').split(',');
CSV=lines.join('\n');
// ENCODE commas and newlines within quoted values
var comma='!~comma~!'; var commaRE=new RegExp(comma,'g');
var newline='!~newline~!'; var newlineRE=new RegExp(newline,'g');
CSV=CSV.replace(/"([^"]*?)"/g,
function(x){ return x.replace(/\,/g,comma).replace(/\n/g,newline); });
// PARSE lines
var lines=CSV.split('\n');
for (var i=0; i<lines.length; i++) { if (!lines[i].length) continue;
var values=lines[i].split(',');
// DECODE commas, newlines, and doubled-quotes, and remove enclosing quotes (if any)
for (var v=0; v<values.length; v++)
values[v]=values[v].replace(commaRE,',').replace(newlineRE,'\n')
.replace(/^"|"$/g,'').replace(/""/g,'"');
// EXTRACT tiddler values
var title=''; var text=''; var tags=[]; var fields={};
var created=null; var when=new Date(); var who=config.options.txtUserName;
for (var v=0; v<values.length; v++) { var val=values[v];
if (names[v]) switch(names[v].toLowerCase()) {
case 'title': title=val.replace(/\[\]\|/g,'_'); break;
case 'created': created=new Date(val); break;
case 'modified':when=new Date(val); break;
case 'modifier':who=val; break;
case 'text': text=val; break;
case 'tags': tags=val.readBracketedList(); break;
default: fields[names[v].toLowerCase()]=val; break;
}
}
// CREATE tiddler in temporary store
if (title.length)
remoteStore.saveTiddler(title,title,text,who,when,tags,fields,true,created||when);
}
return remoteStore.getTiddlers('title');
},
createTiddlerFromFile: function(src,txt) {
var t=new Tiddler();
var pos=src.lastIndexOf("/"); if (pos==-1) pos=src.lastIndexOf("\\");
t.title=pos==-1?src:src.substr(pos+1);
t.text=txt;
t.created=t.modified=new Date();
t.modifier=config.options.txtUserName;
if (src.substr(src.length-3,3)=='.js') t.tags=['systemConfig'];
return [t];
},
doImport: function(status,params,html,src,xhr) {
var cml=config.macros.loadTiddlers; // abbrev
src=src.split('?')[0]; // strip off "?nocache=..."
if (!status) {
displayMessage(cml.openErrMsg.format([src.replace(/%20/g,' '),xhr.status]));
return false;
}
var quiet=params.quiet;
var ask=params.ask;
var filter=params.filter;
var force=params.force;
var init=params.init;
var nodirty=params.nodirty;
var norefresh=params.norefresh;
var noreport=params.noreport;
var autosave=params.autosave;
var tiddlers = cml.readTiddlersFromHTML(html);
if (!tiddlers||!tiddlers.length) tiddlers=cml.readTiddlersFromCSV(html);
if (!tiddlers||!tiddlers.length) tiddlers=cml.createTiddlerFromFile(src,html);
var count=tiddlers?tiddlers.length:0;
if (!quiet) displayMessage(cml.foundMsg.format([count,src.replace(/%20/g,' ')]));
var wasDirty=store.isDirty();
store.suspendNotifications();
var count=0;
if (tiddlers) for (var t=0;t<tiddlers.length;t++) {
var inbound = tiddlers[t];
var theExisting = store.getTiddler(inbound.title);
if (inbound.title==cml.reportTitle)
continue; // skip 'ImportedTiddlers' history from the other document...
if (theExisting && theExisting.tags.contains(cml.lockedTag)) {
if (!quiet) displayMessage(cml.lockedMsg.format([theExisting.title,cml.lockedTag]));
continue; // skip existing tiddler if tagged with 'noReload'
}
// apply the all/new/changes/updates filter (if any)
if (filter && filter!='all') {
if ((filter=='new') && theExisting) // skip existing tiddlers
continue;
if ((filter=='changes') && !theExisting) // skip new tiddlers
continue;
if ((filter.substr(0,4)=='tag:') && inbound.tags.indexOf(filter.substr(4))==-1) // must match specific tag value
continue;
if ((filter.substr(0,8)=='tiddler:') && inbound.title!=filter.substr(8)) // must match specific tiddler name
continue;
if (!force && store.tiddlerExists(inbound.title) && ((theExisting.modified.getTime()-inbound.modified.getTime())>=0)) {
var msg=cml.nochangeMsg;
if (!quiet&&msg.length) displayMessage(msg.format([inbound.title]));
continue;
}
}
// get confirmation if required
var msg=(theExisting?'Update':'Add')+" tiddler '"+inbound.title+"'\n"
+'from '+src.replace(/%20/g,' ')+'\n\nOK to proceed?';
if (ask && !confirm(msg))
{ tiddlers[t].status=cml.skippedMsg; continue; }
// DO IT!
var tags=new Array().concat(inbound.tags,cml.newTags);
store.saveTiddler(inbound.title, inbound.title, inbound.text, inbound.modifier,
inbound.modified, tags, inbound.fields, true, inbound.created);
// force creation date to imported value - needed for TW2.1.3 or earlier
store.fetchTiddler(inbound.title).created = inbound.created;
tiddlers[t].status=theExisting?'updated':'added'
if (init && tags.contains('systemConfig') && !tags.contains('systemConfigDisable')) {
var ok=true;
if (ask||!quiet) ok=confirm(cml.warning.format([inbound.title]))
if (ok) { // run the plugin
try { window.eval(inbound.text); tiddlers[t].status+=' (plugin initialized)'; }
catch(ex) { displayMessage(config.messages.pluginError.format([exceptionText(ex)])); }
}
}
count++;
}
store.resumeNotifications();
if (count) {
// set/clear 'unsaved changes' flag, refresh page display, and generate a report
store.setDirty(wasDirty||!nodirty);
if (!norefresh) {
story.forEachTiddler(function(t,e){
if(!story.isDirty(t))story.refreshTiddler(t,null,true)
});
store.notifyAll();
}
if (!noreport) cml.report(src,tiddlers,count,quiet);
}
if (!quiet||count) // force msg if tiddlers were loaded
displayMessage(cml.loadedMsg.format([count,tiddlers.length,src.replace(/%20/g,' ')]));
if (count && autosave && (!ask||confirm(cml.autosaveMsg))) saveChanges();
},
showReport: true,
report: function(src,tiddlers,count,quiet) {
var cml=config.macros.loadTiddlers; // abbrev
// format the new report content
var newText = 'On '+(new Date()).toLocaleString()+', ';
newText += config.options.txtUserName+' loaded '+count+' tiddlers ';
newText += 'from\n[['+src+'|'+src+']]:\n';
newText += '<<<\n';
for (var t=0; t<tiddlers.length; t++)
if (tiddlers[t].status)
newText += '#[['+tiddlers[t].title+']] - '+tiddlers[t].status+'\n';
newText += '<<<\n';
var title=cml.reportTitle;
var currText='';
var t=store.getTiddler(title);
if (t) currText=(t.text.length?'\n----\n':'')+t.text;
store.saveTiddler(title, title, newText+currText,
config.options.txtUserName, new Date(), t?t.tags:null, t?t.fields:null);
if (!quiet) {
if (config.options.chkLoadTiddlersShowReport)
story.displayTiddler(null,title);
story.refreshTiddler(title,null,true);
}
}
}
//}}}
<<search>>
<<tiddler ProjectMainMenu>>
+++
<<option txtUserName>>[[Mémo]]
<<newJournal "YYYY-0MM-0DDT0hh:0mm" label:"Nouveau" >>
[[Templates]]
<<permaview>>
<<tiddler ToggleRightSidebar>>
===
|Ref.|10npi017c|
|Qty|1|
|Material|aluminium|
|Process|usinage|
|Masse|...|
|Volume| |
|Finish|-|
|PU|175@MGp 163.00@DOrn|
!Todo
Usinage JBo > DOrn
!Description
rev.b
rev.a
BON POUR EXECUTION
general tolerance ±0.5mm
Lame de tole --soudée-- vissée,
Accessible lorsque la roue est sur la béquille.
Passe entre les rayons en position Expo
<!--{{{-->
<link rel='alternate' type='application/rss+xml' title='RSS' href='index.xml' />
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
<!--}}}-->
/***
|Name|MatchTagsPlugin|
|Source|http://www.TiddlyTools.com/#MatchTagsPlugin|
|Documentation|http://www.TiddlyTools.com/#MatchTagsPluginInfo|
|Version|2.0.1|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|'tag matching' with full boolean expressions (AND, OR, NOT, and nested parentheses)|
!!!!!Documentation
> see [[MatchTagsPluginInfo]]
!!!!!Revisions
<<<
2009.08.29 [2.0.1] added support for {{{config.macros.matchTags.defTags}}} to auto-tag [[MatchingTiddlers]] output
| please see [[MatchTagsPluginInfo]] for additional revision details |
2008.02.28 [1.0.0] initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.MatchTagsPlugin= {major: 2, minor: 0, revision: 1, date: new Date(2009,8,29)};
// store.getMatchingTiddlers() processes boolean expressions for tag matching
// sortfield (optional) sets sort order for tiddlers - default=title
// tiddlers (optional) use alternative set of tiddlers (instead of current store)
TiddlyWiki.prototype.getMatchingTiddlers = function(tagexpr,sortfield,tiddlers) {
var debug=config.options.chkDebug; // abbreviation
var cmm=config.macros.matchTags; // abbreviation
var r=[]; // results are an array of tiddlers
var tids=tiddlers||store.getTiddlers(sortfield||"title");
if (tiddlers && sortfield) store.sortTiddlers(tids,sortfield);
if (debug) displayMessage(cmm.msg1.format([tids.length]));
// try simple lookup to quickly find single tags or tags that
// contain boolean operators as literals, e.g. "foo and bar"
for (var t=0; t<tids.length; t++)
if (tids[t].isTagged(tagexpr)) r.pushUnique(tids[t]);
if (r.length) {
if (debug) displayMessage(cmm.msg4.format([r.length,tagexpr]));
return r;
}
// convert expression into javascript code with regexp tests,
// so that "tag1 AND ( tag2 OR NOT tag3 )" becomes
// "/\~tag1\~/.test(...) && ( /\~tag2\~/.test(...) || ! /\~tag3\~/.test(...) )"
// normalize whitespace, tokenize operators, delimit with "~"
var c=tagexpr.trim(); // remove leading/trailing spaces
c = c.replace(/\s+/ig," "); // reduce multiple spaces to single spaces
c = c.replace(/\(\s?/ig,"~(~"); // open parens
c = c.replace(/\s?\)/ig,"~)~"); // close parens
c = c.replace(/(\s|~)?&&(\s|~)?/ig,"~&&~"); // &&
c = c.replace(/(\s|~)AND(\s|~)/ig,"~&&~"); // AND
c = c.replace(/(\s|~)?\|\|(\s|~)?/ig,"~||~"); // ||
c = c.replace(/(\s|~)OR(\s|~)/ig,"~||~"); // OR
c = c.replace(/(\s|~)?!(\s|~)?/ig,"~!~"); // !
c = c.replace(/(^|~|\s)NOT(\s|~)/ig,"~!~"); // NOT
c = c.replace(/(^|~|\s)NOT~\(/ig,"~!~("); // NOT(
// change tag terms to regexp tests
var terms=c.split("~"); for (var i=0; i<terms.length; i++) { var t=terms[i];
if (/(&&)|(\|\|)|[!\(\)]/.test(t) || t=="") continue; // skip operators/parens/spaces
if (t==config.macros.matchTags.untaggedKeyword)
terms[i]="tiddlertags=='~~'"; // 'untagged' tiddlers
else
terms[i]="/\\~"+t+"\\~/.test(tiddlertags)";
}
c=terms.join(" ");
if (debug) { displayMessage(cmm.msg2.format([tagexpr])); displayMessage(cmm.msg3.format([c])); }
// scan tiddlers for matches
for (var t=0; t<tids.length; t++) {
// assemble tags from tiddler into string "~tag1~tag2~tag3~"
var tiddlertags = "~"+tids[t].tags.join("~")+"~";
try { if(eval(c)) r.push(tids[t]); } // test tags
catch(e) { // error in test
displayMessage(cmm.msg2.format([tagexpr]));
displayMessage(cmm.msg3.format([c]));
displayMessage(e.toString());
break; // skip remaining tiddlers
}
}
if (debug) displayMessage(cmm.msg4.format([r.length,tagexpr]));
return r;
}
//}}}
//{{{
config.macros.matchTags = {
msg1: "scanning %0 input tiddlers",
msg2: "looking for '%0'",
msg3: "using expression: '%0'",
msg4: "found %0 tiddlers matching '%1'",
noMatch: "no matching tiddlers",
untaggedKeyword: "-",
untaggedLabel: "no tags",
untaggedPrompt: "show tiddlers with no tags",
defTiddler: "MatchingTiddlers",
defTags: "",
defFormat: "%0",
defSeparator: "\n",
reportHeading: "Found %0 tiddlers tagged with: '{{{%1}}}'\n----\n",
handler: function(place,macroName,params,wikifier,paramString,tiddler) {
var mode=params[0]?params[0].toLowerCase():'';
if (mode=="inline")
params.shift();
if (mode=="report" || mode=="panel") {
params.shift();
var target=params.shift()||this.defTiddler;
}
if (mode=="popup") {
params.shift();
if (params[0]&¶ms[0].substr(0,6)=="label:") var label=params.shift().substr(6);
if (params[0]&¶ms[0].substr(0,7)=="prompt:") var prompt=params.shift().substr(7);
} else {
var fmt=(params.shift()||this.defFormat).unescapeLineBreaks();
var sep=(params.shift()||this.defSeparator).unescapeLineBreaks();
}
var sortBy="+title";
if (params[0]&¶ms[0].substr(0,5)=="sort:") sortBy=params.shift().substr(5);
var expr = params.join(" ");
if (mode!="panel" && (!expr||!expr.trim().length)) return;
if (expr==this.untaggedKeyword)
{ var label=this.untaggedLabel; var prompt=this.untaggedPrompt };
switch (mode) {
case "popup": this.createPopup(place,label,expr,prompt,sortBy); break;
case "panel": this.createPanel(place,expr,fmt,sep,sortBy,target); break;
case "report": this.createReport(target,this.defTags,expr,fmt,sep,sortBy); break;
case "inline": default: this.createInline(place,expr,fmt,sep,sortBy); break;
}
},
formatList: function(tids,fmt,sep) {
var out=[];
for (var t=0; t<tids.length; t++) {
var title="[["+tids[t].title+"]]";
var who=tids[t].modifier;
var when=tids[t].modified.toLocaleString();
var text=tids[t].text;
var first=tids[t].text.split("\n")[0];
var desc=store.getTiddlerSlice(tids[t].title,"description");
desc=desc||store.getTiddlerSlice(tids[t].title,"Description");
desc=desc||store.getTiddlerText(tids[t].title+"##description");
desc=desc||store.getTiddlerText(tids[t].title+"##Description");
out.push(fmt.format([title,who,when,text,first,desc]));
}
return out.join(sep);
},
createInline: function(place,expr,fmt,sep,sortBy) {
wikify(this.formatList(store.sortTiddlers(store.getMatchingTiddlers(expr),sortBy),fmt,sep),place);
},
createPopup: function(place,label,expr,prompt,sortBy) {
var btn=createTiddlyButton(place,
(label||expr).format([expr]),
(prompt||config.views.wikified.tag.tooltip).format([expr]),
function(ev){ return config.macros.matchTags.showPopup(this,ev||window.event); });
btn.setAttribute("sortBy",sortBy);
btn.setAttribute("expr",expr);
},
showPopup: function(here,ev) {
var p=Popup.create(here); if (!p) return false;
var tids=store.getMatchingTiddlers(here.getAttribute("expr"));
store.sortTiddlers(tids,here.getAttribute("sortBy"));
var list=[]; for (var t=0; t<tids.length; t++) list.push(tids[t].title);
if (!list.length) createTiddlyText(p,this.noMatch);
else {
var b=createTiddlyButton(createTiddlyElement(p,"li"),
config.views.wikified.tag.openAllText,
config.views.wikified.tag.openAllTooltip,
function() {
var list=this.getAttribute("list").readBracketedList();
story.displayTiddlers(null,tids);
});
b.setAttribute("list","[["+list.join("]] [[")+"]]");
createTiddlyElement(p,"hr");
}
var out=this.formatList(tids," %0 ","\n"); wikify(out,p);
Popup.show();
ev.cancelBubble=true;
if(ev.stopPropagation) ev.stopPropagation();
return false;
},
createReport: function(target,tags,expr,fmt,sep,sortBy) {
var tids=store.sortTiddlers(store.getMatchingTiddlers(expr),sortBy);
if (!tids.length) { displayMessage('no matches for: '+expr); return false; }
var msg=config.messages.overwriteWarning.format([target]);
if (store.tiddlerExists(target) && !confirm(msg)) return false;
var out=this.reportHeading.format([tids.length,expr])
out+=this.formatList(tids,fmt,sep);
store.saveTiddler(target,target,out,config.options.txtUserName,new Date(),tags,{});
story.closeTiddler(target); story.displayTiddler(null,target);
},
createPanel: function(place,expr,fmt,sep,sortBy,tid) {
var s=createTiddlyElement(place,"span"); s.innerHTML=store.getTiddlerText("MatchTagsPlugin##html");
var f=s.getElementsByTagName("form")[0];
f.expr.value=expr; f.fmt.value=fmt; f.sep.value=sep.escapeLineBreaks();
f.tid.value=tid; f.tags.value=this.defTags;
}
};
//}}}
/***
//{{{
!html
<form style='display:inline;white-space:nowrap'>
<input type='text' name='expr' style='width:50%' title='tag expression'><!--
--><input type='text' name='fmt' style='width:10%' title='list item format'><!--
--><input type='text' name='sep' style='width:5%' title='list item separator'><!--
--><input type='text' name='tid' style='width:12%' title='target tiddler title'><!--
--><input type='text' name='tags' style='width:10%' title='target tiddler tags'><!--
--><input type='button' name='go' style='width:8%' value='go' onclick="
var expr=this.form.expr.value;
if (!expr.length) { alert('Enter a boolean tag expression'); return false; }
var fmt=this.form.fmt.value;
if (!fmt.length) { alert('Enter the list item output format'); return false; }
var sep=this.form.sep.value.unescapeLineBreaks();
var tid=this.form.tid.value;
if (!tid.length) { alert('Enter a target tiddler title'); return false; }
var tags=this.form.tags.value;
config.macros.matchTags.createReport(tid,tags,expr,fmt,sep,'title');
return false;">
</form>
!end
//}}}
***/
//{{{
// SHADOW TIDDLER for displaying default panel input form
config.shadowTiddlers.MatchTags="<<matchTags panel>>";
//}}}
//{{{
// TWEAK core filterTiddlers() for enhanced boolean matching in [tag[...]] syntax:
// use getMatchingTiddlers instead getTaggedTiddlers
var fn=TiddlyWiki.prototype.filterTiddlers;
fn=fn.toString().replace(/getTaggedTiddlers/g,"getMatchingTiddlers");
eval("TiddlyWiki.prototype.filterTiddlers="+fn);
//}}}
//{{{
// REDEFINE core handler for enhanced boolean matching in tag:"..." paramifier
// use filterTiddlers() instead of getTaggedTiddlers() to get list of tiddlers.
config.paramifiers.tag = {
onstart: function(v) {
var tagged = store.filterTiddlers("[tag["+v+"]]");
story.displayTiddlers(null,tagged,null,false,null);
}
};
//}}}
1 - Contact
Vous êtes actuellement connectés sur l’outil de travail collaboratif de la Société Capsule.
- SARL au capital de 10 000 €
- Immatriculé au RCS de Marseille 519 718 449 00019
- APE : 7112B
- Siège social : 5 place de Rome - 13006 Marseille
- Tel : 04.84.25.15.21
- Fax : 09.72.19.57.40
- Email : ccarpentier@capsule-ea.fr
- Directeur de la publication rédaction : Julien Bouchez
- Représentant légale : Julien Bouchez / Clémence Carpentier
2 - Contenu
On entend par Contenu de ce site, la structure générale, les textes, les photographies, les images animées ou non, et les sons dont le site est composé.
Les informations fournies par la société Capsule sont les plus exactes et les plus actualisées possible. Cependant, la société Capsule ne donne aucune garantie ni aucune assurance sur l'exactitude, l'actualité et l’exhaustivité des informations contenues dans ce site.
Capsule décline toute responsabilité :
- pour toute interruption du site ;
- survenance de bogues ;
- pour tout dommage résultant d’une intrusion frauduleuse d’un tiers ayant entraîné une modification des informations diffusées sur ce site;
La société Capsule n’est responsable d'aucun dommage ni d'aucun préjudice de quelque nature que ce soit causés par l’utilisation que vous feriez d’une quelconque information fournie sur ce site Internet.
Les informations contenues dans cet outil ainsi que les produits et prestations de services décrits peuvent être modifiés ou actualisés à tout moment sans préavis par la société Capsule.
3 - Droits d'auteur - copyrights
L'ensemble de ce site relève de la législation française et internationale sur le droit d'auteur et la propriété intellectuelle. Tous les droits de reproduction sont réservés, y compris pour les documents téléchargeables et les représentations iconographiques et photographiques.
La reproduction de tout ou partie de ce site est formellement interdite sauf autorisation expresse du directeur de la publication.
4 - Produits et services
Toutes les informations fournies sur ce site par ou au nom de la société Capsule à l'égard de ses produits et de ses services, que ce soient sous forme de données, de recommandations ou autres, sont supposées être fiables, mais Capsule n'assume aucune responsabilité à l'égard de l'application, de l'exploitation ou de l'utilisation de ces informations, de ces produits ou de ces services ou des éventuelles conséquences qui pourraient en découler.
5 - Fonctionnement
Pour toutes remarques sur le fonctionnement du site, écrivez nous : jbouchez@capsule-ea.fr
6 - Conception
Cet outil de travail collaboratif est développé par :
Julien Bouchez - Capsule
5 place de Rome 13006 Marseille
7 - Hébergement
Ce site est hébergé par la société Capsule :
5 place de Rome - 13006 Marseille
Tel : 04.84.25.15.21
Fax : 09.72.19.57.40
8 - Crédits photos
Les photos publiées sur ce site sont la propriété de Capsule. Elles ne sont pas libres de droits. Toute utilisation de ces visuels photographiques est strictement interdite sans une autorisation préalable auprès de Capsule. Les conditions générales d’utilisation sont expressément soumises aux dispositions du Code de la Propriété Intellectuelle.
!Top 2000
{{{
|Nom|###|
|Referent|###|
|Accroche|###|
!!Abstract
###
!Stratégie
|Priorite|0|
}}}
!Top 12
{{{
|Nom|###|
|Referent|###|
|Accroche|###|
!!Abstract
###
!!Todo
###
!!Avancement
###
!Description
###
!Stratégie
|Priorite|0|
}}}
;Nomenclature
{{{
!Nomenclature
<<tiddler AutoRefresh>><<tiddler [[FetNomenclature]] with:{{tiddler.title}}>>
}}}
;Anticipation
{{{
|Nom||
|Baseline||
|Auteur||
|Vision||
|Attrait_utilisateur||
|Attrait_Look||
|Frein_utilisateur||
|Frein_Look||
|Valeurs||
|Timing||
|Mix_Marketing||
}}}
;Description
{{{
!Description
...
!
<<tiddler AutoRefresh>><<tiddler [[FetDescriptionTagTag]] with:{{tiddler.title}}{{tiddler.title}}>>
}}}
;Company
{{{
<<tiddler AutoRefresh>><<tiddler FetCompany with: {{tiddler.title}}>>
}}}
;Contact
{{{
<<tiddler AutoRefresh>><<tiddler FetContact with: {{tiddler.title}}>>
}}}
;En-tête
{{{
|Auteur| |
|Sortie|....|
|Priorité|p.|
|Avancement|0|
}}}
;Critères stratégie
{{{
!Stratégie
|Priorite||
{{fourcolumns{
!!Attraits utilisateur
!!Attraits Look
!!Freins utilisateur
!!Freins Look
!!}}}
}}}
MarketingIndice:
+++
{{twocolumns{
ModeDeDistribution:
TailleDuMarché:
PositionnementGamme:
GainUtilisateur:
PerteUtilisateur:
Esthétique:
IntensitéConcurrentielle:
SolutionsDeSubstitutions :}}}
===
TechniqueIndice:
+++
{{twocolumns{
FacilitéDUtilisation:
SilenceDeFonctionnement:
Recyclabilité:
Réparabilité:
SimplicitéDeConception:
Compatibilité:
Précision:
Légèreté:
FacilitéDIndustrialisation:
Efficacité:
Coût:
FiabilitéRésistance:
Compact:
Rigide:
Aérodynamique:
Confortable:
Communicant:
Sécurité:}}}
===
}}}
;Date iso
{{{
<<view modified date YYYY-MM-DDT0hh:0mm:0ss>>
}}}
;Liste
{{{
<<tiddler AutoRefresh>><<tiddler FetList with: {{tiddler.title}} {{tiddler.title}}>>
}}}
;Taille images
1920x1080
;Versions
{{{
!Versions
<<tiddler AutoRefresh>><<tiddler NewTaggedTiddler with: {{tiddler.title}} Version Blank>>
{{twocolumns{<<tiddler FetList with: {{tiddler.title}} Version>>}}}
}}}
;Liste+
{{{
<<tiddler AutoRefresh>><<tiddler NewTaggedTiddler with: {{tiddler.title}} {{tiddler.title}} Blank>>
{{twocolumns{<<tiddler FetList with: {{tiddler.title}} {{tiddler.title}}>>}}}
}}}
;Contact
{{{
|Name||
|Title||
|Company||
|Phone||
|Fax||
|Email||
|Adress||
|Website||
}}}
;Pièce
{{{
|Ref.||
|Qty||
|Material||
|Process||
|Masse||
|Volume||
|Finish||
|PU||
}}}
;Company
{{{
|Name||
|Phone||
|Fax||
|Email||
|Adress||
|Website||
}}}
;Images
{{{
<<tiddler FetThumbnails with: {{tiddler.title}}>>
}}}
;Fichiers
{{{
!Fichiers
<<tiddler FetFiles with: {{tiddler.title}}>>
}}}
;Intégrer d'autres pages Web
{{{
<html><div align="center"><iframe src="WEBPAGEURLHERE" frameborder="0" width="100%" height="600"></iframe></div></html>
}}}
;Colonnes
{{{
{{twocolumns{ here is much text in two columns}}}
{{fourcolumns{ here is much text in two columns}}}
}}}
;s
{{{
<<forEachTiddler
where
'tiddler.tags.contains("attachment") && tiddler.tags.contains(context.inTiddler.title) && tiddler.text.contains("image") '
sortBy
tiddler.created
descending
write
'"[img(,200px+)["+tiddler.title+"]] "'
>>
}}}
;Composants
{{{
!Composants
<<forEachTiddler
where
'! tiddler.tags.contains("attachment") && !tiddler.title.contains("Test") && tiddler.tags.contains(context.inTiddler.title) '
sortBy
tiddler.created
descending
write
'"[["+tiddler.title+"|"+tiddler.title+"]] ("+tiddler.created.formatString("YYYY-0MM-0DD")+")\n"'
>>
}}}
!usage
{{{[[NPI_Kiffy_KingpinFitting_20100511.SLDASM|NPI_Kiffy_KingpinFitting_20100511.SLDASM]]}}}
[[NPI_Kiffy_KingpinFitting_20100511.SLDASM|NPI_Kiffy_KingpinFitting_20100511.SLDASM]]
!notes
attached by FileDropPlugin
!type
application/solidworks
!file
./Cao/NPI_Kiffy_KingpinFitting_20100511.SLDASM
!url
!data
!usage
{{{[img[NPI_Kiffy_KingpinFitting_20100511.jpg]]}}}
[img[NPI_Kiffy_KingpinFitting_20100511.jpg]]
!notes
attached by FileDropPlugin
!type
image
!file
./CKopp/Picts/NPI_Kiffy_KingpinFitting_20100511.jpg
!url
!data
!usage
{{{[[NPI_Kiffy_KingpinFitting_20100607.SLDDRW|NPI_Kiffy_KingpinFitting_20100607.SLDDRW]]}}}
[[NPI_Kiffy_KingpinFitting_20100607.SLDDRW|NPI_Kiffy_KingpinFitting_20100607.SLDDRW]]
!notes
attached by FileDropPlugin
!type
application
!file
./CKopp/Cao/NPI_Kiffy_KingpinFitting_20100607.SLDDRW
!url
!data
/***
|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|
|~CoreVersion|2.1|
|Type|plugin|
|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);
}
};
}
//}}}
''Load :''
<<loadTiddlers label:AirbankBlankPackage tag:AirbankBlankPackage file:///C:/Documents%20and%20Settings/Julien%20BOUCHEZ/My%20Documents/Capsule/blank.html>>
<<loadTiddlers label:AirbankProjectPackage tag:AirbankProjectPackage file:///C:/Documents%20and%20Settings/Julien%20BOUCHEZ/My%20Documents/Capsule/blank.html>>
<<loadTiddlers label:AirbankCreativitePackage tag:AirbankCreativitePackage file:///C:/Documents%20and%20Settings/Julien%20BOUCHEZ/My%20Documents/Capsule/blank.html>>
<<loadTiddlers label:AirbankContactPackage tag:AirbankContactPackage file:///C:/Documents%20and%20Settings/Julien%20BOUCHEZ/My%20Documents/Capsule/blank.html>>
<<loadTiddlers label:AirbankPluginPackage tag:AirbankPluginPackage file:///C:/Documents%20and%20Settings/Julien%20BOUCHEZ/My%20Documents/Capsule/blank.html>>
<<loadTiddlers label:AirbankControlePackage tag:AirbankControlePackage file:///C:/Documents%20and%20Settings/Julien%20BOUCHEZ/My%20Documents/Capsule/blank.html>>
<<loadTiddlers label:AirbankSavoirPackage tag:AirbankSavoirPackage file:///C:/Documents%20and%20Settings/Julien%20BOUCHEZ/My%20Documents/Capsule/blank.html>>
<<loadTiddlers label:AirbankSujetsPackage tag:AirbankSujetsPackage file:///C:/Documents%20and%20Settings/Julien%20BOUCHEZ/My%20Documents/Capsule/blank.html>>
<<newJournal title:"$1 YYYY_0MM_0DD_0hh_0mm_0ss" focus:"title" text:{{store.getTiddlerText("$3")}} label:+ prompt:"ajouter un élément ici" [[$1]] [[$2]] >>
<<tiddler NewTaggedTiddler with:{{tiddler.title}} {{tiddler.title}} TemplateThème>>
<<tiddler AutoRefresh>><<tiddler FetN1 with:{{tiddler.title}}>>
<!--{{{-->
<div class='header' macro='gradient vert [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryPale]] '>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
<span id='bodywrapper'>
<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>
<div id='sidebar'>
<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
</div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
</div>
</span>
<div class='pageFooter' refresh='content' tiddler='contentFooter'></div>
<!--}}}-->
/***
|<html><a name="Top"/></html>''Name:''|PartTiddlerPlugin|
|''Version:''|1.0.9 (2007-07-14)|
|''Source:''|http://tiddlywiki.abego-software.de/#PartTiddlerPlugin|
|''Author:''|UdoBorkowski (ub [at] abego-software [dot] de)|
|''Licence:''|[[BSD open source license]]|
|''CoreVersion:''|2.1.3|
|''Browser:''|Firefox 1.0.4+; InternetExplorer 6.0|
!Table of Content<html><a name="TOC"/></html>
* <html><a href="javascript:;" onclick="window.scrollAnchorVisible('Description',null, event)">Description, Syntax</a></html>
* <html><a href="javascript:;" onclick="window.scrollAnchorVisible('Applications',null, event)">Applications</a></html>
** <html><a href="javascript:;" onclick="window.scrollAnchorVisible('LongTiddler',null, event)">Refering to Paragraphs of a Longer Tiddler</a></html>
** <html><a href="javascript:;" onclick="window.scrollAnchorVisible('Citation',null, event)">Citation Index</a></html>
** <html><a href="javascript:;" onclick="window.scrollAnchorVisible('TableCells',null, event)">Creating "multi-line" Table Cells</a></html>
** <html><a href="javascript:;" onclick="window.scrollAnchorVisible('Tabs',null, event)">Creating Tabs</a></html>
** <html><a href="javascript:;" onclick="window.scrollAnchorVisible('Sliders',null, event)">Using Sliders</a></html>
* <html><a href="javascript:;" onclick="window.scrollAnchorVisible('Revisions',null, event)">Revision History</a></html>
* <html><a href="javascript:;" onclick="window.scrollAnchorVisible('Code',null, event)">Code</a></html>
!Description<html><a name="Description"/></html>
With the {{{<part aPartName> ... </part>}}} feature you can structure your tiddler text into separate (named) parts.
Each part can be referenced as a "normal" tiddler, using the "//tiddlerName//''/''//partName//" syntax (e.g. "About/Features"). E.g. you may create links to the parts (e.g. {{{[[Quotes/BAX95]]}}} or {{{[[Hobbies|AboutMe/Hobbies]]}}}), use it in {{{<<tiddler...>>}}} or {{{<<tabs...>>}}} macros etc.
''Syntax:''
|>|''<part'' //partName// [''hidden''] ''>'' //any tiddler content// ''</part>''|
|//partName//|The name of the part. You may reference a part tiddler with the combined tiddler name "//nameOfContainerTidder//''/''//partName//. <<br>>If you use a partName containing spaces you need to quote it (e.g. {{{"Major Overview"}}} or {{{[[Shortcut List]]}}}).|
|''hidden''|When defined the content of the part is not displayed in the container tiddler. But when the part is explicitly referenced (e.g. in a {{{<<tiddler...>>}}} macro or in a link) the part's content is displayed.|
|<html><i>any tiddler content</i></html>|<html>The content of the part.<br>A part can have any content that a "normal" tiddler may have, e.g. you may use all the formattings and macros defined.</html>|
|>|~~Syntax formatting: Keywords in ''bold'', optional parts in [...]. 'or' means that exactly one of the two alternatives must exist.~~|
<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>
!Applications<html><a name="Applications"/></html>
!!Refering to Paragraphs of a Longer Tiddler<html><a name="LongTiddler"/></html>
Assume you have written a long description in a tiddler and now you want to refer to the content of a certain paragraph in that tiddler (e.g. some definition.) Just wrap the text with a ''part'' block, give it a nice name, create a "pretty link" (like {{{[[Discussion Groups|Introduction/DiscussionGroups]]}}}) and you are done.
Notice this complements the approach to first writing a lot of small tiddlers and combine these tiddlers to one larger tiddler in a second step (e.g. using the {{{<<tiddler...>>}}} macro). Using the ''part'' feature you can first write a "classic" (longer) text that can be read "from top to bottom" and later "reuse" parts of this text for some more "non-linear" reading.
<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>
!!Citation Index<html><a name="Citation"/></html>
Create a tiddler "Citations" that contains your "citations".
Wrap every citation with a part and a proper name.
''Example''
{{{
<part BAX98>Baxter, Ira D. et al: //Clone Detection Using Abstract Syntax Trees.//
in //Proc. ICSM//, 1998.</part>
<part BEL02>Bellon, Stefan: //Vergleich von Techniken zur Erkennung duplizierten Quellcodes.//
Thesis, Uni Stuttgart, 2002.</part>
<part DUC99>Ducasse, Stéfane et al: //A Language Independent Approach for Detecting Duplicated Code.//
in //Proc. ICSM//, 1999.</part>
}}}
You may now "cite" them just by using a pretty link like {{{[[Citations/BAX98]]}}} or even more pretty, like this {{{[[BAX98|Citations/BAX98]]}}}.
<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>
!!Creating "multi-line" Table Cells<html><a name="TableCells"/></html>
You may have noticed that it is hard to create table cells with "multi-line" content. E.g. if you want to create a bullet list inside a table cell you cannot just write the bullet list
{{{
* Item 1
* Item 2
* Item 3
}}}
into a table cell (i.e. between the | ... | bars) because every bullet item must start in a new line but all cells of a table row must be in one line.
Using the ''part'' feature this problem can be solved. Just create a hidden part that contains the cells content and use a {{{<<tiddler >>}}} macro to include its content in the table's cell.
''Example''
{{{
|!Subject|!Items|
|subject1|<<tiddler ./Cell1>>|
|subject2|<<tiddler ./Cell2>>|
<part Cell1 hidden>
* Item 1
* Item 2
* Item 3
</part>
...
}}}
Notice that inside the {{{<<tiddler ...>>}}} macro you may refer to the "current tiddler" using the ".".
BTW: The same approach can be used to create bullet lists with items that contain more than one line.
<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>
!!Creating Tabs<html><a name="Tabs"/></html>
The build-in {{{<<tabs ...>>}}} macro requires that you defined an additional tiddler for every tab it displays. When you want to have "nested" tabs you need to define a tiddler for the "main tab" and one for every tab it contains. I.e. the definition of a set of tabs that is visually displayed at one place is distributed across multiple tiddlers.
With the ''part'' feature you can put the complete definition in one tiddler, making it easier to keep an overview and maintain the tab sets.
''Example''
The standard tabs at the sidebar are defined by the following eight tiddlers:
* SideBarTabs
* TabAll
* TabMore
* TabMoreMissing
* TabMoreOrphans
* TabMoreShadowed
* TabTags
* TabTimeline
Instead of these eight tiddlers one could define the following SideBarTabs tiddler that uses the ''part'' feature:
{{{
<<tabs txtMainTab
Timeline Timeline SideBarTabs/Timeline
All 'All tiddlers' SideBarTabs/All
Tags 'All tags' SideBarTabs/Tags
More 'More lists' SideBarTabs/More>>
<part Timeline hidden><<timeline>></part>
<part All hidden><<list all>></part>
<part Tags hidden><<allTags>></part>
<part More hidden><<tabs txtMoreTab
Missing 'Missing tiddlers' SideBarTabs/Missing
Orphans 'Orphaned tiddlers' SideBarTabs/Orphans
Shadowed 'Shadowed tiddlers' SideBarTabs/Shadowed>></part>
<part Missing hidden><<list missing>></part>
<part Orphans hidden><<list orphans>></part>
<part Shadowed hidden><<list shadowed>></part>
}}}
Notice that you can easily "overwrite" individual parts in separate tiddlers that have the full name of the part.
E.g. if you don't like the classic timeline tab but only want to see the 100 most recent tiddlers you could create a tiddler "~SideBarTabs/Timeline" with the following content:
{{{
<<forEachTiddler
sortBy 'tiddler.modified' descending
write '(index < 100) ? "* [["+tiddler.title+"]]\n":""'>>
}}}
<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>
!!Using Sliders<html><a name="Sliders"/></html>
Very similar to the build-in {{{<<tabs ...>>}}} macro (see above) the {{{<<slider ...>>}}} macro requires that you defined an additional tiddler that holds the content "to be slid". You can avoid creating this extra tiddler by using the ''part'' feature
''Example''
In a tiddler "About" we may use the slider to show some details that are documented in the tiddler's "Details" part.
{{{
...
<<slider chkAboutDetails About/Details details "Click here to see more details">>
<part Details hidden>
To give you a better overview ...
</part>
...
}}}
Notice that putting the content of the slider into the slider's tiddler also has an extra benefit: When you decide you need to edit the content of the slider you can just doubleclick the content, the tiddler opens for editing and you can directly start editing the content (in the part section). In the "old" approach you would doubleclick the tiddler, see that the slider is using tiddler X, have to look for the tiddler X and can finally open it for editing. So using the ''part'' approach results in a much short workflow.
<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>
!Revision history<html><a name="Revisions"/></html>
* v1.0.9 (2007-07-14)
** Bugfix: Error when using the SideBarTabs example and switching between "More" and "Shadow". Thanks to cmari for reporting the issue.
* v1.0.8 (2007-06-16)
** Speeding up display of tiddlers containing multiple pard definitions. Thanks to Paco Rivière for reporting the issue.
** Support "./partName" syntax inside <<tabs ...>> macro
* v1.0.7 (2007-03-07)
** Bugfix: <<tiddler "./partName">> does not always render correctly after a refresh (e.g. like it happens when using the "Include" plugin). Thanks to Morris Gray for reporting the bug.
* v1.0.6 (2006-11-07)
** Bugfix: cannot edit tiddler when UploadPlugin by Bidix is installed. Thanks to José Luis González Castro for reporting the bug.
* v1.0.5 (2006-03-02)
** Bugfix: Example with multi-line table cells does not work in IE6. Thanks to Paulo Soares for reporting the bug.
* v1.0.4 (2006-02-28)
** Bugfix: Shadow tiddlers cannot be edited (in TW 2.0.6). Thanks to Torsten Vanek for reporting the bug.
* v1.0.3 (2006-02-26)
** Adapt code to newly introduced Tiddler.prototype.isReadOnly() function (in TW 2.0.6). Thanks to Paulo Soares for reporting the problem.
* v1.0.2 (2006-02-05)
** Also allow other macros than the "tiddler" macro use the "." in the part reference (to refer to "this" tiddler)
* v1.0.1 (2006-01-27)
** Added Table of Content for plugin documentation. Thanks to RichCarrillo for suggesting.
** Bugfix: newReminder plugin does not work when PartTiddler is installed. Thanks to PauloSoares for reporting.
* v1.0.0 (2006-01-25)
** initial version
<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>
!Code<html><a name="Code"/></html>
<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>
***/
//{{{
//============================================================================
// PartTiddlerPlugin
// Ensure that the PartTiddler Plugin is only installed once.
//
if (!version.extensions.PartTiddlerPlugin) {
version.extensions.PartTiddlerPlugin = {
major: 1, minor: 0, revision: 9,
date: new Date(2007, 6, 14),
type: 'plugin',
source: "http://tiddlywiki.abego-software.de/#PartTiddlerPlugin"
};
if (!window.abego) window.abego = {};
if (version.major < 2) alertAndThrow("PartTiddlerPlugin requires TiddlyWiki 2.0 or newer.");
//============================================================================
// Common Helpers
// Looks for the next newline, starting at the index-th char of text.
//
// If there are only whitespaces between index and the newline
// the index behind the newline is returned,
// otherwise (or when no newline is found) index is returned.
//
var skipEmptyEndOfLine = function(text, index) {
var re = /(\n|[^\s])/g;
re.lastIndex = index;
var result = re.exec(text);
return (result && text.charAt(result.index) == '\n')
? result.index+1
: index;
}
//============================================================================
// Constants
var partEndOrStartTagRE = /(<\/part>)|(<part(?:\s+)((?:[^>])+)>)/mg;
var partEndTagREString = "<\\/part>";
var partEndTagString = "</part>";
//============================================================================
// Plugin Specific Helpers
// Parse the parameters inside a <part ...> tag and return the result.
//
// @return [may be null] {partName: ..., isHidden: ...}
//
var parseStartTagParams = function(paramText) {
var params = paramText.readMacroParams();
if (params.length == 0 || params[0].length == 0) return null;
var name = params[0];
var paramsIndex = 1;
var hidden = false;
if (paramsIndex < params.length) {
hidden = params[paramsIndex] == "hidden";
paramsIndex++;
}
return {
partName: name,
isHidden: hidden
};
}
// Returns the match to the next (end or start) part tag in the text,
// starting the search at startIndex.
//
// When no such tag is found null is returned, otherwise a "Match" is returned:
// [0]: full match
// [1]: matched "end" tag (or null when no end tag match)
// [2]: matched "start" tag (or null when no start tag match)
// [3]: content of start tag (or null if no start tag match)
//
var findNextPartEndOrStartTagMatch = function(text, startIndex) {
var re = new RegExp(partEndOrStartTagRE);
re.lastIndex = startIndex;
var match = re.exec(text);
return match;
}
//============================================================================
// Formatter
// Process the <part ...> ... </part> starting at (w.source, w.matchStart) for formatting.
//
// @return true if a complete part section (including the end tag) could be processed, false otherwise.
//
var handlePartSection = function(w) {
var tagMatch = findNextPartEndOrStartTagMatch(w.source, w.matchStart);
if (!tagMatch) return false;
if (tagMatch.index != w.matchStart || !tagMatch[2]) return false;
// Parse the start tag parameters
var arguments = parseStartTagParams(tagMatch[3]);
if (!arguments) return false;
// Continue processing
var startTagEndIndex = skipEmptyEndOfLine(w.source, tagMatch.index + tagMatch[0].length);
var endMatch = findNextPartEndOrStartTagMatch(w.source, startTagEndIndex);
if (endMatch && endMatch[1]) {
if (!arguments.isHidden) {
w.nextMatch = startTagEndIndex;
w.subWikify(w.output,partEndTagREString);
}
w.nextMatch = skipEmptyEndOfLine(w.source, endMatch.index + endMatch[0].length);
return true;
}
return false;
}
config.formatters.push( {
name: "part",
match: "<part\\s+[^>]+>",
handler: function(w) {
if (!handlePartSection(w)) {
w.outputText(w.output,w.matchStart,w.matchStart+w.matchLength);
}
}
} )
//============================================================================
// Extend "fetchTiddler" functionality to also recognize "part"s of tiddlers
// as tiddlers.
var currentParent = null; // used for the "." parent (e.g. in the "tiddler" macro)
// Return the match to the first <part ...> tag of the text that has the
// requrest partName.
//
// @return [may be null]
//
var findPartStartTagByName = function(text, partName) {
var i = 0;
while (true) {
var tagMatch = findNextPartEndOrStartTagMatch(text, i);
if (!tagMatch) return null;
if (tagMatch[2]) {
// Is start tag
// Check the name
var arguments = parseStartTagParams(tagMatch[3]);
if (arguments && arguments.partName == partName) {
return tagMatch;
}
}
i = tagMatch.index+tagMatch[0].length;
}
}
// Return the part "partName" of the given parentTiddler as a "readOnly" Tiddler
// object, using fullName as the Tiddler's title.
//
// All remaining properties of the new Tiddler (tags etc.) are inherited from
// the parentTiddler.
//
// @return [may be null]
//
var getPart = function(parentTiddler, partName, fullName) {
var text = parentTiddler.text;
var startTag = findPartStartTagByName(text, partName);
if (!startTag) return null;
var endIndexOfStartTag = skipEmptyEndOfLine(text, startTag.index+startTag[0].length);
var indexOfEndTag = text.indexOf(partEndTagString, endIndexOfStartTag);
if (indexOfEndTag >= 0) {
var partTiddlerText = text.substring(endIndexOfStartTag,indexOfEndTag);
var partTiddler = new Tiddler();
partTiddler.set(
fullName,
partTiddlerText,
parentTiddler.modifier,
parentTiddler.modified,
parentTiddler.tags,
parentTiddler.created);
partTiddler.abegoIsPartTiddler = true;
return partTiddler;
}
return null;
}
// Hijack the store.fetchTiddler to recognize the "part" addresses.
//
var hijackFetchTiddler = function() {
var oldFetchTiddler = store.fetchTiddler ;
store.fetchTiddler = function(title) {
var result = oldFetchTiddler.apply(this, arguments);
if (!result && title) {
var i = title.lastIndexOf('/');
if (i > 0) {
var parentName = title.substring(0, i);
var partName = title.substring(i+1);
var parent = (parentName == ".")
? store.resolveTiddler(currentParent)
: oldFetchTiddler.apply(this, [parentName]);
if (parent) {
return getPart(parent, partName, parent.title+"/"+partName);
}
}
}
return result;
};
};
// for debugging the plugin is not loaded through the systemConfig mechanism but via a script tag.
// At that point in the "store" is not yet defined. In that case hijackFetchTiddler through the restart function.
// Otherwise hijack now.
if (!store) {
var oldRestartFunc = restart;
window.restart = function() {
hijackFetchTiddler();
oldRestartFunc.apply(this,arguments);
};
} else
hijackFetchTiddler();
// The user must not edit a readOnly/partTiddler
//
config.commands.editTiddler.oldIsReadOnlyFunction = Tiddler.prototype.isReadOnly;
Tiddler.prototype.isReadOnly = function() {
// Tiddler.isReadOnly was introduced with TW 2.0.6.
// For older version we explicitly check the global readOnly flag
if (config.commands.editTiddler.oldIsReadOnlyFunction) {
if (config.commands.editTiddler.oldIsReadOnlyFunction.apply(this, arguments)) return true;
} else {
if (readOnly) return true;
}
return this.abegoIsPartTiddler;
}
config.commands.editTiddler.handler = function(event,src,title)
{
var t = store.getTiddler(title);
// Edit the tiddler if it either is not a tiddler (but a shadowTiddler)
// or the tiddler is not readOnly
if(!t || !t.abegoIsPartTiddler)
{
clearMessage();
story.displayTiddler(null,title,DEFAULT_EDIT_TEMPLATE);
story.focusTiddler(title,"text");
return false;
}
}
// To allow the "./partName" syntax in macros we need to hijack
// the invokeMacro to define the "currentParent" while it is running.
//
var oldInvokeMacro = window.invokeMacro;
function myInvokeMacro(place,macro,params,wikifier,tiddler) {
var oldCurrentParent = currentParent;
if (tiddler) currentParent = tiddler;
try {
oldInvokeMacro.apply(this, arguments);
} finally {
currentParent = oldCurrentParent;
}
}
window.invokeMacro = myInvokeMacro;
// To correctly support the "./partName" syntax while refreshing we need to hijack
// the config.refreshers.tiddlers to define the "currentParent" while it is running.
//
(function() {
var oldTiddlerRefresher= config.refreshers.tiddler;
config.refreshers.tiddler = function(e,changeList) {
var oldCurrentParent = currentParent;
try {
currentParent = e.getAttribute("tiddler");
return oldTiddlerRefresher.apply(this,arguments);
} finally {
currentParent = oldCurrentParent;
}
};
})();
// Support "./partName" syntax inside <<tabs ...>> macro
(function() {
var extendRelativeNames = function(e, title) {
var nodes = e.getElementsByTagName("a");
for(var i=0; i<nodes.length; i++) {
var node = nodes[i];
var s = node.getAttribute("content");
if (s && s.indexOf("./") == 0)
node.setAttribute("content",title+s.substr(1));
}
};
var oldHandler = config.macros.tabs.handler;
config.macros.tabs.handler = function(place,macroName,params,wikifier,paramString,tiddler) {
var result = oldHandler.apply(this,arguments);
if (tiddler)
extendRelativeNames(place, tiddler.title);
return result;
};
})();
// Scroll the anchor anchorName in the viewer of the given tiddler visible.
// When no tiddler is defined use the tiddler of the target given event is used.
window.scrollAnchorVisible = function(anchorName, tiddler, evt) {
var tiddlerElem = null;
if (tiddler) {
tiddlerElem = document.getElementById(story.idPrefix + tiddler);
}
if (!tiddlerElem && evt) {
var target = resolveTarget(evt);
tiddlerElem = story.findContainingTiddler(target);
}
if (!tiddlerElem) return;
var children = tiddlerElem.getElementsByTagName("a");
for (var i = 0; i < children.length; i++) {
var child = children[i];
var name = child.getAttribute("name");
if (name == anchorName) {
var y = findPosY(child);
window.scrollTo(0,y);
return;
}
}
}
} // of "install only once"
//}}}
/***
<html><sub><a href="javascript:;" onclick="scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>
!Licence and Copyright
Copyright (c) abego Software ~GmbH, 2006 ([[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.
<html><sub><a href="javascript:;" onclick="scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>
***/
/***
|''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"
});
*/
//}}}
|Ref.|11npi009|
|Qty|1|
|Material|6061|
|Process|Tournage ; Fraisage|
|Masse|3g|
|Volume||
|Finish||
|PU|31€/ECI 38/Dornberger|13€/TAT|
!!Todo
!!Avancement
usinage lancé
!usage
{{{[[PionAncrage_11npi009.PDF|PionAncrage_11npi009.PDF]]}}}
[[PionAncrage_11npi009.PDF|PionAncrage_11npi009.PDF]]
!notes
attached by FileDropPlugin
!type
application/pdf
!file
./Plans/PionAncrage_11npi009.PDF
!url
!data
!usage
{{{[[PionAncrage_11npi009.igs.zip|PionAncrage_11npi009.igs.zip]]}}}
[[PionAncrage_11npi009.igs.zip|PionAncrage_11npi009.igs.zip]]
!notes
attached by FileDropPlugin
!type
application/x-zip-compressed
!file
./Plans/PionAncrage_11npi009.igs.zip
!url
!data
|Ref.|10npi019b|
|Qty|1|
|Material|steel tube 25CrMo4|
|Process|Soudage|
|Masse|2015g|
|Volume||
|Finish||
|PU||
!!Todo
Re-souder pattes béquille JBo > CBr
!!Avancement
Fabrication en cours
!Description
rev.b
rev.a
!Nomenclature
<<tiddler AutoRefresh>><<tiddler [[FetNomenclature]] with:{{tiddler.title}}>>
<<tiddler AutoRefresh>><<forEachTiddler
where
'! tiddler.tags.contains("attachment") && !tiddler.title.contains("Test") && tiddler.tags.contains(context.inTiddler.title) '
sortBy
tiddler.modified
descending
write
'"[["+tiddler.title+"|"+tiddler.title+"]]\n"'
>>
|Ref.| |
|Qty|1|
|Material|Aluminium|
|Process|Standard|
|Masse|730g|
|Volume|73|
|Finish|antracite|
|PU|40.38 Public TTC|
!Description
Simple plateau.
!Todo
/***
|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();
//}}}
|Ref.||
|Qty||
|Material||
|Process||
|Masse||
|Volume||
|Finish||
|PU||
!!Todo
Fabriquer JBo
!Description
!Nomenclature
<<tiddler AutoRefresh>><<tiddler [[FetNomenclature]] with:{{tiddler.title}}>>
|Ref.|10npi053a|
|Qty|1 (2/Kiffy)|
|Material|Acier allié|
|Process|Découpe|
|Masse|2g|
|Volume|D25 e1mm|
|Finish|-|
|PU|erreur 1p ITI 26-07-10|
!Todo
!Description
rev.a
BON POUR EXECUTION
general tolerance ±0.2mm ( 0.5mm )
Appui sur la collerette du palier supérieur de la fusée.
|Ref.|10npi094a|
|Qty|1|
|Material|AISI 316 Tôle d'acier inoxydable (SS)|
|Process|Découpe|
|Masse|0.72|
|Volume| |
|Finish| |
|PU| |
!Description
0,4mm pour le proto
rev.a
BON POUR EXECUTION
general tolerance ±0.2mm ( 0.5mm )
!Todo
!!Todo
!!Avancement
!Description
Jantes différentes de ce qui était prévu
entrainement par soudure
Plus de jeu Arrêt du piston de la roue 20100531
!
<<tiddler AutoRefresh>><<tiddler [[FetDescriptionTagTag]] with:{{tiddler.title}}{{tiddler.title}}>>
!Nomenclature
<<tiddler AutoRefresh>><<tiddler [[FetNomenclature]] with:{{tiddler.title}}>>
|Ref.|10npi024a|
|Qty|1ar ou 2av|
|Material| |
|Process|Assemblage|
|Masse|1086g|
|Volume| |
|Finish|-|
|PU|50@Top Wheels|
!!Todo
Rayonner JBo > François
!!Avancement
!Description
Moyeux-axe serrés à chaud.
Ok pour rayonner avant congés
Remonter perçages ext au même niveau
<<tiddler AutoRefresh>><<tiddler [[FetDescription]] with:{{tiddler.title}}>>
!Nomenclature
<<tiddler AutoRefresh>><<tiddler [[FetNomenclature]] with:{{tiddler.title}}>>
{{twocolumns{<<forEachTiddler
where
'! tiddler.tags.contains("attachment") && tiddler.tags.contains("journal")'
sortBy
tiddler.created
descending
write
'"[["+tiddler.title+"|"+tiddler.title+"]] ("+tiddler.created.formatString("YYYY-0MM-0DD")+")\n"'
>>}}}
|Ref.|10npi107|
|Qty|1|
|Material||
|Process|couture|
|Masse||
|Volume||
|Finish||
|PU||
/***
|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);
}
}
});
//}}}
/***
|Name|SearchOptionsPlugin|
|Source|http://www.TiddlyTools.com/#SearchOptionsPlugin|
|Documentation|http://www.TiddlyTools.com/#SearchOptionsPluginInfo|
|Version|3.0.6|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|extend core search function with additional user-configurable options|
Adds extra options to core search function including selecting which data items to search, enabling/disabling incremental key-by-key searches, and generating a ''list of matching tiddlers'' instead of immediately displaying all matches. This plugin also adds syntax for rendering 'search links' within tiddler content to embed one-click searches using pre-defined 'hard-coded' search terms.
!!!!!Documentation
>see [[SearchOptionsPluginInfo]]
!!!!!Configuration
<<<
Search in:
<<option chkSearchTitles>> titles <<option chkSearchText>> text <<option chkSearchTags>> tags <<option chkSearchFields>> fields <<option chkSearchShadows>> shadows
<<option chkSearchHighlight>> Highlight matching text in displayed tiddlers
<<option chkSearchList>> Show list of matches
<<option chkSearchListTiddler>> Write list to [[SearchResults]] tiddler
<<option chkSearchTitlesFirst>> Show title matches first
<<option chkSearchByDate>> Sort matching tiddlers by modification date (most recent first)
<<option chkIncrementalSearch>> Incremental key-by-key search: {{twochar{<<option txtIncrementalSearchMin>>}}} or more characters, {{threechar{<<option txtIncrementalSearchDelay>>}}} msec delay
<<option chkSearchOpenTiddlers>> Search only in tiddlers that are currently displayed
<<option chkSearchExcludeTags>> Exclude tiddlers tagged with: <<option txtSearchExcludeTags>>
<<<
!!!!!Revisions
<<<
2009.09.22 [3.0.6] in TiddlyWiki.prototype.search, added 'match' param for core compatibility
2009.01.16 [3.0.5] added chkSearchOpenTiddlers option to limit searches to displayed tiddlers only
|please see [[SearchOptionsPluginInfo]] for additional revision details|
2005.10.18 [1.0.0] Initial Release
<<<
!!!!!Code
***/
//{{{
version.extensions.SearchOptionsPlugin= {major: 3, minor: 0, revision: 6, date: new Date(2009,9,22)};
var co=config.options; // abbrev
if (co.chkSearchTitles===undefined) co.chkSearchTitles=true;
if (co.chkSearchText===undefined) co.chkSearchText=true;
if (co.chkSearchTags===undefined) co.chkSearchTags=true;
if (co.chkSearchFields===undefined) co.chkSearchFields=true;
if (co.chkSearchTitlesFirst===undefined) co.chkSearchTitlesFirst=true;
if (co.chkSearchList===undefined) co.chkSearchList=true;
if (co.chkSearchHighlight===undefined) co.chkSearchHighlight=true;
if (co.chkSearchListTiddler===undefined) co.chkSearchListTiddler=false;
if (co.chkSearchByDate===undefined) co.chkSearchByDate=false;
if (co.chkIncrementalSearch===undefined) co.chkIncrementalSearch=true;
if (co.chkSearchShadows===undefined) co.chkSearchShadows=true;
if (co.txtIncrementalSearchDelay===undefined) co.txtIncrementalSearchDelay=500;
if (co.txtIncrementalSearchMin===undefined) co.txtIncrementalSearchMin=3;
if (co.chkSearchOpenTiddlers===undefined) co.chkSearchOpenTiddlers=false;
if (co.chkSearchExcludeTags===undefined) co.chkSearchExcludeTags=true;
if (co.txtSearchExcludeTags===undefined) co.txtSearchExcludeTags="excludeSearch";
if (config.macros.search.reportTitle==undefined)
config.macros.search.reportTitle="SearchResults"; // note: not a cookie!
config.macros.search.label+="\xa0"; // a little bit of space just because it looks better
//}}}
// // searchLink: {{{[search[text to find]] OR [search[text to display|text to find]]}}}
//{{{
config.formatters.push( {
name: "searchLink",
match: "\\[search\\[",
lookaheadRegExp: /\[search\[(.*?)(?:\|(.*?))?\]\]/mg,
prompt: "search for: '%0'",
handler: function(w)
{
this.lookaheadRegExp.lastIndex = w.matchStart;
var lookaheadMatch = this.lookaheadRegExp.exec(w.source);
if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
var label=lookaheadMatch[1];
var text=lookaheadMatch[2]||label;
var prompt=this.prompt.format([text]);
var btn=createTiddlyButton(w.output,label,prompt,
function(){story.search(this.getAttribute("searchText"))},"searchLink");
btn.setAttribute("searchText",text);
w.nextMatch = this.lookaheadRegExp.lastIndex;
}
}
});
//}}}
// // incremental search uses option settings instead of hard-coded delay and minimum input values
//{{{
var fn=config.macros.search.onKeyPress;
fn=fn.toString().replace(/500/g, "config.options.txtIncrementalSearchDelay||500");
fn=fn.toString().replace(/> 2/g, ">=(config.options.txtIncrementalSearchMin||3)");
eval("config.macros.search.onKeyPress="+fn);
//}}}
// // REPLACE story.search() for option to "show search results in a list"
//{{{
Story.prototype.search = function(text,useCaseSensitive,useRegExp)
{
var co=config.options; // abbrev
var re=new RegExp(useRegExp ? text : text.escapeRegExp(),useCaseSensitive ? "mg" : "img");
if (config.options.chkSearchHighlight) highlightHack=re;
var matches = store.search(re,co.chkSearchByDate?"modified":"title","");
if (co.chkSearchByDate) matches=matches.reverse(); // most recent first
var q = useRegExp ? "/" : "'";
clearMessage();
if (!matches.length) {
if (co.chkSearchListTiddler) discardSearchResults();
displayMessage(config.macros.search.failureMsg.format([q+text+q]));
} else {
if (co.chkSearchList||co.chkSearchListTiddler)
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;
}
//}}}
// // REPLACE store.search() for enhanced searching/sorting options
//{{{
TiddlyWiki.prototype.search = function(searchRegExp,sortField,excludeTag,match)
{
var co=config.options; // abbrev
var tids = this.reverseLookup("tags",excludeTag,!!match,sortField);
var opened=[]; story.forEachTiddler(function(tid,elem){opened.push(tid);});
// eliminate tiddlers tagged with excluded tags
if (co.chkSearchExcludeTags&&co.txtSearchExcludeTags.length) {
var ex=co.txtSearchExcludeTags.readBracketedList();
var temp=[]; for(var t=tids.length-1; t>=0; t--)
if (!tids[t].tags.containsAny(ex)) temp.push(tids[t]);
tids=temp;
}
// scan for matching titles first...
var results = [];
if (co.chkSearchTitles) {
for(var t=0; t<tids.length; t++) {
if (co.chkSearchOpenTiddlers && !opened.contains(tids[t].title)) continue;
if(tids[t].title.search(searchRegExp)!=-1) results.push(tids[t]);
}
if (co.chkSearchShadows)
for (var t in config.shadowTiddlers) {
if (co.chkSearchOpenTiddlers && !opened.contains(t)) continue;
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<tids.length; t++) {
if (co.chkSearchOpenTiddlers && !opened.contains(tids[t].title)) continue;
if (co.chkSearchText && tids[t].text.search(searchRegExp)!=-1)
results.pushUnique(tids[t]);
if (co.chkSearchTags && tids[t].tags.join(" ").search(searchRegExp)!=-1)
results.pushUnique(tids[t]);
if (co.chkSearchFields && store.forEachField!=undefined)
store.forEachField(tids[t],
function(tid,field,val) {
if (val.search(searchRegExp)!=-1) results.pushUnique(tids[t]);
},
true); // extended fields only
}
// then check for matching text in shadows
if (co.chkSearchShadows)
for (var t in config.shadowTiddlers) {
if (co.chkSearchOpenTiddlers && !opened.contains(t)) continue;
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 (!co.chkSearchTitlesFirst || co.chkSearchByDate) results.sort(bySortField);
return results;
}
//}}}
// // HIJACK core {{{<<search>>}}} macro to add "report" and "simple inline" output
//{{{
config.macros.search.SOP_handler=config.macros.search.handler;
config.macros.search.handler = function(place,macroName,params)
{
// if "report", use SearchOptionsPlugin report generator for inline output
if (params[1]&¶ms[1].substr(0,6)=="report") {
var keyword=params[0];
var options=params[1].split("=")[1]; // split "report=option+option+..."
var heading=params[2]?params[2].unescapeLineBreaks():"";
var matches=store.search(new RegExp(keyword.escapeRegExp(),"img"),"title","excludeSearch");
if (matches.length) wikify(heading+window.formatSearchResults(keyword,matches,options),place);
} else if (params[1]) {
var keyword=params[0];
var heading=params[1]?params[1].unescapeLineBreaks():"";
var seperator=params[2]?params[2].unescapeLineBreaks():", ";
var matches=store.search(new RegExp(keyword.escapeRegExp(),"img"),"title","excludeSearch");
if (matches.length) {
var out=[];
for (var m=0; m<matches.length; m++) out.push("[["+matches[m].title+"]]");
wikify(heading+out.join(seperator),place);
}
} else
config.macros.search.SOP_handler.apply(this,arguments);
};
//}}}
// // SearchResults panel handling
//{{{
setStylesheet(".searchResults { padding:1em 1em 0 1em; }","searchResults"); // matches std tiddler padding
config.macros.search.createPanel=function(text,matches,body) {
function getByClass(e,c) { var d=e.getElementsByTagName("div");
for (var i=0;i<d.length;i++) if (hasClass(d[i],c)) return d[i]; }
var panel=createTiddlyElement(null,"div","searchPanel","searchPanel");
this.renderPanel(panel,text,matches,body);
var oldpanel=document.getElementById("searchPanel");
if (!oldpanel) { // insert new panel just above tiddlers
var da=document.getElementById("displayArea");
da.insertBefore(panel,da.firstChild);
} else { // if panel exists
var oldwrap=getByClass(oldpanel,"searchResults");
var newwrap=getByClass(panel,"searchResults");
// if no prior content, just insert new content
if (!oldwrap) oldpanel.insertBefore(newwrap,null);
else { // swap search results content but leave containing panel intact
oldwrap.style.display='block'; // unfold wrapper if needed
var i=oldwrap.getElementsByTagName("input")[0]; // get input field
if (i) { var pos=this.getCursorPos(i); i.onblur=null; } // get cursor pos, ignore blur
oldpanel.replaceChild(newwrap,oldwrap);
panel=oldpanel; // use existing panel
}
}
this.showPanel(true,pos);
return panel;
}
config.macros.search.renderPanel=function(panel,text,matches,body) {
var wrap=createTiddlyElement(panel,"div",null,"searchResults");
wrap.onmouseover = function(e){ addClass(this,"selected"); }
wrap.onmouseout = function(e){ removeClass(this,"selected"); }
// create toolbar: "open all", "fold/unfold", "close"
var tb=createTiddlyElement(wrap,"div",null,"toolbar");
var b=createTiddlyButton(tb, "open all", "open all matching tiddlers", function() {
story.displayTiddlers(null,this.getAttribute("list").readBracketedList()); return false; },"button");
var list=""; for(var t=0;t<matches.length;t++) list+='[['+matches[t].title+']] ';
b.setAttribute("list",list);
var b=createTiddlyButton(tb, "fold", "toggle display of search results", function() {
config.macros.search.foldPanel(this); return false; },"button");
var b=createTiddlyButton(tb, "close", "dismiss search results", function() {
config.macros.search.showPanel(false); return false; },"button");
createTiddlyText(createTiddlyElement(wrap,"div",null,"title"),"Search for: "+text); // title
wikify(body,createTiddlyElement(wrap,"div",null,"viewer")); // report
return panel;
}
config.macros.search.showPanel=function(show,pos) {
var panel=document.getElementById("searchPanel");
var i=panel.getElementsByTagName("input")[0];
i.onfocus=show?function(){config.macros.search.stayFocused(true);}:null;
i.onblur=show?function(){config.macros.search.stayFocused(false);}:null;
if (show && panel.style.display=="block") { // if shown, grab focus, restore cursor
if (i&&this.stayFocused()) { i.focus(); this.setCursorPos(i,pos); }
return;
}
if(!config.options.chkAnimate) {
panel.style.display=show?"block":"none";
if (!show) { removeChildren(panel); config.macros.search.stayFocused(false); }
} else {
var s=new Slider(panel,show,false,show?"none":"children");
s.callback=function(e,p){e.style.overflow="visible";}
anim.startAnimating(s);
}
return panel;
}
config.macros.search.foldPanel=function(button) {
var d=document.getElementById("searchPanel").getElementsByTagName("div");
for (var i=0;i<d.length;i++) if (hasClass(d[i],"viewer")) var v=d[i]; if (!v) return;
var show=v.style.display=="none";
if(!config.options.chkAnimate)
v.style.display=show?"block":"none";
else {
var s=new Slider(v,show,false,"none");
s.callback=function(e,p){e.style.overflow="visible";}
anim.startAnimating(s);
}
button.innerHTML=show?"fold":"unfold";
return false;
}
config.macros.search.stayFocused=function(keep) { // TRUE/FALSE=set value, no args=get value
if (keep===undefined) return this.keepReportInFocus;
this.keepReportInFocus=keep;
return keep
}
config.macros.search.getCursorPos=function(i) {
var s=0; var e=0; if (!i) return { start:s, end:e };
try {
if (i.setSelectionRange) // FF
{ s=i.selectionStart; e=i.selectionEnd; }
if (document.selection && document.selection.createRange) { // IE
var r=document.selection.createRange().duplicate();
var len=r.text.length; s=0-r.moveStart('character',-100000); e=s+len;
}
}catch(e){};
return { start:s, end:e };
}
config.macros.search.setCursorPos=function(i,pos) {
if (!i||!pos) return; var s=pos.start; var e=pos.end;
if (i.setSelectionRange) //FF
i.setSelectionRange(s,e);
if (i.createTextRange) // IE
{ var r=i.createTextRange(); r.collapse(true); r.moveStart("character",s); r.select(); }
}
//}}}
// // SearchResults report generation
// note: these functions are defined globally, so they can be more easily redefined to customize report formats//
//{{{
if (!window.reportSearchResults) window.reportSearchResults=function(text,matches)
{
var cms=config.macros.search; // abbrev
var body=window.formatSearchResults(text,matches);
if (!config.options.chkSearchListTiddler) // show #searchResults panel
window.scrollTo(0,ensureVisible(cms.createPanel(text,matches,body)));
else { // write [[SearchResults]] tiddler
var title=cms.reportTitle;
var who=config.options.txtUserName;
var when=new Date();
var tags="excludeLists excludeSearch temporary";
var tid=store.getTiddler(title); if (!tid) tid=new Tiddler();
tid.set(title,body,who,when,tags);
store.addTiddler(tid);
story.closeTiddler(title);
story.displayTiddler(null,title);
}
}
if (!window.formatSearchResults) window.formatSearchResults=function(text,matches,opt)
{
var body='';
var title=config.macros.search.reportTitle
var q = config.options.chkRegExpSearch ? "/" : "'";
if (!opt) var opt="all";
var parts=opt.split("+");
for (var i=0; i<parts.length; i++) { var p=parts[i].toLowerCase();
if (p=="again"||p=="all") body+=window.formatSearchResults_again(text,matches);
if (p=="summary"||p=="all") body+=window.formatSearchResults_summary(text,matches);
if (p=="list"||p=="all") body+=window.formatSearchResults_list(text,matches);
if (p=="buttons"||p=="all") body+=window.formatSearchResults_buttons(text,matches);
}
return body;
}
if (!window.formatSearchResults_again) window.formatSearchResults_again=function(text,matches)
{
var title=config.macros.search.reportTitle
var body='';
// search again
body+='{{span{<<search "'+text.replace(/"/g,'"')+'">> /%\n';
body+='%/<html><input type="button" value="search again"';
body+=' onclick="var t=this.parentNode.parentNode.getElementsByTagName(\'input\')[0];';
body+=' config.macros.search.doSearch(t); return false;">';
body+=' <a href="javascript:;" onclick="';
body+=' var e=this.parentNode.nextSibling;';
body+=' var show=e.style.display!=\'block\';';
body+=' if(!config.options.chkAnimate) e.style.display=show?\'block\':\'none\';';
body+=' else anim.startAnimating(new Slider(e,show,false,\'none\'));';
body+=' return false;">options...</a>';
body+='</html>@@display:none;border-left:1px dotted;margin-left:1em;padding:0;padding-left:.5em;font-size:90%;/%\n';
body+=' %/<<option chkSearchTitles>>titles /%\n';
body+=' %/<<option chkSearchText>>text /%\n';
body+=' %/<<option chkSearchTags>>tags /%\n';
body+=' %/<<option chkSearchFields>>fields /%\n';
body+=' %/<<option chkSearchShadows>>shadows\n';
body+=' <<option chkCaseSensitiveSearch>>case-sensitive /%\n';
body+=' %/<<option chkRegExpSearch>>text patterns /%\n';
body+=' %/<<option chkSearchByDate>>sorted by date\n';
body+=' <<option chkSearchHighlight>> highlight matching text in displayed tiddlers\n';
body+=' <<option chkIncrementalSearch>>incremental key-by-key search: /%\n';
body+=' %/{{twochar{<<option txtIncrementalSearchMin>>}}} or more characters, /%\n';
body+=' %/{{threechar{<<option txtIncrementalSearchDelay>>}}} msec delay\n';
body+=' <<option chkSearchOpenTiddlers>> search only in tiddlers that are currently displayed\n';
body+=' <<option chkSearchExcludeTags>>exclude tiddlers tagged with:\n';
body+=' {{editor{<<option txtSearchExcludeTags>>}}}/%\n';
body+='%/@@}}}\n\n';
return body;
}
if (!window.formatSearchResults_summary) window.formatSearchResults_summary=function(text,matches)
{
// summary: nn tiddlers found matching '...', options used
var body='';
var co=config.options; // abbrev
var title=config.macros.search.reportTitle
var q = co.chkRegExpSearch ? "/" : "'";
body+="''"+config.macros.search.successMsg.format([matches.length,q+"{{{"+text+"}}}"+q])+"''\n";
var opts=[];
if (co.chkSearchTitles) opts.push("titles");
if (co.chkSearchText) opts.push("text");
if (co.chkSearchTags) opts.push("tags");
if (co.chkSearchFields) opts.push("fields");
if (co.chkSearchShadows) opts.push("shadows");
if (co.chkSearchOpenTiddlers) body+="^^//search limited to displayed tiddlers only//^^\n";
body+="~~ searched in "+opts.join(" + ")+"~~\n";
body+=(co.chkCaseSensitiveSearch||co.chkRegExpSearch?"^^ using ":"")
+(co.chkCaseSensitiveSearch?"case-sensitive ":"")
+(co.chkRegExpSearch?"pattern ":"")
+(co.chkCaseSensitiveSearch||co.chkRegExpSearch?"matching^^\n":"");
return body;
}
if (!window.formatSearchResults_list) window.formatSearchResults_list=function(text,matches)
{
// bullet list of links to matching tiddlers
var body='';
var pattern=co.chkRegExpSearch?text:text.escapeRegExp();
var sensitive=co.chkCaseSensitiveSearch?"mg":"img";
var link='{{tiddlyLinkExisting{<html><nowiki><a href="javascript:;" onclick="'
+'if(config.options.chkSearchHighlight)'
+' highlightHack=new RegExp(\x27'+pattern+'\x27.escapeRegExp(),\x27'+sensitive+'\x27);'
+'story.displayTiddler(null,\x27%0\x27);'
+'highlightHack = null; return false;'
+'" title="%2">%1</a></html>}}}';
for(var t=0;t<matches.length;t++) {
body+="* ";
if (config.options.chkSearchByDate)
body+=matches[t].modified.formatString('YYYY.0MM.0DD 0hh:0mm')+" ";
var title=matches[t].title;
var fixup=title.replace(/'/g,"\\x27").replace(/"/g,"\\x22");
var tid=store.getTiddler(title);
var tip=tid?tid.getSubtitle():''; tip=tip.replace(/"/g,""");
body+=link.format([fixup,title,tip])+'\n';
}
return body;
}
if (!window.formatSearchResults_buttons) window.formatSearchResults_buttons=function(text,matches)
{
// embed buttons only if writing SearchResults to tiddler
if (!config.options.chkSearchListTiddler) return "";
// "open all" button
var title=config.macros.search.reportTitle;
var body="";
body+="@@diplay:block;<html><input type=\"button\" href=\"javascript:;\" "
+"onclick=\"story.displayTiddlers(null,[";
for(var t=0;t<matches.length;t++)
body+="'"+matches[t].title.replace(/\'/mg,"\\'")+"'"+((t<matches.length-1)?", ":"");
body+="],1);\" accesskey=\"O\" value=\"open all matching tiddlers\"></html> ";
// "discard SearchResults" button
body+="<html><input type=\"button\" href=\"javascript:;\" "
+"onclick=\"discardSearchResults()\" value=\"discard "+title+"\"></html>";
body+="@@\n";
return body;
}
if (!window.discardSearchResults) window.discardSearchResults=function()
{
// remove the tiddler
story.closeTiddler(config.macros.search.reportTitle);
store.deleteTiddler(config.macros.search.reportTitle);
store.notify(config.macros.search.reportTitle,true);
}
//}}}
<<closeAll>>[[Mémo]]<<permaview>><<newJournal "YYYY_0MM_0DD_0hh_0mm" label:"new tiddler" >><<saveChanges>><<slider chkSliderOptionsPanel OptionsPanel "options »" "Change TiddlyWiki advanced options">>
|Website|http://www.smalley.com/wave_springs/spring_properties.asp?PartNbr=CM10-M2|
!!Todo
comprendre erreur référence JBo
!!Avancement
|Ref.|Smalley - WHW-75|
|Qty|1 (2/kiffy)|
|Material|Acier|
|Process|Standard|
|Masse|1g|
|Volume| |
|Finish| |
|PU| |
!Todo
!Description
http://www.smalley.com/retaining_rings/ring_properties.asp?PartNbr=WHW-75
Rondelle vague
!!Todo
!
<<tiddler NewTaggedTiddler with:{{tiddler.title}} {{tiddler.title}} TemplateThème>>
<<tiddler AutoRefresh>><<tiddler FetN1 with:{{tiddler.title}}>>
/***
----------------------------------------------------------------------------------------------------------------------------------------------------- Layout
***/
/*{{{*/
* html .tiddler {height:1%;}
hr {height:1px;}
dt {font-weight:bold;}
ol {list-style-type:decimal;}
ol ol {list-style-type:lower-alpha;}
ol ol ol {list-style-type:lower-roman;}
ol ol ol ol {list-style-type:decimal;}
ol ol ol ol ol {list-style-type:lower-alpha;}
ol ol ol ol ol ol {list-style-type:lower-roman;}
ol ol ol ol ol ol ol {list-style-type:decimal;}
.txtOptionInput {width:11em;}
#contentWrapper .chkOptionInput {border:0;}
.externalLink {text-decoration:underline;}
.indent {margin-left:3em;}
.outdent {margin-left:3em; text-indent:-3em;}
code.escaped {white-space:nowrap;}
.tiddlyLinkExisting {font-weight:normal;}
.tiddlyLinkNonExisting {font-style:italic;}
/* the 'a' is required for IE, otherwise it renders the whole tiddler in bold */
a.tiddlyLinkNonExisting.shadow {font-weight:normal;}
#sidebarTabs .tiddlyLinkExisting {font-weight:normal; font-style:normal;}
.wizard {padding:0.1em 1em 0 2em;}
.wizard h1 {font-size:2em; font-weight:bold; background:none; padding:0; margin:0.4em 0 0.2em;}
.wizard h2 {font-size:1.2em; font-weight:bold; background:none; padding:0; margin:0.4em 0 0.2em;}
.wizardStep {padding:1em 1em 1em 1em;}
.wizard .button {margin:.5em; font-size:1.2em;}
.wizardFooter {padding:0.8em 0.4em 0.8em 0;}
.wizardFooter .status {padding:0 0.4em; margin-left:1em;}
.wizard .button {padding:.5em;}
.tiddlerPopupButton {padding:.5em;}
.popupTiddler {position: absolute; z-index:300; padding:1em; margin:0;}
.popup {position:absolute; z-index:300; font-size:.9em; padding:0; list-style:none; margin:0;}
.popup .popupMessage {padding:0.4em;}
.popup hr {display:block; height:1px; width:auto; padding:0; margin:0.2em 0;}
.popup li.disabled {padding:0.4em;}
.popup li a {display:block; padding:0.4em; font-weight:normal; cursor:pointer;}
.listBreak {font-size:1px; line-height:1px;}
.listBreak div {margin:2px 0;}
.tabset {padding:1em 0 0 0.5em;}
.tab {margin:0 0 0 0.25em; padding:2px;}
.tabContents {padding:0.5em;}
.tabContents ul, .tabContents ol {margin:0; padding:0;}
.txtMainTab .tabContents li {list-style:none;}
.tabContents li.listLink { margin-left:.75em;}
#contentWrapper {display:block;}
#splashScreen {display:none;}
.missing .viewer,.missing .title {font-style:italic;}
.missing .subtitle {display:none;}
.subtitle {font-size:0.9em;}
.tiddler .button {padding:.5em;}
.tagging {margin:none; float:right; display:none;}
.isTag .tagging {display:block;}
.tagged {margin:none; float:right;}
.tagging, .tagged {font-size:0.9em; padding:0.25em;}
.tagging ul, .tagged ul {list-style:none; margin:0.25em; padding:0;}
.tagClear {clear:both;}
.footer {font-size:.9em;}
.footer li {display:inline;}
.fieldsetFix {border:0; padding:0; margin:1px 0px;}
.sparkline {line-height:1em;}
.sparktick {outline:0;}
.zoomer {font-size:1.1em; position:absolute; overflow:hidden;}
.zoomer div {padding:1em;}
.twocolumns { display:block; -moz-column-count:2; -moz-column-gap:3em; -moz-column-width:50%;}
.fourcolumns { display:block; -moz-column-count:4; -moz-column-gap:3em; -moz-column-width:25%}
/*}}}*/
/***
----------------------------------------------------------------------------------------------------------------------------------------------------- Header
***/
/*{{{*/
.header {
position:relative;
background:[[ColorPalette::PrimaryPale]];
padding:2em 1em;
}
.header a:hover {background:transparent;}
.siteTitle {
font-size:4em;
font-weight:bold;
margin: 0;
padding: 0;
}
.siteSubtitle {
font-size:2em;
font-weight:bold;
display: block;
margin: 0;
padding: 0;
}
/*}}}*/
/***
----------------------------------------------------------------------------------------------------------------------------------------------------- MainMenu
***/
/*{{{*/
#mainMenu {
position:absolute;
left:0;
width:10em;
line-height:1.6em;
padding:0;
margin:0;
color:[[ColorPalette::Foreground]];
}
#mainMenu input {
text-align:right;
display:block;
width:100%;
font-size:1em;
font-family:[[FontPalette::System]];
border:1px solid [[ColorPalette::Foreground]];
margin:0;
padding:.5em;
}
#mainMenu a {
font-weight:normal;
font-style:normal;
font-family:[[FontPalette::System]];
font-size:1em;
text-decoration:none;
padding:.1em;
margin:0;
color:[[ColorPalette::Foreground]];
}
#mainMenu .tiddlyLinkExisting {
font-weight:normal;
font-style:normal;
font-family:[[FontPalette::System]];
font-size:1em;
text-decoration:none;
padding:.1em;
margin:0;
color:[[ColorPalette::Foreground]];
}
#mainMenu a:hover {
background-color:[[ColorPalette::SecondaryLight]];
color:[[ColorPalette::Foreground]];
}
#mainMenu .tiddlyLinkExisting:hover {
background-color:[[ColorPalette::SecondaryLight]];
color:[[ColorPalette::Foreground]];
}
#mainMenu a:active {
color:transparent;
background: transparent;
}
#mainMenu .tiddlyLinkExisting:active {
color:transparent;
background: transparent;
}
#mainMenu .tiddlyLinkNonExisting {
color:[[ColorPalette::PrimaryLight]];
}
#mainMenu .button{
border:none;
}
/*}}}*/
/***
----------------------------------------------------------------------------------------------------------------------------------------------------- Toolbar
***/
/*{{{*/
div span.toolbar {
float : right;
vertical-align : text-bottom;
color:transparent;
font-family:[[FontPalette::System]];
font-size:1em;
border:none;
margin-top : .9em;
}
.toolbar a {
color:transparent;
font-size:1em;
border:none;
}
.selected .toolbar a {
color:[[ColorPalette::Foreground]];
text-decoration:none;
border:none;
font-size:1em;
padding: .1em .5em;
}
.selected .toolbar a:hover {
color:[[ColorPalette::Foreground]];
text-decoration:none;
font-size:1em;
border:none;
padding: .1em .5em;
}
/*}}}*/
/***
----------------------------------------------------------------------------------------------------------------------------------------------------- Backstage
***/
/*{{{*/
* html #backstage {width:99%;}
* html #backstageArea {width:99%;}
#backstageArea {
font-family:[[FontPalette::System]];
font-size:.9em;
display:none; position:relative; overflow: hidden; z-index:150; padding:0.3em 0.5em;}
#backstageToolbar {position:relative;}
#backstageArea a {
font-family:[[FontPalette::System]];
font-size:.9em;
margin-left:0.5em; padding:0.3em 0.5em;}
#backstageButton {display:none; position:absolute; z-index:175; top:0; right:0;}
#backstageButton a {padding:0.5em; margin:0.5em;}
#backstage {position:relative; width:100%; z-index:50;}
#backstagePanel {display:none; z-index:100; position:absolute; width:90%; margin-left:3em; padding:1em;}
.backstagePanelFooter {padding-top:0.2em; float:right;}
.backstagePanelFooter a {padding:0.2em 0.4em;}
#backstageCloak {display:none; z-index:20; position:absolute; width:100%; height:100px;}
.whenBackstage {display:none;}
.backstageVisible .whenBackstage {display:block;}
/*}}}*/
/***
----------------------------------------------------------------------------------------------------------------------------------------------------- Sidebar
***/
/*{{{*/
#sidebar {position:absolute; right:3px; width:16em;
font-size:1em;
font-family:[[FontPalette::System]];
}
#sidebarOptions {padding-top:0.3em;}
#sidebarOptions a {margin:0 0.2em; padding:0.2em 0.3em; display:block;}
#sidebarOptions input {margin:0.4em 0.5em;}
#sidebarOptions .sliderPanel {margin-left:1em; padding:0.5em; font-size:.85em;}
#sidebarOptions .sliderPanel a {font-weight:bold; display:inline; padding:0;}
#sidebarOptions .sliderPanel input {margin:0 0 0.3em 0;}
#sidebarTabs .tabContents {width:15em; overflow:hidden;}
#sidebarTabs .tiddlyLinkNonExisting {font-weight:normal; font-style:normal;}
/*}}}*/
/***
----------------------------------------------------------------------------------------------------------------------------------------------------- Editor
***/
/*{{{*/
#messageArea {position:fixed; top:2em; right:0; margin:0.5em; padding:0.5em; z-index:2000; _position:absolute;
font-size:1em;
font-family:[[FontPalette::System]];}
.messageToolbar {display:block; text-align:right; padding:0.2em;}
#messageArea a {text-decoration:underline;}
.editor {
font-size:1.2em;
font-family:[[FontPalette::System]];
}
.editor input, .editor textarea {
display:block;
width:100%;
font:inherit;
border:none;
background-color:[[ColorPalette::PrimaryPale]];
margin:.5em 0;
padding:.5em 0 .5em .5em;
}
.editorFooter {padding:0.25em 0; font-size:.9em;}
.editorFooter .button {padding:.5em;}
.editorFooter {color:[[ColorPalette::PrimaryLight]];}
.annotation {
font-size:1.2em;
font-family:[[FontPalette::System]];
margin:.5em 0;
padding:.5em 0 .5em .5em;
background:[[ColorPalette::SecondaryLight]];
color:[[ColorPalette::Foreground]];
border:none;
}
/*}}}*/
/***
----------------------------------------------------------------------------------------------------------------------------------------------------- Button
***/
/*{{{*/
.button {
margin:0.5em;
padding:0.5em;
color:[[ColorPalette::Foreground]];
border:none;
}
.button:hover {
text-decoration:none;
color:[[ColorPalette::Foreground]];
background:[[ColorPalette::SecondaryLight]];
border-color:[[ColorPalette::SecondaryLight]];
}
.button:active {
color:transparent;
background: transparent;
border-color: transparent;
}
/*}}}*/
/***
----------------------------------------------------------------------------------------------------------------------------------------------------- Colors
***/
/*{{{*/
.tabSelected{color:[[ColorPalette::Foreground]];
background:[[ColorPalette::PrimaryPale]];
border : none;}
.tabUnselected {color:[[ColorPalette::PrimaryMid]]; background:none;}
.tabContents {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::TertiaryPale]]; border:none;}
.tabContents .button {border:0;}
#sidebar {}
#sidebarOptions input {border:1px solid [[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel {background:[[ColorPalette::PrimaryPale]];}
#sidebarOptions .sliderPanel a {border:none;color:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:hover {color:[[ColorPalette::Background]]; background:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:active {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::Background]];}
.wizard {background:[[ColorPalette::PrimaryPale]]; border:1px solid [[ColorPalette::PrimaryMid]];}
.wizard h1 {color:[[ColorPalette::PrimaryDark]]; border:none;}
.wizard h2 {color:[[ColorPalette::Foreground]]; border:none;}
.wizardStep {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];
border:1px solid [[ColorPalette::PrimaryMid]];}
.wizardStep.wizardStepDone {background:[[ColorPalette::TertiaryLight]];}
.wizardFooter {background:[[ColorPalette::PrimaryPale]];}
.wizardFooter .status {background:[[ColorPalette::PrimaryDark]]; color:[[ColorPalette::Background]];}
.wizard .button {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryLight]]; border: 1px solid;
border-color:[[ColorPalette::SecondaryPale]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryPale]];}
.wizard .button:hover {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Background]];}
.wizard .button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::Foreground]]; border: 1px solid;
border-color:[[ColorPalette::PrimaryDark]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryDark]];}
.wizard .notChanged {background:transparent;}
.wizard .changedLocally {background:#80ff80;}
.wizard .changedServer {background:#8080ff;}
.wizard .changedBoth {background:#ff8080;}
.wizard .notFound {background:#ffff80;}
.wizard .putToServer {background:#ff80ff;}
.wizard .gotFromServer {background:#80ffff;}
#messageArea {border:none; background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]];}
#messageArea .button {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::SecondaryPale]]; border:none;}
.popupTiddler {background:[[ColorPalette::TertiaryPale]]; border:2px solid [[ColorPalette::TertiaryMid]];}
.popup {background:[[ColorPalette::TertiaryPale]]; color:[[ColorPalette::TertiaryDark]]; border-left:1px solid [[ColorPalette::TertiaryMid]]; border-top:1px solid [[ColorPalette::TertiaryMid]]; border-right:2px solid [[ColorPalette::TertiaryDark]]; border-bottom:2px solid [[ColorPalette::TertiaryDark]];}
.popup hr {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::PrimaryDark]]; border-bottom:1px;}
.popup li.disabled {color:[[ColorPalette::TertiaryMid]];}
.popup li a, .popup li a:visited {color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:active {background:[[ColorPalette::SecondaryPale]]; color:[[ColorPalette::Foreground]]; border: none;}
.popupHighlight {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
.listBreak div {border-bottom:1px solid [[ColorPalette::TertiaryDark]];}
.tiddler .defaultCommand {font-weight:bold;}
.subtitle {color:[[ColorPalette::TertiaryLight]];}
.tagging, .tagged {border:none; background-color:[[ColorPalette::TertiaryPale]];}
.selected .tagging, .selected .tagged {background-color:[[ColorPalette::TertiaryLight]]; border:none;}
.tagging .listTitle, .tagged .listTitle {color:[[ColorPalette::PrimaryDark]];}
.tagging .button, .tagged .button {border:none;}
.footer {color:[[ColorPalette::TertiaryLight]];}
.selected .footer {color:[[ColorPalette::TertiaryMid]];}
.sparkline {background:[[ColorPalette::PrimaryPale]]; border:0;}
.sparktick {background:[[ColorPalette::PrimaryDark]];}
.error, .errorButton {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Error]];}
.warning {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryPale]];}
.lowlight {background:[[ColorPalette::TertiaryLight]];}
.zoomer {background:none; color:[[ColorPalette::TertiaryMid]]; border:3px solid [[ColorPalette::TertiaryMid]];}
.imageLink, #displayArea .imageLink {background:transparent;}
.highlight, .marked {background:[[ColorPalette::SecondaryLight]];}
#backstageArea {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::TertiaryMid]];}
#backstageArea a {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstageArea a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; }
#backstageArea a.backstageSelTab {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
#backstageButton a {background:none; color:[[ColorPalette::Background]]; border:none;}
#backstageButton a:hover {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstagePanel {background:[[ColorPalette::Background]]; border-color: [[ColorPalette::Background]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]];}
.backstagePanelFooter .button {border:none; color:[[ColorPalette::Background]];}
.backstagePanelFooter .button:hover {color:[[ColorPalette::Foreground]];}
#backstageCloak {background:[[ColorPalette::Foreground]]; opacity:0.6; filter:'alpha(opacity=60)';}
/*}}}*/
/***
----------------------------------------------------------------------------------------------------------------------------------------------------- Thumbnails styles
***/
/*{{{*/
/***
.thumbnails {
padding : 2em 1em 1em 1em;
border:1px solid [[ColorPalette::Foreground]];
}
***/
/*}}}*/
/***
----------------------------------------------------------------------------------------------------------------------------------------------------- Tiddler Display
***/
/*{{{*/
displayArea {
margin: 1em 15em 0em 15em;
}
.tiddler {
border: none;
padding: 0;
margin: 0;
}
.title {
font-family:[[FontPalette::Title]];
font-size:2em;
font-weight:bold;
color:[[ColorPalette::Foreground]];
padding:5px;
background:none;
border: none;
}
.shadow .title {
color:[[ColorPalette::TertiaryDark]];
}
.selected .title {
#border:1px solid [[ColorPalette::Foreground]];
#border-bottom:2px solid [[ColorPalette::Foreground]];
background:none;
}
body {
border:none;
padding-top: 0.5em;
margin-top:0.3em;
background:[[ColorPalette::Background]];
color:[[ColorPalette::Foreground]];
font-size:1em;
font-family:[[FontPalette::Text]];
}
a {
text-decoration:none;
font-weight:normal;
color:[[ColorPalette::PrimaryMid]];
}
a:hover {
text-decoration:underline;
color:[[ColorPalette::PrimaryMid]];
background:transparent;
}
a img {border:0;}
/*}}}*/
/***
----------------------------------------------------------------------------------------------------------------------------------------------------- Viewer
***/
/*{{{*/
* html .viewer pre {width:99%; padding:0 0 1em 0;}
.viewer {
line-height:1.4em;
padding : 2em 1em 1em 1em;
border:1px solid transparent;
border-top:1px solid [[ColorPalette::Foreground]];
}
.selected .viewer {
border:1px solid [[ColorPalette::Foreground]];
border-top:1px solid [[ColorPalette::Foreground]];
}
.viewer ul, .viewer ol {
margin-left:0.5em;
padding-left:0.5em;}
.viewer pre {padding:0.5em; margin-left:0.5em; font-size:1.2em; line-height:1.4em; overflow:auto;}
.viewer code {font-size:1.2em; line-height:1.4em;}
.viewer blockquote {
padding-left:0.5em;
margin-left:0.5em;
border-left:1px solid [[ColorPalette::Foreground]];
}
.viewer .listTitle {list-style-type:none; margin-left:-2em;}
.viewer .button {
margin:0.5em;
padding:0.5em;
color:[[ColorPalette::PrimaryMid]];
border:none;
}
.viewer .button:hover {
color:[[ColorPalette::Foreground]];
background:transparent;
border:none;
}
.viewer .button:active {
color:transparent;
background:transparent;
border:none;
}
.viewer table, table.twtable {
margin:0;
padding:0;
}
.viewer table.borderless, .viewer table.borderless * {
border: 0;
}
.viewer td, .viewer tr,.viewer caption,.twtable td, .twtable tr,.twtable caption {
vertical-align:top;
padding:.5em;
}
table.listView {font-size:0.85em; margin:0.8em 1.0em;}
table.listView th, table.listView td, table.listView tr {padding:0px 3px 0px 3px;}
.viewer table, table.twtable {border:1px solid [[ColorPalette::Foreground]];}
.viewer th, .viewer thead td, .twtable th, .twtable thead td {
font-weight:bold;
padding:.5em .5em .1em .5em;
background:none;
border:1px solid transparent;
border-bottom:1px solid [[ColorPalette::Foreground]];
color:[[ColorPalette::Foreground]];
}
.viewer th a{
font-weight:bold;
}
.viewer td, .viewer tr, .twtable td, .twtable tr {
border:1px solid [[ColorPalette::Foreground]];
}
.viewer pre {border:1px solid [[ColorPalette::SecondaryLight]]; background:[[ColorPalette::SecondaryPale]];}
.viewer code {color:[[ColorPalette::SecondaryDark]];}
.viewer hr {border:0; border-top:dashed 1px [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::TertiaryDark]];}
/*}}}*/
/***
----------------------------------------------------------------------------------------------------------------------------------------------------- Generic styles
***/
/*{{{*/
h1,h2,h3,h4,h5,h6 {
text-decoration:none;
border:none;
color:[[ColorPalette::Foreground]];
font-family:[[FontPalette::Title]];
}
h1 {
border:none;
color:[[ColorPalette::Foreground]];
padding:0;
margin-top:1em;
margin-bottom:0.3em;
font-family:[[FontPalette::Title]];
font-size:1.6em;
}
h2 {
border:none;
color:[[ColorPalette::Foreground]];
padding:0;
margin-top:.6em;
margin-bottom:0.2em;
font-family:[[FontPalette::Title]];
font-size:1.1em; }
h3 {
border:none;
color:[[ColorPalette::Foreground]];
padding:0;
margin-top:.3em;
margin-bottom:.1em;
font-family:[[FontPalette::Title]];
font-size:1em;
}
h4 {
border:none;
color:[[ColorPalette::Foreground]];
padding:0;
margin-top:0em;
margin-bottom:0em;
font-family:[[FontPalette::Title]];
font-size:1em;
}
h5,h6 {margin-top:1em;}
h5 {font-size:.9em;}
/*}}}*/
/***
----------------------------------------------------------------------------------------------------------------------------------------------------- pageFooter
***/
/*{{{*/
.pageFooter {
font-family:[[FontPalette::Text]];
font-size:1em;
color:[[ColorPalette::Foreground]];
text-align:center;
}
/*}}}*/
/***
----------------------------------------------------------------------------------------------------------------------------------------------------- pageFooterPrint
***/
/*{{{*/
.pageFooterPrint {display: none !important;}
/*}}}*/
/*{{{*/
@media print {
.filesCabinet {display: none !important;}
.breadCrumbs {display: none !important;} #mainMenu, #sidebar, #messageArea, .toolbar, #backstageButton, #backstageArea {display: none !important;}
#displayArea {margin: 1em 1em 0em;}
noscript {display:none;} /* Fixes a feature in Firefox 1.5.0.2 where print preview displays the noscript content */
}
/*}}}*/
{{fourcolumns{
|>|Paramètres|h
|bladeBotRadius|1|
|bladeBotThick|0.5 - 3|
|bladeOverAllHeigh|10 - 30|
|bladeTopRadius|1|
|bladeTopThick|=bladeBotThick|
|bodyAxleThick|3 - 6|
|bodyRearThick|=bodyAxleThick|
|leverAngle|60 - 120|
|Material|[[Ensinger - TECAMID 6 GF 30]]|
|>|Outputs|h
|cleatEnterFMax||
|noseDyFinal|>=0|
|securityFactor|>=1|
|overAllMass||
}}}
/***
|Name|TagGridPlugin|
|Source|http://www.TiddlyTools.com/#TagGridPlugin|
|Documentation|http://www.TiddlyTools.com/#TagGridPluginInfo|
|Version|1.7.0|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|Generate a cross-referenced grid of tiddlers, based on tag values|
!!!!!Documentation
>see [[TagGridPluginInfo]]
!!!!!Revisions
<<<
2008.04.21 [1.7.0] added support for "filter:..." param to exclude tiddlers from grid
2008.01.08 [*.*.*] plugin size reduction: documentation moved to ...Info tiddler
2007.12.04 [*.*.*] update for TW2.3.0: replaced deprecated core functions, regexps, and macros
2007.07.24 [1.6.5] corrected handling for @TiddlerName with excluded tags, so that excluded tags are not actually removed from the @TiddlerName source tiddler.
|please see [[TagGridPluginInfo]] for additional revision details|
2006.10.05 [1.0.0] initial release (converted from prototype inline script)
<<<
!!!!!Code
***/
//{{{
version.extensions.TagGridPlugin= {major: 1, minor: 7, revision: 0, date: new Date(2008,4,21)};
config.macros.tagGrid= {
verbose:false, // display debugging/performance feedback messages
warn:true, // display workload warning message before rendering
threshold:300000, // workload warning threshold (workload=# of comparisons to perform)
handler:
function(place,macroName,params) {
// get columns
var columntags=params.shift(); var cols=[];
if ((!columntags)||(columntags=="all")) // no param (or "all") - use all tags
{ var all=store.getTags(); for (i=0;i<all.length;i++) cols.push(all[i][0]); }
else if (columntags.substr(0,1)=="+") // get tag list from tiddler content
{ var t=store.getTiddlerText(columntags.substr(1)); if (t&&t.length) cols=t.readBracketedList(); }
else if (columntags.substr(0,1)=="@") // get tag list from tiddler tags
{ var t=store.getTiddler(columntags.substr(1)); if (t&&t.tags) for (i=0;i<t.tags.length;i++) cols.push(t.tags[i]); }
else if (columntags.substr(0,1)=="=") // get names of "tagtiddlers" tagged with meta-tag
{ var t=store.getTaggedTiddlers(columntags.substr(1)); for (i=0;i<t.length;i++) cols.push(t[i].title); }
else cols=columntags.readBracketedList();
if (!cols.length) { wikify("~TagGrid: no columns to display\n",place); return; }
// exclude specific column tags
if (params[0]&¶ms[0].substr(0,8)=="exclude:") {
var ex=params.shift().substr(8).readBracketedList();
for (x=0; x<ex.length; x++) {
var i=cols.indexOf(ex[x]);
if (i!=-1) cols.splice(i,1); // remove excluded tags
}
}
// get rows
var rowtags=params.shift(); var rows=[];
if ((!rowtags)||(rowtags=="all")) // no param (or "all") - use all tags
{ var all=store.getTags(); for (i=0;i<all.length;i++) rows.push(all[i][0]); }
else if (rowtags.substr(0,1)=="+") // get tag list from tiddler content
{ var t=store.getTiddlerText(rowtags.substr(1)); if (t&&t.length) rows=t.readBracketedList(); }
else if (rowtags.substr(0,1)=="@") // get tag list from tiddler tags
{ var t=store.getTiddler(rowtags.substr(1)); if (t&&t.tags) for (i=0;i<t.tags.length;i++) rows.push(t.tags[i]); }
else if (rowtags.substr(0,1)=="=") // get names of "tagtiddlers" tagged with meta-tag
{ var t=store.getTaggedTiddlers(rowtags.substr(1)); for (i=0;i<t.length;i++) rows.push(t[i].title); }
else rows=rowtags.readBracketedList();
if (!rows.length) { wikify("~TagGrid: no rows to display\n",place); return; }
// exclude specific row tags
if (params[0]&¶ms[0].substr(0,8)=="exclude:") {
var ex=params.shift().substr(8).readBracketedList();
for (x=0; x<ex.length; x++) {
var i=rows.indexOf(ex[x]);
if (i!=-1) rows.splice(i,1); // remove excluded tags
}
}
// get optional tiddler filter
if (params[0]&¶ms[0].substr(0,7).toUpperCase()=="FILTER:")
var filter=params.shift().substr(7);
// get optional flag keywords and/or color gradient endpoints
var defOpen=false;
var colorAll=false;
var sortRows=false;
var sortColumns=false;
var showInline=false;
var p=params.shift();
while (p) {
switch (p.toUpperCase()) {
case "OPEN":
defOpen=true; break;
case "COLORALL":
colorAll=true; break;
case "SORTROWS":
sortRows=true; break;
case "SORTCOLUMNS":
sortColumns=true; break;
case "INLINE":
showInline=true; break;
default:
if (startcolor==undefined) var startcolor=p;
else if (endcolor==undefined) var endcolor=p;
else alert("unexpected parameter: '"+p+"'");
break;
}
p=params.shift();
}
// get the tiddlers
if (filter&&filter.length)
var tiddlers=store.filterTiddlers(filter);
else
var tiddlers=store.getTiddlers("modified","excludeLists");
// show "workload warning"... get permission to proceed...
if (this.warn) {
var workload=rows.length*cols.length*tiddlers.length;
var warning="Cross-indexing %0 tiddlers in %1 row%3 by %2 column%4...\n(up to %5 comparisons MAY be needed)\n\n";
warning+="This may take a while. It is OK to proceed?";
warning=warning.format([tiddlers.length,rows.length,cols.length,rows.length!=1?"s":"",cols.length!=1?"s":"",workload]);
if (workload>this.threshold&&!confirm(warning)) { wikify("~TagGrid: display cancelled by user\n",place); return; }
}
// sort row and column tags in decending order, by frequency of use
if (sortRows||sortColumns) {
var tags=store.getTags(); var tagcount={}; for (i=0; i<tags.length; i++) tagcount[tags[i][0]]=tags[i][1];
if (sortRows) rows.sort(function(a,b){return (!tagcount[a]||tagcount[a]<tagcount[b])?+1:(tagcount[a]==tagcount[b]?0:-1);});
if (sortColumns) cols.sort(function(a,b){return (!tagcount[a]||tagcount[a]<tagcount[b])?+1:(tagcount[a]==tagcount[b]?0:-1);});
}
// cross-index tiddlers by tags, building lists of tiddler titles into grid[i][j] (sparse array)
var time1=new Date();
var grid=new Array();
var max=0; // track maximum cross-index value
for (var t=0;t<tiddlers.length;t++) { // for each tiddler
for (var i=0;i<tiddlers[t].tags.length;i++) { // for each tag in tiddler
var row=rows.indexOf(tiddlers[t].tags[i]); if (row==-1) continue; // this tag not in rows
if (!grid[row]) grid[row]=new Array(); // create row as needed
for (var j=0;j<tiddlers[t].tags.length;j++) { // for each tag in tiddler
var col=cols.indexOf(tiddlers[t].tags[j]); if (col==-1) continue; // this tag not in columns
if (!grid[row][col]) grid[row][col]=new Array(); // create cell
grid[row][col].push("[["+tiddlers[t].title+"]]"); // add tiddler title to cell
if (max<grid[row][col].length) max=grid[row][col].length; // check for new maximum
}
}
}
// compute gradient color map
if (startcolor && endcolor) {
var digits="0123456789ABCDEF";
function hexToDec(s) // 2-digit conversion
{ return digits.indexOf(s.substr(0,1).toUpperCase())*16+digits.indexOf(s.substr(1,1).toUpperCase()); }
function decToHex(d) // 2-digit conversion
{ return digits.substr(Math.floor(d/16),1)+digits.substr(d%16,1); }
var steps=max;
var startR=hexToDec(startcolor.substr(0,2));
var startG=hexToDec(startcolor.substr(2,2));
var startB=hexToDec(startcolor.substr(4,2));
var endR=hexToDec(endcolor.substr(0,2));
var endG=hexToDec(endcolor.substr(2,2));
var endB=hexToDec(endcolor.substr(4,2));
var rangeR=endR-startR;
var rangeG=endG-startG;
var rangeB=endB-startB;
var stepR=rangeR/steps; if (stepR>0) stepR=Math.floor(stepR); else stepR=Math.ceil(stepR);
var stepG=rangeG/steps; if (stepG>0) stepG=Math.floor(stepG); else stepG=Math.ceil(stepG);
var stepB=rangeB/steps; if (stepB>0) stepB=Math.floor(stepB); else stepB=Math.ceil(stepB);
var colors=[];
colors[0]=startcolor;
for (var i=1; i<steps; i++)
colors[i]=decToHex(startR+stepR*i)+decToHex(startG+stepG*i)+decToHex(startB+stepB*i);
colors[steps-1]=endcolor; // fixup for roundoff error
}
// generate HTML table containing popups (and optional inline links)
var time2=new Date();
var out="<html><table cellpadding='0' cellspacing='0' style='border:0;border-collapse:collapse'>";
// column headings
out+="<tr style='border:0;'><td style='text-align:right;border:0'>";
out+="<a href='' style='font-size:80%;'";
out+=" title='show all column headings'";
// out+=" onclick='return config.macros.tagGrid.toggleAllColumns(this,event,"+defOpen+")'>"+(defOpen?"<<<":">>>")+"</a>";
out+="</td>";
for (var i=0;i<cols.length;i++) {
out+="<td style='text-align:left;cursor:pointer;border:0;padding-left:2px;padding-right:2px' ";
out+=" title='show/hide column heading' ";
out+=" onclick='return config.macros.tagGrid.toggleColumn(this,event)'>";
out+="<a href='' title='open tag tiddler'";
if (!defOpen) out+=" style='display:none' ";
out+=" onclick='story.displayTiddler(this,\""+cols[i]+"\");return false'>"+cols[i]+"</a>";
out+="</td>";
}
out+="</tr>";
for (var i=0;i<rows.length;i++) {
// row heading
var rowlink="<a href='' onclick='story.displayTiddler(this,\""+rows[i]+"\");return false'>"+rows[i]+"</a>";
out +="<tr style='border:0'>";
out +="<td style='text-align:right;border:0;padding-right:2px'>"+rowlink+"</td>";
for (var j=0;j<cols.length;j++) {
var content="";
var bgcolor="transparent"; // default empty cell background
if (colors && colorAll) bgcolor="#"+colors[0]; // empty cell background uses startcolor
var bordercolor=""; // default border color (inherits current CSS value)
if (colors) bordercolor="#"+colors[Math.floor(colors.length/2-1)]; // border uses mid-tone color
var linkstyle=""; // use default unless background color is very light or very dark
var cross=(grid[i]&&grid[i][j])?grid[i][j]:null;
var hdr=rows[i]+(rows[i]!=cols[j]?(" + "+cols[j]):"");
if (cross) {
// cross-tagged list of tiddlers (in a popup)
var label="<b>"+cross.length+"</b>";
var tip=hdr;
var list=cross.sort().join(' ').replace(/'/g,"\\'").replace(/"/g,'"');
var handler="return config.macros.tagGrid.popup(this,event,\'"+rows[i]+"\',\'"+cols[j]+"\',\'"+list+"\')";
if (colors) {
var c=colors[cross.length-1];
bgcolor="#"+c;
linkstyle="style='color:#000000 !important'";
// invert link color if background is very light
if (c.substr(0,2)<"60" || c.substr(2,2)<"60" || c.substr(4,2)<"60")
linkstyle="style='color:#FFFFFF !important'";
}
} else {
var label=" - ";
var tip="create a new tiddler tagged with: "+hdr;
var list="";
var handler="var title=config.macros.newTiddler.title;";
handler+="story.displayTiddler(this,title,DEFAULT_EDIT_TEMPLATE);";
handler+="story.setTiddlerTag(title,\'"+rows[i]+"\',+1);";
handler+="story.setTiddlerTag(title,\'"+cols[j]+"\',+1);";
handler+="story.focusTiddler(title,\'text\');return(false);";
}
if (!showInline || !cross)
content+='<a href="javascript:;" '+linkstyle+' onclick="'+handler+'" title="'+tip+'">'+label+'</a>';
if (showInline && cross) {
content+="<div "+linkstyle+"><span style='white-space:nowrap'>";
// content+=hdr+" ("+label+")";
// content+="</span></div><hr>";
// list tiddler links inline in table cell
for (t=0; t<cross.length; t++) {
var title=cross[t].replace(/\[\[/g,'').replace(/\]\]/g,'');
var handler="story.displayTiddler(null,'"+title+"');return false;"
var tid=store.getTiddler(title);
var author=tid.modifier;
var date=tid.modified.toLocaleString();
var tip=config.messages.tiddlerLinkTooltip.format([title,author,date]);
if (t>0) content+="<br>";
content+='<a href="javascript:;" '+linkstyle+' onclick="'+handler+'" title="'+tip+'">'+title+'</a>';
}
// content+="<hr>";
handler="var tids=\'"+list+"\'.readBracketedList();story.displayTiddlers(this,tids); return(false);"
tip="display all tiddlers tagged with: "+hdr;
// content+='<a href="javascript:;" '+linkstyle+' onclick="'+handler+'" title="'+tip+'">open all...</a><br>';
handler="var title=config.macros.newTiddler.title;";
handler+="story.displayTiddler(this,title,DEFAULT_EDIT_TEMPLATE);";
handler+="story.setTiddlerTag(title,\'"+rows[i]+"\',+1);";
handler+="story.setTiddlerTag(title,\'"+cols[j]+"\',+1);";
handler+="story.focusTiddler(title,'text'); return(false);"
tip="create a new tiddler tagged with: "+hdr;
// content+='<a href="javascript:;" '+linkstyle+' onclick="'+handler+'" title="'+tip+'">new tiddler...</a>';
}
out+="<td style='background-color:"+bgcolor+";border:1px solid "+bordercolor+" !important;text-align:left'>"+content+"</td>";
}
out+="</tr>";
}
out+="</table>";
out+="</html>";
createTiddlyElement(place,"span").innerHTML=out;
var time3=new Date();
if (this.verbose) displayMessage("TagGrid: scan="+(time2-time1)+", generate table="+(time3-time2));
},
popup:
function(here,event,row,col,list) {
var tids=list.replace(/"/g,'"').readBracketedList();
var hdr=row+(row!=col?(" AND "+col):"");
if (tids.length) {
var p=Popup.create(here); if (!p) return;
createTiddlyText(p,hdr);
createTiddlyElement(p,'hr');
for(var t=0; t<tids.length; t++) createTiddlyLink(createTiddlyElement(p,'li'),tids[t],true);
createTiddlyElement(p,'hr');
createTiddlyButton(createTiddlyElement(p,'li'),
"open all...", "display all tiddlers tagged with: "+hdr,
function(){story.displayTiddlers(null,tids); return(false);});
var a=createTiddlyButton(createTiddlyElement(p,'li'),
"new tiddler...", "create a new tiddler tagged with: "+hdr,
function(){
var title=config.macros.newTiddler.title;
story.displayTiddler(this,title,DEFAULT_EDIT_TEMPLATE);
story.setTiddlerTag(title,this.getAttribute("rowtag"),+1);
story.setTiddlerTag(title,this.getAttribute("coltag"),+1);
story.focusTiddler(title,"text");
return(false);
});
a.setAttribute("rowtag",row);
a.setAttribute("coltag",col);
Popup.show();
}
event.cancelBubble = true;
if (event.stopPropagation) event.stopPropagation();
return(false);
},
toggleAllColumns:
function(here,event,defOpen) {
if (here.expanded==undefined) here.expanded=defOpen;
var ex=here.expanded=!here.expanded;
here.innerHTML=ex?"<<<":">>>";
here.title=ex?'hide all column headings':'show all column headings';
var cells=here.parentNode.parentNode.getElementsByTagName("td");
for (i=1; i<cells.length; i++) cells[i].firstChild.style.display=ex?"inline":"none";
event.cancelBubble = true;
if (event.stopPropagation) event.stopPropagation();
return(false);
},
toggleColumn:
function(here,event) {
here.firstChild.style.display=(here.firstChild.style.display=="none")?"inline":"none";
event.cancelBubble = true;
if (event.stopPropagation) event.stopPropagation();
return(false);
}
};
//}}}
/***
|Name|TaskTimerPlugin|
|Source|http://www.TiddlyTools.com/#TaskTimerPlugin|
|Documentation|http://www.TiddlyTools.com/#TaskTimerPluginInfo|
|Version|1.4.1|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|'timer' button automatically writes start/end/elapsed time into tiddler content|
Quickly generate 'timed task' logs that can be used for status reports, billing purposes, etc.
!!!!!Documentation
> see [[TaskTimerPluginInfo]]
!!!!!Configuration
> see [[TaskTimerPluginConfig]]
!!!!!Revisions
<<<
2008.11.10 [1.4.1] in elapsed time calculation, truncate start/stop times to nearest second (avoids 1-second 'round-down' error)
|please see [[TaskTimerPluginInfo]] for additional revision details|
2007.03.14 [0.5.0] converted from inline script
<<<
!!!!!Code
***/
//{{{
version.extensions.TaskTimerPlugin= {major: 1, minor:4, revision: 1, date: new Date(2008,11,10)};
config.macros.taskTimer = {
label: "start timer",
title: "press to start the task timer",
format: "|%4|%0|%1|%2|%3|\\n", // note: double-backslash-en, also date is %4 (for backward compatibility)
defText: " ", // default description text
todayKeyword: "today",
todayFormat: "0MM/0DD/YYYY", // default format - superceded by CalendarPlugin, DatePlugin, or DatePluginConfig
datestampFormat: "YYYY-0MM-0DD", // date stamp format
buttonFormat: "%0 - %2", // timer button formats: %0=current time, %1=start time, %2=elapsed time
defHeader: "|//Date//|//Description//|//Started//|//Stopped//|//Elapsed//|\n",
defTarget: "ActivityReport",
descrMsg: "Enter a short description for this activity. Press [cancel] to continue timer.",
askMsg: "Enter the title of a tiddler in which to record this activity. Press [cancel] to continue timer.",
errMsg: "'%0' is not a valid tiddler title. Please try again...\n\n",
createdMsg: "'%0' has been created",
updatedMsg: "'%0' has been updated",
marker: "/%"+"tasktimer"+"%/",
tag: "task",
handler: function(place,macroName,params,wikifier,paramString,tiddler) {
var target=params.shift(); // get optional target tiddler title
if (!target) target="";
var format=this.format; if (params[0]) format=params.shift(); // get optional output format
var descrMsg=this.descrMsg; if (params[0]) descrMsg=params.shift(); // get optional message text
var defText=this.defText; if (params[0]) defText=params.shift(); // get optional default text
var onclick="config.macros.taskTimer.toggle(this,'"+target+"','"+format+"','"+descrMsg+"','"+defText+"')";
createTiddlyElement(place,"span").innerHTML =
'<input type="button" value="start timer" title="'+this.title+'" onclick="'+onclick+'">';
},
toggle: function(here,target,format,msg,defText) {
if (!target || !target.length || target=="here") {
var tid=story.findContainingTiddler(here);
target=tid?tid.getAttribute("tiddler"):"ask";
}
if (!here.running) { // not running... start timer...
here.startTime=new Date();
var now=here.startTime.formatString("0hh:0mm:0ss");
here.title=(here.target||target)+" - started at "+now;
here.value=this.buttonFormat.format([now,now,"00:00:00"]);
here.id=new Date().getTime()+Math.random().toString(); // unique ID
here.ticker=setTimeout("config.macros.taskTimer.tick('"+here.id+"')",500);
here.running=true;
} else {
if (target=="ask") {
target=prompt(this.askMsg,here.target||this.defTarget);
while (target && !target.trim().length)
target=prompt(this.errMsg.format([target])+this.askMsg,here.target||this.defTarget);
if (!target) return; // user cancelled input... continue timer
}
var txt=prompt(msg,defText); // get description from user
if (!txt) return; // user cancelled input... continue timer
if (target==this.todayKeyword || target.substr(0,this.todayKeyword.length+1)==this.todayKeyword+":")
target=(new Date()).formatString(this.getJournalFormat(target));
here=document.getElementById(here.id); // RE-get button element after timer has stopped...
clearTimeout(here.ticker);
here.target=target;
var before=this.defHeader;
var after=this.marker+"\n";
var tiddler=store.getTiddler(here.target);
if (tiddler && tiddler.text.length) {
var pos=tiddler.text.indexOf(this.marker);
if (pos==-1) pos=tiddler.text.length; // no marker, append content to end
var before=tiddler.text.substr(0,pos); // everything up to marker
if (before.length&&before.substr(before.length-1)!="\n") before+="\n"; // start on a new line
var after=tiddler.text.substr(pos); // marker+everything else
}
var now=new Date(Math.floor(new Date()/1000)*1000);
var then=new Date(Math.floor(here.startTime/1000)*1000);
var diff=new Date(now-then);
var s=diff.getUTCSeconds(); if (s<10) s="0"+s;
var m=diff.getUTCMinutes(); if (m<10) m="0"+m;
var h=diff.getUTCHours(); if (h<10) h="0"+h;
var start=then.formatString("0hh:0mm:0ss");
var stop=now.formatString("0hh:0mm:0ss");
var elapsed=h+":"+m+":"+s;
var dateStamp=now.formatString(config.macros.taskTimer.datestampFormat);
var newtxt=before+format.format([txt,start,stop,elapsed,dateStamp])+after;
var newtags=(tiddler?tiddler.tags:['task']); // include 'task' tag when creating new tiddlers
store.saveTiddler(here.target,here.target,newtxt,config.options.txtUserName,new Date(),newtags,tiddler?tiddler.fields:null);
if (!tiddler) displayMessage(this.createdMsg.format([here.target]));
else displayMessage(this.updatedMsg.format([here.target]));
here.running=false;
here.value=this.label;
here.title=this.title;
var tid=story.findContainingTiddler(here);
if (!tid || tid.getAttribute("tiddler")!=target) // display target tiddler, but only when button is not IN the target tiddler
{ story.displayTiddler(story.findContainingTiddler(here),here.target); story.refreshTiddler(here.target,1,true); }
}
},
tick: function(id) {
var here=document.getElementById(id); if (!here) return;
var now=new Date();
var diff=new Date(now-here.startTime);
var s=diff.getUTCSeconds(); if (s<10) s="0"+s;
var m=diff.getUTCMinutes(); if (m<10) m="0"+m;
var h=diff.getUTCHours(); if (h<10) h="0"+h;
var elapsed=h+":"+m+":"+s;
now=now.formatString("0hh:0mm:0ss");
var start=here.startTime.formatString("0hh:0mm:0ss");
here.value=this.buttonFormat.format([now,start,elapsed]);
here.ticker=setTimeout("config.macros.taskTimer.tick('"+id+"')",500);
},
getJournalFormat: function(target) {
var fmt=target.split(":"); fmt.shift(); fmt=fmt.join(":");
if (!fmt || !fmt.length) { // if date format was not specified
if (config.macros.date) // if installed, use default from DatePlugin
fmt=config.macros.date.linkformat;
if (config.macros.calendar) { // if installed, use default from CalendarPlugin
if (!config.macros.date) // hard-coded calendar fallback if no DatePlugin
fmt=config.macros.calendar.tiddlerformat;
else // journalDateFmt is set when calendar is rendered with DatePlugin
fmt=config.macros.calendar.journalDateFmt;
}
}
if (!fmt) { // if not specified and no DatePlugin/CalendarPlugin
// get format from <<newJournal>> in SideBarOptions
var text = store.getTiddlerText("SideBarOptions");
var re=new RegExp("<<(?:newJournal)([^>]*)>>","mg"); var fm=re.exec(text);
if (fm && fm[1]!=null) { var pa=fm[1].readMacroParams(); if (pa[0]) fmt = pa[0]; }
}
if (!fmt) var fmt=this.todayFormat; // no "newJournal"... final fallback.
return fmt;
}
}
//}}}
/***
|Name|TaskTimerPluginConfig|
|Source|http://www.TiddlyTools.com/#TaskTimerPluginConfig|
|Documentation|http://www.TiddlyTools.com/#TaskTimerPluginInfo|
|Version|1.3.0|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|formats other optional settings for TaskTimerPlugin|
***/
//{{{
// default target tiddler title (when 'ask' option is used)
config.macros.taskTimer.defTarget="ActivityReport";
// table heading (when creating **new** target tiddlers only)
config.macros.taskTimer.defHeader="|//Date//|//Description//|//Started//|//Stopped//|//Elapsed//|\n";
// note: double-backslash-en, also datestamp is %4 (for backward compatibility)
config.macros.taskTimer.format="|%4|%0|%1|%2|%3|\\n";
// date stamp format (used with %4, above)
config.macros.taskTimer.datestampFormat="YYYY-0MM-0DD";
// default description text - note: do not use empty string (e.g., "")
config.macros.taskTimer.defText=" ";
// format for target tiddler title (when "today" option is used)
// otherwise, value is superceded by CalendarPlugin, DatePlugin, DatePluginConfig,
// or format from <<newJournal>> macro embedded in SideBarOptions
config.macros.taskTimer.todayFormat="0MM/0DD/YYYY";
// marker for locating 'insertion point' in target tiddler
config.macros.taskTimer.marker="/%"+"tasktimer"+"%/"; //
// default tag (when creating **new** target tiddlers only)
config.macros.taskTimer.tag="task";
//}}}
!Description
...
!
<<tiddler NewTaggedTiddler with: {{tiddler.title}} {{tiddler.title}} TemplateBlank>>
<<tiddler AutoRefresh>><<tiddler [[FetDescriptionTagTag]] with:{{tiddler.title}}{{tiddler.title}}>>
{{twocolumns{
|Name|...|
|Phone|...|
|Fax|...|
|Email|...|
|Adress|...|
|Website|...|
|CA|...|
|Effectifs|...|
|Capital||
|Créé|...|
}}}
!Description
!
<<tiddler AutoRefresh>><<tiddler [[FetDescriptionTagTagNot]] with:{{tiddler.title}}{{tiddler.title}}>>
!Contacts <<tiddler NewTaggedTiddler with:{{tiddler.title}} [[Contacts]] TemplateContact>>
<<tiddler AutoRefresh>><<tiddler FetContactTagTag with:[[Contacts]] {{tiddler.title}}>>
!Produits <<tiddler NewTaggedTiddler with:{{tiddler.title}} [[Produits commerciaux]] TemplateProduct>>
<<tiddler AutoRefresh>><<tiddler FetList with:[[Produits commerciaux]] {{tiddler.title}}>>
!Journal <<tiddler NewTaggedTiddler with:{{tiddler.title}} [[Journal]] TemplateJournal>>
<<tiddler AutoRefresh>><<tiddler FetJournalTagTag with:[[Journal]] {{tiddler.title}}>>
{{twocolumns{
|Name||
|Initials||
|Title||
|Company||
|Phone||
|Fax||
|Email||
|Adress||
|Website||
}}}
!!Todo
<<tiddler AutoRefresh>><<tiddler FetTodoText with: {{tiddler.title}}>>
!Description
...
!
<<tiddler AutoRefresh>><<tiddler [[FetDescriptionTagTag]] with:{{tiddler.title}}{{tiddler.title}}>>
!Description
...
!
<<tiddler NewTaggedTiddler with: {{tiddler.title}} {{tiddler.title}} TemplateBlank>>
<<tiddler AutoRefresh>><<tiddler [[FetDescriptionTagTag]] with:{{tiddler.title}}{{tiddler.title}}>>
!Ordre du jour
!!Todo
!Description
!Liste
<<tiddler AutoRefresh>><<tiddler FetList with: {{tiddler.title}} {{tiddler.title}}>>
|Ref.||
|Qty||
|Material||
|Process||
|Masse||
|Volume||
|Finish||
|PU||
!!Todo
!Description
!Nomenclature
<<tiddler AutoRefresh>><<tiddler [[FetNomenclature]] with:{{tiddler.title}}>>
|PU||
!Description
...
!
<<tiddler AutoRefresh>><<tiddler [[FetDescriptionTagTag]] with:{{tiddler.title}}{{tiddler.title}}>>
<<tiddler AutoRefresh>><<tiddler NewTaggedTiddler with: {{tiddler.title}} {{tiddler.title}} TemplateBlank>>
<<tiddler FetTop2000Tag with:{{tiddler.title}} {{tiddler.title}}>>
Liste des modèles pré-définis :
<<forEachTiddler
where
'tiddler.tags.contains("Templates")'
sortBy
tiddler.title
ascending
write
'((index == 0) ? "" : "\n")+"<<tiddler NewTaggedTiddler with: text text [["+tiddler.title+"]]\>\>"+tiddler.title'
>>
<<tiddler NewTaggedTiddler with:{{tiddler.title}} {{tiddler.title}} TemplateThème>>
<<tiddler AutoRefresh>><<tiddler FetN1 with:{{tiddler.title}}>>
/***
|Name|TiddlerTweakerPlugin|
|Source|http://www.TiddlyTools.com/#TiddlerTweakerPlugin|
|Version|2.4.5|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|select multiple tiddlers and modify author, created, modified and/or tag values|
~TiddlerTweaker is a 'power tool' for TiddlyWiki authors. Select multiple tiddlers from a listbox and 'bulk modify' the creator, author, created, modified and/or tag values of those tiddlers using a compact set of form fields. The values you enter into the fields simultaneously overwrite the existing values in all tiddlers you have selected.
!!!!!Usage
<<<
{{{<<tiddlerTweaker>>}}}
{{smallform{<<tiddlerTweaker>>}}}
By default, any tags you enter into the TiddlerTweaker will //replace// the existing tags in all the tiddlers you have selected. However, you can also use TiddlerTweaker to quickly filter specified tags from the selected tiddlers, while leaving any other tags assigned to those tiddlers unchanged:
>Any tag preceded by a '+' (plus) or '-' (minus), will be added or removed from the existing tags //instead of replacing the entire tag definition// of each tiddler (e.g., enter '-excludeLists' to remove that tag from all selected tiddlers. When using this syntax, care should be taken to ensure that //every// tag is preceded by '+' or '-', to avoid inadvertently overwriting any other existing tags on the selected tiddlers. (note: the '+' or '-' prefix on each tag value is NOT part of the tag value, and is only used by TiddlerTweaker to control how that tag value is processed)
Important Notes:
* TiddlerTweaker is a 'power user' tool that can make changes to many tiddlers at once. ''You should always have a recent backup of your document (or 'save changes' just *before* tweaking the tiddlers), just in case you accidentally 'shoot yourself in the foot'.''
* The date and author information on any tiddlers you tweak will ONLY be updated if the corresponding checkboxes have been selected. As a general rule, after using TiddlerTweaker, always ''//remember to save your document//'' when you are done, even though the tiddler timeline tab may not show any recently modified tiddlers.
* Selecting and updating all tiddlers in a document can take a while. Your browser may warn about an 'unresponsive script'. Usually, if you allow it to continue, it should complete the processing... eventually. Nonetheless, be sure to save your work before you begin tweaking lots of tiddlers, just in case something does get stuck.
<<<
!!!!!Revisions
<<<
2011.01.21 2.4.5 auto-selection: use "-" for untagged tiddlers. Also, added 'opened', 'invert'
2009.09.15 2.4.4 added 'edit' button. moved html definition to separate section
2009.09.13 2.4.3 in settiddlers(), convert backslashed chars (\n\b\s\t) in replacement text
2009.06.26 2.4.2 only add brackets around tags containing spaces
2009.06.22 2.4.1 in setFields(), add brackets around all tags shown tweaker edit field
2009.03.30 2.4.0 added 'sort by modifier'
2009.01.22 2.3.0 added support for text pattern find/replace
2008.10.27 2.2.3 in setTiddlers(), fixed Safari bug by replacing static Array.concat(...) with new Array().concat(...)
2008.09.07 2.2.2 added removeCookie() function for compatibility with [[CookieManagerPlugin]]
2008.05.12 2.2.1 replace built-in backstage tweak task with tiddler tweaker control panel (moved from BackstageTweaks)
2008.01.13 2.2.0 added 'auto-selection' links: all, changed, tags, title, text
2007.12.26 2.1.0 added support for managing 'creator' custom field (see [[CoreTweaks]])
2007.11.01 2.0.3 added config.options.txtTweakerSortBy for cookie-based persistence of list display order preference setting.
2007.09.28 2.0.2 in settiddlers() and deltiddlers(), added suspend/resume notification handling (improves performance when operating on multiple tiddlers)
2007.08.03 2.0.1 added shadow definition for [[TiddlerTweaker]] tiddler for use as parameter references with {{{<<tiddler>>, <<slider>> or <<tabs>>}}} macros.
2007.08.03 2.0.0 converted from inline script
2006.01.01 1.0.0 initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.TiddlerTweakerPlugin= {major: 2, minor: 4, revision: 5, date: new Date(2011,1,21)};
// shadow tiddler
config.shadowTiddlers.TiddlerTweaker='<<tiddlerTweaker>>';
// defaults
if (config.options.txtTweakerSortBy==undefined) config.options.txtTweakerSortBy='modified';
// backstage task
if (config.tasks) { // for TW2.2b3 or above
config.tasks.tweak.tooltip='review/modify tiddler internals: dates, authors, tags, etc.';
config.tasks.tweak.content='{{smallform small groupbox{<<tiddlerTweaker>>}}}';
}
// 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.macros.tiddlerTweaker = {
handler: function(place,macroName,params,wikifier,paramString,tiddler) {
var span=createTiddlyElement(place,'span');
span.innerHTML=store.getTiddlerText('TiddlerTweakerPlugin##html');
this.init(span.getElementsByTagName('form')[0],config.options.txtTweakerSortBy);
},
init: function(f,sortby) { // set form controls
if (!f) return; // form might not be rendered yet...
while (f.list.options[0]) f.list.options[0]=null; // empty the list
var tids=store.getTiddlers(sortby);
if (sortby=='size') // descending order
tids.sort(function(a,b) {return a.text.length > b.text.length ? -1 : (a.text.length == b.text.length ? 0 : +1);});
var who='';
for (i=0; i<tids.length; i++) { var t=tids[i];
var label=t.title; var value=t.title;
switch (sortby) {
case 'modified':
case 'created':
var t=tids[tids.length-i-1]; // reverse order
var when=t[sortby].formatString('YY.0MM.0DD 0hh:0mm ');
label=when+t.title;
value=t.title;
break;
case 'size':
label='['+t.text.length+'] '+label;
break;
case 'modifier':
case 'creator':
if (who!=t[sortby]) {
who=t[sortby];
f.list.options[f.list.length]=new Option('by '+who+':','',false,false);
}
label='\xa0\xa0\xa0'+label; // indent
break;
}
f.list.options[f.list.length]=new Option(label,value,false,false);
}
f.title.value=f.who.value=f.creator.value=f.tags.value='';
f.cm.value=f.cd.value=f.cy.value=f.ch.value=f.cn.value='';
f.mm.value=f.md.value=f.my.value=f.mh.value=f.mn.value='';
f.stats.disabled=f.set.disabled=f.del.disabled=f.edit.disabled=f.display.disabled=true;
f.settitle.disabled=false;
config.options.txtTweakerSortBy=sortby;
f.sortby.value=sortby; // sync droplist
if (sortby!='modified') saveOptionCookie('txtTweakerSortBy');
else removeCookie('txtTweakerSortBy');
},
enablefields: function(here) { // enables/disables inputs based on #items selected
var f=here.form; var list=f.list;
var c=0; for (i=0;i<list.length;i++) if (list.options[i].selected) c++;
if (c>1) f.title.disabled=true;
if (c>1) f.settitle.checked=false;
f.set.disabled=(c==0);
f.del.disabled=(c==0);
f.edit.disabled=(c==0);
f.display.disabled=(c==0);
f.settitle.disabled=(c>1);
f.stats.disabled=(c==0);
var msg=(c==0)?'select tiddlers':(c+' tiddler'+(c!=1?'s':'')+' selected');
here.previousSibling.firstChild.firstChild.nextSibling.innerHTML=msg;
if (c) clearMessage(); else displayMessage('no tiddlers selected');
},
setfields: function(here) { // set fields from first selected tiddler
var f=here.form;
if (!here.value.length) {
f.title.value=f.who.value=f.creator.value=f.tags.value='';
f.cm.value=f.cd.value=f.cy.value=f.ch.value=f.cn.value='';
f.mm.value=f.md.value=f.my.value=f.mh.value=f.mn.value='';
return;
}
var tid=store.getTiddler(here.value); if (!tid) return;
f.title.value=tid.title;
f.who.value=tid.modifier;
f.creator.value=tid.fields['creator']||''; // custom field - might not exist
f.tags.value=tid.tags.map(function(t){return String.encodeTiddlyLink(t)}).join(' ');
var c=tid.created; var m=tid.modified;
f.cm.value=c.getMonth()+1;
f.cd.value=c.getDate();
f.cy.value=c.getFullYear();
f.ch.value=c.getHours();
f.cn.value=c.getMinutes();
f.mm.value=m.getMonth()+1;
f.md.value=m.getDate();
f.my.value=m.getFullYear();
f.mh.value=m.getHours();
f.mn.value=m.getMinutes();
},
selecttiddlers: function(here,callback) {
var f=here; while (f&&f.nodeName.toLowerCase()!='form')f=f.parentNode;
for (var t=f.list.options.length-1; t>=0; t--)
f.list.options[t].selected=callback(f.list.options[t]);
config.macros.tiddlerTweaker.enablefields(f.list);
return false;
},
settiddlers: function(here) {
var f=here.form; var list=f.list;
var tids=[];
for (i=0;i<list.length;i++) if (list.options[i].selected) tids.push(list.options[i].value);
if (!tids.length) { alert('please select at least one tiddler'); return; }
var cdate=new Date(f.cy.value,f.cm.value-1,f.cd.value,f.ch.value,f.cn.value);
var mdate=new Date(f.my.value,f.mm.value-1,f.md.value,f.mh.value,f.mn.value);
if (tids.length>1 && !confirm('Are you sure you want to update these tiddlers:\n\n'+tids.join(', '))) return;
store.suspendNotifications();
for (t=0;t<tids.length;t++) {
var tid=store.getTiddler(tids[t]); if (!tid) continue;
var title=!f.settitle.checked?tid.title:f.title.value;
var who=!f.setwho.checked?tid.modifier:f.who.value;
var text=tid.text;
if (f.replacetext.checked) {
var r=f.replacement.value.replace(/\\t/mg,'\t').unescapeLineBreaks();
text=text.replace(new RegExp(f.pattern.value,'mg'),r);
}
var tags=tid.tags;
if (f.settags.checked) {
var intags=f.tags.value.readBracketedList();
var addtags=[]; var deltags=[]; var reptags=[];
for (i=0;i<intags.length;i++) {
if (intags[i].substr(0,1)=='+')
addtags.push(intags[i].substr(1));
else if (intags[i].substr(0,1)=='-')
deltags.push(intags[i].substr(1));
else
reptags.push(intags[i]);
}
if (reptags.length)
tags=reptags;
if (addtags.length)
tags=new Array().concat(tags,addtags);
if (deltags.length)
for (i=0;i<deltags.length;i++)
{ var pos=tags.indexOf(deltags[i]); if (pos!=-1) tags.splice(pos,1); }
}
if (!f.setcdate.checked) cdate=tid.created;
if (!f.setmdate.checked) mdate=tid.modified;
store.saveTiddler(tid.title,title,text,who,mdate,tags,tid.fields);
if (f.setcreator.checked) store.setValue(tid.title,'creator',f.creator.value); // set creator
if (f.setcdate.checked) tid.assign(null,null,null,null,null,cdate); // set create date
}
store.resumeNotifications();
this.init(f,f.sortby.value);
},
displaytiddlers: function(here,edit) {
var f=here.form; var list=f.list;
var tids=[];
for (i=0; i<list.length;i++) if (list.options[i].selected) tids.push(list.options[i].value);
if (!tids.length) { alert('please select at least one tiddler'); return; }
story.displayTiddlers(story.findContainingTiddler(f),tids,edit?DEFAULT_EDIT_TEMPLATE:null);
},
deltiddlers: function(here) {
var f=here.form; var list=f.list;
var tids=[];
for (i=0;i<list.length;i++) if (list.options[i].selected) tids.push(list.options[i].value);
if (!tids.length) { alert('please select at least one tiddler'); return; }
if (!confirm('Are you sure you want to delete these tiddlers:\n\n'+tids.join(', '))) return;
store.suspendNotifications();
for (t=0;t<tids.length;t++) {
var tid=store.getTiddler(tids[t]); if (!tid) continue;
if (tid.tags.contains('systemConfig')) {
var msg=tid.title+' is tagged with systemConfig.'
+'\n\nRemoving this tiddler may cause unexpected results. Are you sure?';
if (!confirm(msg)) continue;
}
store.removeTiddler(tid.title);
story.closeTiddler(tid.title);
}
store.resumeNotifications();
this.init(f,f.sortby.value);
},
stats: function(here) {
var f=here.form; var list=f.list; var tids=[]; var out=''; var tot=0;
var target=f.nextSibling;
for (i=0;i<list.length;i++) if (list.options[i].selected) tids.push(list.options[i].value);
if (!tids.length) { alert('please select at least one tiddler'); return; }
for (t=0;t<tids.length;t++) {
var tid=store.getTiddler(tids[t]); if (!tid) continue;
out+='[['+tid.title+']] '+tid.text.length+'\n'; tot+=tid.text.length;
}
var avg=tot/tids.length;
out=tot+' bytes in '+tids.length+' selected tiddlers ('+avg+' bytes/tiddler)\n<<<\n'+out+'<<<\n';
removeChildren(target);
target.innerHTML="<hr><font size=-2><a href='javascript:;' style='float:right' "
+"onclick='this.parentNode.parentNode.style.display=\"none\"'>close</a></font>";
wikify(out,target);
target.style.display='block';
}
};
//}}}
/***
//{{{
!html
<style>
.tiddlerTweaker table,
.tiddlerTweaker table tr,
.tiddlerTweaker table td
{ padding:0;margin:0;border:0;white-space:nowrap; }
</style><form class='tiddlerTweaker'><!--
--><table style="width:100%"><tr valign="top"><!--
--><td style="text-align:center;width:99%;"><!--
--><font size=-2><div style="text-align:left;"><span style="float:right"><!--
--> <a href="javascript:;"
title="select all tiddlers"
onclick="return config.macros.tiddlerTweaker.selecttiddlers(this,function(opt){
return opt.value.length;
});">all</a><!--
--> <a href="javascript:;"
title="select tiddlers currently displayed in the story column"
onclick="return config.macros.tiddlerTweaker.selecttiddlers(this,function(opt){
return story.getTiddler(opt.value);
});">opened</a><!--
--> <a href="javascript:;"
title="select tiddlers that are new/changed since the last file save"
onclick="var lastmod=new Date(document.lastModified);
return config.macros.tiddlerTweaker.selecttiddlers(this,function(opt){
var tid=store.getTiddler(opt.value);
return tid&&tid.modified>lastmod;
});
">changed</a><!--
--> <a href="javascript:;"
title="select tiddlers with at least one matching tag"
onclick="var t=prompt('Enter space-separated tags (match one or more). Use \x22-\x22 to match untagged tiddlers');
if (!t||!t.length) return false;
var tags=t.readBracketedList();
return config.macros.tiddlerTweaker.selecttiddlers(this,function(opt){
var tid=store.getTiddler(opt.value);
return tid&&tags[0]=='-'?!tid.tags.length:tid.tags.containsAny(tags);
});
">tags</a><!--
--> <a href="javascript:;"
title="select tiddlers whose titles include matching text"
onclick="var t=prompt('Enter a title (or portion of a title) to match');
if (!t||!t.length) return false;
return config.macros.tiddlerTweaker.selecttiddlers(this,function(opt){
return opt.value.indexOf(t)!=-1;
});
">titles</a><!--
--> <a href="javascript:;"
title="select tiddlers containing matching text"
onclick="var t=prompt('Enter tiddler text (content) to match');
if (!t||!t.length) return false;
return config.macros.tiddlerTweaker.selecttiddlers(this,function(opt){
var tt=store.getTiddlerText(opt.value,'');
return tt.indexOf(t)!=-1;
});
">text</a><!--
--> <a href="javascript:;"
title="reverse selection of all list items"
onclick="return config.macros.tiddlerTweaker.selecttiddlers(this,function(opt){
return !opt.selected;
});">invert</a><!--
--></span><span>select tiddlers</span><!--
--></div><!--
--></font><select multiple name=list size="11" style="width:99.99%"
title="use click, shift-click and/or ctrl-click to select multiple tiddler titles"
onclick="config.macros.tiddlerTweaker.enablefields(this)"
onchange="config.macros.tiddlerTweaker.setfields(this)"><!--
--></select><br><!--
-->show<input type=text size=1 value="11"
onchange="this.form.list.size=this.value; this.form.list.multiple=(this.value>1);"><!--
-->by<!--
--><select name=sortby size=1
onchange="config.macros.tiddlerTweaker.init(this.form,this.value)"><!--
--><option value="title">title</option><!--
--><option value="size">size</option><!--
--><option value="modified">modified</option><!--
--><option value="created">created</option><!--
--><option value="modifier">modifier</option><!--
--></select><!--
--><input type="button" value="refresh"
onclick="config.macros.tiddlerTweaker.init(this.form,this.form.sortby.value)"<!--
--> <input type="button" name="stats" disabled value="totals..."
onclick="config.macros.tiddlerTweaker.stats(this)"><!--
--></td><td style="width:1%"><!--
--><div style="text-align:left"><font size=-2> modify values</font></div><!--
--><table style="width:100%;"><tr><!--
--><td style="padding:1px"><!--
--><input type=checkbox name=settitle unchecked
title="allow changes to tiddler title (rename tiddler)"
onclick="this.form.title.disabled=!this.checked">title<!--
--></td><td style="padding:1px"><!--
--><input type=text name=title size=35 style="width:98%" disabled><!--
--></td></tr><tr><td style="padding:1px"><!--
--><input type=checkbox name=setcreator unchecked
title="allow changes to tiddler creator"
onclick="this.form.creator.disabled=!this.checked">created by<!--
--></td><td style="padding:1px;"><!--
--><input type=text name=creator size=35 style="width:98%" disabled><!--
--></td></tr><tr><td style="padding:1px"><!--
--><input type=checkbox name=setwho unchecked
title="allow changes to tiddler author"
onclick="this.form.who.disabled=!this.checked">modified by<!--
--></td><td style="padding:1px"><!--
--><input type=text name=who size=35 style="width:98%" disabled><!--
--></td></tr><tr><td style="padding:1px"><!--
--><input type=checkbox name=setcdate unchecked
title="allow changes to created date"
onclick="var f=this.form;
f.cm.disabled=f.cd.disabled=f.cy.disabled=f.ch.disabled=f.cn.disabled=!this.checked"><!--
-->created on<!--
--></td><td style="padding:1px"><!--
--><input type=text name=cm size=2 style="width:2em;padding:0;text-align:center" disabled><!--
--> / <input type=text name=cd size=2 style="width:2em;padding:0;text-align:center" disabled><!--
--> / <input type=text name=cy size=4 style="width:3em;padding:0;text-align:center" disabled><!--
--> at <input type=text name=ch size=2 style="width:2em;padding:0;text-align:center" disabled><!--
--> : <input type=text name=cn size=2 style="width:2em;padding:0;text-align:center" disabled><!--
--></td></tr><tr><td style="padding:1px"><!--
--><input type=checkbox name=setmdate unchecked
title="allow changes to modified date"
onclick="var f=this.form;
f.mm.disabled=f.md.disabled=f.my.disabled=f.mh.disabled=f.mn.disabled=!this.checked"><!--
-->modified on<!--
--></td><td style="padding:1px"><!--
--><input type=text name=mm size=2 style="width:2em;padding:0;text-align:center" disabled><!--
--> / <input type=text name=md size=2 style="width:2em;padding:0;text-align:center" disabled><!--
--> / <input type=text name=my size=4 style="width:3em;padding:0;text-align:center" disabled><!--
--> at <input type=text name=mh size=2 style="width:2em;padding:0;text-align:center" disabled><!--
--> : <input type=text name=mn size=2 style="width:2em;padding:0;text-align:center" disabled><!--
--></td></tr><tr><td style="padding:1px"><!--
--><input type=checkbox name=replacetext unchecked
title="find/replace matching text"
onclick="this.form.pattern.disabled=this.form.replacement.disabled=!this.checked">replace text<!--
--></td><td style="padding:1px"><!--
--><input type=text name=pattern size=15 value="" style="width:40%" disabled
title="enter TEXT PATTERN (regular expression)"> with<!--
--><input type=text name=replacement size=15 value="" style="width:40%" disabled
title="enter REPLACEMENT TEXT"><!--
--></td></tr><tr><td style="padding:1px"><!--
--><input type=checkbox name=settags checked
title="allow changes to tiddler tags"
onclick="this.form.tags.disabled=!this.checked">tags<!--
--></td><td style="padding:1px"><!--
--><input type=text name=tags size=35 value="" style="width:98%"
title="enter new tags or use '+tag' and '-tag' to add/remove tags from existing tags"><!--
--></td></tr></table><!--
--><div style="text-align:center"><!--
--><nobr><input type=button name=display disabled style="width:24%" value="display"
title="show selected tiddlers"
onclick="config.macros.tiddlerTweaker.displaytiddlers(this,false)"><!--
--> <input type=button name=edit disabled style="width:23%" value="edit"
title="edit selected tiddlers"
onclick="config.macros.tiddlerTweaker.displaytiddlers(this,true)"><!--
--> <input type=button name=del disabled style="width:24%" value="delete"
title="remove selected tiddlers"
onclick="config.macros.tiddlerTweaker.deltiddlers(this)"><!--
--> <input type=button name=set disabled style="width:24%" value="update"
title="update selected tiddlers"
onclick="config.macros.tiddlerTweaker.settiddlers(this)"></nobr><!--
--></div><!--
--></td></tr></table><!--
--></form><span style="display:none"><!--content replaced by tiddler "stats"--></span>
!end
//}}}
***/
/***
|''Name''|TiddlyFileImportr|
|''Version''|0.2.0|
|''Status''|experimental|
|''Source''|https://github.com/jdlrobson/TiddlyWikiPlugins/tree/master/apps/fileimport|
|''Latest''|http://repository.tiddlyspace.com/TiddlyFileImportr|
<<importTiddlers>>
!Code
***/
//{{{
var ImportWizard, WizardMaker;
(function($) {
WizardMaker = function(place, wizard) {
var steps = wizard[0];
var options = wizard[1] || {};
$("<h1 />").text(options.heading || "Wizard").appendTo(place);
var wizard = this;
$('<button class="button">restart wizard</button>').click(function(ev) {
wizard.jumpTo(0);
}).appendTo(place)[0];
this.currentStep = 0;
this.body = $('<div class="wizardBody"/>').appendTo(place)[0];
this.steps = steps;
this.values = {};
this.createStep(0);
};
WizardMaker.prototype = {
/*
OPTIONS
step: [function, options]
*/
createStep: function(stepNumber) {
$(this.body).empty();
var step = this.steps[stepNumber];
if(!step) {
throw "invalid step (" + stepNumber + ")"
}
var options = step[1] || {};
var humanStep = stepNumber + 1;
var heading = "Step " + humanStep;
if(options.heading) {
heading += ": " + options.heading;
}
$("<h2 />").text(heading).appendTo(this.body);
var container = $('<div class="wizardStep" />').appendTo(this.body)[0];
step[0](container, this);
},
next: function() {
if(this.currentStep < this.steps.length - 1) {
this.currentStep += 1;
}
this.createStep(this.currentStep);
},
jumpTo: function(step) {
this.currentStep = step;
this.createStep(step);
},
setValue: function(name, val) {
this.values[name] = val;
},
getValue: function(name) {
return this.values[name];
}
};
if (window.File && window.FileReader && window.FileList && window.Blob) {
ImportWizard = function(options) {
var proxy = options.proxy, saveFunction = options.save,
internalizeTiddler = options.internalizeTiddler, proxyType = options.proxyType || "GET";
return [
[
[function(body, wizard) {
$(body).html('Where do you want to import from? <select><option value="1">file</option><option value="2">the web</option></select><button class="button">ok</button>');
$("button", body).click(function(ev) {
var opt = $("select", body).val();
if(opt === "1") {
wizard.next();
} else {
wizard.jumpTo(2);
}
});
},
{ heading: "File or Web?" }],
[function(body, wizard) {
$(body).html('Browse for a file: <input type="file" size="50" name="txtBrowse"><br><hr><div class="wizardFooter"><div class="message"></div></div>');
function handleFileSelect(evt) {
reader = new FileReader();
reader.onerror = function(e, msg) {
alert("Error occurred")
};
reader.onabort = function(e) {
alert('File read cancelled');
};
reader.onload = function(e) {
var html = reader.result;
wizard.setValue("html", html);
wizard.jumpTo(3)
}
// Read in the image file as a binary string.
window.reader = reader;
reader.readAsBinaryString(evt.target.files[0]);
}
$("[type=file]", body)[0].addEventListener('change', handleFileSelect, false);
}, { heading: "Locate TiddlyWiki file" }],
[function(body, wizard) {
$(body).html('Enter the URL or pathname here: <div class="message"></div><input type="text" size="50" name="txtPath"><button class="button">open</button>');
$("button", body).click(function(ev) {
var url = proxy.replace("%0", $("input", body).val())
ajaxReq({
type: options.proxyType,
url: url,
success: function(html) {
wizard.setValue("html", html);
wizard.jumpTo(3);
},
error: function() {
$(".message").html("There is something wrong with that url please try another.");
$("input", body).addClass("error");
}
})
})
},
{ heading: "Import from Web" }],
[function(body, wizard) {
var html = wizard.getValue("html");
var doc = $(html);
var store;
$(html).each(function(i, el) {
if(el.id === "storeArea") {
store = el;
}
});
if(store) {
var tiddlers = [];
$(store).children().each(function(i, el) {
var title = $(el).attr("title");
tiddlers.push(internalizeTiddler(el));
});
$("<div />").text("Choose tiddlers that you wish to import");
var table = $("<table />").appendTo(body)[0];
$("<tr />").html('<th><input type="checkbox" checked/></th><th>title</th>').
appendTo(table)
$("input", table).change(function(ev) {
var checked = $(ev.target).is(':checked');
$("input[type=checkbox]", body).attr("checked", checked);
});
for(var i = 0; i < tiddlers.length; i++) {
var title = tiddlers[i].title;
var row = $("<tr />").data("tiddler", tiddlers[i]).appendTo(table)[0];
$("<td />").html('<input type="checkbox" checked="checked"/>').appendTo(row);
$("<td />").text(title).appendTo(row);
}
$('<button class="button">import</button>').click(function(ev) {
var tids = [];
$("input[type=checkbox]:checked").each(function(i, chk) {
var tiddler = $(chk).parents("tr").data("tiddler");
if(tiddler) {
tids.push(tiddler);
}
});
wizard.setValue("selected", tids);
wizard.jumpTo(4)
}).prependTo(body);
}
},
{ heading: "Choose tiddlers" }],
[function(body, wizard) {
var tids = wizard.getValue("selected");
$(body).text("Please wait");
// do import
var save = 0;
var complete = function() {
save += 1;
if(save === tids.length) {
wizard.jumpTo(5);
}
};
for(var i = 0; i < tids.length; i++) {
var tid = tids[i];
saveFunction(tid, complete);
}
},
{ heading: "Importing" }],
[function(body, wizard) {
$(body).html("Good news! Everything is now imported.");
},
{ heading: "Finished!" }]
],
{
heading: "Import tiddlers from another file or server"
}
];
}
} else {
$("#container").addClass("error").text("Your browser is not modern enough to support this app.");
}
})(jQuery);
(function($) {
var proxy = "%0", proxyType = "GET";
if(config.extensions.tiddlyspace) {
proxy = "/reflector?uri=%0";
proxyType: "POST";
}
var loader = new TW21Loader();
var internalizer = function(node) {
var title = $(node).attr("title");
var tiddler = new Tiddler(title);
loader.internalizeTiddler(store, tiddler, title, node);
return tiddler;
};
var importer = ImportWizard({proxy:"%0", save: function(tid, callback) {
merge(tid.fields, config.defaultCustomFields);
delete tid.fields["server.page.revision"];
delete tid.fields["server.etag"];
tid = store.saveTiddler(tid);
autoSaveChanges(null, [tid]);
callback();
}, internalizeTiddler: internalizer, proxyType: proxyType });
config.macros.importTiddlers = {
handler: function(place) {
var container = $("<div />").appendTo(place)[0];
new WizardMaker(container, importer);
}
};
})(jQuery);
//}}}
/***
|Name|TiddlyLockPlugin|
|Source|http://www.minormania.com/tiddlylock/tiddlylock.html|
|Version|1.2|
|Author|Richard Hobbis|
|License|[[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]]|
|Type|plugin|
|Overrides|config.macros.newTiddler.onClickNewTiddler()<br>config.commands.cancelTiddler.handler()<br>config.commands.deleteTiddler.handler<br>config.commands.editTiddler.handler()<br>config.commands.saveTiddler.handler()<br>saveChanges()<br>checkUnsavedChanges()|
|Description|Automatically locks and unlocks the TiddlyWiki as required, allowing multiple users to edit the TiddlyWiki without fear of overwriting other users' changes.|
!!!Usage
<<<
Simply import TiddlyLockPlugin into your TiddlyWiki!
<<<
!!!Installation
<<<
Import (or copy/paste) ''this tiddler'' into your TiddlyWiki and make sure it's tagged with <<tag systemConfig>>. Reload your TiddlyWiki to enable TiddlyLock.
<<<
!!!Configuration
<<<
None required!
<<<
!!!Revision History
<<<
''2010.07.06 [1.2.0]'' Allow the location of the Lock File to be specified by the user, instead of defaulting to the location of the TiddlyWiki file. The default location is the same folder as the TiddlyWiki file itself, however this can be changed by editing ''//this html file//'' in a text editor and search for {{{TiddlyLock.LockPath = '';}}} The folder will be created if it doesn't exist.
''2010.07.06 [1.2.0]'' Upgraded this TiddlyWiki to core version 2.6
''2008.05.15 [1.1.0]'' Upgraded source TiddlyWiki to use core version 2.4. Tested and verified TiddlyLock under version 2.4.
''2007.06.22 [1.0.4]'' Added locking on 'new tiddler' which also traps 'new journal'. Tweaked messages.
''2007.06.20 [1.0.3]'' Fixed an issue that occurred when a user navigated away from the TiddlyWiki without saving outstanding changes.
''2007.05.10 [1.0.2]'' Implemented a timestamp to track the last update time. This fixes the multi-browser edit issue and also removes the need for a password.
''2007.05.08 [1.0.1]'' Function overrides are now done using apply() ensuring clean upgrades (thanks Martin!)
''2007.05.01 [1.0.0]'' Initial Release
<<<
!!!Known Issues
<<<
*Monkey Pirate TiddlyWiki (MPTW) adds a ''disable'' button to the toolbar for systemConfig tiddlers. This button is available even when the TW is marked as readOnly and therefore it's possible for two users to disable/enable plugins at the same time. In this case, whoever saves the TW last will 'win' and their changes will be saved. Note that this is only an issue if there are no other unsaved changes in both browsers - TiddlyLock still handles all other changes.
<<<
!!!Credits
<<<
This feature was developed by Richard Hobbis (rhobbis [at] hotmail [dot] com).
<<<
!!!Code
***/
//{{{
// Convert a date to UTC YYYYMMDDHHMMSSMMM string format
// This is the same as the builtin function convertToYYYYMMDDHHMMSSMMM() but
// without the '.' in the middle - this allows simple date comparisons
Date.prototype.TLConvertToYYYYMMDDHHMMSSMMM = function()
{
return(String.zeroPad(this.getUTCFullYear(),4)
+ String.zeroPad(this.getUTCMonth()+1,2)
+ String.zeroPad(this.getUTCDate(),2)
+ String.zeroPad(this.getUTCHours(),2)
+ String.zeroPad(this.getUTCMinutes(),2)
+ String.zeroPad(this.getUTCSeconds(),2)
+ String.zeroPad(this.getUTCMilliseconds(),4));
}
// namespace for TiddlyLock
TiddlyLock = {};
// Load/Last Update timestamp
TiddlyLock.TimeStamp = new Date().TLConvertToYYYYMMDDHHMMSSMMM();
// Lockfile
TiddlyLock.LockPath = ''; // custom values *must* include trailing '\\'
TiddlyLock.OldLockData = '';
TiddlyLock.LockData = '';
TiddlyLock.LockFile = TLLockPath();
// define messages
TiddlyLock.Msg = {
Locked: 'File locked',
Unlocked: 'File unlocked',
LockFailed: 'Failed to lock file',
UnlockFailed: 'Failed to unlock file',
ReadOnly: 'Now in Read-Only mode.',
Changed: 'This file has been changed by someone else.',
Reload: 'Reload this file before editing.'};
// create/update the lock file
function TLSave(timeStamp,lockedBy)
{
var lockedText='';
if (lockedBy!='')
{
lockedText=timeStamp+'##'+lockedBy;
}
else lockedText=timeStamp+'##';
var lockSave=saveFile(TiddlyLock.LockFile,lockedText);
TiddlyLock.TimeStamp = timeStamp;
return false;
}
// Create/update the lock file to prevent other users from editing the TW
function TLLock()
{
clearMessage();
lockSave = TLSave(new Date().TLConvertToYYYYMMDDHHMMSSMMM(),config.options.txtUserName);
displayMessage(TiddlyLock.Msg.Locked,'');
return false;
}
// Clear the lock file if necessary, but only if I have it locked, setting the
// timestamp in the lockfile to the specified value
function TLUnlock(timeStamp)
{
if ((store && store.isDirty && !store.isDirty())
&& (story && story.areAnyDirty && !story.areAnyDirty())
&& TLIsLocked()
&& TLIsLockedByMe())
{
lockSave=TLSave(timeStamp,'','');
displayMessage(TiddlyLock.Msg.Unlocked,'');
TiddlyLock.OldLockData = TiddlyLock.LockData;
}
return false;
}
// Get the contents of the lock file, if it exists
function TLLockPath()
{
var lockPath,pathRoot,p,fileName;
var fullPath=document.location.toString();
if(TiddlyLock.LockPath!='') pathRoot=TiddlyLock.LockPath; // location of lock file is defined by TiddlyLock.LockPath
else pathRoot=getLocalPath(fullPath); // location of lock file is derived from the wiki filename
if((p=pathRoot.lastIndexOf('\\'))!=-1) pathRoot=pathRoot.substr(0,p+1); // truncate any trailing filename (derived paths only)
fileName=getLocalPath(fullPath); // full wiki file name, including path
if((p=fileName.lastIndexOf('\\'))!=-1) fileName=fileName.substr(p+1); // truncate everything up to the last slash
if((p=fileName.lastIndexOf('.'))!=-1) fileName=fileName.substr(0,p); // remove any existing extension
fileName=fileName+'.lck'; // add new extension
return pathRoot+fileName;
}
// Get the contents of the lock file, if it exists
function TLLockData()
{
return loadFile(TiddlyLock.LockFile);
}
// Get the contents of the lock file, if it exists
function TLIsLocked()
{
TiddlyLock.LockData = TLLockData();
if (TiddlyLock.LockData
&& ( TLLockedBy(TiddlyLock.LockData)!='' // someone has it locked
|| TiddlyLock.TimeStamp < TLLockedTimeStamp(TiddlyLock.LockData) // changed by someone else but not currently locked
)
)
return true;
else
return false;
}
// check if locked by me
function TLIsLockedByMe()
{
if(TiddlyLock.LockData == TiddlyLock.TimeStamp+'##' + config.options.txtUserName)
return true;
else
return false;
}
// returns just the timestamp portion of the supplied lock file contents
function TLLockedTimeStamp(lockData)
{
if(lockData)
return lockData.split('##')[0];
else
return '';
}
// returns just the username portion of the supplied lock file contents
function TLLockedBy(lockData)
{
if(lockData)
return lockData.split('##')[1];
else
return '';
}
// display a message if locked or changed
function TLChangesAllowed()
{
if(TLIsLocked() && !TLIsLockedByMe())
{
readOnly=true;
if(TLLockedBy(TiddlyLock.LockData))
{
displayMessage(TiddlyLock.Msg.Locked+' by '+TLLockedBy(TiddlyLock.LockData));
alert(TiddlyLock.Msg.Locked+' by '+TLLockedBy(TiddlyLock.LockData)+'. '+TiddlyLock.Msg.ReadOnly);
}
else
{
displayMessage(TiddlyLock.Msg.Changed+' '+TiddlyLock.Msg.Reload);
alert(TiddlyLock.Msg.Changed+' '+TiddlyLock.Msg.Reload);
}
return false;
}
else
return true;
}
//*********************************************
// OVERRIDE STANDARD FUNCTIONS
//*********************************************
//
// OVERRIDE onClickNewTiddler()
//
TiddlyLock.onClickNewTiddler = config.macros.newTiddler.onClickNewTiddler;
config.macros.newTiddler.onClickNewTiddler = function(event,src,title)
{
if (TLChangesAllowed())
{
TiddlyLock.OldLockData = TiddlyLock.LockData;
TLLock();
var ret = TiddlyLock.onClickNewTiddler.apply(this,arguments);
return ret;
}
}
//
// OVERRIDE checkUnsavedChanges()
//
TiddlyLock.checkUnsavedChanges = checkUnsavedChanges;
checkUnsavedChanges = function(event,src,title)
{
var ret = TiddlyLock.checkUnsavedChanges.apply(this,arguments);
if(TLIsLocked() && TLIsLockedByMe())
lockSave=TLSave(TLLockedTimeStamp(TiddlyLock.OldLockData),'','');
return ret;
}
//
// OVERRIDE cancelTiddler()
//
TiddlyLock.cancelTiddler = config.commands.cancelTiddler.handler;
config.commands.cancelTiddler.handler = function(event,src,title)
{
var ret = TiddlyLock.cancelTiddler.apply(this,arguments);
TLUnlock(TLLockedTimeStamp(TiddlyLock.OldLockData));
return ret;
}
//
// OVERRIDE deleteTiddler()
//
TiddlyLock.deleteTiddler = config.commands.deleteTiddler.handler;
config.commands.deleteTiddler.handler = function(event,src,title)
{
if (TLChangesAllowed())
{
TiddlyLock.OldLockData = TiddlyLock.LockData;
TLLock();
var ret = TiddlyLock.deleteTiddler.apply(this,arguments);
return ret;
}
}
//
// OVERRIDE editTiddler()
//
TiddlyLock.editTiddler = config.commands.editTiddler.handler;
config.commands.editTiddler.handler = function(event,src,title)
{
if (TLChangesAllowed())
{
TiddlyLock.OldLockData = TiddlyLock.LockData;
TLLock();
}
var ret = TiddlyLock.editTiddler.apply(this,arguments);
return ret;
}
//
// OVERRIDE saveChanges()
//
TiddlyLock.saveChanges = saveChanges;
saveChanges = function(onlyIfDirty)
{
if(TLChangesAllowed())
{
var ret = TiddlyLock.saveChanges.apply(this,arguments);
TLUnlock(new Date().TLConvertToYYYYMMDDHHMMSSMMM());
return ret;
}
else
return false;
}
//
// OVERRIDE saveTiddler()
//
TiddlyLock.saveTiddler= config.commands.saveTiddler.handler;
config.commands.saveTiddler.handler=function(event,src,title)
{
var ret = TiddlyLock.saveTiddler.apply(this,arguments);
TLUnlock(new Date().TLConvertToYYYYMMDDHHMMSSMMM());
return ret;
}
//}}}
<<timeline modified 10>>
[tag[systemConfig]]
Taches de chacun :
<<tiddler AutoRefresh>>{{fourcolumns{<<tiddler FetList with: {{tiddler.title}} {{tiddler.title}}>>}}}
/%
!info
|Name|ToggleRightSidebar|
|Source|http://www.TiddlyTools.com/#ToggleRightSidebar|
|Version|2.0.0|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|transclusion|
|Description|show/hide right sidebar (SideBarOptions)|
Usage
<<<
{{{
<<tiddler ToggleRightSidebar>>
<<tiddler ToggleRightSidebar with: label tooltip>>
}}}
Try it: <<tiddler ToggleRightSidebar##show
with: {{config.options.chkShowRightSidebar?'>':'<'}}>>
<<<
Configuration:
<<<
{{{
config.options.chkShowRightSidebar (true)
config.options.txtToggleRightSideBarLabelShow (◄)
config.options.txtToggleRightSideBarLabelHide (►)
}}}
<<<
!end
!show
<<tiddler {{
var co=config.options;
if (co.chkShowRightSidebar===undefined) co.chkShowRightSidebar=true;
var sb=document.getElementById('sidebar');
var da=document.getElementById('displayArea');
if (sb) {
sb.style.display=co.chkShowRightSidebar?'block':'none';
da.style.marginRight=co.chkShowRightSidebar?'':'1em';
}
'';}}>><html><nowiki><a href='javascript:;' title="$2"
onmouseover="
this.href='javascript:void(eval(decodeURIComponent(%22(function(){try{('
+encodeURIComponent(encodeURIComponent(this.onclick))
+')()}catch(e){alert(e.description?e.description:e.toString())}})()%22)))';"
onclick="
var co=config.options;
var opt='chkShowRightSidebar';
var show=co[opt]=!co[opt];
var sb=document.getElementById('sidebar');
var da=document.getElementById('displayArea');
if (sb) {
sb.style.display=show?'block':'none';
da.style.marginRight=show?'':'1em';
}
saveOptionCookie(opt);
var labelShow=co.txtToggleRightSideBarLabelShow||'◄';
var labelHide=co.txtToggleRightSideBarLabelHide||'►';
if (this.innerHTML==labelShow||this.innerHTML==labelHide)
this.innerHTML=show?labelHide:labelShow;
this.title=(show?'hide':'show')+' right sidebar';
var sm=document.getElementById('storyMenu');
if (sm) config.refreshers.content(sm);
return false;
">$1</a></html>
!end
%/<<tiddler {{
var src='ToggleRightSidebar';
src+(tiddler&&tiddler.title==src?'##info':'##show');
}} with: {{
var co=config.options;
var labelShow=co.txtToggleRightSideBarLabelShow||'◄';
var labelHide=co.txtToggleRightSideBarLabelHide||'►';
'$1'!='$'+'1'?'$1':(co.chkShowRightSidebar?labelHide:labelShow);
}} {{
var tip=(config.options.chkShowRightSidebar?'hide':'show')+' right sidebar';
'$2'!='$'+'2'?'$2':tip;
}}>>
|~ViewToolbar|closeTiddler closeOthers +editTiddler > fields syncing permalink references jump copyTiddler|
|~EditToolbar|+saveCloseTiddler -saveTiddler cancelTiddler deleteTiddler|
/***
Description: Contains the stuff you need to use Tiddlyspot
Note, you also need UploadPlugin, PasswordOptionPlugin and LoadRemoteFileThroughProxy
from http://tiddlywiki.bidix.info for a complete working Tiddlyspot site.
***/
//{{{
// edit this if you are migrating sites or retrofitting an existing TW
config.tiddlyspotSiteId = 'julien23';
// make it so you can by default see edit controls via http
config.options.chkHttpReadOnly = false;
window.readOnly = false; // make sure of it (for tw 2.2)
window.showBackstage = true; // show backstage too
// disable autosave in d3
if (window.location.protocol != "file:")
config.options.chkGTDLazyAutoSave = false;
// tweak shadow tiddlers to add upload button, password entry box etc
with (config.shadowTiddlers) {
SiteUrl = 'http://'+config.tiddlyspotSiteId+'.tiddlyspot.com';
SideBarOptions = SideBarOptions.replace(/(<<saveChanges>>)/,"$1<<tiddler TspotSidebar>>");
OptionsPanel = OptionsPanel.replace(/^/,"<<tiddler TspotOptions>>");
DefaultTiddlers = DefaultTiddlers.replace(/^/,"[[WelcomeToTiddlyspot]] ");
MainMenu = MainMenu.replace(/^/,"[[WelcomeToTiddlyspot]] ");
}
// create some shadow tiddler content
merge(config.shadowTiddlers,{
'TspotOptions':[
"tiddlyspot password:",
"<<option pasUploadPassword>>",
""
].join("\n"),
'TspotControls':[
"| tiddlyspot password:|<<option pasUploadPassword>>|",
"| site management:|<<upload http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/store.cgi index.html . . " + config.tiddlyspotSiteId + ">>//(requires tiddlyspot password)//<br>[[control panel|http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/controlpanel]], [[download (go offline)|http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/download]]|",
"| links:|[[tiddlyspot.com|http://tiddlyspot.com/]], [[FAQs|http://faq.tiddlyspot.com/]], [[blog|http://tiddlyspot.blogspot.com/]], email [[support|mailto:support@tiddlyspot.com]] & [[feedback|mailto:feedback@tiddlyspot.com]], [[donate|http://tiddlyspot.com/?page=donate]]|"
].join("\n"),
'WelcomeToTiddlyspot':[
"This document is a ~TiddlyWiki from tiddlyspot.com. A ~TiddlyWiki is an electronic notebook that is great for managing todo lists, personal information, and all sorts of things.",
"",
"@@font-weight:bold;font-size:1.3em;color:#444; //What now?// @@ Before you can save any changes, you need to enter your password in the form below. Then configure privacy and other site settings at your [[control panel|http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/controlpanel]] (your control panel username is //" + config.tiddlyspotSiteId + "//).",
"<<tiddler TspotControls>>",
"See also GettingStarted.",
"",
"@@font-weight:bold;font-size:1.3em;color:#444; //Working online// @@ You can edit this ~TiddlyWiki right now, and save your changes using the \"save to web\" button in the column on the right.",
"",
"@@font-weight:bold;font-size:1.3em;color:#444; //Working offline// @@ A fully functioning copy of this ~TiddlyWiki can be saved onto your hard drive or USB stick. You can make changes and save them locally without being connected to the Internet. When you're ready to sync up again, just click \"upload\" and your ~TiddlyWiki will be saved back to tiddlyspot.com.",
"",
"@@font-weight:bold;font-size:1.3em;color:#444; //Help!// @@ Find out more about ~TiddlyWiki at [[TiddlyWiki.com|http://tiddlywiki.com]]. Also visit [[TiddlyWiki.org|http://tiddlywiki.org]] for documentation on learning and using ~TiddlyWiki. New users are especially welcome on the [[TiddlyWiki mailing list|http://groups.google.com/group/TiddlyWiki]], which is an excellent place to ask questions and get help. If you have a tiddlyspot related problem email [[tiddlyspot support|mailto:support@tiddlyspot.com]].",
"",
"@@font-weight:bold;font-size:1.3em;color:#444; //Enjoy :)// @@ We hope you like using your tiddlyspot.com site. Please email [[feedback@tiddlyspot.com|mailto:feedback@tiddlyspot.com]] with any comments or suggestions."
].join("\n"),
'TspotSidebar':[
"<<upload http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/store.cgi index.html . . " + config.tiddlyspotSiteId + ">><html><a href='http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/download' class='button'>download</a></html>"
].join("\n")
});
//}}}
| !date | !user | !location | !storeUrl | !uploadDir | !toFilename | !backupdir | !origin |
| 22/08/2010 23:08:43 | GUEST | [[julien23.html|file:///C:/Documents%20and%20Settings/Julien%20BOUCHEZ/My%20Documents/Airbank/airbank_tw/JBouchez/Crea/julien23.html]] | [[store.cgi|http://julien23.tiddlyspot.com/store.cgi]] | . | [[index.html | http://julien23.tiddlyspot.com/index.html]] | . |
| 22/08/2010 23:08:54 | GUEST | [[julien23.html|file:///C:/Documents%20and%20Settings/Julien%20BOUCHEZ/My%20Documents/Airbank/airbank_tw/JBouchez/Crea/julien23.html]] | [[store.cgi|http://julien23.tiddlyspot.com/store.cgi]] | . | [[index.html | http://julien23.tiddlyspot.com/index.html]] | . |
| 13/10/2011 22:56:47 | JBouchez | [[index.htm|file:///C:/Users/jbouchez/Desktop/index.htm]] | [[store.cgi|http://julien23.tiddlyspot.com/store.cgi]] | . | [[index.html | http://julien23.tiddlyspot.com/index.html]] | . | ok |
| 13/10/2011 23:16:45 | JBouchez | [[index.htm|file:///C:/Users/jbouchez/Desktop/index.htm]] | [[|file:///C:/Users/jbouchez/Desktop/]] | . | [[index.htm | file:///C:/Users/jbouchez/Desktop/index.htm]] | | failed |
| 13/10/2011 23:18:04 | JBouchez | [[index.htm|file:///C:/Users/jbouchez/Desktop/index.htm]] | [[store.cgi|http://julien23.tiddlyspot.com/store.cgi]] | . | [[index.html | http://julien23.tiddlyspot.com/index.html]] | . | ok |
| 22/10/2011 16:51:38 | JBouchez | [[indexSpot.htm|file:///D:/jbouchez/Documents/airbank_tw/indexSpot.htm]] | [[store.cgi|http://julien23.tiddlyspot.com/store.cgi]] | . | [[index.html | http://julien23.tiddlyspot.com/index.html]] | . | ok |
| 10/11/2011 14:15:40 | JBouchez | [[indexSpot.htm|file:///Z:/airbank_tw/indexSpot.htm]] | [[store.cgi|http://julien23.tiddlyspot.com/store.cgi]] | . | [[index.html | http://julien23.tiddlyspot.com/index.html]] | . | failed |
| 10/11/2011 14:15:57 | JBouchez | [[indexSpot.htm|file:///Z:/airbank_tw/indexSpot.htm]] | [[store.cgi|http://julien23.tiddlyspot.com/store.cgi]] | . | [[index.html | http://julien23.tiddlyspot.com/index.html]] | . | failed |
| 10/11/2011 14:17:20 | JBouchez | [[indexSpot.htm|file:///Z:/airbank_tw/indexSpot.htm]] | [[store.cgi|http://julien23.tiddlyspot.com/store.cgi]] | . | [[index.html | http://julien23.tiddlyspot.com/index.html]] | . | ok |
| 10/11/2011 14:21:29 | JBouchez | [[indexSpot.htm|file:///Z:/airbank_tw/indexSpot.htm]] | [[store.cgi|http://julien23.tiddlyspot.com/store.cgi]] | . | [[index.html | http://julien23.tiddlyspot.com/index.html]] | . |
/***
|''Name:''|UploadPlugin|
|''Description:''|Save to web a TiddlyWiki|
|''Version:''|4.1.3|
|''Date:''|Feb 24, 2008|
|''Source:''|http://tiddlywiki.bidix.info/#UploadPlugin|
|''Documentation:''|http://tiddlywiki.bidix.info/#UploadPluginDoc|
|''Author:''|BidiX (BidiX (at) bidix (dot) info)|
|''License:''|[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D ]]|
|''~CoreVersion:''|2.2.0|
|''Requires:''|PasswordOptionPlugin|
***/
//{{{
version.extensions.UploadPlugin = {
major: 4, minor: 1, revision: 3,
date: new Date("Feb 24, 2008"),
source: 'http://tiddlywiki.bidix.info/#UploadPlugin',
author: 'BidiX (BidiX (at) bidix (dot) info',
coreVersion: '2.2.0'
};
//
// Environment
//
if (!window.bidix) window.bidix = {}; // bidix namespace
bidix.debugMode = false; // true to activate both in Plugin and UploadService
//
// Upload Macro
//
config.macros.upload = {
// default values
defaultBackupDir: '', //no backup
defaultStoreScript: "store.php",
defaultToFilename: "index.html",
defaultUploadDir: ".",
authenticateUser: true // UploadService Authenticate User
};
config.macros.upload.label = {
promptOption: "Save and Upload this TiddlyWiki with UploadOptions",
promptParamMacro: "Save and Upload this TiddlyWiki in %0",
saveLabel: "save to web",
saveToDisk: "save to disk",
uploadLabel: "upload"
};
config.macros.upload.messages = {
noStoreUrl: "No store URL in parmeters or options",
usernameOrPasswordMissing: "Username or password missing"
};
config.macros.upload.handler = function(place,macroName,params) {
if (readOnly)
return;
var label;
if (document.location.toString().substr(0,4) == "http")
label = this.label.saveLabel;
else
label = this.label.uploadLabel;
var prompt;
if (params[0]) {
prompt = this.label.promptParamMacro.toString().format([this.destFile(params[0],
(params[1] ? params[1]:bidix.basename(window.location.toString())), params[3])]);
} else {
prompt = this.label.promptOption;
}
createTiddlyButton(place, label, prompt, function() {config.macros.upload.action(params);}, null, null, this.accessKey);
};
config.macros.upload.action = function(params)
{
// for missing macro parameter set value from options
if (!params) params = {};
var storeUrl = params[0] ? params[0] : config.options.txtUploadStoreUrl;
var toFilename = params[1] ? params[1] : config.options.txtUploadFilename;
var backupDir = params[2] ? params[2] : config.options.txtUploadBackupDir;
var uploadDir = params[3] ? params[3] : config.options.txtUploadDir;
var username = params[4] ? params[4] : config.options.txtUploadUserName;
var password = config.options.pasUploadPassword; // for security reason no password as macro parameter
// for still missing parameter set default value
if ((!storeUrl) && (document.location.toString().substr(0,4) == "http"))
storeUrl = bidix.dirname(document.location.toString())+'/'+config.macros.upload.defaultStoreScript;
if (storeUrl.substr(0,4) != "http")
storeUrl = bidix.dirname(document.location.toString()) +'/'+ storeUrl;
if (!toFilename)
toFilename = bidix.basename(window.location.toString());
if (!toFilename)
toFilename = config.macros.upload.defaultToFilename;
if (!uploadDir)
uploadDir = config.macros.upload.defaultUploadDir;
if (!backupDir)
backupDir = config.macros.upload.defaultBackupDir;
// report error if still missing
if (!storeUrl) {
alert(config.macros.upload.messages.noStoreUrl);
clearMessage();
return false;
}
if (config.macros.upload.authenticateUser && (!username || !password)) {
alert(config.macros.upload.messages.usernameOrPasswordMissing);
clearMessage();
return false;
}
bidix.upload.uploadChanges(false,null,storeUrl, toFilename, uploadDir, backupDir, username, password);
return false;
};
config.macros.upload.destFile = function(storeUrl, toFilename, uploadDir)
{
if (!storeUrl)
return null;
var dest = bidix.dirname(storeUrl);
if (uploadDir && uploadDir != '.')
dest = dest + '/' + uploadDir;
dest = dest + '/' + toFilename;
return dest;
};
//
// uploadOptions Macro
//
config.macros.uploadOptions = {
handler: function(place,macroName,params) {
var wizard = new Wizard();
wizard.createWizard(place,this.wizardTitle);
wizard.addStep(this.step1Title,this.step1Html);
var markList = wizard.getElement("markList");
var listWrapper = document.createElement("div");
markList.parentNode.insertBefore(listWrapper,markList);
wizard.setValue("listWrapper",listWrapper);
this.refreshOptions(listWrapper,false);
var uploadCaption;
if (document.location.toString().substr(0,4) == "http")
uploadCaption = config.macros.upload.label.saveLabel;
else
uploadCaption = config.macros.upload.label.uploadLabel;
wizard.setButtons([
{caption: uploadCaption, tooltip: config.macros.upload.label.promptOption,
onClick: config.macros.upload.action},
{caption: this.cancelButton, tooltip: this.cancelButtonPrompt, onClick: this.onCancel}
]);
},
options: [
"txtUploadUserName",
"pasUploadPassword",
"txtUploadStoreUrl",
"txtUploadDir",
"txtUploadFilename",
"txtUploadBackupDir",
"chkUploadLog",
"txtUploadLogMaxLine"
],
refreshOptions: function(listWrapper) {
var opts = [];
for(i=0; i<this.options.length; i++) {
var opt = {};
opts.push();
opt.option = "";
n = this.options[i];
opt.name = n;
opt.lowlight = !config.optionsDesc[n];
opt.description = opt.lowlight ? this.unknownDescription : config.optionsDesc[n];
opts.push(opt);
}
var listview = ListView.create(listWrapper,opts,this.listViewTemplate);
for(n=0; n<opts.length; n++) {
var type = opts[n].name.substr(0,3);
var h = config.macros.option.types[type];
if (h && h.create) {
h.create(opts[n].colElements['option'],type,opts[n].name,opts[n].name,"no");
}
}
},
onCancel: function(e)
{
backstage.switchTab(null);
return false;
},
wizardTitle: "Upload with options",
step1Title: "These options are saved in cookies in your browser",
step1Html: "<input type='hidden' name='markList'></input><br>",
cancelButton: "Cancel",
cancelButtonPrompt: "Cancel prompt",
listViewTemplate: {
columns: [
{name: 'Description', field: 'description', title: "Description", type: 'WikiText'},
{name: 'Option', field: 'option', title: "Option", type: 'String'},
{name: 'Name', field: 'name', title: "Name", type: 'String'}
],
rowClasses: [
{className: 'lowlight', field: 'lowlight'}
]}
};
//
// upload functions
//
if (!bidix.upload) bidix.upload = {};
if (!bidix.upload.messages) bidix.upload.messages = {
//from saving
invalidFileError: "The original file '%0' does not appear to be a valid TiddlyWiki",
backupSaved: "Backup saved",
backupFailed: "Failed to upload backup file",
rssSaved: "RSS feed uploaded",
rssFailed: "Failed to upload RSS feed file",
emptySaved: "Empty template uploaded",
emptyFailed: "Failed to upload empty template file",
mainSaved: "Main TiddlyWiki file uploaded",
mainFailed: "Failed to upload main TiddlyWiki file. Your changes have not been saved",
//specific upload
loadOriginalHttpPostError: "Can't get original file",
aboutToSaveOnHttpPost: 'About to upload on %0 ...',
storePhpNotFound: "The store script '%0' was not found."
};
bidix.upload.uploadChanges = function(onlyIfDirty,tiddlers,storeUrl,toFilename,uploadDir,backupDir,username,password)
{
var callback = function(status,uploadParams,original,url,xhr) {
if (!status) {
displayMessage(bidix.upload.messages.loadOriginalHttpPostError);
return;
}
if (bidix.debugMode)
alert(original.substr(0,500)+"\n...");
// Locate the storeArea div's
var posDiv = locateStoreArea(original);
if((posDiv[0] == -1) || (posDiv[1] == -1)) {
alert(config.messages.invalidFileError.format([localPath]));
return;
}
bidix.upload.uploadRss(uploadParams,original,posDiv);
};
if(onlyIfDirty && !store.isDirty())
return;
clearMessage();
// save on localdisk ?
if (document.location.toString().substr(0,4) == "file") {
var path = document.location.toString();
var localPath = getLocalPath(path);
saveChanges();
}
// get original
var uploadParams = new Array(storeUrl,toFilename,uploadDir,backupDir,username,password);
var originalPath = document.location.toString();
// If url is a directory : add index.html
if (originalPath.charAt(originalPath.length-1) == "/")
originalPath = originalPath + "index.html";
var dest = config.macros.upload.destFile(storeUrl,toFilename,uploadDir);
var log = new bidix.UploadLog();
log.startUpload(storeUrl, dest, uploadDir, backupDir);
displayMessage(bidix.upload.messages.aboutToSaveOnHttpPost.format([dest]));
if (bidix.debugMode)
alert("about to execute Http - GET on "+originalPath);
var r = doHttp("GET",originalPath,null,null,username,password,callback,uploadParams,null);
if (typeof r == "string")
displayMessage(r);
return r;
};
bidix.upload.uploadRss = function(uploadParams,original,posDiv)
{
var callback = function(status,params,responseText,url,xhr) {
if(status) {
var destfile = responseText.substring(responseText.indexOf("destfile:")+9,responseText.indexOf("\n", responseText.indexOf("destfile:")));
displayMessage(bidix.upload.messages.rssSaved,bidix.dirname(url)+'/'+destfile);
bidix.upload.uploadMain(params[0],params[1],params[2]);
} else {
displayMessage(bidix.upload.messages.rssFailed);
}
};
// do uploadRss
if(config.options.chkGenerateAnRssFeed) {
var rssPath = uploadParams[1].substr(0,uploadParams[1].lastIndexOf(".")) + ".xml";
var rssUploadParams = new Array(uploadParams[0],rssPath,uploadParams[2],'',uploadParams[4],uploadParams[5]);
var rssString = generateRss();
// no UnicodeToUTF8 conversion needed when location is "file" !!!
if (document.location.toString().substr(0,4) != "file")
rssString = convertUnicodeToUTF8(rssString);
bidix.upload.httpUpload(rssUploadParams,rssString,callback,Array(uploadParams,original,posDiv));
} else {
bidix.upload.uploadMain(uploadParams,original,posDiv);
}
};
bidix.upload.uploadMain = function(uploadParams,original,posDiv)
{
var callback = function(status,params,responseText,url,xhr) {
var log = new bidix.UploadLog();
if(status) {
// if backupDir specified
if ((params[3]) && (responseText.indexOf("backupfile:") > -1)) {
var backupfile = responseText.substring(responseText.indexOf("backupfile:")+11,responseText.indexOf("\n", responseText.indexOf("backupfile:")));
displayMessage(bidix.upload.messages.backupSaved,bidix.dirname(url)+'/'+backupfile);
}
var destfile = responseText.substring(responseText.indexOf("destfile:")+9,responseText.indexOf("\n", responseText.indexOf("destfile:")));
displayMessage(bidix.upload.messages.mainSaved,bidix.dirname(url)+'/'+destfile);
store.setDirty(false);
log.endUpload("ok");
} else {
alert(bidix.upload.messages.mainFailed);
displayMessage(bidix.upload.messages.mainFailed);
log.endUpload("failed");
}
};
// do uploadMain
var revised = bidix.upload.updateOriginal(original,posDiv);
bidix.upload.httpUpload(uploadParams,revised,callback,uploadParams);
};
bidix.upload.httpUpload = function(uploadParams,data,callback,params)
{
var localCallback = function(status,params,responseText,url,xhr) {
url = (url.indexOf("nocache=") < 0 ? url : url.substring(0,url.indexOf("nocache=")-1));
if (xhr.status == 404)
alert(bidix.upload.messages.storePhpNotFound.format([url]));
if ((bidix.debugMode) || (responseText.indexOf("Debug mode") >= 0 )) {
alert(responseText);
if (responseText.indexOf("Debug mode") >= 0 )
responseText = responseText.substring(responseText.indexOf("\n\n")+2);
} else if (responseText.charAt(0) != '0')
alert(responseText);
if (responseText.charAt(0) != '0')
status = null;
callback(status,params,responseText,url,xhr);
};
// do httpUpload
var boundary = "---------------------------"+"AaB03x";
var uploadFormName = "UploadPlugin";
// compose headers data
var sheader = "";
sheader += "--" + boundary + "\r\nContent-disposition: form-data; name=\"";
sheader += uploadFormName +"\"\r\n\r\n";
sheader += "backupDir="+uploadParams[3] +
";user=" + uploadParams[4] +
";password=" + uploadParams[5] +
";uploaddir=" + uploadParams[2];
if (bidix.debugMode)
sheader += ";debug=1";
sheader += ";;\r\n";
sheader += "\r\n" + "--" + boundary + "\r\n";
sheader += "Content-disposition: form-data; name=\"userfile\"; filename=\""+uploadParams[1]+"\"\r\n";
sheader += "Content-Type: text/html;charset=UTF-8" + "\r\n";
sheader += "Content-Length: " + data.length + "\r\n\r\n";
// compose trailer data
var strailer = new String();
strailer = "\r\n--" + boundary + "--\r\n";
data = sheader + data + strailer;
if (bidix.debugMode) alert("about to execute Http - POST on "+uploadParams[0]+"\n with \n"+data.substr(0,500)+ " ... ");
var r = doHttp("POST",uploadParams[0],data,"multipart/form-data; ;charset=UTF-8; boundary="+boundary,uploadParams[4],uploadParams[5],localCallback,params,null);
if (typeof r == "string")
displayMessage(r);
return r;
};
// same as Saving's updateOriginal but without convertUnicodeToUTF8 calls
bidix.upload.updateOriginal = function(original, posDiv)
{
if (!posDiv)
posDiv = locateStoreArea(original);
if((posDiv[0] == -1) || (posDiv[1] == -1)) {
alert(config.messages.invalidFileError.format([localPath]));
return;
}
var revised = original.substr(0,posDiv[0] + startSaveArea.length) + "\n" +
store.allTiddlersAsHtml() + "\n" +
original.substr(posDiv[1]);
var newSiteTitle = getPageTitle().htmlEncode();
revised = revised.replaceChunk("<title"+">","</title"+">"," " + newSiteTitle + " ");
revised = updateMarkupBlock(revised,"PRE-HEAD","MarkupPreHead");
revised = updateMarkupBlock(revised,"POST-HEAD","MarkupPostHead");
revised = updateMarkupBlock(revised,"PRE-BODY","MarkupPreBody");
revised = updateMarkupBlock(revised,"POST-SCRIPT","MarkupPostBody");
return revised;
};
//
// UploadLog
//
// config.options.chkUploadLog :
// false : no logging
// true : logging
// config.options.txtUploadLogMaxLine :
// -1 : no limit
// 0 : no Log lines but UploadLog is still in place
// n : the last n lines are only kept
// NaN : no limit (-1)
bidix.UploadLog = function() {
if (!config.options.chkUploadLog)
return; // this.tiddler = null
this.tiddler = store.getTiddler("UploadLog");
if (!this.tiddler) {
this.tiddler = new Tiddler();
this.tiddler.title = "UploadLog";
this.tiddler.text = "| !date | !user | !location | !storeUrl | !uploadDir | !toFilename | !backupdir | !origin |";
this.tiddler.created = new Date();
this.tiddler.modifier = config.options.txtUserName;
this.tiddler.modified = new Date();
store.addTiddler(this.tiddler);
}
return this;
};
bidix.UploadLog.prototype.addText = function(text) {
if (!this.tiddler)
return;
// retrieve maxLine when we need it
var maxLine = parseInt(config.options.txtUploadLogMaxLine,10);
if (isNaN(maxLine))
maxLine = -1;
// add text
if (maxLine != 0)
this.tiddler.text = this.tiddler.text + text;
// Trunck to maxLine
if (maxLine >= 0) {
var textArray = this.tiddler.text.split('\n');
if (textArray.length > maxLine + 1)
textArray.splice(1,textArray.length-1-maxLine);
this.tiddler.text = textArray.join('\n');
}
// update tiddler fields
this.tiddler.modifier = config.options.txtUserName;
this.tiddler.modified = new Date();
store.addTiddler(this.tiddler);
// refresh and notifiy for immediate update
story.refreshTiddler(this.tiddler.title);
store.notify(this.tiddler.title, true);
};
bidix.UploadLog.prototype.startUpload = function(storeUrl, toFilename, uploadDir, backupDir) {
if (!this.tiddler)
return;
var now = new Date();
var text = "\n| ";
var filename = bidix.basename(document.location.toString());
if (!filename) filename = '/';
text += now.formatString("0DD/0MM/YYYY 0hh:0mm:0ss") +" | ";
text += config.options.txtUserName + " | ";
text += "[["+filename+"|"+location + "]] |";
text += " [[" + bidix.basename(storeUrl) + "|" + storeUrl + "]] | ";
text += uploadDir + " | ";
text += "[[" + bidix.basename(toFilename) + " | " +toFilename + "]] | ";
text += backupDir + " |";
this.addText(text);
};
bidix.UploadLog.prototype.endUpload = function(status) {
if (!this.tiddler)
return;
this.addText(" "+status+" |");
};
//
// Utilities
//
bidix.checkPlugin = function(plugin, major, minor, revision) {
var ext = version.extensions[plugin];
if (!
(ext &&
((ext.major > major) ||
((ext.major == major) && (ext.minor > minor)) ||
((ext.major == major) && (ext.minor == minor) && (ext.revision >= revision))))) {
// write error in PluginManager
if (pluginInfo)
pluginInfo.log.push("Requires " + plugin + " " + major + "." + minor + "." + revision);
eval(plugin); // generate an error : "Error: ReferenceError: xxxx is not defined"
}
};
bidix.dirname = function(filePath) {
if (!filePath)
return;
var lastpos;
if ((lastpos = filePath.lastIndexOf("/")) != -1) {
return filePath.substring(0, lastpos);
} else {
return filePath.substring(0, filePath.lastIndexOf("\\"));
}
};
bidix.basename = function(filePath) {
if (!filePath)
return;
var lastpos;
if ((lastpos = filePath.lastIndexOf("#")) != -1)
filePath = filePath.substring(0, lastpos);
if ((lastpos = filePath.lastIndexOf("/")) != -1) {
return filePath.substring(lastpos + 1);
} else
return filePath.substring(filePath.lastIndexOf("\\")+1);
};
bidix.initOption = function(name,value) {
if (!config.options[name])
config.options[name] = value;
};
//
// Initializations
//
// require PasswordOptionPlugin 1.0.1 or better
bidix.checkPlugin("PasswordOptionPlugin", 1, 0, 1);
// styleSheet
setStylesheet('.txtUploadStoreUrl, .txtUploadBackupDir, .txtUploadDir {width: 22em;}',"uploadPluginStyles");
//optionsDesc
merge(config.optionsDesc,{
txtUploadStoreUrl: "Url of the UploadService script (default: store.php)",
txtUploadFilename: "Filename of the uploaded file (default: in index.html)",
txtUploadDir: "Relative Directory where to store the file (default: . (downloadService directory))",
txtUploadBackupDir: "Relative Directory where to backup the file. If empty no backup. (default: ''(empty))",
txtUploadUserName: "Upload Username",
pasUploadPassword: "Upload Password",
chkUploadLog: "do Logging in UploadLog (default: true)",
txtUploadLogMaxLine: "Maximum of lines in UploadLog (default: 10)"
});
// Options Initializations
bidix.initOption('txtUploadStoreUrl','');
bidix.initOption('txtUploadFilename','');
bidix.initOption('txtUploadDir','');
bidix.initOption('txtUploadBackupDir','');
bidix.initOption('txtUploadUserName','');
bidix.initOption('pasUploadPassword','');
bidix.initOption('chkUploadLog',true);
bidix.initOption('txtUploadLogMaxLine','10');
// Backstage
merge(config.tasks,{
uploadOptions: {text: "upload", tooltip: "Change UploadOptions and Upload", content: '<<uploadOptions>>'}
});
config.backstageTasks.push("uploadOptions");
//}}}
!usage
{{{[[VeloArriere_10npi049.PDF|VeloArriere_10npi049.PDF]]}}}
[[VeloArriere_10npi049.PDF|VeloArriere_10npi049.PDF]]
!notes
attached by FileDropPlugin
!type
application
!file
./Plans/VeloArriere_10npi049.PDF
!url
!data
<!--{{{-->
<div >
<span class='title' macro='view title'></span>
<span class='toolbar' macro='toolbar [[ToolbarCommands::ViewToolbar]]'></span>
</div>
<div macro='tiddler "FetThumbnails" thumbnails with:{{tiddler.title}}'></div>
<div class='viewer' macro='view text wikified'></div>
<div class='filesCabinet' macro='tiddler FetFiles with:{{tiddler.title}}'></div>
<div class='tagClear'></div>
<!--}}}-->
|Ref.|ISO 7380 06x25|
|Qty|2|
|Material|Inox|
|Process|Standard|
|Masse|7g|
|Volume| |
|Finish| |
|PU| |
!Description
Vis de l'axe de rotule
!Todo
|Ref.||
|Qty||
|Material||
|Process||
|Masse||
|Volume||
|Finish||
|PU||
!!Todo
!Description
!Nomenclature
<<tiddler AutoRefresh>><<tiddler [[FetNomenclatureTreeTagTag]] with:{{tiddler.title}}{{tiddler.title}}>>
!Description
...
!
<<tiddler AutoRefresh>><<tiddler [[FetDescriptionTagTag]] with:{{tiddler.title}}{{tiddler.title}}>>
!Nomenclature
<<tiddler AutoRefresh>><<tiddler [[FetNomenclature]] with:{{tiddler.title}}>>
|Ref.|10npi002|
|Qty|1|
|Material| |
|Process|Assemblage|
|Masse|4777g|
|Volume| |
|Finish|-|
|PU| |
!!Todo
Laisser tourner les roues en position Caddy JBo
Outils IGUS Fusée JBo
Outils extraction roulements JBo
!Description
Equilibre ok distance aux pieds 34cm
rev a
!Nomenclature
<<tiddler AutoRefresh>><<tiddler [[FetNomenclature]] with:{{tiddler.title}}>>
''Load :''
<<loadTiddlers label:WAirbankProspectPackage tag:AirbankProspectPackage file:///W:/Groups/airbank_tw__/airbank_tw/index.html init autosave>>
<<loadTiddlers label:AirbankBikePackage tag:AirbankBikePackage file:///Z:/airbank_tw/index.html init autosave>>
<<loadTiddlers label:AirbankLookPackage tag:AirbankLookPackage file:///Z:/airbank_tw/index.html init autosave>>
<<loadTiddlers label:AirbankPiPackage tag:AirbankPiPackage file:///Z:/airbank_tw/index.html>>
<<loadTiddlers label:AirbankMaterialPackage tag:AirbankMaterialPackage file:///Z:/airbank_tw/index.html init autosave>>
<<loadTiddlers label:AirbankMeetingPackage tag:AirbankMeetingPackage file:///Z:/airbank_tw/index.html init autosave>>
<<loadTiddlers label:WAirbankObjectsPackage tag:AirbankObjectsPackage file:///W:/Groups/airbank_tw__/airbank_tw/index.html init autosave>>
<<loadTiddlers label:AirbankStrategyPackage tag:AirbankStrategyPackage file:///Z:/airbank_tw/index.html init autosave>>
<<loadTiddlers label:WAirbankCataloguePackage tag:AirbankCataloguePackage file:///W:/Groups/airbank_tw__/airbank_tw/index.html init autosave>>
<<loadTiddlers label:AnticipationPackage tag:AnticipationPackage file:///Z:/airbank_tw/index.html init autosave>>
<<loadTiddlers label:AirbankAsitPackage tag:AirbankAsitPackage file:///Z:/airbank_tw/index.html init autosave>>
<<loadTiddlers label:AirBankValueEngineeringPackage tag:AirBankValueEngineeringPackage file:///Z:/airbank_tw/index.html init autosave>>
<<loadTiddlers label:WAirbankBlankPackage tag:AirbankBlankPackage file:///W:/Groups/airbank_tw__/airbank_tw/index.html >>
<<loadTiddlers label:AirbankProjectPackage tag:AirbankProjectPackage file:///Z:/airbank_tw/index.html init autosave>>
<<loadTiddlers label:AirbankCreativitePackage tag:AirbankCreativitePackage file:///Z:/airbank_tw/index.html init autosave>>
<<loadTiddlers label:WAirbankContactPackage tag:AirbankContactPackage file:///W:/Groups/airbank_tw__/airbank_tw/index.html init autosave>>
<<loadTiddlers label:AirbankPluginPackage tag:AirbankPluginPackage file:///Z:/airbank_tw/index.html init autosave>>
<<loadTiddlers label:AirbankControlePackage tag:AirbankControlePackage file:///Z:/airbank_tw/index.html init autosave>>
<<loadTiddlers label:AirbankSavoirPackage tag:AirbankSavoirPackage file:///Z:/airbank_tw/index.html init autosave>>
<<loadTiddlers label:AirbankSujetsPackage tag:AirbankSujetsPackage file:///Z:/airbank_tw/index.html init autosave>>
This document is a ~TiddlyWiki from tiddlyspot.com. A ~TiddlyWiki is an electronic notebook that is great for managing todo lists, personal information, and all sorts of things.
@@font-weight:bold;font-size:1.3em;color:#444; //What now?// @@ Before you can save any changes, you need to enter your password in the form below. Then configure privacy and other site settings at your [[control panel|http://julien23.tiddlyspot.com/controlpanel]] (your control panel username is //julien23//).
<<tiddler TspotControls>>
See also GettingStarted.
@@font-weight:bold;font-size:1.3em;color:#444; //Working online// @@ You can edit this ~TiddlyWiki right now, and save your changes using the "save to web" button in the column on the right.
@@font-weight:bold;font-size:1.3em;color:#444; //Working offline// @@ A fully functioning copy of this ~TiddlyWiki can be saved onto your hard drive or USB stick. You can make changes and save them locally without being connected to the Internet. When you're ready to sync up again, just click "upload" and your ~TiddlyWiki will be saved back to tiddlyspot.com.
@@font-weight:bold;font-size:1.3em;color:#444; //Help!// @@ Find out more about ~TiddlyWiki at [[TiddlyWiki.com|http://tiddlywiki.com]]. Also visit [[TiddlyWiki.org|http://tiddlywiki.org]] for documentation on learning and using ~TiddlyWiki. New users are especially welcome on the [[TiddlyWiki mailing list|http://groups.google.com/group/TiddlyWiki]], which is an excellent place to ask questions and get help. If you have a tiddlyspot related problem email [[tiddlyspot support|mailto:support@tiddlyspot.com]].
@@font-weight:bold;font-size:1.3em;color:#444; //Enjoy :)// @@ We hope you like using your tiddlyspot.com site. Please email [[feedback@tiddlyspot.com|mailto:feedback@tiddlyspot.com]] with any comments or suggestions.
/***
|''Name:''|YourSearchPlugin|
|''Version:''|2.1.5 (2010-02-16)|
|''Source:''|http://tiddlywiki.abego-software.de/#YourSearchPlugin|
|''Author:''|UdoBorkowski (ub [at] abego-software [dot] de)|
|''Licence:''|[[BSD open source license (abego Software)|http://www.abego-software.de/legal/apl-v10.html]]|
|''Copyright:''|© 2005-2010 [[abego Software|http://www.abego-software.de]]|
|''~CoreVersion:''|2.1.0|
|''Community:''|[[del.icio.us|http://del.icio.us/post?url=http://tiddlywiki.abego-software.de/index.html%23YourSearchPlugin]]|
|''Browser:''|Firefox 1.0.4+; Firefox 1.5; ~InternetExplorer 6.0|
!About YourSearch
YourSearch gives you a bunch of new features to simplify and speed up your daily searches in TiddlyWiki. It seamlessly integrates into the standard TiddlyWiki search: just start typing into the 'search' field and explore!
For more information see [[Help|YourSearch Help]].
!Compatibility
This plugin requires TiddlyWiki 2.1.
Check the [[archive|http://tiddlywiki.abego-software.de/archive]] for ~YourSearchPlugins supporting older versions of TiddlyWiki.
!Source Code
***/
/***
This plugin's source code is compressed (and hidden). Use this [[link|http://tiddlywiki.abego-software.de/archive/YourSearchPlugin/Plugin-YourSearch-src.2.1.5.js]] to get the readable source code.
***/
///%
if(!version.extensions.YourSearchPlugin){version.extensions.YourSearchPlugin={major:2,minor:1,revision:5,source:"http://tiddlywiki.abego-software.de/#YourSearchPlugin",licence:"[[BSD open source license (abego Software)|http://www.abego-software.de/legal/apl-v10.html]]",copyright:"Copyright (c) abego Software GmbH, 2005-2010 (www.abego-software.de)"};if(!window.abego){window.abego={};}if(!Array.forEach){Array.forEach=function(_1,_2,_3){for(var i=0,_4=_1.length;i<_4;i++){_2.call(_3,_1[i],i,_1);}};Array.prototype.forEach=function(_5,_6){for(var i=0,_7=this.length;i<_7;i++){_5.call(_6,this[i],i,this);}};}abego.toInt=function(s,_8){if(!s){return _8;}var n=parseInt(s);return (n==NaN)?_8:n;};abego.createEllipsis=function(_9){var e=createTiddlyElement(_9,"span");e.innerHTML="…";};abego.shallowCopy=function(_a){if(!_a){return _a;}var _b={};for(var n in _a){_b[n]=_a[n];}return _b;};abego.copyOptions=function(_c){return !_c?{}:abego.shallowCopy(_c);};abego.countStrings=function(_d,s){if(!s){return 0;}var _e=s.length;var n=0;var _f=0;while(1){var i=_d.indexOf(s,_f);if(i<0){return n;}n++;_f=i+_e;}return n;};abego.getBracedText=function(_10,_11,_12){if(!_11){_11=0;}var re=/\{([^\}]*)\}/gm;re.lastIndex=_11;var m=re.exec(_10);if(m){var s=m[1];var _13=abego.countStrings(s,"{");if(!_13){if(_12){_12.lastIndex=re.lastIndex;}return s;}var len=_10.length;for(var i=re.lastIndex;i<len&&_13;i++){var c=_10.charAt(i);if(c=="{"){_13++;}else{if(c=="}"){_13--;}}}if(!_13){if(_12){_12.lastIndex=i-1;}return _10.substring(m.index+1,i-1);}}};abego.select=function(_14,_15,_16,_17){if(!_17){_17=[];}_14.forEach(function(t){if(_15.call(_16,t)){_17.push(t);}});return _17;};abego.consumeEvent=function(e){if(e.stopPropagation){e.stopPropagation();}if(e.preventDefault){e.preventDefault();}e.cancelBubble=true;e.returnValue=true;};abego.TiddlerFilterTerm=function(_18,_19){if(!_19){_19={};}var _1a=_18;if(!_19.textIsRegExp){_1a=_18.escapeRegExp();if(_19.fullWordMatch){_1a="\\b"+_1a+"\\b";}}var _1b=new RegExp(_1a,"m"+(_19.caseSensitive?"":"i"));this.tester=new abego.MultiFieldRegExpTester(_1b,_19.fields,_19.withExtendedFields);};abego.TiddlerFilterTerm.prototype.test=function(_1c){return this.tester.test(_1c);};abego.parseNewTiddlerCommandLine=function(s){var m=/(.*?)\.(?:\s+|$)([^#]*)(#.*)?/.exec(s);if(!m){m=/([^#]*)()(#.*)?/.exec(s);}if(m){var r;if(m[3]){var s2=m[3].replace(/#/g,"");r=s2.parseParams("tag");}else{r=[[]];}var _1d=m[2]?m[2].trim():"";r.push({name:"text",value:_1d});r[0].text=[_1d];return {title:m[1].trim(),params:r};}else{return {title:s.trim(),params:[[]]};}};abego.parseTiddlerFilterTerm=function(_1e,_1f,_20){var re=/\s*(?:(?:\{([^\}]*)\})|(?:(=)|([#%!])|(?:(\w+)\s*\:(?!\/\/))|(?:(?:("(?:(?:\\")|[^"])+")|(?:\/((?:(?:\\\/)|[^\/])+)\/)|(\w+\:\/\/[^\s]+)|([^\s\)\-\"]+)))))/mg;var _21={"!":"title","%":"text","#":"tags"};var _22={};var _23;re.lastIndex=_1f;while(1){var i=re.lastIndex;var m=re.exec(_1e);if(!m||m.index!=i){throw "Word or String literal expected";}if(m[1]){var _24={};var _25=abego.getBracedText(_1e,0,_24);if(!_25){throw "Invalid {...} syntax";}var f=Function("tiddler","return ("+_25+");");return {func:f,lastIndex:_24.lastIndex,markRE:null};}if(m[2]){_23=true;}else{if(m[3]){_22[_21[m[3]]]=1;}else{if(m[4]){_22[m[4]]=1;}else{var _26=m[6];var _27=m[5]?window.eval(m[5]):m[6]?m[6]:m[7]?m[7]:m[8];var _20=abego.copyOptions(_20);_20.fullWordMatch=_23;_20.textIsRegExp=_26;var _28=[];for(var n in _22){_28.push(n);}if(_28.length==0){_20.fields=_20.defaultFields;}else{_20.fields=_28;_20.withExtendedFields=false;}var _29=new abego.TiddlerFilterTerm(_27,_20);var _2a=_26?_27:_27.escapeRegExp();if(_2a&&_23){_2a="\\b"+_2a+"\\b";}return {func:function(_2b){return _29.test(_2b);},lastIndex:re.lastIndex,markRE:_2a?"(?:"+_2a+")":null};}}}}};abego.BoolExp=function(s,_2c,_2d){this.s=s;var _2e=_2d&&_2d.defaultOperationIs_OR;var _2f=/\s*(?:(\-|not)|(\())/gi;var _30=/\s*\)/g;var _31=/\s*(?:(and|\&\&)|(or|\|\|))/gi;var _32=/\s*[^\)\s]/g;var _33=/\s*(\-|not)?(\s*\()?/gi;var _34;var _35=function(_36){_33.lastIndex=_36;var m=_33.exec(s);var _37;var _38;if(m&&m.index==_36){_36+=m[0].length;_37=m[1];if(m[2]){var e=_34(_36);_30.lastIndex=e.lastIndex;if(!_30.exec(s)){throw "Missing ')'";}_38={func:e.func,lastIndex:_30.lastIndex,markRE:e.markRE};}}if(!_38){_38=_2c(s,_36,_2d);}if(_37){_38.func=(function(f){return function(_39){return !f(_39);};})(_38.func);_38.markRE=null;}return _38;};_34=function(_3a){var _3b=_35(_3a);while(1){var l=_3b.lastIndex;_31.lastIndex=l;var m=_31.exec(s);var _3c;var _3d;if(m&&m.index==l){_3c=!m[1];_3d=_35(_31.lastIndex);}else{try{_3d=_35(l);}catch(e){return _3b;}_3c=_2e;}_3b.func=(function(_3e,_3f,_40){return _40?function(_41){return _3e(_41)||_3f(_41);}:function(_42){return _3e(_42)&&_3f(_42);};})(_3b.func,_3d.func,_3c);_3b.lastIndex=_3d.lastIndex;if(!_3b.markRE){_3b.markRE=_3d.markRE;}else{if(_3d.markRE){_3b.markRE=_3b.markRE+"|"+_3d.markRE;}}}};var _43=_34(0);this.evalFunc=_43.func;if(_43.markRE){this.markRegExp=new RegExp(_43.markRE,_2d.caseSensitive?"mg":"img");}};abego.BoolExp.prototype.exec=function(){return this.evalFunc.apply(this,arguments);};abego.BoolExp.prototype.getMarkRegExp=function(){return this.markRegExp;};abego.BoolExp.prototype.toString=function(){return this.s;};abego.MultiFieldRegExpTester=function(re,_44,_45){this.re=re;this.fields=_44?_44:["title","text","tags"];this.withExtendedFields=_45;};abego.MultiFieldRegExpTester.prototype.test=function(_46){var re=this.re;for(var i=0;i<this.fields.length;i++){var s=store.getValue(_46,this.fields[i]);if(typeof s=="string"&&re.test(s)){return this.fields[i];}}if(this.withExtendedFields){return store.forEachField(_46,function(_47,_48,_49){return typeof _49=="string"&&re.test(_49)?_48:null;},true);}return null;};abego.TiddlerQuery=function(_4a,_4b,_4c,_4d,_4e){if(_4c){this.regExp=new RegExp(_4a,_4b?"mg":"img");this.tester=new abego.MultiFieldRegExpTester(this.regExp,_4d,_4e);}else{this.expr=new abego.BoolExp(_4a,abego.parseTiddlerFilterTerm,{defaultFields:_4d,caseSensitive:_4b,withExtendedFields:_4e});}this.getQueryText=function(){return _4a;};this.getUseRegExp=function(){return _4c;};this.getCaseSensitive=function(){return _4b;};this.getDefaultFields=function(){return _4d;};this.getWithExtendedFields=function(){return _4e;};};abego.TiddlerQuery.prototype.test=function(_4f){if(!_4f){return false;}if(this.regExp){return this.tester.test(_4f);}return this.expr.exec(_4f);};abego.TiddlerQuery.prototype.filter=function(_50){return abego.select(_50,this.test,this);};abego.TiddlerQuery.prototype.getMarkRegExp=function(){if(this.regExp){return "".search(this.regExp)>=0?null:this.regExp;}return this.expr.getMarkRegExp();};abego.TiddlerQuery.prototype.toString=function(){return (this.regExp?this.regExp:this.expr).toString();};abego.PageWiseRenderer=function(){this.firstIndexOnPage=0;};merge(abego.PageWiseRenderer.prototype,{setItems:function(_51){this.items=_51;this.setFirstIndexOnPage(0);},getMaxPagesInNavigation:function(){return 10;},getItemsCount:function(_52){return this.items?this.items.length:0;},getCurrentPageIndex:function(){return Math.floor(this.firstIndexOnPage/this.getItemsPerPage());},getLastPageIndex:function(){return Math.floor((this.getItemsCount()-1)/this.getItemsPerPage());},setFirstIndexOnPage:function(_53){this.firstIndexOnPage=Math.min(Math.max(0,_53),this.getItemsCount()-1);},getFirstIndexOnPage:function(){this.firstIndexOnPage=Math.floor(this.firstIndexOnPage/this.getItemsPerPage())*this.getItemsPerPage();return this.firstIndexOnPage;},getLastIndexOnPage:function(){return Math.min(this.getFirstIndexOnPage()+this.getItemsPerPage()-1,this.getItemsCount()-1);},onPageChanged:function(_54,_55){},renderPage:function(_56){if(_56.beginRendering){_56.beginRendering(this);}try{if(this.getItemsCount()){var _57=this.getLastIndexOnPage();var _58=-1;for(var i=this.getFirstIndexOnPage();i<=_57;i++){_58++;_56.render(this,this.items[i],i,_58);}}}finally{if(_56.endRendering){_56.endRendering(this);}}},addPageNavigation:function(_59){if(!this.getItemsCount()){return;}var _5a=this;var _5b=function(e){if(!e){var e=window.event;}abego.consumeEvent(e);var _5c=abego.toInt(this.getAttribute("page"),0);var _5d=_5a.getCurrentPageIndex();if(_5c==_5d){return;}var _5e=_5c*_5a.getItemsPerPage();_5a.setFirstIndexOnPage(_5e);_5a.onPageChanged(_5c,_5d);};var _5f;var _60=this.getCurrentPageIndex();var _61=this.getLastPageIndex();if(_60>0){_5f=createTiddlyButton(_59,"Previous","Go to previous page (Shortcut: Alt-'<')",_5b,"prev");_5f.setAttribute("page",(_60-1).toString());_5f.setAttribute("accessKey","<");}for(var i=-this.getMaxPagesInNavigation();i<this.getMaxPagesInNavigation();i++){var _62=_60+i;if(_62<0){continue;}if(_62>_61){break;}var _63=(i+_60+1).toString();var _64=_62==_60?"currentPage":"otherPage";_5f=createTiddlyButton(_59,_63,"Go to page %0".format([_63]),_5b,_64);_5f.setAttribute("page",(_62).toString());}if(_60<_61){_5f=createTiddlyButton(_59,"Next","Go to next page (Shortcut: Alt-'>')",_5b,"next");_5f.setAttribute("page",(_60+1).toString());_5f.setAttribute("accessKey",">");}}});abego.LimitedTextRenderer=function(){var _65=40;var _66=4;var _67=function(_68,_69,_6a){var n=_68.length;if(n==0){_68.push({start:_69,end:_6a});return;}var i=0;for(;i<n;i++){var _6b=_68[i];if(_6b.start<=_6a&&_69<=_6b.end){var r;var _6c=i+1;for(;_6c<n;_6c++){r=_68[_6c];if(r.start>_6a||_69>_6b.end){break;}}var _6d=_69;var _6e=_6a;for(var j=i;j<_6c;j++){r=_68[j];_6d=Math.min(_6d,r.start);_6e=Math.max(_6e,r.end);}_68.splice(i,_6c-i,{start:_6d,end:_6e});return;}if(_6b.start>_6a){break;}}_68.splice(i,0,{start:_69,end:_6a});};var _6f=function(_70){var _71=0;for(var i=0;i<_70.length;i++){var _72=_70[i];_71+=_72.end-_72.start;}return _71;};var _73=function(c){return (c>="a"&&c<="z")||(c>="A"&&c<="Z")||c=="_";};var _74=function(s,_75){if(!_73(s[_75])){return null;}for(var i=_75-1;i>=0&&_73(s[i]);i--){}var _76=i+1;var n=s.length;for(i=_75+1;i<n&&_73(s[i]);i++){}return {start:_76,end:i};};var _77=function(s,_78,_79){var _7a;if(_79){_7a=_74(s,_78);}else{if(_78<=0){return _78;}_7a=_74(s,_78-1);}if(!_7a){return _78;}if(_79){if(_7a.start>=_78-_66){return _7a.start;}if(_7a.end<=_78+_66){return _7a.end;}}else{if(_7a.end<=_78+_66){return _7a.end;}if(_7a.start>=_78-_66){return _7a.start;}}return _78;};var _7b=function(s,_7c){var _7d=[];if(_7c){var _7e=0;var n=s.length;var _7f=0;do{_7c.lastIndex=_7e;var _80=_7c.exec(s);if(_80){if(_7e<_80.index){var t=s.substring(_7e,_80.index);_7d.push({text:t});}_7d.push({text:_80[0],isMatch:true});_7e=_80.index+_80[0].length;}else{_7d.push({text:s.substr(_7e)});break;}}while(true);}else{_7d.push({text:s});}return _7d;};var _81=function(_82){var _83=0;for(var i=0;i<_82.length;i++){if(_82[i].isMatch){_83++;}}return _83;};var _84=function(s,_85,_86,_87,_88){var _89=Math.max(Math.floor(_88/(_87+1)),_65);var _8a=Math.max(_89-(_86-_85),0);var _8b=Math.min(Math.floor(_86+_8a/3),s.length);var _8c=Math.max(_8b-_89,0);_8c=_77(s,_8c,true);_8b=_77(s,_8b,false);return {start:_8c,end:_8b};};var _8d=function(_8e,s,_8f){var _90=[];var _91=_81(_8e);var pos=0;for(var i=0;i<_8e.length;i++){var t=_8e[i];var _92=t.text;if(t.isMatch){var _93=_84(s,pos,pos+_92.length,_91,_8f);_67(_90,_93.start,_93.end);}pos+=_92.length;}return _90;};var _94=function(s,_95,_96){var _97=_96-_6f(_95);while(_97>0){if(_95.length==0){_67(_95,0,_77(s,_96,false));return;}else{var _98=_95[0];var _99;var _9a;if(_98.start==0){_99=_98.end;if(_95.length>1){_9a=_95[1].start;}else{_67(_95,_99,_77(s,_99+_97,false));return;}}else{_99=0;_9a=_98.start;}var _9b=Math.min(_9a,_99+_97);_67(_95,_99,_9b);_97-=(_9b-_99);}}};var _9c=function(_9d,s,_9e,_9f,_a0){if(_9f.length==0){return;}var _a1=function(_a2,s,_a3,_a4,_a5){var t;var _a6;var pos=0;var i=0;var _a7=0;for(;i<_a3.length;i++){t=_a3[i];_a6=t.text;if(_a4<pos+_a6.length){_a7=_a4-pos;break;}pos+=_a6.length;}var _a8=_a5-_a4;for(;i<_a3.length&&_a8>0;i++){t=_a3[i];_a6=t.text.substr(_a7);_a7=0;if(_a6.length>_a8){_a6=_a6.substr(0,_a8);}if(t.isMatch){createTiddlyElement(_a2,"span",null,"marked",_a6);}else{createTiddlyText(_a2,_a6);}_a8-=_a6.length;}if(_a5<s.length){abego.createEllipsis(_a2);}};if(_9f[0].start>0){abego.createEllipsis(_9d);}var _a9=_a0;for(var i=0;i<_9f.length&&_a9>0;i++){var _aa=_9f[i];var len=Math.min(_aa.end-_aa.start,_a9);_a1(_9d,s,_9e,_aa.start,_aa.start+len);_a9-=len;}};this.render=function(_ab,s,_ac,_ad){if(s.length<_ac){_ac=s.length;}var _ae=_7b(s,_ad);var _af=_8d(_ae,s,_ac);_94(s,_af,_ac);_9c(_ab,s,_ae,_af,_ac);};};(function(){function _b0(msg){alert(msg);throw msg;};if(version.major<2||(version.major==2&&version.minor<1)){_b0("YourSearchPlugin requires TiddlyWiki 2.1 or newer.\n\nCheck the archive for YourSearch plugins\nsupporting older versions of TiddlyWiki.\n\nArchive: http://tiddlywiki.abego-software.de/archive");}abego.YourSearch={};var _b1;var _b2;var _b3=function(_b4){_b1=_b4;};var _b5=function(){return _b1?_b1:[];};var _b6=function(){return _b1?_b1.length:0;};var _b7=4;var _b8=10;var _b9=2;var _ba=function(s,re){var m=s.match(re);return m?m.length:0;};var _bb=function(_bc,_bd){var _be=_bd.getMarkRegExp();if(!_be){return 1;}var _bf=_bc.title.match(_be);var _c0=_bf?_bf.length:0;var _c1=_ba(_bc.getTags(),_be);var _c2=_bf?_bf.join("").length:0;var _c3=_bc.title.length>0?_c2/_bc.title.length:0;var _c4=_c0*_b7+_c1*_b9+_c3*_b8+1;return _c4;};var _c5=function(_c6,_c7,_c8,_c9,_ca,_cb){_b2=null;var _cc=_c6.reverseLookup("tags",_cb,false);try{var _cd=[];if(config.options.chkSearchInTitle){_cd.push("title");}if(config.options.chkSearchInText){_cd.push("text");}if(config.options.chkSearchInTags){_cd.push("tags");}_b2=new abego.TiddlerQuery(_c7,_c8,_c9,_cd,config.options.chkSearchExtendedFields);}catch(e){return [];}var _ce=_b2.filter(_cc);var _cf=abego.YourSearch.getRankFunction();for(var i=0;i<_ce.length;i++){var _d0=_ce[i];var _d1=_cf(_d0,_b2);_d0.searchRank=_d1;}if(!_ca){_ca="title";}var _d2=function(a,b){var _d3=a.searchRank-b.searchRank;if(_d3==0){if(a[_ca]==b[_ca]){return (0);}else{return (a[_ca]<b[_ca])?-1:+1;}}else{return (_d3>0)?-1:+1;}};_ce.sort(_d2);return _ce;};var _d4=80;var _d5=50;var _d6=250;var _d7=50;var _d8=25;var _d9=10;var _da="yourSearchResult";var _db="yourSearchResultItems";var _dc;var _dd;var _de;var _df;var _e0;var _e1=function(){if(version.extensions.YourSearchPlugin.styleSheetInited){return;}version.extensions.YourSearchPlugin.styleSheetInited=true;setStylesheet(store.getTiddlerText("YourSearchStyleSheet"),"yourSearch");};var _e2=function(){return _dd!=null&&_dd.parentNode==document.body;};var _e3=function(){if(_e2()){document.body.removeChild(_dd);}};var _e4=function(e){_e3();var _e5=this.getAttribute("tiddlyLink");if(_e5){var _e6=this.getAttribute("withHilite");var _e7=highlightHack;if(_e6&&_e6=="true"&&_b2){highlightHack=_b2.getMarkRegExp();}story.displayTiddler(this,_e5);highlightHack=_e7;}return (false);};var _e8=function(){if(!_de){return;}var _e9=_de;var _ea=findPosX(_e9);var _eb=findPosY(_e9);var _ec=_e9.offsetHeight;var _ed=_ea;var _ee=_eb+_ec;var _ef=findWindowWidth();if(_ef<_dd.offsetWidth){_dd.style.width=(_ef-100)+"px";_ef=findWindowWidth();}var _f0=_dd.offsetWidth;if(_ed+_f0>_ef){_ed=_ef-_f0-30;}if(_ed<0){_ed=0;}_dd.style.left=_ed+"px";_dd.style.top=_ee+"px";_dd.style.display="block";};var _f1=function(){if(_dd){window.scrollTo(0,ensureVisible(_dd));}if(_de){window.scrollTo(0,ensureVisible(_de));}};var _f2=function(){_e8();_f1();};var _f3;var _f4;var _f5=new abego.PageWiseRenderer();var _f6=function(_f7){this.itemHtml=store.getTiddlerText("YourSearchItemTemplate");if(!this.itemHtml){_b0("YourSearchItemTemplate not found");}this.place=document.getElementById(_db);if(!this.place){this.place=createTiddlyElement(_f7,"div",_db);}};merge(_f6.prototype,{render:function(_f8,_f9,_fa,_fb){_f3=_fb;_f4=_f9;var _fc=createTiddlyElement(this.place,"div",null,"yourSearchItem");_fc.innerHTML=this.itemHtml;applyHtmlMacros(_fc,null);refreshElements(_fc,null);},endRendering:function(_fd){_f4=null;}});var _fe=function(){if(!_dd||!_de){return;}var _ff=store.getTiddlerText("YourSearchResultTemplate");if(!_ff){_ff="<b>Tiddler YourSearchResultTemplate not found</b>";}_dd.innerHTML=_ff;applyHtmlMacros(_dd,null);refreshElements(_dd,null);var _100=new _f6(_dd);_f5.renderPage(_100);_f2();};_f5.getItemsPerPage=function(){var n=(config.options.chkPreviewText)?abego.toInt(config.options.txtItemsPerPageWithPreview,_d9):abego.toInt(config.options.txtItemsPerPage,_d8);return (n>0)?n:1;};_f5.onPageChanged=function(){_fe();};var _101=function(){if(_de==null||!config.options.chkUseYourSearch){return;}if((_de.value==_dc)&&_dc&&!_e2()){if(_dd&&(_dd.parentNode!=document.body)){document.body.appendChild(_dd);_f2();}else{abego.YourSearch.onShowResult(true);}}};var _102=function(){_e3();_dd=null;_dc=null;};var _103=function(self,e){while(e!=null){if(self==e){return true;}e=e.parentNode;}return false;};var _104=function(e){if(e.target==_de){return;}if(e.target==_df){return;}if(_dd&&_103(_dd,e.target)){return;}_e3();};var _105=function(e){if(e.keyCode==27){_e3();}};addEvent(document,"click",_104);addEvent(document,"keyup",_105);var _106=function(text,_107,_108){_dc=text;_b3(_c5(store,text,_107,_108,"title","excludeSearch"));abego.YourSearch.onShowResult();};var _109=function(_10a,_10b,_10c,_10d,_10e,_10f){_e1();_dc="";var _110=null;var _111=function(txt){if(config.options.chkUseYourSearch){_106(txt.value,config.options.chkCaseSensitiveSearch,config.options.chkRegExpSearch);}else{story.search(txt.value,config.options.chkCaseSensitiveSearch,config.options.chkRegExpSearch);}_dc=txt.value;};var _112=function(e){_111(_de);return false;};var _113=function(e){if(!e){var e=window.event;}_de=this;switch(e.keyCode){case 13:if(e.ctrlKey&&_e0&&_e2()){_e0.onclick.apply(_e0,[e]);}else{_111(this);}break;case 27:if(_e2()){_e3();}else{this.value="";clearMessage();}break;}if(String.fromCharCode(e.keyCode)==this.accessKey||e.altKey){_101();}if(this.value.length<3&&_110){clearTimeout(_110);}if(this.value.length>2){if(this.value!=_dc){if(!config.options.chkUseYourSearch||config.options.chkSearchAsYouType){if(_110){clearTimeout(_110);}var txt=this;_110=setTimeout(function(){_111(txt);},500);}}else{if(_110){clearTimeout(_110);}}}if(this.value.length==0){_e3();}};var _114=function(e){this.select();clearMessage();_101();};var args=_10e.parseParams("list",null,true);var _115=getFlag(args,"buttonAtRight");var _116=getParam(args,"sizeTextbox",this.sizeTextbox);var btn;if(!_115){btn=createTiddlyButton(_10a,this.label,this.prompt,_112);}var txt=createTiddlyElement(null,"input",null,"txtOptionInput searchField",null);if(_10c[0]){txt.value=_10c[0];}txt.onkeyup=_113;txt.onfocus=_114;txt.setAttribute("size",_116);txt.setAttribute("accessKey",this.accessKey);txt.setAttribute("autocomplete","off");if(config.browser.isSafari){txt.setAttribute("type","search");txt.setAttribute("results","5");}else{txt.setAttribute("type","text");}if(_10a){_10a.appendChild(txt);}if(_115){btn=createTiddlyButton(_10a,this.label,this.prompt,_112);}_de=txt;_df=btn;};var _117=function(){_e3();var _118=_b5();var n=_118.length;if(n){var _119=[];for(var i=0;i<n;i++){_119.push(_118[i].title);}story.displayTiddlers(null,_119);}};var _11a=function(_11b,_11c,_11d,_11e){invokeMacro(_11b,"option",_11c,_11d,_11e);var elem=_11b.lastChild;var _11f=elem.onclick;elem.onclick=function(e){var _120=_11f.apply(this,arguments);_fe();return _120;};return elem;};var _121=function(s){var _122=["''","{{{","}}}","//","<<<","/***","***/"];var _123="";for(var i=0;i<_122.length;i++){if(i!=0){_123+="|";}_123+="("+_122[i].escapeRegExp()+")";}return s.replace(new RegExp(_123,"mg"),"").trim();};var _124=function(){var i=_f3;return (i>=0&&i<=9)?(i<9?(i+1):0):-1;};var _125=new abego.LimitedTextRenderer();var _126=function(_127,s,_128){_125.render(_127,s,_128,_b2.getMarkRegExp());};var _129=TiddlyWiki.prototype.saveTiddler;TiddlyWiki.prototype.saveTiddler=function(_12a,_12b,_12c,_12d,_12e,tags,_12f){_129.apply(this,arguments);_102();};var _130=TiddlyWiki.prototype.removeTiddler;TiddlyWiki.prototype.removeTiddler=function(_131){_130.apply(this,arguments);_102();};config.macros.yourSearch={label:"yourSearch",prompt:"Gives access to the current/last YourSearch result",handler:function(_132,_133,_134,_135,_136,_137){if(_134.length==0){return;}var name=_134[0];var func=config.macros.yourSearch.funcs[name];if(func){func(_132,_133,_134,_135,_136,_137);}},tests:{"true":function(){return true;},"false":function(){return false;},"found":function(){return _b6()>0;},"previewText":function(){return config.options.chkPreviewText;}},funcs:{itemRange:function(_138){if(_b6()){var _139=_f5.getLastIndexOnPage();var s="%0 - %1".format([_f5.getFirstIndexOnPage()+1,_139+1]);createTiddlyText(_138,s);}},count:function(_13a){createTiddlyText(_13a,_b6().toString());},query:function(_13b){if(_b2){createTiddlyText(_13b,_b2.toString());}},version:function(_13c){var t="YourSearch %0.%1.%2".format([version.extensions.YourSearchPlugin.major,version.extensions.YourSearchPlugin.minor,version.extensions.YourSearchPlugin.revision]);var e=createTiddlyElement(_13c,"a");e.setAttribute("href","http://tiddlywiki.abego-software.de/#YourSearchPlugin");e.innerHTML="<font color=\"black\" face=\"Arial, Helvetica, sans-serif\">"+t+"<font>";},copyright:function(_13d){var e=createTiddlyElement(_13d,"a");e.setAttribute("href","http://www.abego-software.de");e.innerHTML="<font color=\"black\" face=\"Arial, Helvetica, sans-serif\">© 2005-2008 <b><font color=\"red\">abego</font></b> Software<font>";},newTiddlerButton:function(_13e){if(_b2){var r=abego.parseNewTiddlerCommandLine(_b2.getQueryText());var btn=config.macros.newTiddler.createNewTiddlerButton(_13e,r.title,r.params,"new tiddler","Create a new tiddler based on search text. (Shortcut: Ctrl-Enter; Separators: '.', '#')",null,"text");var _13f=btn.onclick;btn.onclick=function(){_e3();_13f.apply(this,arguments);};_e0=btn;}},linkButton:function(_140,_141,_142,_143,_144,_145){if(_142<2){return;}var _146=_142[1];var text=_142<3?_146:_142[2];var _147=_142<4?text:_142[3];var _148=_142<5?null:_142[4];var btn=createTiddlyButton(_140,text,_147,_e4,null,null,_148);btn.setAttribute("tiddlyLink",_146);},closeButton:function(_149,_14a,_14b,_14c,_14d,_14e){var _14f=createTiddlyButton(_149,"close","Close the Search Results (Shortcut: ESC)",_e3);},openAllButton:function(_150,_151,_152,_153,_154,_155){var n=_b6();if(n==0){return;}var _156=n==1?"open tiddler":"open all %0 tiddlers".format([n]);var _157=createTiddlyButton(_150,_156,"Open all found tiddlers (Shortcut: Alt-O)",_117);_157.setAttribute("accessKey","O");},naviBar:function(_158,_159,_15a,_15b,_15c,_15d){_f5.addPageNavigation(_158);},"if":function(_15e,_15f,_160,_161,_162,_163){if(_160.length<2){return;}var _164=_160[1];var _165=(_164=="not");if(_165){if(_160.length<3){return;}_164=_160[2];}var test=config.macros.yourSearch.tests[_164];var _166=false;try{if(test){_166=test(_15e,_15f,_160,_161,_162,_163)!=_165;}else{_166=(!eval(_164))==_165;}}catch(ex){}if(!_166){_15e.style.display="none";}},chkPreviewText:function(_167,_168,_169,_16a,_16b,_16c){var _16d=_169.slice(1).join(" ");var elem=_11a(_167,"chkPreviewText",_16a,_16c);elem.setAttribute("accessKey","P");elem.title="Show text preview of found tiddlers (Shortcut: Alt-P)";return elem;}}};config.macros.foundTiddler={label:"foundTiddler",prompt:"Provides information on the tiddler currently processed on the YourSearch result page",handler:function(_16e,_16f,_170,_171,_172,_173){var name=_170[0];var func=config.macros.foundTiddler.funcs[name];if(func){func(_16e,_16f,_170,_171,_172,_173);}},funcs:{title:function(_174,_175,_176,_177,_178,_179){if(!_f4){return;}var _17a=_124();var _17b=_17a>=0?"Open tiddler (Shortcut: Alt-%0)".format([_17a.toString()]):"Open tiddler";var btn=createTiddlyButton(_174,null,_17b,_e4,null);btn.setAttribute("tiddlyLink",_f4.title);btn.setAttribute("withHilite","true");_126(btn,_f4.title,_d4);if(_17a>=0){btn.setAttribute("accessKey",_17a.toString());}},tags:function(_17c,_17d,_17e,_17f,_180,_181){if(!_f4){return;}_126(_17c,_f4.getTags(),_d5);},text:function(_182,_183,_184,_185,_186,_187){if(!_f4){return;}_126(_182,_121(_f4.text),_d6);},field:function(_188,_189,_18a,_18b,_18c,_18d){if(!_f4){return;}var name=_18a[1];var len=_18a.length>2?abego.toInt(_18a[2],_d7):_d7;var v=store.getValue(_f4,name);if(v){_126(_188,_121(v),len);}},number:function(_18e,_18f,_190,_191,_192,_193){var _194=_124();if(_194>=0){var text="%0)".format([_194.toString()]);createTiddlyElement(_18e,"span",null,"shortcutNumber",text);}}}};var opts={chkUseYourSearch:true,chkPreviewText:true,chkSearchAsYouType:true,chkSearchInTitle:true,chkSearchInText:true,chkSearchInTags:true,chkSearchExtendedFields:true,txtItemsPerPage:_d8,txtItemsPerPageWithPreview:_d9};for(var n in opts){if(config.options[n]==undefined){config.options[n]=opts[n];}}config.shadowTiddlers.AdvancedOptions+="\n<<option chkUseYourSearch>> Use 'Your Search' //([[more options|YourSearch Options]]) ([[help|YourSearch Help]])// ";config.shadowTiddlers["YourSearch Help"]="!Field Search\nWith the Field Search you can restrict your search to certain fields of a tiddler, e.g"+" only search the tags or only the titles. The general form is //fieldname//'':''//textToSearch// (e."+"g. {{{title:intro}}}). In addition one-character shortcuts are also supported for the standard field"+"s {{{title}}}, {{{text}}} and {{{tags}}}:\n|!What you want|!What you type|!Example|\n|Search ''titles "+"only''|start word with ''!''|{{{!jonny}}} (shortcut for {{{title:jonny}}})|\n|Search ''contents/text "+"only''|start word with ''%''|{{{%football}}} (shortcut for {{{text:football}}})|\n|Search ''tags only"+"''|start word with ''#''|{{{#Plugin}}} (shortcut for {{{tags:Plugin}}})|\n\nUsing this feature you may"+" also search the extended fields (\"Metadata\") introduced with TiddlyWiki 2.1, e.g. use {{{priority:1"+"}}} to find all tiddlers with the priority field set to \"1\".\n\nYou may search a word in more than one"+" field. E.g. {{{!#Plugin}}} (or {{{title:tags:Plugin}}} in the \"long form\") finds tiddlers containin"+"g \"Plugin\" either in the title or in the tags (but does not look for \"Plugin\" in the text). \n\n!Boole"+"an Search\nThe Boolean Search is useful when searching for multiple words.\n|!What you want|!What you "+"type|!Example|\n|''All words'' must exist|List of words|{{{jonny jeremy}}} (or {{{jonny and jeremy}}}"+")|\n|''At least one word'' must exist|Separate words by ''or''|{{{jonny or jeremy}}}|\n|A word ''must "+"not exist''|Start word with ''-''|{{{-jonny}}} (or {{{not jonny}}})|\n\n''Note:'' When you specify two"+" words, separated with a space, YourSearch finds all tiddlers that contain both words, but not neces"+"sarily next to each other. If you want to find a sequence of word, e.g. '{{{John Brown}}}', you need"+" to put the words into quotes. I.e. you type: {{{\"john brown\"}}}.\n\nUsing parenthesis you may change "+"the default \"left to right\" evaluation of the boolean search. E.g. {{{not (jonny or jeremy)}}} finds"+" all tiddlers that contain neither \"jonny\" nor \"jeremy. In contrast to this {{{not jonny or jeremy}}"+"} (i.e. without parenthesis) finds all tiddlers that either don't contain \"jonny\" or that contain \"j"+"eremy\".\n\n!'Exact Word' Search\nBy default a search result all matches that 'contain' the searched tex"+"t. E.g. if you search for {{{Task}}} you will get all tiddlers containing 'Task', but also '~Complet"+"edTask', '~TaskForce' etc.\n\nIf you only want to get the tiddlers that contain 'exactly the word' you"+" need to prefix it with a '='. E.g. typing '=Task' will find the tiddlers that contain the word 'Tas"+"k', ignoring words that just contain 'Task' as a substring.\n\n!~CaseSensitiveSearch and ~RegExpSearch"+"\nThe standard search options ~CaseSensitiveSearch and ~RegExpSearch are fully supported by YourSearc"+"h. However when ''~RegExpSearch'' is on Filtered and Boolean Search are disabled.\n\nIn addition you m"+"ay do a \"regular expression\" search even with the ''~RegExpSearch'' set to false by directly enterin"+"g the regular expression into the search field, framed with {{{/.../}}}. \n\nExample: {{{/m[ae][iy]er/"+"}}} will find all tiddlers that contain either \"maier\", \"mayer\", \"meier\" or \"meyer\".\n\n!~JavaScript E"+"xpression Filtering\nIf you are familiar with JavaScript programming and know some TiddlyWiki interna"+"ls you may also use JavaScript expression for the search. Just enter a JavaScript boolean expression"+" into the search field, framed with {{{ { ... } }}}. In the code refer to the variable tiddler and e"+"valuate to {{{true}}} when the given tiddler should be included in the result. \n\nExample: {{{ { tidd"+"ler.modified > new Date(\"Jul 4, 2005\")} }}} returns all tiddler modified after July 4th, 2005.\n\n!Com"+"bined Search\nYou are free to combine the various search options. \n\n''Examples''\n|!What you type|!Res"+"ult|\n|{{{!jonny !jeremy -%football}}}|all tiddlers with both {{{jonny}}} and {{{jeremy}}} in its tit"+"les, but no {{{football}}} in content.|\n|{{{#=Task}}}|All tiddlers tagged with 'Task' (the exact wor"+"d). Tags named '~CompletedTask', '~TaskForce' etc. are not considered.|\n\n!Access Keys\nYou are encour"+"aged to use the access keys (also called \"shortcut\" keys) for the most frequently used operations. F"+"or quick reference these shortcuts are also mentioned in the tooltip for the various buttons etc.\n\n|"+"!Key|!Operation|\n|{{{Alt-F}}}|''The most important keystroke'': It moves the cursor to the search in"+"put field so you can directly start typing your query. Pressing {{{Alt-F}}} will also display the pr"+"evious search result. This way you can quickly display multiple tiddlers using \"Press {{{Alt-F}}}. S"+"elect tiddler.\" sequences.|\n|{{{ESC}}}|Closes the [[YourSearch Result]]. When the [[YourSearch Resul"+"t]] is already closed and the cursor is in the search input field the field's content is cleared so "+"you start a new query.|\n|{{{Alt-1}}}, {{{Alt-2}}},... |Pressing these keys opens the first, second e"+"tc. tiddler from the result list.|\n|{{{Alt-O}}}|Opens all found tiddlers.|\n|{{{Alt-P}}}|Toggles the "+"'Preview Text' mode.|\n|{{{Alt-'<'}}}, {{{Alt-'>'}}}|Displays the previous or next page in the [[Your"+"Search Result]].|\n|{{{Return}}}|When you have turned off the 'as you type' search mode pressing the "+"{{{Return}}} key actually starts the search (as does pressing the 'search' button).|\n\n//If some of t"+"hese shortcuts don't work for you check your browser if you have other extensions installed that alr"+"eady \"use\" these shortcuts.//";config.shadowTiddlers["YourSearch Options"]="|>|!YourSearch Options|\n|>|<<option chkUseYourSearch>> Use 'Your Search'|\n|!|<<option chkPreviewText"+">> Show Text Preview|\n|!|<<option chkSearchAsYouType>> 'Search As You Type' Mode (No RETURN required"+" to start search)|\n|!|Default Search Filter:<<option chkSearchInTitle>>Title ('!') <<option chk"+"SearchInText>>Text ('%') <<option chkSearchInTags>>Tags ('#') <<option chkSearchExtendedFiel"+"ds>>Extended Fields<html><br><font size=\"-2\">The fields of a tiddlers that are searched when you don"+"'t explicitly specify a filter in the search text <br>(Explictly specify fields using one or more '!"+"', '%', '#' or 'fieldname:' prefix before the word/text to find).</font></html>|\n|!|Number of items "+"on search result page: <<option txtItemsPerPage>>|\n|!|Number of items on search result page with pre"+"view text: <<option txtItemsPerPageWithPreview>>|\n";config.shadowTiddlers["YourSearchStyleSheet"]="/***\n!~YourSearchResult Stylesheet\n***/\n/*{{{*/\n.yourSearchResult {\n\tposition: absolute;\n\twidth: 800"+"px;\n\n\tpadding: 0.2em;\n\tlist-style: none;\n\tmargin: 0;\n\n\tbackground: #ffd;\n\tborder: 1px solid DarkGra"+"y;\n}\n\n/*}}}*/\n/***\n!!Summary Section\n***/\n/*{{{*/\n.yourSearchResult .summary {\n\tborder-bottom-width:"+" thin;\n\tborder-bottom-style: solid;\n\tborder-bottom-color: #999999;\n\tpadding-bottom: 4px;\n}\n\n.yourSea"+"rchRange, .yourSearchCount, .yourSearchQuery {\n\tfont-weight: bold;\n}\n\n.yourSearchResult .summary ."+"button {\n\tfont-size: 10px;\n\n\tpadding-left: 0.3em;\n\tpadding-right: 0.3em;\n}\n\n.yourSearchResult .summa"+"ry .chkBoxLabel {\n\tfont-size: 10px;\n\n\tpadding-right: 0.3em;\n}\n\n/*}}}*/\n/***\n!!Items Area\n***/\n/*{{{*"+"/\n.yourSearchResult .marked {\n\tbackground: none;\n\tfont-weight: bold;\n}\n\n.yourSearchItem {\n\tmargin-to"+"p: 2px;\n}\n\n.yourSearchNumber {\n\tcolor: #808080;\n}\n\n\n.yourSearchTags {\n\tcolor: #008000;\n}\n\n.yourSearc"+"hText {\n\tcolor: #808080;\n\tmargin-bottom: 6px;\n}\n\n/*}}}*/\n/***\n!!Footer\n***/\n/*{{{*/\n.yourSearchFoote"+"r {\n\tmargin-top: 8px;\n\tborder-top-width: thin;\n\tborder-top-style: solid;\n\tborder-top-color: #999999;"+"\n}\n\n.yourSearchFooter a:hover{\n\tbackground: none;\n\tcolor: none;\n}\n/*}}}*/\n/***\n!!Navigation Bar\n***/"+"\n/*{{{*/\n.yourSearchNaviBar a {\n\tfont-size: 16px;\n\tmargin-left: 4px;\n\tmargin-right: 4px;\n\tcolor: bla"+"ck;\n\ttext-decoration: underline;\n}\n\n.yourSearchNaviBar a:hover {\n\tbackground-color: none;\n}\n\n.yourSe"+"archNaviBar .prev {\n\tfont-weight: bold;\n\tcolor: blue;\n}\n\n.yourSearchNaviBar .currentPage {\n\tcolor: #"+"FF0000;\n\tfont-weight: bold;\n\ttext-decoration: none;\n}\n\n.yourSearchNaviBar .next {\n\tfont-weight: bold"+";\n\tcolor: blue;\n}\n/*}}}*/\n";config.shadowTiddlers["YourSearchResultTemplate"]="<!--\n{{{\n-->\n<span macro=\"yourSearch if found\">\n<!-- The Summary Header ============================"+"================ -->\n<table class=\"summary\" border=\"0\" width=\"100%\" cellspacing=\"0\" cellpadding=\"0\">"+"<tbody>\n <tr>\n\t<td align=\"left\">\n\t\tYourSearch Result <span class=\"yourSearchRange\" macro=\"yourSearc"+"h itemRange\"></span>\n\t\t of <span class=\"yourSearchCount\" macro=\"yourSearch count\"></span>\n"+"\t\tfor <span class=\"yourSearchQuery\" macro=\"yourSearch query\"></span>\n\t</td>\n\t<td class=\"yourSea"+"rchButtons\" align=\"right\">\n\t\t<span macro=\"yourSearch chkPreviewText\"></span><span class=\"chkBoxLabel"+"\">preview text</span>\n\t\t<span macro=\"yourSearch newTiddlerButton\"></span>\n\t\t<span macro=\"yourSearch openAllButton\"></span>\n\t\t<span macro=\"yourSearch lin"+"kButton 'YourSearch Options' options 'Configure YourSearch'\"></span>\n\t\t<span macro=\"yourSearch linkB"+"utton 'YourSearch Help' help 'Get help how to use YourSearch'\"></span>\n\t\t<span macro=\"yourSearch clo"+"seButton\"></span>\n\t</td>\n </tr>\n</tbody></table>\n\n<!-- The List of Found Tiddlers ================="+"=========================== -->\n<div id=\"yourSearchResultItems\" itemsPerPage=\"25\" itemsPerPageWithPr"+"eview=\"10\"></div>\n\n<!-- The Footer (with the Navigation) ==========================================="+"= -->\n<table class=\"yourSearchFooter\" border=\"0\" width=\"100%\" cellspacing=\"0\" cellpadding=\"0\"><tbody"+">\n <tr>\n\t<td align=\"left\">\n\t\tResult page: <span class=\"yourSearchNaviBar\" macro=\"yourSearch naviBar"+"\"></span>\n\t</td>\n\t<td align=\"right\"><span macro=\"yourSearch version\"></span>, <span macro=\"yourSearc"+"h copyright\"></span>\n\t</td>\n </tr>\n</tbody></table>\n<!-- end of the 'tiddlers found' case ========="+"================================== -->\n</span>\n\n\n<!-- The \"No tiddlers found\" case ================="+"========================== -->\n<span macro=\"yourSearch if not found\">\n<table class=\"summary\" border="+"\"0\" width=\"100%\" cellspacing=\"0\" cellpadding=\"0\"><tbody>\n <tr>\n\t<td align=\"left\">\n\t\tYourSearch Resu"+"lt: No tiddlers found for <span class=\"yourSearchQuery\" macro=\"yourSearch query\"></span>.\n\t</td>\n\t<t"+"d class=\"yourSearchButtons\" align=\"right\">\n\t\t<span macro=\"yourSearch newTiddlerButton\"></span>\n\t\t<span macro=\"yourSearch linkButton 'YourSearch Options'"+" options 'Configure YourSearch'\"></span>\n\t\t<span macro=\"yourSearch linkButton 'YourSearch Help' help"+" 'Get help how to use YourSearch'\"></span>\n\t\t<span macro=\"yourSearch closeButton\"></span>\n\t</td>\n <"+"/tr>\n</tbody></table>\n</span>\n\n\n<!--\n}}}\n-->\n";config.shadowTiddlers["YourSearchItemTemplate"]="<!--\n{{{\n-->\n<span class='yourSearchNumber' macro='foundTiddler number'></span>\n<span class='yourSea"+"rchTitle' macro='foundTiddler title'/></span> - \n<span class='yourSearchTags' macro='found"+"Tiddler field tags 50'/></span>\n<span macro=\"yourSearch if previewText\"><div class='yourSearchText' macro='fo"+"undTiddler field text 250'/></div></span>\n<!--\n}}}\n-->";config.shadowTiddlers["YourSearch"]="<<tiddler [[YourSearch Help]]>>";config.shadowTiddlers["YourSearch Result"]="The popup-like window displaying the result of a YourSearch query.";config.macros.search.handler=_109;var _195=function(){if(config.macros.search.handler!=_109){alert("Message from YourSearchPlugin:\n\n\nAnother plugin has disabled the 'Your Search' features.\n\n\nYou may "+"disable the other plugin or change the load order of \nthe plugins (by changing the names of the tidd"+"lers)\nto enable the 'Your Search' features.");}};setTimeout(_195,5000);abego.YourSearch.getStandardRankFunction=function(){return _bb;};abego.YourSearch.getRankFunction=function(){return abego.YourSearch.getStandardRankFunction();};abego.YourSearch.getCurrentTiddler=function(){return _f4;};abego.YourSearch.closeResult=function(){_e3();};abego.YourSearch.getFoundTiddlers=function(){return _b1;};abego.YourSearch.getQuery=function(){return _b2;};abego.YourSearch.onShowResult=function(_196){highlightHack=_b2?_b2.getMarkRegExp():null;if(!_196){_f5.setItems(_b5());}if(!_dd){_dd=createTiddlyElement(document.body,"div",_da,"yourSearchResult");}else{if(_dd.parentNode!=document.body){document.body.appendChild(_dd);}}_fe();highlightHack=null;};})();}
//%/
<<loadTiddlers label:custom "tag:Cage du porteur 2011-06-06" file:///W:/Groups/npi_kiffy3__/npi_kiffy3/index.html init autosave>>
!usage
{{{[img[images.jpg]]}}}
[img[images.jpg]]
!notes
attached by FileDropPlugin
!type
image/jpeg
!file
C:/Documents and Settings/Julien BOUCHEZ/My Documents/Airbank/airbank_tw/JBouchez/Pict/images.jpg
!url
!data
data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAkGBhQSEBUUEBAWFRQPFxIUFRAWEhQUFBYYFxQWFhQWFBQXGyYeFxkjGRUYHy8gIycpLCwsFx4xNTAqNSYrLCkBCQoKDgwOGg8PGi0cHiQpNSksNSwpKSwsKjUwNSkqKSkpLCwsLCkpNCksKSoqKS0pLCwsKS41KSwxLCwpKjUsKf/AABEIADoAjQMBIgACEQEDEQH/xAAbAAACAgMBAAAAAAAAAAAAAAAEBQMGAAIHAf/EADMQAAEDAgQEBAUDBQEAAAAAAAEAAhEDBAUSITEGUWGRMkFxgRMiQqHRssHwM4KSseEU/8QAGgEAAwEBAQEAAAAAAAAAAAAAAgMEAQUABv/EACQRAAICAgIBBAMBAAAAAAAAAAABAhEDEgQhMRMUQVEiYXEj/9oADAMBAAIRAxEAPwDhwCkbTW1KmmFtaSlzmkHGNglO2RVOyTK3t25ssjNyGp942TahhiiycjUojhsQU8O6KdmGdFZqWGdFMy0ZnDJGc/QNXesDUDqpHyx6wFZbhfRSjCuiuzOHXebSJ5iETT4bPJK902F6SRQhhXRYcK6LpFDg97/Awn0C1r8JuaYcwg8iEK5d+Ge9OJzY4V0UTsL6LolThs8kG/Aj5NJjzAJHcIvdteTfRT8FBfhnRD1MP6K8VML6ISrhnROjywHgKTUs0NUt1a723YzxOAJ8vPsNUuqWzXeEg/zkrIZ77ESw0V5zFpCZXFrCCexVxnZM40GWlNM7k/DpSN3ENB5TuewKX2btU5q23xaJaN9C31Gw99vdSZZVJX4KMa6BsGqBpCutKq1zWuHiBAPUExr3lc+s3K34DTcXAHwiHH2Og9z/AKKg5uPvazrQktaH16Ph0XvG4AA5S5waD3cCpOE7Jjak7kmS46knzJPmURUtxVpupkxnEB3IggtPsQCkuH4gabodo5hLXN5EGCFzHcsbSCilsdzp2LKlAAgaCQeRQzcIaI03I+6UcLY8ajQ2dx2Hmf5zVndUBGnt7bIsUt8Va00q/v7OZkjLHKmT06LWgACAo723a9mo1GoUJu5C0bUJ0nff0T48qEf84R/FoSoPywU4M0uaCNCdfQCVtitoxtMjKABtAhGXFYRI3brHPTUdv2VP4r4pbkhrvRQcuKbSrv4f19lOCM5yVeCr4oG/FaR9Tgw9QTA7Ej780uxRvw6b3xORrnRzgaDutMHe6vcZnH5KMPPV2uRvcT/b1R2JMbUa5p2eC0+4hNjHSlIvl26Rzy7dDSTq52rneZKTf+gh0jcfyE4xZhaHNd4mGD+R0I190jtrY1KgaPqOp5DcnsvoMCWrbE5JUqG93RBAI+oA9xKS1qeqsV+QBA2AgeyQVzqjwN0c7KiG3qwnNlewq61yJpXEJ+THsKhOg6tXa2s4kwC7N3En7lW3BL4ZJBkE7+g/MqgXbpdPOE5w27yMDZ2n7mVNyMG0EVY+Q/Bf6OIdVX8exBrbkkuAD2sdqYkiWmP8Qg6eKdUp4iqZyx5IIAy5Zg7k/uo8HGqdP5HS5FK0dO4Kx9oD3NcCPlbIPqSP0/ZXClxR1XGMCvyynJLfnIdDdgA1rQNTvDU2bjXVInhcZNR8G7KfbOrN4qphry+o0ZchMnYOMAnkCQVh4qpnWnUa4bEtcCJ3iR6hcbxHiEUs7nNz/FaxgbmAgseXSQdxr3Rlvj2YFwAYKhzZGuzASAN4EnTkk+w1rKm/4DtFvWjqNXijquZ8QYwBUqS4BrajgJO2b5gOxUbsZ6qpcRVpqEyD8RzHb7ZW5dR+6qwcfeVSNeVYlcS88O34FuSD/Ue508wIaP0lT1cQ6qqWF38Ok1kg5QdRtqSdO6yrinVZLjbTbC9bqz3iSu3PLiPmZz3IP4ISrB6wBc4co7n/AIoMZrZ4M+GfvH4QlrUytOviXTx4axUTT5Db1Gd5dylVSpqsq1pQ5cqMePVEspWar0FeLE4WbbqanVgQomLKm6F99BeOwtt11UdxULiOgQ6lYh1S7Nu+gu0uCwRtJmPYIgYgeaXVFrKB41LsLZroYVHF5J30A+62p3BYI2kzCjtPCo73cIKv8T1/IScQKAuTmcTzj7CFGSt27I1BR7R5u/JLTuSGgclq66UFTdRlEoryDsySq+fZRgwvWrxyYvoz9nhK8WLFoJ//2Q==
!usage
{{{[img[images2.jpg]]}}}
[img[images2.jpg]]
!notes
attached by FileDropPlugin
!type
image/jpeg
!file
C:/Documents and Settings/Julien BOUCHEZ/My Documents/Airbank/airbank_tw/JBouchez/Pict/images2.jpg
!url
!data
data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAkGBhQQDxQUEBQUFBQVFhAUFBgXGBQYFxAPGRUWFRYWFRUXHCceFxkvHBcWJC8sIycpOCwsFh8xNTAqNTI3LikBCQoKDgwOGg8PGiwkHyUyLDU1LDQvKSw0LywsLjUvMjUpKSwsLCkpKiwvKjAsLDQpLCwsKSouLCwsKSwsKSkpKf/AABEIAGUAhwMBIgACEQEDEQH/xAAbAAABBQEBAAAAAAAAAAAAAAAAAQMEBQYCB//EAEIQAAIBAwICBwUEBggHAAAAAAECAwAEERIhBTEGEyJBUWFxIzJCgZEHcoKhFCRSYrLCFUNjg5KiscElMzRTc5Pw/8QAGQEAAwEBAQAAAAAAAAAAAAAAAAIDAQQF/8QALREAAgIBAQYEBgMBAAAAAAAAAAECEQMSITFBUWHwE4GxwQQiI3GR0TKh8UL/2gAMAwEAAhEDEQA/APD8UUtJWGBSV0K7VaAOEG9dS04EpuXnWGDdLSUVowtFFFBgUUUUAFFFFABRRRQAUUoooAKKKWgBK7Diua5NAEhWzTMnOu4uVNtWIxCUlLRWjBRRRQYFFFdRxliAoJJIAA3JJ2AA7zQBzRTlzAY3ZGxlSVODkBhsRnv3pugApaKKAFFFAooAKMUKKXFYAlIa60mgRmtA7TlTJqSIjiuRaGltC2hiipQsTXS2NZrQakQ6XyH/AMam/oQrTdD+joFwlxMPYwxveN+8kbsqKfvSJjzANLLLGKszWjK8VsDBPJETkxuyH7ynDD6gj5VpuH2A4fYi8l/6icMlmvfEmMPckeIB7PgWDeGJPRDor/SN6XnPsgxmuGO2cksVz4k5+QJqP004yL68aRdolxHCvILCvI47snJ+eO6oyy6pKC8++voY5Ix+K6ihLMAoySQAPEk4Aq0WEDuq46KWAe+thjnNET6Bg3+1PLOopsPEKbpJw9YbuWGMdmJuqz+0yAIzepYMfnUbh/DHnlSNB2nIAzyHiT4ADJPkKv8ApFDm9ucDPt7gn06xqsOh1p+sTMecVtdt6NoMf85qbz6YX0M8QxXUHu3H+1FWvV0VTxQ1leqV0I6kJHkVZHg4WyNw5I1SiKEft6QWlY+Q7I9W8qxzMsgvbAQIcbu8h/AgUD82f/DTSR1P4hssC+EKH5uzy/6OtR1kz3UrbFbG1TBpQm9OKMnfarXhXCDOJdPOOMSbkBcdYiHUx2Gzk7n4aRyoWypMe1S+HcGeeTRGrMdMjdkE+6jOB89OPnVknVRZGhZ38WLiJfRBhn9WIH7pq06L3cskrxsx0dRd4RcKmTCwHYUAZ38Kk8lKwuiiforIh9tJBEf2WkVnHrHFqYfMVvekdhHDbw2YkEbSpCsjEE5igGEQKozlpWY/Jqy3RPgn6RdRqfdUiRzyARSCQfU4HzrX8I4e93fNfTKRCD+rA41SIMiNwp3C4y+TjJbbNRyZG39u0bd8CB0ggHC+GC2jPtJy3WuO9dtePLGlB5Zrz+NAa3HHLafikxkiMS20epDKzaY4VU9ouzbknnsPDlWS4pHCHWO0Lzb6OsI09dIcDEcfwr4ZJJznblT4outu8xxIMkLFdQHZ1aM/v4zj6Vf/AGfw/wDEYM9xkP0jetBe8BWCy6obsjW0TsP+/MyyTlfwrEo8gfGmuEcI/ROOmEZ0qZtGe+MxMyHPfsRU5ZlOEkuTB9CjvOMy2l9cyQNpfrbldwGBUyNkEHY8q1VpNEl/xASQqqrAVITMZlUqpO2SisQNsAelZXpHw4vNfOP6mRnPmrzlf5gfka3t9a4ub9v27OE/5Zk/kFTyzSivt7r9hqaVGTs+jNjeOFtbt45GyVS4jwABuV6xDgkDPriiq7o5whppYDgFXkmjxj4kh6z+b8qKpky6HVlVOH/URjo/wAyQtIwyZGFvbqfjnfZn+6q6j648K0PT7h6RQrGvuWyw28Y/tnBmlc+J0rGP7w1ddFUSe8LJtbWSGGLwMhHtJM95wDv5g1nOkXEBctbxjnNL17eXWvpT/JgfKl8WUsi772epz6tpm+Mpi6ZR8HVRny0RrH/LUfqMHyycVN40vt5W563kkOPhQyMFJ8O7/EKtuj/B+skVCMu2CsfeqjcySt/Vr5DtN5A5PQ50rG3kC04GeqM8+pIgwAwO3MTnATOwGxyTy8ztWj4Zk205wI4XtJ3jjHLCTRDrHPN2JVhk+BxgGpl7AtxFOqH2SGCCNgPecv1s0nl2Ylx4KB479PcLJLfqgASGxaFAPhVQD/rn6VzSyW6By4IwzbE7YrQ/Z+wa+VcHtRzD5ECs1oLFeZ1bADmTnAHrXo3AOBrZ3cW2THFiU52e6lBKxr4gLjl3BmpslKNGKNkTgFlJbWmQALi7kWJNQyI4hnU7KeYCh2x35WtLxDiKWttIJetuH6syOqkdY6BSGklcbRJzGfLCg42J4mkuS5O6K0aHGcSN2pZNPyVQPJqpeF3sc19eWybhraVCx3aabIR2ZviPawO4BAAANq5ITU5Xw39+QqdvoYLi/Sy4uChbTFBHvBDGoEMYUlQQhGHIIIy2dwcYredC+nSvbmS74f1io513EMcWdZ7RdouzpO4yyeOTisTfcEkltOHdWu7xyhiSFXJmLICx2yS5wOZ7ga9DsoobeBLCJkeQRu8vaYLGy6WZpjGQwBY8sgkDFehlypJUlvf4W86FkcdxohBw+6QbXEWuSO4XKTL1kuzLpLKytkY7IOcDkBXPGuiYlvra4ikUFA0Z1A+1BRgm45Hc1huk1q0ws2nlaRp5rdMEYijicFiqwg45YzqJPdkVsbK2S5tbq0jGjqDHGmjs6D1MciFSvIhs8vCuOeSNJpc7rluBTjPgVXGugNysHEisYdrgqYgrAlgG1YwcYOSfpVjxDhkmmVijgta6D2TswEhx69s1Vf0jPJE7RvIZBHAwVXdGDHsONSOmrtpJ7/L02q+tJZ7eITz3kpiChpEdIZtQ05ISSNVY+uWGB86JLHNbG1/i/Q8cUMitGW6HcNMIslZGGmO5uXJBGJJT1aKfPR3eVLVzbdJYryR1jtpAqFRLIXSAI2jUqkRvqOxA25E0VPLDVK2+95VYIPjfnXsVF/ILLgrlRoeSOND3e2kjRGPrjP0rB9G9VxxGFu4uhUeEcey/w/nWh+1u/OiKBe95pG+TdUn566k8D4QLS1kuGG8UZVBuASkPWOWwRndiPLBxua6YNRg5cXf6OFbiqv2EcEs8S6jNcdVE2MiKC3ARWXxYsRjPfHkDIBqya0PDrBhn9auQxc98cfeM/PHqxPdVxwfgqK0OSyC2gRZE26ovJ+stkk6jpYgnPgpzsapLTVxO7aYgiAOqLkONUSblc4wGx2sZ+M88Usp26W5b/b9jVqdcESL/APVOG28ePaTSKxHfkjURj7qhfxVG6DWbSNexk4domjYt8LsXUlvmKuuNMrcTtA+4iSWUDwfUgUkeoA+dN8D4M1vZzTDJeW0hOB7zSGEyscjcsXmIH3RSavp3xdeoi3WUX2fcE6y8VjusYaUE7bj3M9w37X4TWts79ZrqV13jtw5yPjkYHJ9dII+nPANTOjfDWtowjACQmMz4wRGeawA9+AdTHxKjfeofRrh3V20a43lcM2eZUdrf1CKPxVPPk2O95XI1FNLeWM0DrA+kkSaHORzEzKTkeeo7VlujvBobHiia3Jmma4WKNT2YrbtspcncnCKPXPPGa2cd4GTKjYyaV/fwdGoeWQ2PEDNef8WjK9KbcjvEJ+RidCfypPg02pwfJsjjT2llwvgsTxRXN5gw2v6SoGyhZP0kRgkDmAqnmce7tT/Fjp4fdTxqI+uREhVVC6LMusadke6W1s5+/jmKvRwqNrOOAqXSaUMy5A1lpGumBJHu9kjG222RzqDxm265bh1kEkUjWCIBsYgk4LoR5k6s9+fKm13K+v8AV9/grXy3yI3G7TXc2KdySs//AK4zj8yo+dO/ZnxnrLjiPh+k6h90gxj8ohUniMoRmmblFFM3psrH+CqD7MbEwSXJk7I6qyZie52jMrZ9NX50mJasL50vXb6ol8Pb3d7TSIbe0lvWu2UQgpIqMqnWkhL6QOch6wPheW5JzzGb6RX68W6lhqCPcC22bISIRGV+rHLJIALYydHhtUr7UrBJVtLkYZBIiMRyaKTkfTP8VSuj3R6MwwpGxUW007cgTJIpliIJ2/aJz5CrxyJYk1v2/nujo1SmljiQ+kAFrZTMq5DyIzAcznQu55k9kGlq6uYstChJTJZ2IIBCLGRzPLtOlJUsGaEY/Om2c8Wq+YwvE7U3nGWjcgKmthtk6Y5S2nn3kn0z31tbyINHBEwykpm1jxUuFI+jkfKiiqzf1IroUkklFme6ZcWaCznZRvNdyxt/40GnA9ViA9Ca0XCOjMVqwkj21wIGHcXBGXO/M7em/jRRUMzccari37Gx/g/MY4bNjjTEjOLTA9C8rH+BfpT3SPjclvDdyRYDwxxMhxnDtjtY5bbYHlS0VWrcF9vVBH+Ee+JK4PKTa2xY5aRI2Y4xlmTrGOPHJP1zXN0xAwpwdMSA969dKIyw8wF2paK457/P3Iz2yZJRAJo0AAVVyoHdpAVR6YNMXfGBHe9RoyZFVg+QNICttjTv7p7xzoopvhkpTlfJlcLa1V1G+k94beBmjH/JtrqRPJ/ZxqfkGb61A6Kcba5sy06odDrGFUFR1SiJ4xzJypIwST7tFFVivpX1RuppUuaOumEWLaSPO0ksMBP7jzRxt+RP1qyawGsqSdM0jO4/s40ijEX3TzOMZyR3miio6nGDrr7C4vlUq72jXSayEnCpkPwpIVOORRiy/wCgqn+zu8Z7RZD7zTXBP4pDmloq2Lbid8zLadondIuHC5uWgZmRWtlfKnBBaZGIB/ul+tFFFZ4s8eyLpHu4MONxtrmf/9k=
!usage
{{{[img[images3.jpg]]}}}
[img[images3.jpg]]
!notes
attached by FileDropPlugin
!type
image/jpeg
!file
C:/Documents and Settings/Julien BOUCHEZ/My Documents/Airbank/airbank_tw/JBouchez/Pict/images3.jpg
!url
!data
data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAkGBhMSERUTExQWFBMTGBcXGBcXFxQVFRcXGRQVFxUUFhUXHCYeFxkjGRQUHy8gJCcpLC0sFR8xNTAqNSYrLCkBCQoKDgwOGg8PGjAiHyAqKTIpLCwsKSksKSosKSwpLTAvKSkpKiwqLCosKSk1LCkpLyktLywvLC8tLC0xLS8uNf/AABEIAHgAcwMBIgACEQEDEQH/xAAbAAACAwEBAQAAAAAAAAAAAAADBQAEBgIBB//EADsQAAIBAgMFBQUFBwUAAAAAAAECAwARBBIhBTFBUWETIjJxgUJSYpGhBhRygrEjM0OSoqPBFXOD0fD/xAAaAQACAwEBAAAAAAAAAAAAAAADBAECBQAG/8QALhEAAgECBQIDCAMBAAAAAAAAAAECAxEEEiEx8CJBYaGxE1GBkcHR4fEyccIz/9oADAMBAAIRAxEAPwD5FjGYvruqtmIPQ1dkbPuqrKhFXUOhA4TuwUz921Dw8RY2FcNqauR9wdTVJMIwM2HtuNBjW5o0j8N5NewC3nVkjrW3LMcZJCjf/ir+MnCplvVXCBhcgWvxNEGDVjckueSgmqzTlLXYLDDTnqlYoQ0SRfSr/wBzb2Yn+QvS/FqwOqMPMURVI5XHuXqYd09X6M5l1Gu+qNGaY8qDVG7i9ktgkVeCThXIr0ioOPL15RFWpU2OCw44qabLOsi9aTPhSN9d4afIdd1WhK24vUpKWq3GibPG+q0+FIN6sf6gLaGu4saONBi2ndlW6kVdCYAg68ab7P2fYBmBJbwrxY/9USTBCR47aBj8gNSflTRQN9jqBoN+U+CJeRbeTyrSo0GtZDmHeezZwuEGhazHcNMy3G8Rp7VuLHSvHNzlzDyMyp6WUWHzojn1v3e7pnI/hp7sa8TxoUU5DWUkkb1jRCi9LtvoGMg8t4m9Qmksv2+oM4Yqb9m/mst/rer8ILC15R0kjEq/Ne9Q3iDewL9YgD/bcfpRMPgMpBsq+Zni/r1ArFlJNa789406TSv+PRHT7ERlu6qF3drGbop4B1PeT1FZTbWxXw8mVtx3HgR0r6ng4zvYkMAATJYsobRe0ZdJ8Ox0zb1JpVtzZsbJ2bgrGWKoTq0EnGBz7vuniCKBQxbU7PbnOK+ViKKlsfMitcUz2psV4WIOo50vRNa2IyUldGY4uLsz0SVKMMOKlWudlZbnXML1zs7DgnWrURzBjwFVcPE98y2APPjV6sLQUgVGnKXTYJicEpvlNiKotmuB14UxOHdj7PnRMPh0jYEntH9lRzqtNKVhlYSpHfbx0GmHw4Gh9lQh9Rnk/oW3rR7313cb+6WXMx/LHlUdTQFB1Xe25j8crAEeiirUa3133ubdC2a3yRB+at1K4JPK7FaVeHh3Kbb1X2YUHFiNT510MLpYiyjQICcoPJiurv8ACN3GjEWPE25b9TY5fidr68FFePJwFjvAtopt4teES7viNLzhc1KM46NgQqg27g8+xT6EMR6mtJsyCxUAEFvCBlUvzEboeykPwMBes5szGoZAvaslzYN2a9lc8Ctt1a7CYI2ZbBCe0SRV8CzJEZoZ4x7NwteRxztJrnOaD1XFRS6foNIcMAgygMLEhQLKwYHMiqfCsirIMnsyR9aXYrDAkIxzJJ+wcn2lKZ8JN+LL3b9KZNiz3iNCS7Doxw0WK+kqX/OedV9poGVlTS4cJ0KBcVh/ksjr5VkU8ylr35zxM2VVS2MDipC0ZR/HESh56G16RSQAm4rSfaMASrMv7vFKG8ntrWdfCMG32FejoPS4vKSS6gRjNSj9oBpcVKZzyA54B2QKkae+bt5cqIkJkzG+VV0HpQWGaVB0rmJGJbIO7c6k2FP4pNw6ff5JE01OTyxYHE3UXDXFWtnwmNA1ryPovnzruPBgkZiGI3Rpr8zwFW8jXLCxcCwt4Ih1bcWrqSjuMRw9SO7uexnIDrfITc+/Mwyj0W9Xu0sNOBYfy3AP9taUIuZkVf3cfeZuBPE3phhJNB8Wvo8pt9L1oUZJidfMndI8xExF7eyHI8wRGp9Bc+tVsdJYZeBYR+SIAbepJNWnUN5EWJ5CRRZj0zqfnRFwWYkOqkmxaNmEbBgAM6E6EG1DxFSNODbEp432encJgNnFoclh2k7ARoNSNR3ugA1vW1cgdqwNwe1IPNYcIYM3rLJYUv2NgURTkVU0s5WTPIRyec92FfK55U0V9QAAScuVbZQwTVBlOseHQ94k6sa8PiZ55P4+f652KsVKesjjGIR2nNfvNvMYaGEf1NahY42mUDcJcQfyxQJD+t6LHKpy63Rtcx4wxydtiMQ3ISSBQOgFLdpTlUeQ+JMOzEcpMTMXVfPLagU4u6Xw+f5DKdzKkdpgSG3KzZTy7xtakkGJzRWbfzp39oW7DCJCPFYX8zvrNRTXUAVt043TfiEjNs5+7DlUowevKNdhLM6w8+V0Y7gbHyOlXcThrJIoPhOcdVP/AI0qtmYKOJpu51l5KgTzJNbNJ5otPmmvohSUZXumEQhbr4Y0UM1tC5O5b9a6ll1C5QXtfL/DjHDQbz511JH3rc3UHyjQE/Wl8uJtHJJxdjr04VepTil8+eg7TxMkrMLiMcgNnYyEeyLKnyHCu2x5Cq59pwWtuAAsq+QvWfjUk8yaaYPanZ92RQRSFOvkvb4AcViJzWivzxNFgYyovqyi+V0s5CnUo8Z8S0yw0ykABlKjgJI8o/48QpKeQNZ3D4zD3GUtG3wE3+Q31psNmy5rTuPeZIE+ri9IYirKe55qpSkpZpeen3Xmv6GI2moAGbMRuCWncH4QqiKM9bGuQSTldSgk/gq3aYmfpLJ7Kc+FL2llY2tibclkht9ALVfwyCMFQpVm3oj9piZP9yXdEnrWbOCiuc5uhmjUUv3cvM4sxYByWVWC+F3H7rBxniinVz59bL8ZMHdkZsywt2s7cJJrd2MfAgsLdBVbF7XEB7SRkDxqRFEngiuPq3Ws7szFl4GBOrszHrc3qIUWup85zZGjSj7TYRfaPbBnlY8L6UqVyKtbQwmVjVOtiKSSSGbZdA33g1KFXlWsTdmiljUmORfeA+dW4odTyMpJ/Ci3P1oWEgCZFPsXkboFGg+dqusotlPkx6AdpKfViF9K2qcbLm9gcKWTpbKs8llLcQhP5pWv+lqW4yyRBPU1dxUmYKOMrZz0UaKPlSraL5iaFXl0t85axdqxVhuNRwrmWS9dxygc71c2fsh5WAtYE1ktpakNpGj+y+FTD4Z8U6gt7APPhVHaeNlk70sjEnUKDZR0sKY/aeYIkOGXhYt6UpeDMbnhSkNXnff0BZFLqPNnxXYXdwv4jTrbm3OxRIYB2aP4mHibzbfSATDNYUbbUg7OxNyN1WlG8lc6MIy/kKJrM3HU8STWpwsCxwAmsxhYr2Y1o2bPDblU1uyC27Iz21MTmOlLqNiVsSKFemErIk8qVKlScafBSq2ighNGkdt5A1y/Su8VMSjHiY2b+d7/AKAVViQ9lbcc4Vh60TGPpMfwoPQVr07xp6+76P7E1Kiqao8lH7SM8GWw6UpxqFXtV7GPlWIcRrVqGNZDmalcVJJO/h6AHJw3FeCwjORpWuzLhYcx8VVUxscfhG6s/tvabSvYnQVktOo/A7WfbQNhsQZpS7bzu8qZYs5VtSvZa5daYY8ZhcV0v5JdguW+wqiBBua52g+YUEyEtamGxtnmUlzuG6itpasjbUJgsJ3Reu8RjsllFMMWoRd9IngJa96HG0ndlFPW4WXAh1LCkzrY2p/g3y93gaVbTis+nGrwbTswzkpaop1KlSikGqnbx9eyb1zUDFLpMOTA/pUqVuVNvn/oXSttzYqbU8SeX+KGkpC8r1KlZWK/6PnYMldHkDXN71SxBuxtUqUv3JRcwklxWgiitCSalSlqu6LN6GWkxN2NhWt2GuTDE8alSrV9l/ZWxmcXimkc3OgryOBuDGpUouyKvQ6Wd0Oov1oTxtIb7qlSpempWL0uGXY5tXlSpQfaMjOz/9k=
//{{{
config.options.chkShowRightSidebar= false;
config.options.chkShowLeftSidebar= true;
config.options.chkAutoSave=true;
config.options.chkSaveBackups=false;
config.options.txtBackupFolder="Backup";
config.options.txtFileDropDataLimit=10;
config.options.chkBreadcrumbsLimit=true;
config.options.txtBreadcrumbsLimit=10;
//}}}
{{twocolumns{
|Name|...|
|Phone|...|
|Fax|...|
|Email|...|
|Adress|...|
|Website|...|
|CA|...|
|Effectifs|...|
|Capital||
|Créé|...|
}}}
!Description
!
<<tiddler AutoRefresh>><<tiddler [[FetDescriptionTagTag]] with:{{tiddler.title}}{{tiddler.title}}>>
!Produits
<<tiddler NewTaggedTiddler with:[[Produits commerciaux]] {{tiddler.title}} TemplateProduct>>
<<tiddler AutoRefresh>><<tiddler FetList with:[[Produits commerciaux]] {{tiddler.title}}>>
!Contacts
<<tiddler NewTaggedTiddler with:[[Contacts]] {{tiddler.title}} TemplateContact>>
<<tiddler AutoRefresh>><<tiddler FetContactTagTag with:{{tiddler.title}} {{tiddler.title}}>>