<span title="Close other tiddlers"><$button message="tw-close-other-tiddlers" class="btn-invisible">{{$:/_images/close-others-button}}</$button></span>
```
/*BLOCKY*/
html body.tw-body .blocky td {border-color:#fff;border-width:5px;background-color:#eeccff;padding:10px;}
html body.tw-body .blocky th {border-color:#fff;border-width:5px;background-color:#ddbbff;padding:10px;color:#441177;}
/*BROWN ALTERNATING ROWS*/
html body.tw-body .brownaltrows th {padding:10px;vertical-align:top;border-color:#000;background-color: #ccc;text-align:center;}
html body.tw-body .brownaltrows tr.evenRow td {background-color: #eeddbb;}
html body.tw-body .brownaltrows tr.oddRow td {background-color: #f9f2d8;}
html body.tw-body .brownaltrows .tw-tiddlylink-internal {text-decoration: none;font-style: normal;font-weight: bold;color: #443322;}
html body.tw-body .brownaltrows {border-color:#000;}
html body.tw-body .brownaltrows td {border-color:#000;padding:10px;}
/*HORIZONTAL ROWS*/
html body.tw-body .rowstable {background: transparent; border-collapse: collapse;border-color:transparent;}
html body.tw-body .rowstable th {background-color:#fff;border-color:#fff;border-bottom: 2px solid #446699;color: #446699;padding:10px;}
html body.tw-body .rowstable td {border-color:#fff;border-bottom: 1px solid #ccc;color: #000;padding: 6px 8px;}
```
image-right {
float: right;
padding: 0em 0em 0.5em 1em;
}
image-left {
float: left;
padding: 0em 5em 10em 0em;
}
.mon-bouton {
-moz-box-shadow:inset 0px 1px 0px 0px #ffffff;
-webkit-box-shadow:inset 0px 1px 0px 0px #ffffff;
box-shadow:inset 0px 1px 0px 0px #ffffff;
background-color:transparent;
-webkit-border-top-left-radius:20px;
-moz-border-radius-topleft:20px;
border-top-left-radius:20px;
-webkit-border-top-right-radius:20px;
-moz-border-radius-topright:20px;
border-top-right-radius:20px;
-webkit-border-bottom-right-radius:20px;
-moz-border-radius-bottomright:20px;
border-bottom-right-radius:20px;
-webkit-border-bottom-left-radius:20px;
-moz-border-radius-bottomleft:20px;
border-bottom-left-radius:20px;
text-indent:0;
border:1px solid #dcdcdc;
display:inline-block;
color:#777777;
font-family:;
font-size:11px;
font-weight:bold;
font-style:normal;
height:18px;
line-height:12px;
text-decoration:none;
text-align:center;
text-shadow:1px 1px 0px #ffffff;
}.mon-bouton:active {
position:relative;
top:1px;
}
.tw-drop-down p
{
max-width:600px;
word-break: break;
white-space:normal;
padding :0 0 0 5;}
tw-drop-down a {display:inline;padding:0}
indent {
text-indent: 20px;
}
outdent {
text-indent: -20px;
}
justify {
text-align: justify;
}
footer-left {
float: left;
font-size: 80%;
}
footer-right {
float: right;
font-size: 80%;
}
important {
display:inline-block;
-moz-border-radius: 10px;
border-radius: 10px;
border:1px solid;
padding:1em;
border-color:red;
background-color:#FFFFCC;
}
cadre {
display:inline-block;
-moz-border-radius: 10px;
border-radius: 10px;
border:1px solid;
padding:1em;
border-color:black;
background-color:whitesmoke;
}
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;}
.deuxcolonnes {
vertical-align:top; display:block;
column-count:2;
-moz-column-count:2;
-webkit-column-count:2;
}
.troiscolonnes {
vertical-align:top; display:block;
column-count:3;
-moz-column-count:3;
-webkit-column-count:3;
}
html body.tw-body .dirtree, html body.tw-body .dirtree ul {
list-style-type: none;
background-image: url(data:image/gif;base64,R0lGODlhEAAQAIABAAAAAP///yH5BAEKAAEALAAAAAAQABAAAAIbRI6ppo3sGoxp0mNvpjt290nXMlblc2JpECoFADs=);
background-repeat: repeat-y;
margin: 0;
padding: 0;
}
html body.tw-body .dirtree ul {
margin-left: 16px;
}
html body.tw-body .dirtree li {
margin: 0;
padding: 0 16px 0 18px;
background-image: url(data:image/gif;base64,R0lGODlhEAAQAIABAAAAAP///yH5BAEKAAEALAAAAAAQABAAAAISjI+py+0Po5wM2IszoLz7DwYFADs=);
background-repeat: no-repeat;
line-height: 1.5;
}
html body.tw-body .dirtree li:last-child {
background-image: url(data:image/gif;base64,R0lGODlhEAAQAIABAAAAAP///yH5BAEKAAEALAAAAAAQABAAAAIaRI6ppo3sGoxp0mNvpjuCD4Zid5XmiabqWQAAOw==);
background-color: #fff;
}
<footer-right>
{{!!title||$:/_notes&more}}
<$button popup=<<tiddlerInfoState2>> class="btn-invisible" selectedClass="tw-selected">
<span title="Montrer">
<$reveal type="match" text="" default="" state=<<tiddlerInfoState2>>> ▼
</$reveal>
</span>
<span title="Cacher">
<$reveal type="nomatch" text="" default="" state=<<tiddlerInfoState2>>> ▲
</$reveal>
</span>
</$button>
</footer-right>
This is an example of a thesis notebook powered by [[TiddlyWiki|http://tiddlywiki.com/#TiddlyWiki]] <<version>>.
[[TiddlyWiki|http://tiddlywiki.com/static/TiddlyWiki.html]] is a great piece of software created by Jeremy Ruston. It allows you, among other things, to take notes, organize ideas, store information, and display all your stuff the way you want. It is an incredibly flexible tool you can adapt to fit almost all your needs.
This ~TiddlyWiki has been [[customized|About this TiddlyWiki]] to serve as a philosophy notebook centered around authors, books and papers, concepts and theories, and personal notes. I use it along with [[Zotero|http://www.zotero.org]], which is a dedicated bibliography software. Both are free, open source projects. ~TiddlyWiki can be downloaded at http://tiddlywiki.com.
I'd like to thank Eric Shulman, David Gifford, Stephan Hradek, Ton Gerner and the other community members who provide guides, tutorials and help through the [[discussion group|http://groups.google.com/group/TiddlyWiki]] and their own TWs ([[links here|http://tiddlywiki.com/static/Community.html]]).
For more information about this ~TiddlyWiki and the customizations I made, [[click here|About this TiddlyWiki]].
<<tabs>>
@@float:left;padding-right:1em;
<span title="Creative Commons License"><a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/"><img alt="Creative Commons License" style="border-width:0" src="http://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png" /></a></span>
@@
<small><span xmlns:dct="http://purl.org/dc/terms/" href="http://purl.org/dc/dcmitype/Text" property="dct:title" rel="dct:type">"Téléologie et fonctions biologiques" (the texts included in this ~TiddlyWiki, with the exception of quotes of other authors works)</span> by <a xmlns:cc="http://creativecommons.org/ns#" href="http://tesis.tiddlyspot.com" property="cc:attributionName" rel="cc:attributionURL">Alberto Molina Pérez</a> is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/">Creative Commons ~Attribution-NonCommercial-ShareAlike 4.0 International License</a>.
</small>
Esto es un ejemplo de cuaderno de apuntes de tesis realizado gracias a [[TiddlyWiki|http://tiddlywiki.com/#TiddlyWiki]] <<version>>.
[[TiddlyWiki|http://tiddlywiki.com/static/TiddlyWiki.html]] es un programa increible creado por Jeremy Ruston que permite, entre otras cosas, tomar apuntes, organizar ideas, recoger todo tipo de información y verlo todo del modo más conveniente. Es una herramienta extraordinariamente flexible y adaptable a todo tipo de necesidades.
Este ~TiddlyWiki a sido [[adaptado|Acerca de este TiddlyWiki]] para servir como cuaderno de apuntes de filosofía centrado en torno a autores, libros y artículos, conceptos y teorías, así como notas e ideas personales. Lo uso como complemento del programa de bibliografía [[Zotero|http://www.zotero.org]]. Ambos son programas gratuitos y de código abierto. ~TiddlyWiki se puede conseguir en esta dirección : http://tiddlywiki.com.
Quiero agradecer a Eric Shulman, David Gifford, Stephan Hradek, Ton Gerner y demás miembros de la communidad ~TiddlyWiki que escriben guías y tutoriales, y aportan su ayuda desinteresada a través del [[grupo de discusión|http://groups.google.com/group/TiddlyWiki]] y de sus propios TWs ([[ver aquí|http://tiddlywiki.com/static/Community.html]]).
Para más información acerca de este ~TiddlyWiki y las modificaciones que hice, [[ver aquí|Acerca de este TiddlyWiki]].
<<tabs>>
@@float:left;padding-right:1em;
<a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/deed.es_ES"><img alt="Licencia de Creative Commons" style="border-width:0" src="http://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png" /></a>
@@
<small><span xmlns:dct="http://purl.org/dc/terms/" href="http://purl.org/dc/dcmitype/Text" property="dct:title" rel="dct:type">"Téléologie et fonctions biologiques" (los textos de este ~TiddlyWiki)</span> by <a xmlns:cc="http://creativecommons.org/ns#" href="http://tesis.tiddlyspot.com" property="cc:attributionName" rel="cc:attributionURL">Alberto Molina Pérez</a> se pone a disposición bajo una licencia <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/deed.es_ES">Creative Commons ~Reconocimiento-NoComercial-CompartirIgual 4.0 Internacional License</a>.
</small>
Ceci est un exemple de carnet de notes de thèse réalisé grâce à [[TiddlyWiki|http://tiddlywiki.com/#TiddlyWiki]] <<version>>.
[[TiddlyWiki|http://tiddlywiki.com/static/TiddlyWiki.html]] est un logiciel fabuleux créé par Jeremy Ruston. Il permet, entre autres choses, de prendre des notes à la manière d’un wiki, de les organiser, de collecter toutes sortes d’informations et de les visualiser comme bon vous chante. C’est un outil incroyablement flexible et adaptable à pratiquement n’importe quelle nécessité.
Ce ~TiddlyWiki a été [[personnalisé|À propos de ce TiddlyWiki]] de manière à servir comme un carnet de notes de philosophie centré autour des auteurs, de leurs livres et articles, des concepts et des théories, et de mes notes et idées personnelles. Je l’utilise en complément du logiciel de bibliographie [[Zotero|http://www.zotero.org]]. Les deux sont des programmes gratuits et //open source//. ~TiddlyWiki est téléchargeable à l’adresse : http://tiddlywiki.com.
Je tiens à remercier Eric Shulman, David Gifford, Stephan Hradek, Ton Gerner et les autres membres de la communauté ~TiddlyWiki qui fournissent des guides, des tutoriels et apportent leur aide à travers le [[groupe de discussion|http://groups.google.com/group/TiddlyWiki]] et à travers leurs propres TWs ([[voir ici|http://tiddlywiki.com/static/Community.html]]).
<<tabs>>
@@float:left;padding-right:1em;
<a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/deed.fr"><img alt="Licence Creative Commons" style="border-width:0" src="http://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png" /></a>
@@
<small><span xmlns:dct="http://purl.org/dc/terms/" href="http://purl.org/dc/dcmitype/Text" property="dct:title" rel="dct:type">"Téléologie et fonctions biologiques" (les textes de ce ~TiddlyWiki)</span> de <a xmlns:cc="http://creativecommons.org/ns#" href="http://tesis.tiddlyspot.com" property="cc:attributionName" rel="cc:attributionURL">Alberto Molina Pérez</a> est mis à disposition selon les termes de la <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/deed.fr">licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International</a>.</small>
<<tabs "Dimensions Conceptions Définitions MaDéfinition [[Molina, A. (2014): Thèse]]" "Dimensions" 1>>
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/6XbVqxYQd26daPNmzdTcXExERGZzWb65ptvaM6cOSSXy8muyZCzszMBIJVKRQqFggAQy7Li/11cXAgAMQxDMpmMOI4jAOTm5kZvvPEGXbhwQdB1yWg00rp166hbt250+vRpsu+30k4uwKMeGdZxf//Qn5/0JZa2Nk4wytYnoz1ykTlE4DKBaDIyMigqKori4uLo9u3bpNfr6e7du/T6669Tt27diGEYkTgcN5ZlKSoqiqKjo0mpVJKnpycFBweTQqEguVwukoqweXh4EABSq9UEgOLj42nXrl3U0NBARER3796lP//5zzRp0iQC4IpHVSkAULUmxD/yJqVIEn531SChamP/Wy6kR5s2baI1a9Zg6dKlmD9/PiwWC9auXYsPP/wQNpsNVqsVarUaMTExuHHjBvr164f4+HiwLIurV69Cp9PBx8cHx48fR0xMDIYMGQKO4/D999+DiODr64tr167BZHq8n06lUsFoNMLFxQVDhgzBE088gVmzZsHV1RWFhYWYNGkS1q5di7Fjx/73aTTSr6S0/Q6iGIUQuTjcJrdvHABmxYoVFBAQQD/99BMREZ04cYL69+//WNTh7e1Nbm5uBID69u1Lw4YNo549e5Kvry8BII7jSC6Xk0wmIwCkVCoJAHl6epJcLqeIiAi6fv06vfnmm+Tt7U0Mw5CrqysBEB+jUqkIAAUGBtKhQ4fIZrORVqul+Ph4WrZsGQFwtu8/91/x2UlfYGlr6xqMg2bB/QLRqIcPH04DBw4U05NFixaJpCKkNt26dROvOzs7k1qtptdee40iIyMpJCSElEolMQxDL774InXt2pWmT59O8fHxv5hKAaBevXrRqlWraNiwYaRWq0kmk4n/Y1lWTMWWL19OWq2WiIi+/PJLGjNmDDkQplJKkSRIaBupEWMnG7G7NiMjg2bNmoUnnngCn332GX744QesXr0aeXl5sFgscHFxgY+PD4qLi9GjRw/0798f33zzDYKDg6FSqTBkyBB4enoiKysLt2/fRlNTE1paWmAymeDm5gaz2YyHDx/CxcUFjY2NCAgIgMFggEKhwMCBA3Hs2DEkJiaiX79+2L9/P9LT08EwDGw2GziOA8/zICL06dMHH330EeLj45GWloYPP/wQR48e5f7wFSSpTC3h96K5OFwyRET37t2jhIQEvP/++5g0aRL+8pe/4L333gPHcbBa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
<svg
class="tw-image-button"
viewBox="222 150 56 56"
width="22pt"
height="22pt">
<path
d="m 235.6721,196.39471 7.43683,7.43686 c 0.93346,0.93345 2.44693,0.93345 3.38039,0 l 0,0 c 0.93347,-0.93347 0.93347,-2.44693 0,-3.38038 l -7.43684,-7.43685 7.59265,-7.59265 c 0.93345,-0.93345 0.93345,-2.44691 0,-3.38038 -0.93347,-0.93345 -2.44693,-0.93345 -3.38038,0 l -7.59265,7.59265 -7.43685,-7.43684 0,0 c 0,0 0,0 0,0 -0.93345,-0.93347 -2.44691,-0.93347 -3.38038,0 l 0,0 c -0.93345,0.93345 -0.93345,2.44693 0,3.38039 l 7.43685,7.43683 -7.28104,7.28103 0,0 0,0 c 0,0 0,0 0,0 -0.93347,0.93346 -0.93347,2.44694 0,3.38039 l 0,0 c 0.93346,0.93347 2.44693,0.93347 3.38039,0 z"
/>
<path
d="m 264.72622,196.36066 7.43683,7.43686 c 0.93346,0.93345 2.44693,0.93345 3.38039,0 l 0,0 c 0.93347,-0.93347 0.93347,-2.44693 0,-3.38038 l -7.43684,-7.43685 7.59265,-7.59265 c 0.93345,-0.93345 0.93345,-2.44691 0,-3.38038 -0.93347,-0.93345 -2.44693,-0.93345 -3.38038,0 l -7.59265,7.59265 -7.43685,-7.43684 0,0 c 0,0 0,0 0,0 -0.93345,-0.93347 -2.44691,-0.93347 -3.38038,0 l 0,0 c -0.93345,0.93345 -0.93345,2.44693 0,3.38039 l 7.43686,7.43683 -7.28105,7.28103 0,0 0,0 c 0,0 0,0 0,0 -0.93347,0.93346 -0.93347,2.44694 0,3.38039 l 0,0 c 0.93346,0.93347 2.44693,0.93347 3.38039,0 z"
/>
<path
d="m 264.81304,166.60929 7.43683,7.43685 c 0.93346,0.93345 2.44693,0.93345 3.38039,0 l 0,0 c 0.93347,-0.93347 0.93347,-2.44693 0,-3.38038 l -7.43684,-7.43685 7.59265,-7.59265 c 0.93345,-0.93345 0.93345,-2.44691 0,-3.38038 -0.93347,-0.93345 -2.44693,-0.93345 -3.38038,0 l -7.59265,7.59265 -7.43685,-7.43684 0,0 c 0,0 0,0 0,0 -0.93345,-0.93347 -2.44691,-0.93347 -3.38038,0 l 0,0 c -0.93345,0.93345 -0.93345,2.44693 0,3.38039 l 7.43686,7.43683 -7.28105,7.28103 0,0 0,0 c 0,0 0,0 0,0 -0.93347,0.93346 -0.93347,2.44694 0,3.38039 l 0,0 c 0.93346,0.93347 2.44693,0.93347 3.38039,0 z"
/>
<path
d="m 12.688971,6.5714369 a 6.0560999,6.0560999 0 1 1 -12.11219974,0 6.0560999,6.0560999 0 1 1 12.11219974,0 z"
transform="matrix(1.9670995,0,0,1.9670995,222.20774,150.11958)" />
<path style="fill:#ffffff"
d="m 7.2508409,4.8823209 a 1.7715123,1.7715123 0 1 1 -3.5430245,0 1.7715123,1.7715123 0 1 1 3.5430245,0 z" transform="matrix(4.3375825,-0.06820159,0.06861286,4.3637397,211.17234,142.00444)" />
</svg>
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg viewBox="0 0 42 42" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" x="0px" y="0px" width="42px" height="42px">
<g>
<path opacity="0.4" d="M 15.7646 21 C 15.7646 21.0752 15.7474 21.1461 15.7432 21.2213 L 23.6256 25.1615 C 24.3003 24.59 25.1641 24.2334 26.1177 24.2334 C 28.262 24.2334 30 25.9715 30 28.1156 C 30 30.262 28.262 32 26.1177 32 C 23.9716 32 22.2357 30.262 22.2357 28.1156 C 22.2357 28.0383 22.2529 27.9695 22.2572 27.8943 L 14.3745 23.9541 C 13.6978 24.5234 12.8363 24.8801 11.8823 24.8801 C 9.7383 24.8801 8 23.1442 8 21 C 8 18.8538 9.7383 17.1156 11.8823 17.1156 C 12.8363 17.1156 13.6978 17.4744 14.3745 18.0438 L 22.2572 14.1035 C 22.2529 14.0281 22.2357 13.9575 22.2357 13.8801 C 22.2357 11.7381 23.9716 10 26.1177 10 C 28.262 10 30 11.7381 30 13.8801 C 30 16.0264 28.262 17.7645 26.1177 17.7645 C 25.1616 17.7645 24.3003 17.4056 23.6256 16.8342 L 15.7432 20.7766 C 15.7474 20.8517 15.7646 20.9226 15.7646 21 L 15.7646 21 Z" fill="#000000"/>
</g>
</svg>
<svg class="tw-image-fluid-width-button tw-image-button" viewBox="10 5 22 22" width="32" height="32">
<path d="M10.129,22.186 16.316,15.999 10.129,9.812 13.665,6.276 23.389,15.999 13.665,25.725z"/>
</svg>
<svg class="tw-image-button" viewBox="0 3 24 25" width="22pt" height="22pt"><path d="M20.834,8.037L9.641,14.5c-1.43,0.824-1.43,2.175,0,3l11.193,6.463c1.429,0.826,2.598,0.15,2.598-1.5V9.537C23.432,7.887,22.263,7.211,20.834,8.037z"/></svg>
iVBORw0KGgoAAAANSUhEUgAAACoAAAAqCAMAAADyHTlpAAAAM1BMVEVAAAD///9mZmaMjIyzs7PZ2dl5eXmWlpaDg4Pj4+P29vZwcHC8vLzQ0NCgoKDGxsapqamC5XZOAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfeAg8POgoIY+STAAAAsElEQVQ4y+WV3RLEEAyFNT/UWm3f/2mXoh2scmmm59YXkohDiGmk2elLUQqjDADmoJXQVI5yubymXUkWqAIgn8BnqYQFimB2Xv6qRq9zN6KdWXfRvBzEg8dQL5oVdfWPoqGz+hyFLYQ9o0m6k6u/dSLrr5inbpZr11m9upvWRjGV30clURjw6cflPWhtRAgwam/qgTRH7pnNXGsjtmYYdRYb3+naR/MwDiYvaZ4fSPwApUkKS3EFtvoAAAAASUVORK5CYII=
<svg class="tw-image-fluid-width-button tw-image-button" viewBox="10 5 22 22" width="32" height="32">
<path d="M21.871,9.814 15.684,16.001 21.871,22.188 18.335,25.725 8.612,16.001 18.335,6.276z"/>
</svg>
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg viewBox="0 0 42 42" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" x="0px" y="0px" width="42px" height="42px">
<g>
<path opacity="0.4" d="M 11.5005 25.6523 L 10 33 L 17.438 31.6201 L 30.0293 18.9639 L 24.0918 12.9956 L 11.5005 25.6523 ZM 25.3838 17.3643 L 14.3276 28.4766 L 13.0381 27.1816 L 24.0947 16.0684 L 25.3838 17.3643 ZM 34 14.9678 L 30.7988 18.1855 L 24.8613 12.2178 L 28.0625 9 L 34 14.9678 Z" fill="#000000"/>
</g>
</svg>
<svg class="tw-image-button" viewBox="0 3 24 25" width="22pt" height="22pt"><path d="M11.166,23.963L22.359,17.5c1.43-0.824,1.43-2.175,0-3L11.166,8.037c-1.429-0.826-2.598-0.15-2.598,1.5v12.926C8.568,24.113,9.737,24.789,11.166,23.963z"/></svg>
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg viewBox="0 0 42 42" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" x="0px" y="0px" width="42px" height="42px">
<g>
<path opacity="0.4" d="M 9 31 L 9 22.0101 L 15 16 L 17 21 L 23 16 L 25 21 L 31 16 L 33 21.8125 L 33 31 L 9 31 ZM 16 24 C 16 23.7589 15.2366 23 15 23 L 13 23 C 12.7635 23 12 23.7589 12 24 L 12 27 C 12 27.2413 12.7635 28 13 28 L 15 28 C 15.2366 28 16 27.2413 16 27 L 16 24 ZM 23 24 C 23 23.7589 22.2365 23 22 23 L 20 23 C 19.7634 23 19 23.7589 19 24 L 19 27 C 19 27.2413 19.7634 28 20 28 L 22 28 C 22.2365 28 23 27.2413 23 27 L 23 24 ZM 30 24 C 30 23.7589 29.2366 23 29 23 L 27 23 C 26.7634 23 26 23.7589 26 24 L 26 27 C 26 27.2414 26.7634 28 27 28 L 29 28 C 29.2366 28 30 27.2414 30 27 L 30 24 ZM 25 19 L 25 11 L 28 11 L 28 17 L 25 19 ZM 17 19 L 17 7 L 20 7 L 20 17 L 17 19 Z" fill="#000000"/>
</g>
</svg>
<div class="tw-leftmenu">
@@.titlebar
!!Menu
@@
{{LeftMenu}}
</div>
Tagging
<$list filter="[is[current]tagging[]]" template="$:/core/ui/ListItemTemplate"/>
Backlinks
<$list filter="[is[current]backlinks[]sort[title]]" template="$:/core/ui/ListItemTemplate">
</$list>
<$list filter="[is[current]field:catégorie/article|livre/]">
<$count filter="[field:catégorie/citation/source{!!title}]"/>
<$button message="tw-new-tiddler" class="btn-invisible" param="$:/_Template/Citation">cit., </$button>
</$list>
<$count filter="[field:catégorie/note/à_propos_de{!!title}!description[dimensions]]"/>/<$count filter="[field:catégorie/note/search{!!title}!title{!!title}!description[dimensions]] -[à_propos_de{!!title}!description[dimensions]]"/>
<$button message="tw-new-tiddler" class="btn-invisible" param="$:/_Template/Note">notes</$button>
<$list filter="[is[current]field:catégorie/conception/]">, <$count filter="[field:catégorie/contre-exemple/à_propos_de{!!title}]"/> contre-exemples</$list>
<$list filter="[ui[noTitle]]">
{{!!title}}
<$edit tiddler="…"/>
</$list>
\define ref(label)
<$button popup="$:/state/$label$" class="btn-invisible tw-slider"><sup style="color:green">$label$</sup></$button>
\end
\define definition(label,text)
<$reveal type="popup" state="$:/state/$label$" animate="yes">
<div class="tw-drop-down">
<dl>
<dt>$label$</dt>
<dd>$text$</dd>
</dl>
</div>
</$reveal>
\end
\define footnote(label,text)
<<ref "$label$">>
<<definition "$label$" "$text$">>
\end
\define footnotes(label,text)
<<definition "$label$" "$text$">>
<sub><span style="color:green">$label$ : </span> $text$</sub>
\end
.troiscolonnes {
vertical-align:top; display:block;
column-count:3;
-moz-column-count:3;
-webkit-column-count:3;
}
html .tw-images svg {
height: 0.3em;
}
/* DEFAULT: HIDDEN LEFT MENU */
html .tw-leftmenu {
display: none;
}
/* TOP MENU, FIXED IN POSITION */
html .tw-topmenu {
height : 25px; /* HEIGHT OF THE TOP MENU */
margin : 0;
position : fixed;
top : 0;
left : 0;
width : 100%; /* FULL WIDTH */
z-index : 99;
}
/* FLOAT RIGHT */
/* PUSHES THE TOGGLE WIDTH/SIDEBAR BUTTON TO THE RIGHT OF THE TOP MENU */
.floatright {
float : right;
}
<small>''<$count filter="[field:catégorie/citation/source{!!title}]" /> citations de ce texte - ''<$button message="tw-new-tiddler" class="btn-invisible" param="$:/_Template/Citation">Nouvelle citation</$button><br></small>
<$list filter="[field:catégorie/citation/source{!!title}nsort[pages]]">
<h2><$transclude field="description"/></h2>
<<<
<$transclude/>
<small>
@@text-align:right;
<$link to={{!!title}}>(p. <$view field="pages"/>)
</$link> {{!!title||$:/_notes&more}}
@@
</small>
<<<
<hr>
</$list>
<small>''<$count filter="[field:catégorie/contre-exemple/à_propos_de{!!title}]" /> contre-exemples - ''<$button message="tw-new-tiddler" class="btn-invisible" param="$:/_Template/Note">nouveau</$button><br></small>
<$list filter="[field:catégorie/contre-exemple/à_propos_de{!!title}sort[title]]">
<h2><$link to={{!!title}}><$transclude field="description"/></$link></h2>
<<<
<$transclude/>
<<<
<hr>
</$list>
<$list filter="[!is[system]description[dimensions]à_propos_de{!!title}]">
{{!!title||CadreDimensions}}
@@float:right;
<span title="Edit section">
<$button message="tw-edit-tiddler" class="btn-invisible">{{$:/core/images/edit-button}}</$button>
</span>
@@
<$transclude/>
{{!!title||$:/_footerCatégories}}
</$list>
<$button message="tw-new-tiddler" class="" param="$:/_Template/Dimensions">Créer</$button>
<div class="tw-menu-list-item">
Notes directes :
<div class="tw-menu-list-subitem">
<$list filter="[field:catégorie/note/à_propos_de{!!title}!description[dimensions]]" emptyMessage="aucune"/>
</div>
Autres notes :
<div class="tw-menu-list-subitem">
<$list filter="[field:catégorie/note/search{!!title}!title{!!title}!description[dimensions]] -[à_propos_de{!!title}!description[dimensions]!field:catégorie/dimensions/]" emptyMessage="aucune"/>
</div>
</div>
<$list filter="[field:catégorie/note/à_propos_de{!!title}!description[dimensions]!field:catégorie/dimensions/!field:catégorie/contre-exemple/]">
!!<$link to={{!!title}}><$transclude field="title"/></$link>
{{{[is[current]tags[]]||tag}}}
<<<
!!!''//<$view field="description"/>//''
<$transclude/>
<footer-right>{{!!title||$:/_notes&more}}</footer-right>
<<<
<br>
<hr>
</$list>
<$list filter="[field:catégorie/note/search{!!title}!title{!!title}!description[dimensions]!field:catégorie/contre-exemple/] -[à_propos_de{!!title}!description[dimensions]!field:catégorie/contre-exemple/]">
!!<$link to={{!!title}}><$transclude field="title"/></$link>
{{{[is[current]tags[]]||tag}}}
<<<
!!!''//<$view field="description"/>//''
<$transclude/>
<footer-right>{{!!title||$:/_notes&more}}</footer-right>
<<<
<br>
<hr>
</$list>
<$button message="tw-new-tiddler" class="" param="$:/_Template/Chapitre">Nouveau chapitre</$button>
<$button message="tw-new-tiddler" class="" param="$:/_Template/Section">Nouvelle section</$button>
<$list filter="[is[current]field:catégorie/article/]">
<image-right>
{{$:/_images/article.png}}
</image-right>
</$list>
<$list filter="[is[current]catégorie/livre/]">
<image-right>
{{$:/_images/livre.png}}
</image-right>
</$list>
<justify>
<$transclude/>
<$list filter="[is[current]text[]]">
{{LoremIpsum}}
</$list>
</justify>
<div class="tw-more-sidebar">
<<tabs "[is[shadow]!has[draft.of]tag[$:/_tags/SideBar/Menu]] [!is[shadow]!has[draft.of]tag[$:/_tags/SideBar/Menu]] +[tag[$:/_tags/SideBar/Menu]]" "$:/_ui/SideBar/Home/Auteurs" "$:/state/tab/menusidebar">>
</div>
!Dimensions
!! [[Temporelle|DimensionTemporelle]] : {{*T()||tag}}
!! [[Valorative|DimensionValorative]] : {{*V()||tag}}
!! [[Systémique|DimensionSystémique]] : {{*S()||tag}}
!! [[Contextuelle|DimensionContextuelle]]: {{*C()||tag}}
!Variables
!![[Portée|Portée (variable)]] : {{_||tag}}
!![[Nature|Nature (variable)]] : {{_||tag}}
!![[Caractère|Caractère (variable)]] : {{_||tag}}
!![[Explication|Explication (variable)]] : {{_E()||tag}}
!![[Artefacts|Artefacts (variable)]] : {{_A()||tag}}
<span title="Toggle left sidebar"><$fieldmangler tiddler="$:/_top-toggle-left-sidebar-button"><$list filter="[[$:/_top-toggle-left-sidebar-button]tag[$:/tags/stylesheet]]"><$button message="tw-remove-tag" param="$:/tags/stylesheet" class="btn-invisible">{{$:/_images/left-arrow-button}}
</$button></$list>
<$list filter="[[$:/_top-toggle-left-sidebar-button]!tag[$:/tags/stylesheet]]"><$button message="tw-add-tag" param="$:/tags/stylesheet" class="btn-invisible">{{$:/_images/right-arrow-button}}
</$button></$list>
</$fieldmangler>
</span>
@@display:none;
/* STORY-RIVER */
.story-river {
left: 250px; /* default 0px */
}
/* SIDEBAR */
.sidebar-header {
left: 1020px; /* default 770px */
}
/* LEFT MENU, FIXED IN POSITION */
html .tw-leftmenu {
display: block;
font-size: 0.9em;
margin: 0;
padding: 20px 0px 20px 20px;
position: fixed;
top: 47px; /* adjust for aligning Menu title, tiddler title, Wiki title */
left: 0;
width: 285px; /* width of the left menu (35px extra) */
z-index: 99;
}
@@
\define filter_tags()
<$list filter="[tags[]prefix{$:/temp/search}]"><$transclude tiddler="$:/core/ui/TagTemplate"/></$list>
\end
\define filter_prefix()
<$list filter="[prefix{$:/temp/search}] -[tags[]prefix{$:/temp/search}]" template="$:/core/ui/ListItemTemplate"/>
\end
\define filter_title2()
<$list filter="[!is[system]field:title/$(titre)$/(i)] -[prefix{$:/temp/search}]" template="$:/core/ui/ListItemTemplate"/>
\end
\define filter_title1()
<$set name="titre" value={{$:/temp/search}}>
<<filter_title2>>
</$set>
\end
\define filter_others()
<$list filter="[!is[system]search{$:/temp/search}] -[prefix{$:/temp/search}] +[sort[title]limit[250]]" template="$:/core/ui/ListItemTemplate"/>
\end
<div class="tw-search"><$edit-text tiddler="$:/temp/search" type="search" tag="input"/> <$reveal state="$:/temp/search" type="nomatch" text=""><$linkcatcher to="$:/temp/search"><$link to="" class="btn-invisible">{{$:/core/images/close-button}}</$link></$linkcatcher></$reveal><$reveal state="$:/temp/search" type="match" text=""> <$link to="$:/AdvancedSearch" class="btn-invisible">…</$link></$reveal></div>
<$reveal state="$:/temp/search" type="nomatch" text="">
<div class="tw-search-results">
{{$:/language/Search/Matches}}
<$list filter="[tags[]prefix{$:/temp/search}limit[1]]">
//Étiquettes ://
<br>
<<filter_tags>>
<br>
</$list>
<$list filter="[prefix{$:/temp/search}] -[tags[]prefix{$:/temp/search}] +[limit[1]]">
//Tiddlers ://
<div class="tw-menu-list-subitem">
<<filter_prefix>>
</div>
</$list>
<div class="tw-menu-list-subitem">
<<filter_title1>>
</div>
<$list filter="[!is[system]search{$:/temp/search}] -[prefix{$:/temp/search}] +[limit[1]]">//Autres résultats//<br>
<div class="tw-menu-list-subitem">
<<filter_others>>
</div>
</$list>
</div>
</$reveal>
<footer-right><$button message="tw-new-tiddler" class="btn-invisible" param="$:/_Template/Auteur">{{$:/_images/auteur.png}}</$button></footer-right> ''<small><$count filter="[catégorie[auteur]!title[$:/_Template/Auteur]sort[nom]]"/> auteurs</small>''<br>
<$list filter="[catégorie[auteur]!title[$:/_Template/Auteur]sort[nom]]"><$link to={{!!title}}><$view field="nom"/></$link><br>
</$list>
<small>
''<$count filter="[catégorie[concept]!title[$:/_Template/Concept]]"/> concepts'' – <$button message="tw-new-tiddler" class="btn-invisible" param="$:/_Template/Concept">Nouveau concept</$button>
<br>
</small>
<$list filter="[catégorie[concept]!title[$:/_Template/Concept]sort[title]]" param="$:/core/ui/ListItemTemplate"/>
<$button message="tw-new-tiddler" class="btn-invisible" param="$:/_Template/Auteur">{{$:/_images/auteur.png}}</$button>
<$button message="tw-new-tiddler" class="btn-invisible" param="$:/_Template/Livre">{{$:/_images/livre.png}}</$button>
<$button message="tw-new-tiddler" class="btn-invisible" param="$:/_Template/Article">{{$:/_images/article.png}}</$button>
<$button message="tw-new-tiddler" class="btn-invisible" param="$:/_Template/Concept">{{$:/_images/concept.svg}}</$button>
<$button message="tw-new-tiddler" class="btn-invisible" param="$:/_Template/Théorie">{{$:/_images/théorie.svg}}</$button>
<$button message="tw-new-tiddler" class="btn-invisible" param="$:/_Template/Note">{{$:/_images/note.svg}}</$button>
<small><$count filter="[!is[system]tag[.définition]tag[Fonctions]] [!is[system]tag[.définition]tag[Téléologie]] +[sort[source]each[source]]"/> définitions</small>
<$list filter="[!is[system]tag[.définition]tag[Fonctions]] [!is[system]tag[.définition]tag[Téléologie]] +[sort[source]each[source]]"><$link to={{!!source}}><$view field="source"/></$link><br></$list>
<small>''<$count filter="[!is[system]field:catégorie/note/]"/> notes'' – <$button message="tw-new-tiddler" class="btn-invisible" param="$:/_Template/Note">Nouvelle note</$button><br></small>
<$list filter="[!is[system]field:catégorie/note/sort[title]]" param="$:/core/ui/ListItemTemplate"/>
<small>''<$count filter="[field:catégorie/article|livre/!is[system]]"/> publications'' – <$button message="tw-new-tiddler" class="btn-invisible" param="$:/_Template/Article">Nouvel article – </$button> <$button message="tw-new-tiddler" class="btn-invisible" param="$:/_Template/Livre">Nouveau livre</$button><br></small>
<$list filter="[field:catégorie/article|livre/sort[title]] -[[$:/_Template/Article]] -[[$:/_Template/Livre]]"/>
<small>
''<$count filter="[catégorie[théorie]!title[ThéorieTemplate]sort[title]]"/> théories'' –
<$button message="tw-new-tiddler" class="btn-invisible" param="ThéorieTemplate">nouvelle théorie</$button>
</small>
<$list filter="[catégorie[théorie]!title[ThéorieTemplate]sort[title]]" param="$:/core/ui/ListItemTemplate"/>
<div class="tw-sidebar-lists">
{{$:/_ui/SearchBox}}
<$reveal state="$:/temp/search" type="match" text="">
<<tabs "[is[shadow]!has[draft.of]tag[$:/tags/SideBar]] [!is[shadow]!has[draft.of]tag[$:/tags/SideBar]] +[tag[$:/tags/SideBar]]" "$:/core/ui/SideBar/Open" "$:/state/tab/sidebar">>
</$reveal>
</div>
<$list filter="[is[current]!field:catégorie/conception/]">
<<tabs "$:/_tab/citations $:/_tab/notes" "$:/_tab/citations">>
</$list>
<$list filter="[is[current]field:catégorie/conception/]">
<<tabs "$:/_tab/dimensions $:/_tab/citations $:/_tab/notes $:/_tab/contre-exemples" "$:/_tab/dimensions">>
</$list>
<<tabs "[tag[auteur]]" "$:/_tab/notes">>
<div class="tw-tiddler-title">
<$reveal type="nomatch" text="" default="" state=<<tiddlerInfoState2>> class="tw-tiddler-info tw-popup" animate="yes">
<$transclude tiddler="$:/core/ui/TiddlerInfo"/>
</$reveal></div>
<<tabs "[tag[citation]]" "$:/_tab/notes">>
<<tabs "[tag[concept]]" "$:/_tab/notes">>
<$list filter="[is[current]!field:catégorie/conception/]">
<<tabs "$:/_tab/citations $:/_tab/notes" "$:/_tab/citations">>
</$list>
<$list filter="[is[current]field:catégorie/conception/]">
<<tabs "$:/_tab/dimensions $:/_tab/citations $:/_tab/notes $:/_tab/contre-exemples" "$:/_tab/dimensions">>
</$list>
<<tabs "[tag[note]]" "$:/_tab/notes">>
<<tabs "[tag[théorie]]" "$:/_tab/notes">>
<span title="Toggle fluid width"><$fieldmangler tiddler="$:/_ui/Toggle-fluid-width-button"><$list filter="[[$:/_ui/Toggle-fluid-width-button]tag[$:/tags/stylesheet]]"><$button message="tw-remove-tag" param="$:/tags/stylesheet" class="btn-invisible">{{$:/_images/non-fluid-width-button}}</$button></$list><$list filter="[[$:/_ui/Toggle-fluid-width-button]!tag[$:/tags/stylesheet]]"><$button message="tw-add-tag" param="$:/tags/stylesheet" class="btn-invisible">{{$:/_images/fluid-width-button}}</$button></$list></$fieldmangler></span>
@@display: none;
.story-river {
position: absolute;
width: calc(100% - 20em);
}
.tw-tiddler-frame {
width: 100%;
}
.sidebar-header {
float: right;
width: 20em;
left: auto;
padding: 70px 0 0 0;
}
@@
<div class="tw-page-controls tw-topmenu">{{$:/_top-toggle-left-sidebar-button}}{{$:/_top-toggle-width-sidebar-button}}</div>
<div class="body">
<$list filter="[is[current]!field:catégorie/auteur|article|livre|chapitre|citation|concept|théorie|note/]">
<$transclude />
</$list>
</div>
<$list filter="[is[current]field:catégorie/article/]">
@@float:right;
<small>
Auteur: <$list filter="[catégorie[auteur]!title[$:/_Template/Auteur]nom{!!auteur}]"><$link><$view field="nom_alt"/></$link></$list><$list filter="[catégorie[auteur]!title[$:/_Template/Auteur]nom{!!auteur2}]">; <$link><$view field="nom_alt"/></$link></$list><$list filter="[catégorie[auteur]!title[$:/_Template/Auteur]nom{!!auteur3}]">; <$link><$view field="title"/></$link></$list><$list filter="[catégorie[auteur]!title[$:/_Template/Auteur]nom{!!auteur4}]">; <$link><$view field="title"/></$link></$list>
</small>
@@
<<tabs "$:/_tab/résumé [catégorie[section]source{!!title}sort[title]] $:/_tab/nouvelleSection" "$:/_tab/résumé">>
{{!!title||$:/_footerCatégories}}
<div class="tw-tiddler-title">
<$reveal type="nomatch" text="" default="" state=<<tiddlerInfoState2>> class="tw-tiddler-info tw-popup" animate="yes">
<$transclude tiddler="$:/_ui/TiddlerInfo/article"/>
</$reveal>
</div>
</$list>
<$list filter="[is[current]catégorie[auteur]!is[system]]">
<div class="body">
<image-right>{{$:/_images/auteur.png}}</image-right>
<justify>
<$transclude/>
</justify>
<small>
<hr>
''<$count filter="+[field:catégorie/article|livre/] [auteur{!!nom}] [auteur2{!!nom}] [auteur3{!!nom}] [auteur4{!!nom}]" /> publications'' — <$button message="tw-new-tiddler" class="btn-invisible" param="$:/_Template/Livre">nouveau livre</$button><$button message="tw-new-tiddler" class="btn-invisible" param="$:/_Template/Article">, nouvel article</$button><br>
</small>
<$list filter="+[field:catégorie/article/] [auteur{!!nom}] [auteur2{!!nom}] [auteur3{!!nom}] [auteur4{!!nom}] +[sort[title]]" template="list"/>
{{!!title||$:/_footerCatégories}}
</div>
<div class="tw-tiddler-title">
<$reveal type="nomatch" text="" default="" state=<<tiddlerInfoState2>> class="tw-tiddler-info tw-popup" animate="yes">
<$transclude tiddler="$:/_ui/TiddlerInfo/auteur"/>
</$reveal>
</div>
</$list>
<$list filter="[is[current]!is[system]field:catégorie/chapitre/]">
<small>
Livre: <$link to={{!!source}}><$view field="source"/></$link>
</small>
<$transclude/>
<br>
{{!!title||$:/_footerCatégories}}
</$list>
<$list filter="[is[current]field:catégorie/citation/]">
<div class="body">
!!<$transclude field="description"/>
<<<
<$transclude/>
<<< <$link to={{!!source}}><$view field="source"/></$link>
{{!!title||$:/_footerCatégories}}
</div>
<div class="tw-tiddler-title">
<$reveal type="nomatch" text="" default="" state=<<tiddlerInfoState2>> class="tw-tiddler-info tw-popup" animate="yes">
<$transclude tiddler="$:/_ui/TiddlerInfo/citation"/>
</$reveal>
</div>
</$list>
<$list filter="[is[current]catégorie[concept]!is[system]]">
<$list filter="[is[current]!text[]]"><image-right>{{$:/_images/concept.svg}}</image-right></$list>
<div class="body">
<$transclude/>
{{!!title||$:/_footerCatégories}}
</div>
<div class="tw-tiddler-title">
<$reveal type="nomatch" text="" default="" state=<<tiddlerInfoState2>> class="tw-tiddler-info tw-popup" animate="yes">
<$transclude tiddler="$:/_ui/TiddlerInfo/citation"/>
</$reveal></div>
</$list>
<$list filter="[is[current]field:catégorie/livre/]">
<footer-right>
Auteur: <$list filter="[catégorie[auteur]!title[$:/_Template/Auteur]nom{!!auteur}]"><$link><$view field="nom_alt"/></$link></$list><$list filter="[catégorie[auteur]!title[$:/_Template/Auteur]nom{!!auteur2}]">; <$link><$view field="nom"/></$link></$list><$list filter="[catégorie[auteur]!title[$:/_Template/Auteur]nom{!!auteur3}]">; <$link><$view field="title"/></$link></$list><$list filter="[catégorie[auteur]!title[$:/_Template/Auteur]nom{!!auteur4}]">; <$link><$view field="title"/></$link></$list>
</footer-right>
<<tabs "$:/_tab/résumé [catégorie[chapitre]source{!!title}nsort[numéro]] $:/_tab/nouveauChapitre" "$:/_tab/résumé">>
{{!!title||$:/_footerCatégories}}
<div class="tw-tiddler-title">
<$reveal type="nomatch" text="" default="" state=<<tiddlerInfoState2>> class="tw-tiddler-info tw-popup" animate="yes">
<$transclude tiddler="$:/_ui/TiddlerInfo/livre"/>
</$reveal>
</div>
</$list>
<$list filter="[is[current]field:catégorie/note/]">
<$list filter="[is[current]!text[]]"><image-right>{{$:/_images/note.svg}}</image-right></$list>
<div class="body">
<small>
<$list filter="[is[current]has[à_propos_de]!à_propos_de[]]">
À propos de : <$link to={{!!à_propos_de}}><$view field="à_propos_de"/></$link>
<$list filter="[is[current]has[source]!source[]]"> – Auteur : <$link to={{!!source}}><$view field="source"/></$link>
</$list>
</$list>
</small>
<$list filter="[is[current]!description[]!description[dimensions]!field:catégorie/contre-exemple/]">
!!{{!!description}}
</$list>
<$transclude/>
{{!!title||$:/_footerCatégories}}
</div>
<div class="tw-tiddler-title">
<$reveal type="nomatch" text="" default="" state=<<tiddlerInfoState2>> class="tw-tiddler-info tw-popup" animate="yes">
<$transclude tiddler="$:/_ui/TiddlerInfo/citation"/>
</$reveal>
</div>
</$list>
<$list filter="[is[current]catégorie[théorie]!is[system]]">
<$list filter="[is[current]!text[]]"><image-right>{{$:/_images/théorie.svg}}</image-right></$list>
<div class="body">
<$transclude/>
{{!!title||$:/_footerCatégories}}
</div>
<div class="tw-tiddler-title">
<$reveal type="nomatch" text="" default="" state=<<tiddlerInfoState2>> class="tw-tiddler-info tw-popup" animate="yes">
<$transclude tiddler="$:/_ui/TiddlerInfo/citation"/>
</$reveal></div>
</$list>
\define title-styles()
fill:$(foregroundColor)$;
\end
<div class="tw-tiddler-title"><div class="titlebar"><span class="tw-tiddler-controls"><$list filter="[is[shadow]!has[draft.of]tag[$:/tags/ViewToolbar]] [!is[shadow]!has[draft.of]tag[$:/tags/ViewToolbar]] +[tag[$:/tags/ViewToolbar]]" variable="listItem"><$transclude tiddler=<<listItem>>/></$list>
</span><$set name="foregroundColor" value={{!!color}}><span style=<<title-styles>>><$transclude tiddler={{!!icon}}/></span></$set> <span class="title"><$view field="title"/></span></div>
<$reveal type="nomatch" text="" default="" state=<<tiddlerInfoState>> class="tw-tiddler-info tw-popup" animate="yes">
<$transclude tiddler="$:/core/ui/TiddlerInfo"/>
</$reveal></div>
{
"tiddlers": {
"$:/config/EditorTypeMappings/image/gif": {
"title": "$:/config/EditorTypeMappings/image/gif",
"text": "bitmap"
},
"$:/config/EditorTypeMappings/image/jpeg": {
"title": "$:/config/EditorTypeMappings/image/jpeg",
"text": "bitmap"
},
"$:/config/EditorTypeMappings/image/jpg": {
"title": "$:/config/EditorTypeMappings/image/jpg",
"text": "bitmap"
},
"$:/config/EditorTypeMappings/image/png": {
"title": "$:/config/EditorTypeMappings/image/png",
"text": "bitmap"
},
"$:/config/EditorTypeMappings/image/x-icon": {
"title": "$:/config/EditorTypeMappings/image/x-icon",
"text": "bitmap"
},
"$:/config/EditorTypeMappings/text/vnd.tiddlywiki": {
"title": "$:/config/EditorTypeMappings/text/vnd.tiddlywiki",
"text": "text"
},
"$:/core/copyright.txt": {
"title": "$:/core/copyright.txt",
"type": "text/plain",
"text": "TiddlyWiki created by Jeremy Ruston, (jeremy [at] jermolene [dot] com)\n\nCopyright © Jeremy Ruston 2004-2007\nCopyright © UnaMesa Association 2007-2014\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\nRedistributions of source code must retain the above copyright notice, this\nlist of conditions and the following disclaimer.\n\nRedistributions in binary form must reproduce the above copyright notice, this\nlist of conditions and the following disclaimer in the documentation and/or other\nmaterials provided with the distribution.\n\nNeither the name of the UnaMesa Association nor the names of its contributors may be\nused to endorse or promote products derived from this software without specific\nprior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' AND ANY\nEXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\nOF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT\nSHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\nTO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR\nBUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n"
},
"$:/core/images/cancel-button": {
"title": "$:/core/images/cancel-button",
"text": "<svg class=\"tw-image-cancel-button tw-image-button\" viewBox=\"366 150 58 58\" width=\"22pt\" height=\"22pt\"><path d=\"M 414.76236 158.98764 C 403.77887 148.0041 385.97113 148.0041 374.98764 158.98764 C 364.0041 169.97113 364.0041 187.77887 374.98764 198.76236 C 385.97113 209.7459 403.77887 209.7459 414.76236 198.76236 C 425.7459 187.77887 425.7459 169.97113 414.76236 158.98764 M 385.3967 165.32954 L 385.3967 165.32954 L 394.77674 174.7096 L 404.3533 165.13303 C 405.53068 163.95566 407.4396 163.95566 408.61697 165.13303 C 409.79434 166.31041 409.79434 168.21932 408.61697 169.39669 L 399.0404 178.97325 L 408.42046 188.35331 C 409.59783 189.53068 409.59783 191.43959 408.42046 192.61697 L 408.42046 192.61697 C 407.24308 193.79434 405.33417 193.79434 404.1568 192.61697 L 394.77675 183.23692 L 385.5932 192.42046 C 384.41583 193.59783 382.50692 193.59783 381.32954 192.42046 L 381.32954 192.42046 C 380.15217 191.24308 380.15217 189.33417 381.32954 188.1568 C 381.32954 188.1568 381.32954 188.1568 381.32954 188.1568 L 381.32954 188.1568 L 381.32954 188.1568 L 390.51309 178.97326 L 381.13303 169.5932 C 379.95566 168.41583 379.95566 166.50692 381.13303 165.32954 L 381.13303 165.32954 C 382.3104 164.15217 384.21932 164.15217 385.3967 165.32954 C 385.3967 165.32954 385.3967 165.32954 385.3967 165.32954 Z\"/></svg>"
},
"$:/core/images/close-button": {
"title": "$:/core/images/close-button",
"text": "<svg class=\"tw-image-close-button tw-image-button\" viewBox=\"222 150 56 56\" width=\"22pt\" height=\"22pt\"><path d=\"M 249.56668 185.88827 L 267.06757 203.38916 C 269.26427 205.58586 272.82582 205.58586 275.02252 203.38916 L 275.02252 203.38916 C 277.21922 201.19246 277.21922 197.63091 275.02252 195.43421 L 257.52163 177.93332 L 275.38916 160.06579 C 277.58586 157.86909 277.58586 154.30754 275.38916 152.11084 C 273.19246 149.91414 269.63091 149.91414 267.43421 152.11084 L 249.56668 169.97837 L 232.06579 152.47748 L 232.06579 152.47748 C 232.06579 152.47748 232.06579 152.47748 232.06579 152.47748 C 229.86909 150.28078 226.30754 150.28078 224.11084 152.47748 L 224.11084 152.47748 C 221.91414 154.674175 221.91414 158.23573 224.11084 160.43243 L 241.61173 177.93332 L 224.47748 195.06757 L 224.47748 195.06757 L 224.47748 195.06757 C 224.47748 195.06757 224.47748 195.06757 224.47748 195.06757 C 222.28078 197.26427 222.28078 200.82583 224.47748 203.02252 L 224.47748 203.02252 C 226.67418 205.21922 230.23573 205.21922 232.43243 203.02252 Z\"/></svg>\n"
},
"$:/core/images/delete-button": {
"title": "$:/core/images/delete-button",
"text": "<svg class=\"tw-image-delete-button tw-image-button\" viewBox=\"303 155 39 50\" width=\"17pt\" height=\"22pt\"><path d=\"M 333 164.25 L 333 157.25 C 333 156.14543 332.10457 155.25 331 155.25 L 314.75 155.25 C 314.75 155.25 314.75 155.25 314.75 155.25 C 313.64543 155.25 312.75 156.14543 312.75 157.25 L 312.75 164.25 L 303.75 164.25 L 303.75 168.75 L 306 168.75 L 306 201.75 L 306 201.75 L 306 201.75 C 306 203.40685 307.34315 204.75 309 204.75 L 336.75 204.75 C 338.40685 204.75 339.75 203.40685 339.75 201.75 L 339.75 168.75 L 342 168.75 L 342 164.25 Z M 317.25 160.75 L 317.25 160.75 C 317.25 160.19772 317.69772 159.75 318.25 159.75 C 318.25 159.75 318.25 159.75 318.25 159.75 L 327.5 159.75 C 328.05228 159.75 328.5 160.19772 328.5 160.75 L 328.5 164.25 L 317.25 164.25 L 317.25 160.75 Z M 310.5 168.75 L 312.75 168.75 L 312.75 200.25 L 310.5 200.25 Z M 317.25 168.75 L 319.5 168.75 L 319.5 200.25 L 317.25 200.25 Z M 324 168.75 L 326.25 168.75 L 326.25 200.25 L 324 200.25 Z M 330.75 168.75 L 333 168.75 L 333 200.25 L 330.75 200.25 Z\"/></svg>\n"
},
"$:/core/images/done-button": {
"title": "$:/core/images/done-button",
"text": "<svg class=\"tw-image-done-button tw-image-button\" viewBox=\"434 150 68 55\" width=\"22pt\" height=\"18pt\"><path d=\"M 438.49266 178.00797 L 439.00744 177.49319 C 441.35054 175.15008 445.14946 175.15004 447.49262 177.49309 L 452.50734 182.50757 C 454.8505 184.85063 458.6494 184.85058 460.99252 182.50748 L 488.50747 154.99255 C 490.85058 152.64944 494.6495 152.6494 496.99266 154.99246 L 497.50722 155.506995 C 499.8504 157.85009 499.8505 161.64908 497.5074 163.99228 C 497.50738 163.99229 497.50736 163.99231 497.50734 163.99233 L 460.9926 200.5077 C 458.64947 202.85087 454.85048 202.8509 452.50732 200.50778 C 452.5073 200.50777 452.5073 200.50777 452.5073 200.50776 L 438.49268 186.49327 C 436.14952 184.15013 436.1495 180.35114 438.49264 178.00799 C 438.49265 178.00798 438.49265 178.00797 438.49266 178.00797 Z\"/></svg>\n"
},
"$:/core/images/down-arrow": {
"title": "$:/core/images/down-arrow",
"text": "<svg class=\"tw-image-down-arrow tw-image-button\" viewBox=\"441 306 59 45\" width=\"24pt\" height=\"22pt\"><path d=\"M 441 306 L 470.25 351 L 499.5 306 Z\"/></svg>\n"
},
"$:/core/images/edit-button": {
"title": "$:/core/images/edit-button",
"text": "<svg class=\"tw-image-edit-button tw-image-button\" viewBox=\"244 193 20 22\" width=\"20pt\" height=\"22pt\"><path d=\"M 257.33334 196.80951 L 245.90476 207.2857 L 244 212.0476 L 248.7619 210.14284 L 260.19048 199.66665 Z M 259.2381 194.90475 L 258.28566 195.85716 L 261.14284 198.71428 L 262.09522 197.76187 Z M 261.14286 193 L 260.19042 193.95241 L 263.04762 196.80953 L 264 195.85714 Z M 244 213.72882 C 244 213.72882 247.4281 215.43353 250.8572 213.7288 C 254.28599 212.02405 261.14284 214.86531 261.14284 214.86531 L 261.14284 213.72884 C 261.14284 213.72884 254.28577 210.88755 250.8572 212.5923 C 247.42858 214.29712 244 212.59228 244 212.59228 Z\"/></svg>\n"
},
"$:/core/images/info-button": {
"title": "$:/core/images/info-button",
"text": "<svg class=\"tw-image-info-button tw-image-button\" viewBox=\"294 150 58 58\" width=\"22pt\" height=\"22pt\"><path d=\"M 342.76236 158.98764 C 331.77887 148.0041 313.97113 148.0041 302.98764 158.98764 C 292.0041 169.97113 292.0041 187.77887 302.98764 198.76236 C 313.97113 209.7459 331.77887 209.7459 342.76236 198.76236 C 353.7459 187.77887 353.7459 169.97113 342.76236 158.98764 M 326.5425 157.5 L 326.5425 157.5 C 327.72545 157.5 328.72201 157.91022 329.5337 158.73088 C 330.34465 159.55157 330.75 160.54402 330.75 161.7075 C 330.75 162.87172 330.33979 163.86316 329.51911 164.68385 C 328.69842 165.5045 327.70674 165.91501 326.5425 165.91501 C 325.39801 165.91501 324.4153 165.5045 323.5946 164.68385 C 322.77393 163.86316 322.36372 162.87172 322.36372 161.7075 C 322.36372 160.54402 322.76906 159.55157 323.58 158.73088 C 324.39171 157.91022 325.3793 157.5 326.5425 157.5 Z M 327.80211 190.47259 C 324.91945 195.49132 321.85778 198 318.61462 198 C 317.37452 198 316.38691 197.65158 315.65186 196.9555 C 314.9176 196.25866 314.54943 195.37617 314.54943 194.30782 C 314.54943 193.60202 314.71223 192.70572 315.03629 191.61813 L 319.0151 177.93651 C 319.39685 176.61922 319.58735 175.62754 319.58735 174.95991 C 319.58735 174.53996 319.40582 174.16692 319.04356 173.84286 C 318.68052 173.51905 318.18469 173.35701 317.55527 173.35701 C 317.26861 173.35701 316.92506 173.36677 316.5246 173.38548 L 316.89661 172.2407 L 326.59967 170.66627 L 328.31744 170.66627 L 322.44986 191.01638 C 322.12503 192.18064 321.963 192.94337 321.963 193.30666 C 321.963 193.51588 322.04862 193.71121 322.2204 193.89273 C 322.39218 194.07425 322.5737 194.16554 322.7642 194.16477 C 323.08903 194.16554 323.4131 194.02221 323.73792 193.73559 C 324.59605 193.02976 325.6267 191.75142 326.82838 189.90008 Z\"/></svg>\n"
},
"$:/core/images/new-button": {
"title": "$:/core/images/new-button",
"text": "<svg class=\"tw-image-new-button tw-image-button\" viewBox=\"83 81 50 50\" width=\"22pt\" height=\"22pt\"><path d=\"M 101.25 112.5 L 101.25 127.5 C 101.25 127.5 101.25 127.5 101.25 127.5 L 101.25 127.5 C 101.25 129.156855 102.593146 130.5 104.25 130.5 L 111.75 130.5 C 113.406854 130.5 114.75 129.156854 114.75 127.5 L 114.75 112.5 L 129.75 112.5 C 131.406854 112.5 132.75 111.156854 132.75 109.5 L 132.75 102 C 132.75 100.343146 131.406854 99 129.75 99 L 114.75 99 L 114.75 84 C 114.75 82.343146 113.406854 81 111.75 81 L 104.25 81 C 104.25 81 104.25 81 104.25 81 C 102.593146 81 101.25 82.343146 101.25 84 L 101.25 99 L 86.25 99 C 86.25 99 86.25 99 86.25 99 C 84.593146 99 83.25 100.343146 83.25 102 L 83.25 109.5 C 83.25 109.5 83.25 109.5 83.25 109.5 L 83.25 109.5 C 83.25 111.156855 84.593146 112.5 86.25 112.5 Z\"/></svg>\n"
},
"$:/core/images/options-button": {
"title": "$:/core/images/options-button",
"text": "<svg class=\"tw-image-options-button tw-image-button\" viewBox=\"434 218 68 68\" width=\"22pt\" height=\"22pt\"><path d=\"M 478.39696 232.53705 L 478.39696 232.53705 C 477.11453 231.85132 475.77877 231.30146 474.4106 230.88735 L 474.4106 218.24993 L 461.58944 218.24993 L 461.58944 230.88735 C 460.22126 231.30146 458.8855 231.85132 457.60308 232.53705 L 448.66825 223.60214 L 439.6022 232.66814 L 448.53716 241.60304 C 447.8515 242.88541 447.30158 244.22116 446.88747 245.58935 L 434.25 245.58935 L 434.25 258.41052 L 446.88747 258.41052 C 447.30158 259.7787 447.8515 261.11446 448.53716 262.39689 L 439.6022 271.33173 L 448.66825 280.39779 L 457.60308 271.46281 C 458.8855 272.14862 460.22126 272.69847 461.58944 273.11251 L 461.58944 285.74986 L 474.4106 285.74986 L 474.4106 273.11251 C 475.77877 272.69847 477.11453 272.14862 478.39696 271.46281 L 487.3318 280.39779 L 496.3977 271.33173 L 487.46287 262.39689 C 488.14854 261.11446 488.6984 259.7787 489.11257 258.41052 L 501.7499 258.41052 L 501.7499 245.58935 L 489.11257 245.58935 C 488.6984 244.22116 488.14854 242.88541 487.46287 241.60304 L 496.3977 232.66814 L 487.3318 223.60214 Z M 475.3328 244.66714 C 479.38253 248.71698 479.38253 255.2829 475.3328 259.33273 C 471.28297 263.3826 464.71706 263.3826 460.66723 259.33273 C 456.61737 255.2829 456.61737 248.71698 460.66723 244.66714 C 464.71706 240.61734 471.28297 240.61734 475.3328 244.66714\"/></svg>\n"
},
"$:/core/images/save-button": {
"title": "$:/core/images/save-button",
"text": "<svg class=\"tw-image-save-button tw-image-button\" viewBox=\"4 512 64 60\" width=\"22pt\" height=\"21pt\"><path d=\"M 13.5 537.75 L 11.5 537.75 C 11.5 537.75 11.5 537.75 11.5 537.75 C 7.6340064 537.75 4.4999994 540.884 4.5 544.75 L 4.5 564.5 L 4.5 564.5 C 4.5 564.5 4.5 564.5 4.5 564.5 L 4.5 564.5 C 4.5000006 568.366 7.634007 571.5 11.5 571.5 L 60.5 571.5 C 64.365993 571.5 67.5 568.366 67.5 564.5 L 67.5 544.75 C 67.5 540.884 64.365993 537.75 60.5 537.75 L 58.5 537.75 L 49.5 546.75 L 50 546.75 C 52.20914 546.75 54 548.54086 54 550.75 L 54 556.25 C 54 558.45914 52.20914 560.25 50 560.25 L 36 560.25 L 22 560.25 C 19.790861 560.25 18 558.45914 18 556.25 L 18 556.25 C 18 556.25 18 556.25 18 556.25 L 18 550.75 C 18 548.54086 19.790861 546.75 22 546.75 C 22 546.75 22 546.75 22 546.75 L 22.5 546.75 Z\"/><path d=\"M 16.37132 533.87132 L 33.87868 551.37868 C 35.050253 552.55025 36.949747 552.55025 38.12132 551.37868 L 55.62868 533.87132 C 56.800252 532.69975 56.800252 530.80025 55.62868 529.62868 C 55.06607 529.06607 54.30301 528.75 53.50736 528.75 L 48 528.75 C 46.343146 528.75 45 527.40685 45 525.75 L 45 516 C 45 514.34315 43.656854 513 42 513 L 30 513 C 28.343146 513 27 514.34315 27 516 L 27 525.75 C 27 527.40685 25.656854 528.75 24 528.75 L 18.492641 528.75 C 16.835786 528.75 15.492641 530.09315 15.492641 531.75 C 15.492641 532.54565 15.808711 533.3087 16.37132 533.87132 Z\"/></svg>\n"
},
"$:/language/ControlPanel/Advanced/Caption": {
"title": "$:/language/ControlPanel/Advanced/Caption",
"text": "Advanced"
},
"$:/language/ControlPanel/Advanced/Hint": {
"title": "$:/language/ControlPanel/Advanced/Hint",
"text": "Internal information about this TiddlyWiki"
},
"$:/language/ControlPanel/Advanced/LoadedModules/Caption": {
"title": "$:/language/ControlPanel/Advanced/LoadedModules/Caption",
"text": "Loaded Modules"
},
"$:/language/ControlPanel/Advanced/LoadedModules/Hint": {
"title": "$:/language/ControlPanel/Advanced/LoadedModules/Hint",
"text": "These are the currently loaded tiddler modules linked to their source tiddlers. Any italicised modules lack a source tiddler, typically because they were setup during the boot process."
},
"$:/language/ControlPanel/Advanced/TiddlerFields/Caption": {
"title": "$:/language/ControlPanel/Advanced/TiddlerFields/Caption",
"text": "Tiddler Fields"
},
"$:/language/ControlPanel/Advanced/TiddlerFields/Hint": {
"title": "$:/language/ControlPanel/Advanced/TiddlerFields/Hint",
"text": "This is the full set of TiddlerFields in use in this wiki (including system tiddlers but excluding shadow tiddlers)."
},
"$:/language/ControlPanel/Appearance/Caption": {
"title": "$:/language/ControlPanel/Appearance/Caption",
"text": "Appearance"
},
"$:/language/ControlPanel/Appearance/Hint": {
"title": "$:/language/ControlPanel/Appearance/Hint",
"text": "Ways to customise the appearance of your TiddlyWiki."
},
"$:/language/ControlPanel/Appearance/Palette/Caption": {
"title": "$:/language/ControlPanel/Appearance/Palette/Caption",
"text": "Palette"
},
"$:/language/ControlPanel/Appearance/Palette/Editor/Clone/Caption": {
"title": "$:/language/ControlPanel/Appearance/Palette/Editor/Clone/Caption",
"text": "clone"
},
"$:/language/ControlPanel/Appearance/Palette/Editor/Clone/Prompt": {
"title": "$:/language/ControlPanel/Appearance/Palette/Editor/Clone/Prompt",
"text": "It is recommended that you clone this shadow palette before editing it"
},
"$:/language/ControlPanel/Appearance/Palette/Editor/Prompt/Modified": {
"title": "$:/language/ControlPanel/Appearance/Palette/Editor/Prompt/Modified",
"text": "This shadow palette has been modified"
},
"$:/language/ControlPanel/Appearance/Palette/Editor/Prompt": {
"title": "$:/language/ControlPanel/Appearance/Palette/Editor/Prompt",
"text": "Editing"
},
"$:/language/ControlPanel/Appearance/Palette/Editor/Reset/Caption": {
"title": "$:/language/ControlPanel/Appearance/Palette/Editor/Reset/Caption",
"text": "reset"
},
"$:/language/ControlPanel/Appearance/Palette/ShowEditor/Caption": {
"title": "$:/language/ControlPanel/Appearance/Palette/ShowEditor/Caption",
"text": "show editor"
},
"$:/language/ControlPanel/Appearance/Palette/HideEditor/Caption": {
"title": "$:/language/ControlPanel/Appearance/Palette/HideEditor/Caption",
"text": "hide editor"
},
"$:/language/ControlPanel/Appearance/Palette/Prompt": {
"title": "$:/language/ControlPanel/Appearance/Palette/Prompt",
"text": "Current palette:"
},
"$:/language/ControlPanel/Appearance/StoryView/Caption": {
"title": "$:/language/ControlPanel/Appearance/StoryView/Caption",
"text": "Story View"
},
"$:/language/ControlPanel/Appearance/StoryView/Prompt": {
"title": "$:/language/ControlPanel/Appearance/StoryView/Prompt",
"text": "Current view:"
},
"$:/language/ControlPanel/Appearance/Theme/Caption": {
"title": "$:/language/ControlPanel/Appearance/Theme/Caption",
"text": "Theme"
},
"$:/language/ControlPanel/Appearance/Theme/Prompt": {
"title": "$:/language/ControlPanel/Appearance/Theme/Prompt",
"text": "Current theme:"
},
"$:/language/ControlPanel/Basics/AnimDuration/Prompt": {
"title": "$:/language/ControlPanel/Basics/AnimDuration/Prompt",
"text": "Animation duration:"
},
"$:/language/ControlPanel/Basics/Caption": {
"title": "$:/language/ControlPanel/Basics/Caption",
"text": "Basics"
},
"$:/language/ControlPanel/Basics/DefaultTiddlers/BottomHint": {
"title": "$:/language/ControlPanel/Basics/DefaultTiddlers/BottomHint",
"text": "Use [[double square brackets]] for titles with spaces. Or you can choose to <$button set=\"$:/DefaultTiddlers\" setTo=\"[list[$:/StoryList]]\">retain story ordering</$button>"
},
"$:/language/ControlPanel/Basics/DefaultTiddlers/Prompt": {
"title": "$:/language/ControlPanel/Basics/DefaultTiddlers/Prompt",
"text": "Default tiddlers:"
},
"$:/language/ControlPanel/Basics/DefaultTiddlers/TopHint": {
"title": "$:/language/ControlPanel/Basics/DefaultTiddlers/TopHint",
"text": "Choose which tiddlers are displayed at startup:"
},
"$:/language/ControlPanel/Basics/Language/Prompt": {
"title": "$:/language/ControlPanel/Basics/Language/Prompt",
"text": "Hello! Current language:"
},
"$:/language/ControlPanel/Basics/OverriddenShadowTiddlers/Prompt": {
"title": "$:/language/ControlPanel/Basics/OverriddenShadowTiddlers/Prompt",
"text": "Number of overridden shadow tiddlers:"
},
"$:/language/ControlPanel/Basics/ShadowTiddlers/Prompt": {
"title": "$:/language/ControlPanel/Basics/ShadowTiddlers/Prompt",
"text": "Number of shadow tiddlers:"
},
"$:/language/ControlPanel/Basics/Subtitle/Prompt": {
"title": "$:/language/ControlPanel/Basics/Subtitle/Prompt",
"text": "Subtitle:"
},
"$:/language/ControlPanel/Basics/SystemTiddlers/Prompt": {
"title": "$:/language/ControlPanel/Basics/SystemTiddlers/Prompt",
"text": "Number of system tiddlers:"
},
"$:/language/ControlPanel/Basics/Tags/Prompt": {
"title": "$:/language/ControlPanel/Basics/Tags/Prompt",
"text": "Number of tags:"
},
"$:/language/ControlPanel/Basics/Tiddlers/Prompt": {
"title": "$:/language/ControlPanel/Basics/Tiddlers/Prompt",
"text": "Number of tiddlers:"
},
"$:/language/ControlPanel/Basics/Title/Prompt": {
"title": "$:/language/ControlPanel/Basics/Title/Prompt",
"text": "Title of this ~TiddlyWiki:"
},
"$:/language/ControlPanel/Basics/Username/Prompt": {
"title": "$:/language/ControlPanel/Basics/Username/Prompt",
"text": "Username for signing edits:"
},
"$:/language/ControlPanel/Basics/Version/Prompt": {
"title": "$:/language/ControlPanel/Basics/Version/Prompt",
"text": "~TiddlyWiki version:"
},
"$:/language/ControlPanel/Plugins/Caption": {
"title": "$:/language/ControlPanel/Plugins/Caption",
"text": "Plugins"
},
"$:/language/ControlPanel/Plugins/Fields/Description": {
"title": "$:/language/ControlPanel/Plugins/Fields/Description",
"text": "Description"
},
"$:/language/ControlPanel/Plugins/Fields/Title": {
"title": "$:/language/ControlPanel/Plugins/Fields/Title",
"text": "Title"
},
"$:/language/ControlPanel/Plugins/Fields/Version": {
"title": "$:/language/ControlPanel/Plugins/Fields/Version",
"text": "Version"
},
"$:/language/ControlPanel/Saving/AutoSave/Disabled/Button": {
"title": "$:/language/ControlPanel/Saving/AutoSave/Disabled/Button",
"text": "enable"
},
"$:/language/ControlPanel/Saving/AutoSave/Disabled/Prompt": {
"title": "$:/language/ControlPanel/Saving/AutoSave/Disabled/Prompt",
"text": "Autosave is currently disabled"
},
"$:/language/ControlPanel/Saving/AutoSave/Enabled/Button": {
"title": "$:/language/ControlPanel/Saving/AutoSave/Enabled/Button",
"text": "disable"
},
"$:/language/ControlPanel/Saving/AutoSave/Enabled/Prompt": {
"title": "$:/language/ControlPanel/Saving/AutoSave/Enabled/Prompt",
"text": "Autosave is currently enabled"
},
"$:/language/ControlPanel/Saving/AutoSave": {
"title": "$:/language/ControlPanel/Saving/AutoSave",
"text": "Autosave"
},
"$:/language/ControlPanel/Saving/Caption": {
"title": "$:/language/ControlPanel/Saving/Caption",
"text": "Saving"
},
"$:/language/ControlPanel/Saving/Heading": {
"title": "$:/language/ControlPanel/Saving/Heading",
"text": "Saving"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Advanced/Heading": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Advanced/Heading",
"text": "Advanced Settings"
},
"$:/language/ControlPanel/Saving/TiddlySpot/BackupDir": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/BackupDir",
"text": "Backup Directory"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Backups": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Backups",
"text": "Backups"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Filename": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Filename",
"text": "Upload Filename"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Heading": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Heading",
"text": "~TiddlySpot"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Hint": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Hint",
"text": "//The server URL defaults to `http://<wikiname>.tiddlyspot.com/store.cgi` and can be changed to use a custom server address//"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Password": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Password",
"text": "Password"
},
"$:/language/ControlPanel/Saving/TiddlySpot/ServerURL": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/ServerURL",
"text": "Server URL"
},
"$:/language/ControlPanel/Saving/TiddlySpot/UploadDir": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/UploadDir",
"text": "Upload Directory"
},
"$:/language/ControlPanel/Saving/TiddlySpot/UserName": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/UserName",
"text": "Wiki Name"
},
"$:/language/ControlPanel/Tools/Caption": {
"title": "$:/language/ControlPanel/Tools/Caption",
"text": "Tools"
},
"$:/language/ControlPanel/Tools/Download/Full/Caption": {
"title": "$:/language/ControlPanel/Tools/Download/Full/Caption",
"text": "Download full wiki"
},
"$:/language/ControlPanel/Tools/Encryption/ChangePassword/Button": {
"title": "$:/language/ControlPanel/Tools/Encryption/ChangePassword/Button",
"text": "change password"
},
"$:/language/ControlPanel/Tools/Encryption/ClearPassword/Button": {
"title": "$:/language/ControlPanel/Tools/Encryption/ClearPassword/Button",
"text": "clear password"
},
"$:/language/ControlPanel/Tools/Encryption/Disabled/Prompt": {
"title": "$:/language/ControlPanel/Tools/Encryption/Disabled/Prompt",
"text": "This wiki is not encrypted"
},
"$:/language/ControlPanel/Tools/Encryption/Enabled/Prompt": {
"title": "$:/language/ControlPanel/Tools/Encryption/Enabled/Prompt",
"text": "This wiki is encrypted"
},
"$:/language/ControlPanel/Tools/Encryption/Heading": {
"title": "$:/language/ControlPanel/Tools/Encryption/Heading",
"text": "Encryption"
},
"$:/language/ControlPanel/Tools/Encryption/SetPassword/Button": {
"title": "$:/language/ControlPanel/Tools/Encryption/SetPassword/Button",
"text": "set password"
},
"$:/language/ControlPanel/Tools/Export/AllAsStaticHTML/Caption": {
"title": "$:/language/ControlPanel/Tools/Export/AllAsStaticHTML/Caption",
"text": "Download all tiddlers as static HTML"
},
"$:/language/ControlPanel/Tools/Export/Heading": {
"title": "$:/language/ControlPanel/Tools/Export/Heading",
"text": "Export"
},
"$:/language/ControlPanel/Tools/Import/Heading": {
"title": "$:/language/ControlPanel/Tools/Import/Heading",
"text": "Import"
},
"$:/language/ControlPanel/Tools/Import/Hint": {
"title": "$:/language/ControlPanel/Tools/Import/Hint",
"text": "Browse for files on your computer to import their contents (the individual tiddlers within TiddlyWiki HTML files are imported separately). You can also drag and drop files directly to the browser window."
},
"$:/language/ControlPanel/Tools/Import/Prompt": {
"title": "$:/language/ControlPanel/Tools/Import/Prompt",
"text": "Import:"
},
"$:/language/Docs/ModuleTypes/animation": {
"title": "$:/language/Docs/ModuleTypes/animation",
"text": "Animations that may be used with the RevealWidget."
},
"$:/language/Docs/ModuleTypes/browser-startup": {
"title": "$:/language/Docs/ModuleTypes/browser-startup",
"text": "Startup functions that are only executed in the browser."
},
"$:/language/Docs/ModuleTypes/command": {
"title": "$:/language/Docs/ModuleTypes/command",
"text": "Commands that can be executed under Node.js."
},
"$:/language/Docs/ModuleTypes/config": {
"title": "$:/language/Docs/ModuleTypes/config",
"text": "Data to be inserted into `$tw.config`."
},
"$:/language/Docs/ModuleTypes/filteroperator": {
"title": "$:/language/Docs/ModuleTypes/filteroperator",
"text": "Individual filter operator methods."
},
"$:/language/Docs/ModuleTypes/global": {
"title": "$:/language/Docs/ModuleTypes/global",
"text": "Global data to be inserted into `$tw`."
},
"$:/language/Docs/ModuleTypes/isfilteroperator": {
"title": "$:/language/Docs/ModuleTypes/isfilteroperator",
"text": "Operands for the ''is'' filter operator."
},
"$:/language/Docs/ModuleTypes/macro": {
"title": "$:/language/Docs/ModuleTypes/macro",
"text": "JavaScript macro definitions."
},
"$:/language/Docs/ModuleTypes/parser": {
"title": "$:/language/Docs/ModuleTypes/parser",
"text": "Parsers for different content types."
},
"$:/language/Docs/ModuleTypes/saver": {
"title": "$:/language/Docs/ModuleTypes/saver",
"text": "Savers handle different methods for saving files from the browser."
},
"$:/language/Docs/ModuleTypes/startup": {
"title": "$:/language/Docs/ModuleTypes/startup",
"text": "Startup functions."
},
"$:/language/Docs/ModuleTypes/storyview": {
"title": "$:/language/Docs/ModuleTypes/storyview",
"text": "Story views customise the animation and behaviour of list widgets."
},
"$:/language/Docs/ModuleTypes/tiddlerdeserializer": {
"title": "$:/language/Docs/ModuleTypes/tiddlerdeserializer",
"text": "Converts different content types into tiddlers."
},
"$:/language/Docs/ModuleTypes/tiddlerfield": {
"title": "$:/language/Docs/ModuleTypes/tiddlerfield",
"text": "Defines the behaviour of an individual tiddler field."
},
"$:/language/Docs/ModuleTypes/tiddlermethod": {
"title": "$:/language/Docs/ModuleTypes/tiddlermethod",
"text": "Adds methods to the `$tw.Tiddler` prototype."
},
"$:/language/Docs/ModuleTypes/utils": {
"title": "$:/language/Docs/ModuleTypes/utils",
"text": "Adds methods to `$tw.utils`."
},
"$:/language/Docs/ModuleTypes/utils-node": {
"title": "$:/language/Docs/ModuleTypes/utils-node",
"text": "Adds Node.js-specific methods to `$tw.utils`."
},
"$:/language/Docs/ModuleTypes/widget": {
"title": "$:/language/Docs/ModuleTypes/widget",
"text": "Widgets encapsulate DOM rendering and refreshing."
},
"$:/language/Docs/ModuleTypes/wikimethod": {
"title": "$:/language/Docs/ModuleTypes/wikimethod",
"text": "Adds methods to `$tw.Wiki`."
},
"$:/language/Docs/ModuleTypes/wikirule": {
"title": "$:/language/Docs/ModuleTypes/wikirule",
"text": "Individual parser rules for the main WikiText parser."
},
"$:/language/EditTemplate/Body/Hint": {
"title": "$:/language/EditTemplate/Body/Hint",
"text": "Use WikiText to add formatting, images, and dynamic features"
},
"$:/language/EditTemplate/Body/Placeholder": {
"title": "$:/language/EditTemplate/Body/Placeholder",
"text": "Type the text for this tiddler"
},
"$:/language/EditTemplate/Body/Preview/Button/Hide": {
"title": "$:/language/EditTemplate/Body/Preview/Button/Hide",
"text": "hide preview"
},
"$:/language/EditTemplate/Body/Preview/Button/Show": {
"title": "$:/language/EditTemplate/Body/Preview/Button/Show",
"text": "show preview"
},
"$:/language/EditTemplate/Fields/Add/Button": {
"title": "$:/language/EditTemplate/Fields/Add/Button",
"text": "add"
},
"$:/language/EditTemplate/Fields/Add/Name/Placeholder": {
"title": "$:/language/EditTemplate/Fields/Add/Name/Placeholder",
"text": "field name"
},
"$:/language/EditTemplate/Fields/Add/Prompt": {
"title": "$:/language/EditTemplate/Fields/Add/Prompt",
"text": "Add a new field:"
},
"$:/language/EditTemplate/Fields/Add/Value/Placeholder": {
"title": "$:/language/EditTemplate/Fields/Add/Value/Placeholder",
"text": "field value"
},
"$:/language/EditTemplate/Tags/Add/Button": {
"title": "$:/language/EditTemplate/Tags/Add/Button",
"text": "add"
},
"$:/language/EditTemplate/Tags/Add/Placeholder": {
"title": "$:/language/EditTemplate/Tags/Add/Placeholder",
"text": "tag name"
},
"$:/language/EditTemplate/Type/Placeholder": {
"title": "$:/language/EditTemplate/Type/Placeholder",
"text": "content type"
},
"$:/language/EditTemplate/Type/Prompt": {
"title": "$:/language/EditTemplate/Type/Prompt",
"text": "Type:"
},
"$:/language/Docs/Fields/bag": {
"title": "$:/language/Docs/Fields/bag",
"text": "The name of the bag from which a tiddler came"
},
"$:/language/Docs/Fields/caption": {
"title": "$:/language/Docs/Fields/caption",
"text": "The text to be displayed on a tab or button"
},
"$:/language/Docs/Fields/color": {
"title": "$:/language/Docs/Fields/color",
"text": "The CSS color value associated with a tiddler"
},
"$:/language/Docs/Fields/component": {
"title": "$:/language/Docs/Fields/component",
"text": "The name of the component responsible for an [[alert tiddler|AlertMechanism]]"
},
"$:/language/Docs/Fields/current-tiddler": {
"title": "$:/language/Docs/Fields/current-tiddler",
"text": "Used to cache the top tiddler in a [[history list|HistoryMechanism]]"
},
"$:/language/Docs/Fields/created": {
"title": "$:/language/Docs/Fields/created",
"text": "The date a tiddler was created"
},
"$:/language/Docs/Fields/creator": {
"title": "$:/language/Docs/Fields/creator",
"text": "The name of the person who created a tiddler"
},
"$:/language/Docs/Fields/dependents": {
"title": "$:/language/Docs/Fields/dependents",
"text": "For a plugin, lists the dependent plugin titles"
},
"$:/language/Docs/Fields/description": {
"title": "$:/language/Docs/Fields/description",
"text": "The descriptive text for a plugin, or a modal dialogue"
},
"$:/language/Docs/Fields/draft.of": {
"title": "$:/language/Docs/Fields/draft.of",
"text": "For draft tiddlers, contains the title of the tiddler of which this is a draft"
},
"$:/language/Docs/Fields/draft.title": {
"title": "$:/language/Docs/Fields/draft.title",
"text": "For draft tiddlers, contains the proposed new title of the tiddler"
},
"$:/language/Docs/Fields/footer": {
"title": "$:/language/Docs/Fields/footer",
"text": "The footer text for a wizard"
},
"$:/language/Docs/Fields/hack-to-give-us-something-to-compare-against": {
"title": "$:/language/Docs/Fields/hack-to-give-us-something-to-compare-against",
"text": "A temporary storage field used in [[$:/core/templates/static.content]]"
},
"$:/language/Docs/Fields/icon": {
"title": "$:/language/Docs/Fields/icon",
"text": "The title of the tiddler containing the icon associated with a tiddler"
},
"$:/language/Docs/Fields/library": {
"title": "$:/language/Docs/Fields/library",
"text": "If set to \"yes\" indicates that a tiddler should be saved as a JavaScript library"
},
"$:/language/Docs/Fields/list": {
"title": "$:/language/Docs/Fields/list",
"text": "An ordered list of tiddler titles associated with a tiddler"
},
"$:/language/Docs/Fields/modified": {
"title": "$:/language/Docs/Fields/modified",
"text": "The date and time at which a tiddler was last modified"
},
"$:/language/Docs/Fields/modifier": {
"title": "$:/language/Docs/Fields/modifier",
"text": "The tiddler title associated with the person who last modified a tiddler"
},
"$:/language/Docs/Fields/name": {
"title": "$:/language/Docs/Fields/name",
"text": "The human readable name associated with a plugin tiddler"
},
"$:/language/Docs/Fields/plugin-priority": {
"title": "$:/language/Docs/Fields/plugin-priority",
"text": "A numerical value indicating the priority of a plugin tiddler"
},
"$:/language/Docs/Fields/plugin-type": {
"title": "$:/language/Docs/Fields/plugin-type",
"text": "The type of plugin in a plugin tiddler"
},
"$:/language/Docs/Fields/revision": {
"title": "$:/language/Docs/Fields/revision",
"text": "The revision of the tiddler held at the server"
},
"$:/language/Docs/Fields/released": {
"title": "$:/language/Docs/Fields/released",
"text": "Date of a TiddlyWiki release"
},
"$:/language/Docs/Fields/source": {
"title": "$:/language/Docs/Fields/source",
"text": "The source URL associated with a tiddler"
},
"$:/language/Docs/Fields/subtitle": {
"title": "$:/language/Docs/Fields/subtitle",
"text": "The subtitle text for a wizard"
},
"$:/language/Docs/Fields/tags": {
"title": "$:/language/Docs/Fields/tags",
"text": "A list of tags associated with a tiddler"
},
"$:/language/Docs/Fields/text": {
"title": "$:/language/Docs/Fields/text",
"text": "The body text of a tiddler"
},
"$:/language/Docs/Fields/title": {
"title": "$:/language/Docs/Fields/title",
"text": "The unique name of a tiddler"
},
"$:/language/Docs/Fields/type": {
"title": "$:/language/Docs/Fields/type",
"text": "The content type of a tiddler"
},
"$:/language/Docs/Fields/version": {
"title": "$:/language/Docs/Fields/version",
"text": "Version information for a plugin"
},
"GettingStarted": {
"title": "GettingStarted",
"text": "Welcome to TiddlyWiki, the non-linear personal web notebook.\n\nTo get started, first verify that you can save changes successfully - see http://tiddlywiki.com/ for detailed instructions.\n\nThen you can:\n\n* Create new tiddlers using the 'plus' button in the sidebar\n* Visit the [[control panel|$:/ControlPanel]] using the 'cog' button in the sidebar to customise your wiki\n** Stop this message appearing by changing the default tiddlers under the ''Basics'' tab\n* Save changes using the 'download' button in the sidebar\n* Learn more about [[WikiText|http://tiddlywiki.com/static/WikiText.html]]\n"
},
"$:/language/Help/default": {
"title": "$:/language/Help/default",
"text": "\\define commandTitle()\n$:/language/Help/$(command)$\n\\end\n```\nusage: tiddlywiki [<wikifolder>] [--<command> [<args>...]...]\n```\n\nAvailable commands:\n\n<ul>\n<$list filter=\"[commands[]sort[title]]\" variable=\"command\">\n<li><$link to=<<commandTitle>>><$macrocall $name=\"command\" $type=\"text/plain\" $output=\"text/plain\"/></$link>: <$transclude tiddler=<<commandTitle>> field=\"description\"/></li>\n</$list>\n</ul>\n\nTo get detailed help on a command:\n\n```\ntiddlywiki --help <command>\n```\n"
},
"$:/language/Help/help": {
"title": "$:/language/Help/help",
"description": "Display help for TiddlyWiki commands",
"text": "Displays help text for a command:\n\n```\n--help [<command>]\n```\n\nIf the command name is omitted then a list of available commands is displayed.\n"
},
"$:/language/Help/init": {
"title": "$:/language/Help/init",
"description": "Initialise a new wiki folder",
"text": "Initialise an empty [[WikiFolder|WikiFolders]] with a copy of the specified edition.\n\n```\n--init <edition> [<edition> ...]\n```\n\nFor example:\n\n```\ntiddlywiki ./MyWikiFolder --init empty\n```\n\nNote:\n\n* The wiki folder directory will be created if necessary\n* The \"edition\" defaults to ''empty''\n* The init command will fail if the wiki folder is not empty\n* The init command removes any `includeWikis` definitions in the edition's `tiddlywiki.info` file\n* When multiple editions are specified, editions initialised later will overwrite any files shared with earlier editions (so, the final `tiddlywiki.info` file will be copied from the last edition)\n* `--help editions` returns a list of available editions\n"
},
"$:/language/Help/load": {
"title": "$:/language/Help/load",
"description": "Load tiddlers from a file",
"text": "Load tiddlers from 2.x.x TiddlyWiki files (`.html`), `.tiddler`, `.tid`, `.json` or other files \n\n```\n--load <filepath>\n```\n\nTo load tiddlers from an encrypted TiddlyWiki file you should first specify the password with the PasswordCommand. For example:\n\n```\ntiddlywiki ./MyWiki --password pa55w0rd --load my_encrypted_wiki.html\n```\n"
},
"$:/language/Help/notfound": {
"title": "$:/language/Help/notfound",
"text": "No such help item"
},
"$:/language/Help/password": {
"title": "$:/language/Help/password",
"description": "Set a password for subsequent crypto operations",
"text": "Set a password for subsequent crypto operations\n\n```\n--password <password>\n```\n\n"
},
"$:/language/Help/rendertiddler": {
"title": "$:/language/Help/rendertiddler",
"description": "Render an individual tiddler as a specified ContentType",
"text": "Render an individual tiddler as a specified ContentType, defaults to `text/html` and save it to the specified filename:\n\n```\n--rendertiddler <title> <filename> [<type>]\n```\n"
},
"$:/language/Help/rendertiddlers": {
"title": "$:/language/Help/rendertiddlers",
"description": "Render tiddlers matching a filter to a specified ContentType",
"text": "Render a set of tiddlers matching a filter to separate files of a specified ContentType (defaults to `text/html`) and extension (defaults to `.html`).\n\n```\n--rendertiddlers <filter> <template> <pathname> [<type>] [<extension>]\n```\n\nFor example:\n\n```\n--rendertiddlers [!is[system]] $:/core/templates/static.tiddler.html ./static text/plain\n```\n"
},
"$:/language/Help/savetiddler": {
"title": "$:/language/Help/savetiddler",
"description": "Saves a raw tiddler to a file",
"text": "Saves an individual tiddler in its raw text or binary format to the specified filename. \n\n```\n--savetiddler <title> <filename>\n```\n"
},
"$:/language/Help/server": {
"title": "$:/language/Help/server",
"description": "Provides an HTTP server interface to TiddlyWiki",
"text": "The server built in to TiddlyWiki5 is very simple. Although compatible with TiddlyWeb it doesn't support many of the features needed for robust Internet-facing usage.\n\nAt the root, it serves a rendering of a specified tiddler. Away from the root, it serves individual tiddlers encoded in JSON, and supports the basic HTTP operations for `GET`, `PUT` and `DELETE`.\n\n```\n--server <port> <roottiddler> <rendertype> <servetype> <username> <password> <host>\n```\n\nThe parameters are:\n\n* ''port'' - port number to serve from (defaults to \"8080\")\n* ''roottiddler'' - the tiddler to serve at the root (defaults to \"$:/core/save/all\") \n* ''rendertype'' - the content type to which the root tiddler should be rendered (defaults to \"text/plain\")\n* ''servetype'' - the content type with which the root tiddler should be served (defaults to \"text/html\")\n* ''username'' - the default username for signing edits\n* ''password'' - optional password for basic authentication\n* ''host'' - optional hostname to serve from (defaults to \"127.0.0.1\" aka \"localhost\")\n\nIf the password parameter is specified then the browser will prompt the user for the username and password. Note that the password is transmitted in plain text so this implementation isn't suitable for general use.\n\nFor example:\n\n```\n--server 8080 $:/core/save/all text/plain text/html MyUserName passw0rd\n```\n\nTo run multiple TiddlyWiki servers at the same time you'll need to put each one on a different port.\n"
},
"$:/language/Help/verbose": {
"title": "$:/language/Help/verbose",
"description": "Triggers verbose output mode",
"text": "Triggers verbose output, useful for debugging \n\n```\n--verbose\n```\n"
},
"$:/language/Help/version": {
"title": "$:/language/Help/version",
"description": "Displays the version number of TiddlyWiki",
"text": "Displays the version number of TiddlyWiki.\n\n```\n--version\n```\n"
},
"$:/language/RecentChanges/DateFormat": {
"title": "$:/language/RecentChanges/DateFormat",
"text": "DDth MMM YYYY"
},
"$:/language/CloseAll/Button": {
"title": "$:/language/CloseAll/Button",
"text": "close all"
},
"$:/language/Modals/Download": {
"title": "$:/language/Modals/Download",
"type": "text/vnd.tiddlywiki",
"subtitle": "Download changes",
"footer": "<$button message=\"tw-close-tiddler\" class=\"btn btn-primary\">Close</$button>",
"help": "http://tiddlywiki.com/static/DownloadingChanges.html",
"text": "Your browser only supports manual saving.\n\nTo save your modified wiki, right click on the download link below and select \"Download file\" or \"Save file\", and then choose the folder and filename.\n\n//You can marginally speed things up by clicking the link with the control key (Windows) or the options/alt key (Mac OS X). You will not be prompted for the folder or filename, but your browser is likely to give it an unrecognisable name -- you may need to rename the file to include an `.html` extension before you can do anything useful with it.//\n\nOn smartphones that do not allow files to be downloaded you can instead bookmark the link, and then sync your bookmarks to a desktop computer from where the wiki can be saved normally.\n"
},
"$:/language/Modals/SaveInstructions": {
"title": "$:/language/Modals/SaveInstructions",
"type": "text/vnd.tiddlywiki",
"subtitle": "Save your work",
"footer": "<$button message=\"tw-close-tiddler\" class=\"btn btn-primary\">Close</$button>",
"help": "http://tiddlywiki.com/static/SavingChanges.html",
"text": "Your changes to this wiki need to be saved as a ~TiddlyWiki HTML file.\n\n!!! Desktop browsers\n\n# Select ''Save As'' from the ''File'' menu\n# Choose a filename and location\n#* Some browsers also require you to explicitly specify the file saving format as ''Webpage, HTML only'' or similar\n# Close this tab\n\n!!! Smartphone browsers\n\n# Create a bookmark to this page\n#* If you've got iCloud or Google Sync set up then the bookmark will automatically sync to your desktop where you can open it and save it as above\n# Close this tab\n\n//If you open the bookmark again in Mobile Safari you will see this message again. If you want to go ahead and use the file, just click the ''close'' button below//\n"
},
"$:/language/Notifications/Save/Done": {
"title": "$:/language/Notifications/Save/Done",
"text": "Saved wiki"
},
"$:/language/Notifications/Save/Starting": {
"title": "$:/language/Notifications/Save/Starting",
"text": "Starting to save wiki"
},
"$:/language/Search/Advanced/Matches": {
"title": "$:/language/Search/Advanced/Matches",
"text": "//<small><$count filter={{$:/temp/advancedsearch}}/> matches</small>//"
},
"$:/language/Search/Filter/Caption": {
"title": "$:/language/Search/Filter/Caption",
"text": "Filter"
},
"$:/language/Search/Filter/Hint": {
"title": "$:/language/Search/Filter/Hint",
"text": "Search via a [[filter expression|http://tiddlywiki.com/static/TiddlerFilters.html]]"
},
"$:/language/Search/Matches": {
"title": "$:/language/Search/Matches",
"text": "//<small><$count filter=\"[!is[system]search{$:/temp/search}]\"/> matches</small>//"
},
"$:/language/Search/Shadows/Caption": {
"title": "$:/language/Search/Shadows/Caption",
"text": "Shadows"
},
"$:/language/Search/Shadows/Hint": {
"title": "$:/language/Search/Shadows/Hint",
"text": "Search for shadow tiddlers"
},
"$:/language/Search/System/Caption": {
"title": "$:/language/Search/System/Caption",
"text": "System"
},
"$:/language/Search/System/Hint": {
"title": "$:/language/Search/System/Hint",
"text": "Search for system tiddlers"
},
"$:/language/SideBar/All/Caption": {
"title": "$:/language/SideBar/All/Caption",
"text": "All"
},
"$:/language/SideBar/Drafts/Caption": {
"title": "$:/language/SideBar/Drafts/Caption",
"text": "Drafts"
},
"$:/language/SideBar/Missing/Caption": {
"title": "$:/language/SideBar/Missing/Caption",
"text": "Missing"
},
"$:/language/SideBar/More/Caption": {
"title": "$:/language/SideBar/More/Caption",
"text": "More"
},
"$:/language/SideBar/Open/Caption": {
"title": "$:/language/SideBar/Open/Caption",
"text": "Open"
},
"$:/language/SideBar/Orphans/Caption": {
"title": "$:/language/SideBar/Orphans/Caption",
"text": "Orphans"
},
"$:/language/SideBar/Recent/Caption": {
"title": "$:/language/SideBar/Recent/Caption",
"text": "Recent"
},
"$:/language/SideBar/Shadows/Caption": {
"title": "$:/language/SideBar/Shadows/Caption",
"text": "Shadows"
},
"$:/language/SideBar/System/Caption": {
"title": "$:/language/SideBar/System/Caption",
"text": "System"
},
"$:/language/SideBar/Tags/Caption": {
"title": "$:/language/SideBar/Tags/Caption",
"text": "Tags"
},
"$:/language/SideBar/Tags/TagManager/Caption": {
"title": "$:/language/SideBar/Tags/TagManager/Caption",
"text": "Tag Manager"
},
"$:/language/SideBar/Tags/Untagged/Caption": {
"title": "$:/language/SideBar/Tags/Untagged/Caption",
"text": "untagged"
},
"$:/language/SideBar/Tools/Caption": {
"title": "$:/language/SideBar/Tools/Caption",
"text": "Tools"
},
"$:/language/SideBar/Types/Caption": {
"title": "$:/language/SideBar/Types/Caption",
"text": "Types"
},
"$:/SiteSubtitle": {
"title": "$:/SiteSubtitle",
"text": "a non-linear personal web notebook"
},
"$:/SiteTitle": {
"title": "$:/SiteTitle",
"text": "My ~TiddlyWiki"
},
"$:/language/TiddlerInfo/Fields/Caption": {
"title": "$:/language/TiddlerInfo/Fields/Caption",
"text": "Fields"
},
"$:/language/TiddlerInfo/List/Caption": {
"title": "$:/language/TiddlerInfo/List/Caption",
"text": "List"
},
"$:/language/TiddlerInfo/List/Empty": {
"title": "$:/language/TiddlerInfo/List/Empty",
"text": "This tiddler does not have a list"
},
"$:/language/TiddlerInfo/Listed/Caption": {
"title": "$:/language/TiddlerInfo/Listed/Caption",
"text": "Listed"
},
"$:/language/TiddlerInfo/Listed/Empty": {
"title": "$:/language/TiddlerInfo/Listed/Empty",
"text": "This tiddler is not listed by any others"
},
"$:/language/TiddlerInfo/References/Caption": {
"title": "$:/language/TiddlerInfo/References/Caption",
"text": "References"
},
"$:/language/TiddlerInfo/References/Empty": {
"title": "$:/language/TiddlerInfo/References/Empty",
"text": "No tiddlers link to this one"
},
"$:/language/TiddlerInfo/Tagging/Caption": {
"title": "$:/language/TiddlerInfo/Tagging/Caption",
"text": "Tagging"
},
"$:/language/TiddlerInfo/Tagging/Empty": {
"title": "$:/language/TiddlerInfo/Tagging/Empty",
"text": "No tiddlers are tagged with this one"
},
"$:/language/Docs/Types/application/json": {
"title": "$:/language/Docs/Types/application/json",
"description": "JSON data",
"name": "application/json",
"text": ""
},
"$:/language/Docs/Types/application/x-tiddler-dictionary": {
"title": "$:/language/Docs/Types/application/x-tiddler-dictionary",
"description": "Data dictionary",
"name": "application/x-tiddler-dictionary",
"text": ""
},
"$:/language/Docs/Types/image/gif": {
"title": "$:/language/Docs/Types/image/gif",
"description": "GIF image",
"name": "image/gif",
"text": ""
},
"$:/language/Docs/Types/image/jpeg": {
"title": "$:/language/Docs/Types/image/jpeg",
"description": "JPEG image",
"name": "image/jpeg",
"text": ""
},
"$:/language/Docs/Types/image/png": {
"title": "$:/language/Docs/Types/image/png",
"description": "PNG image",
"name": "image/png",
"text": ""
},
"$:/language/Docs/Types/image/svg+xml": {
"title": "$:/language/Docs/Types/image/svg+xml",
"description": "Structured Vector Graphics image",
"name": "image/svg+xml",
"text": ""
},
"$:/language/Docs/Types/image/x-icon": {
"title": "$:/language/Docs/Types/image/x-icon",
"description": "ICO format icon file",
"name": "image/x-icon",
"text": ""
},
"$:/language/Docs/Types/text/css": {
"title": "$:/language/Docs/Types/text/css",
"description": "Static stylesheet",
"name": "text/css",
"text": ""
},
"$:/language/Docs/Types/text/plain": {
"title": "$:/language/Docs/Types/text/plain",
"description": "Plain text",
"name": "text/plain",
"text": ""
},
"$:/language/Docs/Types/text/vnd.tiddlywiki": {
"title": "$:/language/Docs/Types/text/vnd.tiddlywiki",
"description": "TiddlyWiki version 5 wikitext",
"name": "text/vnd.tiddlywiki",
"text": ""
},
"$:/language/Docs/Types/text/x-tiddlywiki": {
"title": "$:/language/Docs/Types/text/x-tiddlywiki",
"description": "TiddlyWiki Classic wikitext",
"name": "text/x-tiddlywiki",
"text": ""
},
"$:/languages/en-GB": {
"title": "$:/languages/en-GB",
"name": "en-GB",
"description": "English (British)",
"author": "JeremyRuston",
"core-version": ">=5.0.0\"",
"text": "Stub pseudo-plugin for the default language"
},
"$:/core/modules/commander.js": {
"text": "/*\\\ntitle: $:/core/modules/commander.js\ntype: application/javascript\nmodule-type: global\n\nThe $tw.Commander class is a command interpreter\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nParse a sequence of commands\n\tcommandTokens: an array of command string tokens\n\twiki: reference to the wiki store object\n\tstreams: {output:, error:}, each of which has a write(string) method\n\tcallback: a callback invoked as callback(err) where err is null if there was no error\n*/\nvar Commander = function(commandTokens,callback,wiki,streams) {\n\tthis.commandTokens = commandTokens;\n\tthis.nextToken = 0;\n\tthis.callback = callback;\n\tthis.wiki = wiki;\n\tthis.streams = streams;\n};\n\n/*\nExecute the sequence of commands and invoke a callback on completion\n*/\nCommander.prototype.execute = function() {\n\tthis.executeNextCommand();\n};\n\n/*\nExecute the next command in the sequence\n*/\nCommander.prototype.executeNextCommand = function() {\n\tvar self = this;\n\t// Invoke the callback if there are no more commands\n\tif(this.nextToken >= this.commandTokens.length) {\n\t\tthis.callback(null);\n\t} else {\n\t\t// Get and check the command token\n\t\tvar commandName = this.commandTokens[this.nextToken++];\n\t\tif(commandName.substr(0,2) !== \"--\") {\n\t\t\tthis.callback(\"Missing command\");\n\t\t} else {\n\t\t\tcommandName = commandName.substr(2); // Trim off the --\n\t\t\t// Accumulate the parameters to the command\n\t\t\tvar params = [];\n\t\t\twhile(this.nextToken < this.commandTokens.length && \n\t\t\t\tthis.commandTokens[this.nextToken].substr(0,2) !== \"--\") {\n\t\t\t\tparams.push(this.commandTokens[this.nextToken++]);\n\t\t\t}\n\t\t\t// Get the command info\n\t\t\tvar command = $tw.commands[commandName],\n\t\t\t\tc,err;\n\t\t\tif(!command) {\n\t\t\t\tthis.callback(\"Unknown command: \" + commandName);\n\t\t\t} else {\n\t\t\t\tif(this.verbose) {\n\t\t\t\t\tthis.streams.output.write(\"Executing command: \" + commandName + \" \" + params.join(\" \") + \"\\n\");\n\t\t\t\t}\n\t\t\t\tif(command.info.synchronous) {\n\t\t\t\t\t// Synchronous command\n\t\t\t\t\tc = new command.Command(params,this);\n\t\t\t\t\terr = c.execute();\n\t\t\t\t\tif(err) {\n\t\t\t\t\t\tthis.callback(err);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.executeNextCommand();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// Asynchronous command\n\t\t\t\t\tc = new command.Command(params,this,function(err) {\n\t\t\t\t\t\tif(err) {\n\t\t\t\t\t\t\tself.callback(err);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tself.executeNextCommand();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\terr = c.execute();\n\t\t\t\t\tif(err) {\n\t\t\t\t\t\tthis.callback(err);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\nCommander.initCommands = function(moduleType) {\n\tmoduleType = moduleType || \"command\";\n\t$tw.commands = {};\n\t$tw.modules.forEachModuleOfType(moduleType,function(title,module) {\n\t\tvar c = $tw.commands[module.info.name] = {};\n\t\t// Add the methods defined by the module\n\t\tfor(var f in module) {\n\t\t\tif($tw.utils.hop(module,f)) {\n\t\t\t\tc[f] = module[f];\n\t\t\t}\n\t\t}\n\t});\n};\n\nexports.Commander = Commander;\n\n})();\n",
"title": "$:/core/modules/commander.js",
"type": "application/javascript",
"module-type": "global"
},
"$:/core/modules/commands/help.js": {
"text": "/*\\\ntitle: $:/core/modules/commands/help.js\ntype: application/javascript\nmodule-type: command\n\nHelp command\n\n\\*/\n(function(){\n\n/*jshint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"help\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\tvar subhelp = this.params[0] || \"default\",\n\t\thelpBase = \"$:/language/Help/\",\n\t\ttext;\n\tif(!this.commander.wiki.getTiddler(helpBase + subhelp)) {\n\t\tsubhelp = \"notfound\";\n\t}\n\t// Wikify the help as formatted text (ie block elements generate newlines)\n\ttext = this.commander.wiki.renderTiddler(\"text/plain-formatted\",helpBase + subhelp);\n\t// Remove any leading linebreaks\n\ttext = text.replace(/^(\\r?\\n)*/g,\"\");\n\tthis.commander.streams.output.write(text);\n};\n\nexports.Command = Command;\n\n})();\n",
"title": "$:/core/modules/commands/help.js",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/init.js": {
"text": "/*\\\ntitle: $:/core/modules/commands/init.js\ntype: application/javascript\nmodule-type: command\n\nCommand to initialise an empty wiki folder\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"init\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\tvar fs = require(\"fs\"),\n\t\tpath = require(\"path\");\n\t// Check that we don't already have a valid wiki folder\n\tif($tw.boot.wikiTiddlersPath) {\n\t\treturn \"Wiki folder is not empty\";\n\t}\n\t// Loop through each of the specified editions\n\tvar editions = this.params.length > 0 ? this.params : [\"empty\"];\n\tfor(var editionIndex=0; editionIndex<editions.length; editionIndex++) {\n\t\tvar editionName = editions[editionIndex];\n\t\t// Check the edition exists\n\t\tvar editionPath = path.resolve($tw.boot.corePath,$tw.config.editionsPath) + \"/\" + editionName;\n\t\tif(!$tw.utils.isDirectory(editionPath)) {\n\t\t\treturn \"Edition '\" + editionName + \"' not found\";\n\t\t}\n\t\t// Copy the edition content\n\t\tvar err = $tw.utils.copyDirectory(editionPath,$tw.boot.wikiPath);\n\t\tif(!err) {\n\t\t\tthis.commander.streams.output.write(\"Copied edition '\" + editionName + \"' to \" + $tw.boot.wikiPath + \"\\n\");\n\t\t} else {\n\t\t\treturn err;\n\t\t}\n\t}\n\t// Tweak the tiddlywiki.info to remove any included wikis\n\tvar packagePath = $tw.boot.wikiPath + \"/tiddlywiki.info\",\n\t\tpackageJson = JSON.parse(fs.readFileSync(packagePath));\n\tdelete packageJson.includeWikis;\n\tfs.writeFileSync(packagePath,JSON.stringify(packageJson,null,$tw.config.preferences.jsonSpaces));\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"title": "$:/core/modules/commands/init.js",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/load.js": {
"text": "/*\\\ntitle: $:/core/modules/commands/load.js\ntype: application/javascript\nmodule-type: command\n\nCommand to load tiddlers from a file\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"load\",\n\tsynchronous: false\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\");\n\tif(this.params.length < 1) {\n\t\treturn \"Missing filename\";\n\t}\n\tfs.readFile(this.params[0],\"utf8\",function(err,data) {\n\t\tif(err) {\n\t\t\tself.callback(err);\n\t\t} else {\n\t\t\tvar fields = {title: self.params[0]},\n\t\t\t\ttype = path.extname(self.params[0]);\n\t\t\tvar tiddlers = self.commander.wiki.deserializeTiddlers(type,data,fields);\n\t\t\tif(!tiddlers) {\n\t\t\t\tself.callback(\"No tiddlers found in file \\\"\" + self.params[0] + \"\\\"\");\n\t\t\t} else {\n\t\t\t\tfor(var t=0; t<tiddlers.length; t++) {\n\t\t\t\t\tself.commander.wiki.addTiddler(new $tw.Tiddler(tiddlers[t]));\n\t\t\t\t}\n\t\t\t\tself.callback(null);\t\n\t\t\t}\n\t\t}\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"title": "$:/core/modules/commands/load.js",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/password.js": {
"text": "/*\\\ntitle: $:/core/modules/commands/password.js\ntype: application/javascript\nmodule-type: command\n\nSave password for crypto operations\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"password\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 1) {\n\t\treturn \"Missing password\";\n\t}\n\t$tw.crypto.setPassword(this.params[0]);\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"title": "$:/core/modules/commands/password.js",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/rendertiddler.js": {
"text": "/*\\\ntitle: $:/core/modules/commands/rendertiddler.js\ntype: application/javascript\nmodule-type: command\n\nCommand to render a tiddler and save it to a file\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"rendertiddler\",\n\tsynchronous: false\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 2) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\ttitle = this.params[0],\n\t\tfilename = this.params[1],\n\t\ttype = this.params[2] || \"text/html\";\n\tfs.writeFile(filename,this.commander.wiki.renderTiddler(type,title),\"utf8\",function(err) {\n\t\tself.callback(err);\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"title": "$:/core/modules/commands/rendertiddler.js",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/rendertiddlers.js": {
"text": "/*\\\ntitle: $:/core/modules/commands/rendertiddlers.js\ntype: application/javascript\nmodule-type: command\n\nCommand to render several tiddlers to a folder of files\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.info = {\n\tname: \"rendertiddlers\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 2) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\twiki = this.commander.wiki,\n\t\tfilter = this.params[0],\n\t\ttemplate = this.params[1],\n\t\tpathname = this.params[2],\n\t\ttype = this.params[3] || \"text/html\",\n\t\textension = this.params[4] || \".html\",\n\t\ttiddlers = wiki.filterTiddlers(filter);\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar parser = wiki.parseTiddler(template),\n\t\t\twidgetNode = wiki.makeWidget(parser,{variables: {currentTiddler: title}});\n\t\tvar container = $tw.fakeDocument.createElement(\"div\");\n\t\twidgetNode.render(container,null);\n\t\tvar text = type === \"text/html\" ? container.innerHTML : container.textContent;\n\t\tfs.writeFileSync(path.resolve(pathname,encodeURIComponent(title) + extension),text,\"utf8\");\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"title": "$:/core/modules/commands/rendertiddlers.js",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/savetiddler.js": {
"text": "/*\\\ntitle: $:/core/modules/commands/savetiddler.js\ntype: application/javascript\nmodule-type: command\n\nCommand to save the content of a tiddler to a file\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"savetiddler\",\n\tsynchronous: false\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 2) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\ttitle = this.params[0],\n\t\tfilename = this.params[1],\n\t\ttiddler = this.commander.wiki.getTiddler(title),\n\t\ttype = tiddler.fields.type || \"text/vnd.tiddlywiki\",\n\t\tcontentTypeInfo = $tw.config.contentTypeInfo[type] || {encoding: \"utf8\"};\n\tfs.writeFile(filename,tiddler.fields.text,contentTypeInfo.encoding,function(err) {\n\t\tself.callback(err);\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"title": "$:/core/modules/commands/savetiddler.js",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/server.js": {
"text": "/*\\\ntitle: $:/core/modules/commands/server.js\ntype: application/javascript\nmodule-type: command\n\nServe tiddlers over http\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nif(!$tw.browser) {\n\tvar util = require(\"util\"),\n\t\tfs = require(\"fs\"),\n\t\turl = require(\"url\"),\n\t\tpath = require(\"path\"),\n\t\thttp = require(\"http\");\t\n}\n\nexports.info = {\n\tname: \"server\",\n\tsynchronous: true\n};\n\n/*\nA simple HTTP server with regexp-based routes\n*/\nfunction SimpleServer(options) {\n\tthis.routes = options.routes || [];\n\tthis.wiki = options.wiki;\n\tthis.variables = options.variables || {};\n}\n\nSimpleServer.prototype.set = function(obj) {\n\tvar self = this;\n\t$tw.utils.each(obj,function(value,name) {\n\t\tself.variables[name] = value;\n\t});\n};\n\nSimpleServer.prototype.get = function(name) {\n\treturn this.variables[name];\n};\n\nSimpleServer.prototype.addRoute = function(route) {\n\tthis.routes.push(route);\n};\n\nSimpleServer.prototype.findMatchingRoute = function(request,state) {\n\tfor(var t=0; t<this.routes.length; t++) {\n\t\tvar potentialRoute = this.routes[t],\n\t\t\tpathRegExp = potentialRoute.path,\n\t\t\tmatch = potentialRoute.path.exec(state.urlInfo.pathname);\n\t\tif(match && request.method === potentialRoute.method) {\n\t\t\tstate.params = [];\n\t\t\tfor(var p=1; p<match.length; p++) {\n\t\t\t\tstate.params.push(match[p]);\n\t\t\t}\n\t\t\treturn potentialRoute;\n\t\t}\n\t}\n\treturn null;\n};\n\nSimpleServer.prototype.checkCredentials = function(request,incomingUsername,incomingPassword) {\n\tvar header = request.headers[\"authorization\"] || \"\",\n\t\ttoken = header.split(/\\s+/).pop() || \"\",\n\t\tauth = $tw.utils.base64Decode(token),\n\t\tparts = auth.split(/:/),\n\t\tusername = parts[0],\n\t\tpassword = parts[1];\n\tif(incomingUsername === username && incomingPassword === password) {\n\t\treturn \"ALLOWED\";\n\t} else {\n\t\treturn \"DENIED\";\n\t}\n}\n\nSimpleServer.prototype.listen = function(port,host) {\n\tvar self = this;\n\thttp.createServer(function(request,response) {\n\t\t// Compose the state object\n\t\tvar state = {};\n\t\tstate.wiki = self.wiki;\n\t\tstate.server = self;\n\t\tstate.urlInfo = url.parse(request.url);\n\t\t// Find the route that matches this path\n\t\tvar route = self.findMatchingRoute(request,state);\n\t\t// Check for the username and password if we've got one\n\t\tvar username = self.get(\"username\"),\n\t\t\tpassword = self.get(\"password\");\n\t\tif(username && password) {\n\t\t\t// Check they match\n\t\t\tif(self.checkCredentials(request,username,password) !== \"ALLOWED\") {\n\t\t\t\tresponse.writeHead(401,\"Authentication required\",{\n\t\t\t\t\t\"WWW-Authenticate\": 'Basic realm=\"Please provide your username and password to login to TiddlyWiki5\"'\n\t\t\t\t});\n\t\t\t\tresponse.end();\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\t// Return a 404 if we didn't find a route\n\t\tif(!route) {\n\t\t\tresponse.writeHead(404);\n\t\t\tresponse.end();\n\t\t\treturn;\n\t\t}\n\t\t// Set the encoding for the incoming request\n\t\t// TODO: Presumably this would need tweaking if we supported PUTting binary tiddlers\n\t\trequest.setEncoding(\"utf8\");\n\t\t// Dispatch the appropriate method\n\t\tswitch(request.method) {\n\t\t\tcase \"GET\": // Intentional fall-through\n\t\t\tcase \"DELETE\":\n\t\t\t\troute.handler(request,response,state);\n\t\t\t\tbreak;\n\t\t\tcase \"PUT\":\n\t\t\t\tvar data = \"\";\n\t\t\t\trequest.on(\"data\",function(chunk) {\n\t\t\t\t\tdata += chunk.toString();\n\t\t\t\t});\n\t\t\t\trequest.on(\"end\",function() {\n\t\t\t\t\tstate.data = data;\n\t\t\t\t\troute.handler(request,response,state);\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t}\n\t}).listen(port,host);\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n\t// Set up server\n\tthis.server = new SimpleServer({\n\t\twiki: this.commander.wiki\n\t});\n\t// Add route handlers\n\tthis.server.addRoute({\n\t\tmethod: \"PUT\",\n\t\tpath: /^\\/recipes\\/default\\/tiddlers\\/(.+)$/,\n\t\thandler: function(request,response,state) {\n\t\t\tvar title = decodeURIComponent(state.params[0]),\n\t\t\t\tfields = JSON.parse(state.data);\n\t\t\t// Pull up any subfields in the `fields` object\n\t\t\tif(fields.fields) {\n\t\t\t\t$tw.utils.each(fields.fields,function(field,name) {\n\t\t\t\t\tfields[name] = field;\n\t\t\t\t});\n\t\t\t\tdelete fields.fields;\n\t\t\t}\n\t\t\t// Remove any revision field\n\t\t\tif(fields[\"revision\"]) {\n\t\t\t\tdelete fields[\"revision\"];\n\t\t\t}\n\t\t\tstate.wiki.addTiddler(new $tw.Tiddler(state.wiki.getCreationFields(),fields,{title: title}));\n\t\t\tvar changeCount = state.wiki.getChangeCount(title).toString();\n\t\t\tresponse.writeHead(204, \"OK\",{\n\t\t\t\tEtag: \"\\\"default/\" + encodeURIComponent(title) + \"/\" + changeCount + \":\\\"\"\n\t\t\t});\n\t\t\tresponse.end();\n\t\t}\n\t});\n\tthis.server.addRoute({\n\t\tmethod: \"DELETE\",\n\t\tpath: /^\\/bags\\/default\\/tiddlers\\/(.+)$/,\n\t\thandler: function(request,response,state) {\n\t\t\tvar title = decodeURIComponent(state.params[0]);\n\t\t\tstate.wiki.deleteTiddler(title);\n\t\t\tresponse.writeHead(204, \"OK\");\n\t\t\tresponse.end();\n\t\t}\n\t});\n\tthis.server.addRoute({\n\t\tmethod: \"GET\",\n\t\tpath: /^\\/$/,\n\t\thandler: function(request,response,state) {\n\t\t\tresponse.writeHead(200, {\"Content-Type\": state.server.get(\"serveType\")});\n\t\t\tvar text = state.wiki.renderTiddler(state.server.get(\"renderType\"),state.server.get(\"rootTiddler\"));\n\t\t\tresponse.end(text,\"utf8\");\n\t\t}\n\t});\n\tthis.server.addRoute({\n\t\tmethod: \"GET\",\n\t\tpath: /^\\/status$/,\n\t\thandler: function(request,response,state) {\n\t\t\tresponse.writeHead(200, {\"Content-Type\": \"application/json\"});\n\t\t\tvar text = JSON.stringify({\n\t\t\t\tusername: state.server.get(\"username\"),\n\t\t\t\tspace: {\n\t\t\t\t\trecipe: \"default\"\n\t\t\t\t},\n\t\t\t\ttiddlywiki_version: $tw.version\n\t\t\t});\n\t\t\tresponse.end(text,\"utf8\");\n\t\t}\n\t});\n\tthis.server.addRoute({\n\t\tmethod: \"GET\",\n\t\tpath: /^\\/favicon.ico$/,\n\t\thandler: function(request,response,state) {\n\t\t\tresponse.writeHead(200, {\"Content-Type\": \"image/x-icon\"});\n\t\t\tvar buffer = state.wiki.getTiddlerText(\"$:/favicon.ico\",\"\");\n\t\t\tresponse.end(buffer,\"base64\");\n\t\t}\n\t});\n\tthis.server.addRoute({\n\t\tmethod: \"GET\",\n\t\tpath: /^\\/recipes\\/default\\/tiddlers.json$/,\n\t\thandler: function(request,response,state) {\n\t\t\tresponse.writeHead(200, {\"Content-Type\": \"application/json\"});\n\t\t\tvar tiddlers = [];\n\t\t\tstate.wiki.forEachTiddler({sortField: \"title\"},function(title,tiddler) {\n\t\t\t\tvar tiddlerFields = {};\n\t\t\t\t$tw.utils.each(tiddler.fields,function(field,name) {\n\t\t\t\t\tif(name !== \"text\") {\n\t\t\t\t\t\ttiddlerFields[name] = tiddler.getFieldString(name);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\ttiddlerFields[\"revision\"] = state.wiki.getChangeCount(title);\n\t\t\t\ttiddlerFields.type = tiddlerFields.type || \"text/vnd.tiddlywiki\";\n\t\t\t\ttiddlers.push(tiddlerFields);\n\t\t\t});\n\t\t\tvar text = JSON.stringify(tiddlers);\n\t\t\tresponse.end(text,\"utf8\");\n\t\t}\n\t});\n\tthis.server.addRoute({\n\t\tmethod: \"GET\",\n\t\tpath: /^\\/recipes\\/default\\/tiddlers\\/(.+)$/,\n\t\thandler: function(request,response,state) {\n\t\t\tvar title = decodeURIComponent(state.params[0]),\n\t\t\t\ttiddler = state.wiki.getTiddler(title),\n\t\t\t\ttiddlerFields = {},\n\t\t\t\tknownFields = [\n\t\t\t\t\t\"bag\", \"created\", \"creator\", \"modified\", \"modifier\", \"permissions\", \"recipe\", \"revision\", \"tags\", \"text\", \"title\", \"type\", \"uri\"\n\t\t\t\t];\n\t\t\tif(tiddler) {\n\t\t\t\t$tw.utils.each(tiddler.fields,function(field,name) {\n\t\t\t\t\tvar value = tiddler.getFieldString(name);\n\t\t\t\t\tif(knownFields.indexOf(name) !== -1) {\n\t\t\t\t\t\ttiddlerFields[name] = value;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttiddlerFields.fields = tiddlerFields.fields || {};\n\t\t\t\t\t\ttiddlerFields.fields[name] = value;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\ttiddlerFields[\"revision\"] = state.wiki.getChangeCount(title);\n\t\t\t\ttiddlerFields.type = tiddlerFields.type || \"text/vnd.tiddlywiki\";\n\t\t\t\tresponse.writeHead(200, {\"Content-Type\": \"application/json\"});\n\t\t\t\tresponse.end(JSON.stringify(tiddlerFields),\"utf8\");\n\t\t\t} else {\n\t\t\t\tresponse.writeHead(404);\n\t\t\t\tresponse.end();\n\t\t\t}\n\t\t}\n\t});\n};\n\nCommand.prototype.execute = function() {\n\tvar port = this.params[0] || \"8080\",\n\t\trootTiddler = this.params[1] || \"$:/core/save/all\",\n\t\trenderType = this.params[2] || \"text/plain\",\n\t\tserveType = this.params[3] || \"text/html\",\n\t\tusername = this.params[4],\n\t\tpassword = this.params[5],\n\t\thost = this.params[6] || \"127.0.0.1\";\n\tthis.server.set({\n\t\trootTiddler: rootTiddler,\n\t\trenderType: renderType,\n\t\tserveType: serveType,\n\t\tusername: username,\n\t\tpassword: password\n\t});\n\tthis.server.listen(port,host);\n\tconsole.log(\"Serving on \" + host + \":\" + port);\n\tconsole.log(\"(press ctrl-C to exit)\");\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"title": "$:/core/modules/commands/server.js",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/verbose.js": {
"text": "/*\\\ntitle: $:/core/modules/commands/verbose.js\ntype: application/javascript\nmodule-type: command\n\nVerbose command\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"verbose\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\tthis.commander.verbose = true;\n\treturn null; // No error\n};\n\nexports.Command = Command;\n\n})();\n",
"title": "$:/core/modules/commands/verbose.js",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/version.js": {
"text": "/*\\\ntitle: $:/core/modules/commands/version.js\ntype: application/javascript\nmodule-type: command\n\nVersion command\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"version\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\tthis.commander.streams.output.write($tw.version + \"\\n\");\n\treturn null; // No error\n};\n\nexports.Command = Command;\n\n})();\n",
"title": "$:/core/modules/commands/version.js",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/config.js": {
"text": "/*\\\ntitle: $:/core/modules/config.js\ntype: application/javascript\nmodule-type: config\n\nCore configuration constants\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.preferences = {};\n\nexports.preferences.notificationDuration = 3 * 1000;\nexports.preferences.jsonSpaces = 4;\n\nexports.dateFormats = {\n\tmonths: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\",\"December\"],\n\tdays: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n\tshortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"],\n\tshortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n// suffixes for dates, eg \"1st\",\"2nd\",\"3rd\"...\"30th\",\"31st\"\n\tdaySuffixes: [\"st\",\"nd\",\"rd\",\"th\",\"th\",\"th\",\"th\",\"th\",\"th\",\"th\",\n\t\t\"th\",\"th\",\"th\",\"th\",\"th\",\"th\",\"th\",\"th\",\"th\",\"th\",\n\t\t\"st\",\"nd\",\"rd\",\"th\",\"th\",\"th\",\"th\",\"th\",\"th\",\"th\",\n\t\t\"st\"],\n\tam: \"am\",\n\tpm: \"pm\"\n};\n\nexports.htmlEntities = {quot:34, amp:38, apos:39, lt:60, gt:62, nbsp:160, iexcl:161, cent:162, pound:163, curren:164, yen:165, brvbar:166, sect:167, uml:168, copy:169, ordf:170, laquo:171, not:172, shy:173, reg:174, macr:175, deg:176, plusmn:177, sup2:178, sup3:179, acute:180, micro:181, para:182, middot:183, cedil:184, sup1:185, ordm:186, raquo:187, frac14:188, frac12:189, frac34:190, iquest:191, Agrave:192, Aacute:193, Acirc:194, Atilde:195, Auml:196, Aring:197, AElig:198, Ccedil:199, Egrave:200, Eacute:201, Ecirc:202, Euml:203, Igrave:204, Iacute:205, Icirc:206, Iuml:207, ETH:208, Ntilde:209, Ograve:210, Oacute:211, Ocirc:212, Otilde:213, Ouml:214, times:215, Oslash:216, Ugrave:217, Uacute:218, Ucirc:219, Uuml:220, Yacute:221, THORN:222, szlig:223, agrave:224, aacute:225, acirc:226, atilde:227, auml:228, aring:229, aelig:230, ccedil:231, egrave:232, eacute:233, ecirc:234, euml:235, igrave:236, iacute:237, icirc:238, iuml:239, eth:240, ntilde:241, ograve:242, oacute:243, ocirc:244, otilde:245, ouml:246, divide:247, oslash:248, ugrave:249, uacute:250, ucirc:251, uuml:252, yacute:253, thorn:254, yuml:255, OElig:338, oelig:339, Scaron:352, scaron:353, Yuml:376, fnof:402, circ:710, tilde:732, Alpha:913, Beta:914, Gamma:915, Delta:916, Epsilon:917, Zeta:918, Eta:919, Theta:920, Iota:921, Kappa:922, Lambda:923, Mu:924, Nu:925, Xi:926, Omicron:927, Pi:928, Rho:929, Sigma:931, Tau:932, Upsilon:933, Phi:934, Chi:935, Psi:936, Omega:937, alpha:945, beta:946, gamma:947, delta:948, epsilon:949, zeta:950, eta:951, theta:952, iota:953, kappa:954, lambda:955, mu:956, nu:957, xi:958, omicron:959, pi:960, rho:961, sigmaf:962, sigma:963, tau:964, upsilon:965, phi:966, chi:967, psi:968, omega:969, thetasym:977, upsih:978, piv:982, ensp:8194, emsp:8195, thinsp:8201, zwnj:8204, zwj:8205, lrm:8206, rlm:8207, ndash:8211, mdash:8212, lsquo:8216, rsquo:8217, sbquo:8218, ldquo:8220, rdquo:8221, bdquo:8222, dagger:8224, Dagger:8225, bull:8226, hellip:8230, permil:8240, prime:8242, Prime:8243, lsaquo:8249, rsaquo:8250, oline:8254, frasl:8260, euro:8364, image:8465, weierp:8472, real:8476, trade:8482, alefsym:8501, larr:8592, uarr:8593, rarr:8594, darr:8595, harr:8596, crarr:8629, lArr:8656, uArr:8657, rArr:8658, dArr:8659, hArr:8660, forall:8704, part:8706, exist:8707, empty:8709, nabla:8711, isin:8712, notin:8713, ni:8715, prod:8719, sum:8721, minus:8722, lowast:8727, radic:8730, prop:8733, infin:8734, ang:8736, and:8743, or:8744, cap:8745, cup:8746, int:8747, there4:8756, sim:8764, cong:8773, asymp:8776, ne:8800, equiv:8801, le:8804, ge:8805, sub:8834, sup:8835, nsub:8836, sube:8838, supe:8839, oplus:8853, otimes:8855, perp:8869, sdot:8901, lceil:8968, rceil:8969, lfloor:8970, rfloor:8971, lang:9001, rang:9002, loz:9674, spades:9824, clubs:9827, hearts:9829, diams:9830 };\n\nexports.htmlVoidElements = \"area,base,br,col,command,embed,hr,img,input,keygen,link,meta,param,source,track,wbr\".split(\",\");\n\nexports.htmlBlockElements = \"address,article,aside,audio,blockquote,canvas,dd,div,dl,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,hr,li,noscript,ol,output,p,pre,section,table,tfoot,ul,video\".split(\",\");\n\n})();\n",
"title": "$:/core/modules/config.js",
"type": "application/javascript",
"module-type": "config"
},
"$:/core/modules/deserializers.js": {
"text": "/*\\\ntitle: $:/core/modules/deserializers.js\ntype: application/javascript\nmodule-type: tiddlerdeserializer\n\nFunctions to deserialise tiddlers from a block of text\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nUtility function to parse an old-style tiddler DIV in a *.tid file. It looks like this:\n\n<div title=\"Title\" creator=\"JoeBloggs\" modifier=\"JoeBloggs\" created=\"201102111106\" modified=\"201102111310\" tags=\"myTag [[my long tag]]\">\n<pre>The text of the tiddler (without the expected HTML encoding).\n</pre>\n</div>\n\nNote that the field attributes are HTML encoded, but that the body of the <PRE> tag is not encoded.\n\nWhen these tiddler DIVs are encountered within a TiddlyWiki HTML file then the body is encoded in the usual way.\n*/\nvar parseTiddlerDiv = function(text /* [,fields] */) {\n\t// Slot together the default results\n\tvar result = {};\n\tif(arguments.length > 1) {\n\t\tfor(var f=1; f<arguments.length; f++) {\n\t\t\tvar fields = arguments[f];\n\t\t\tfor(var t in fields) {\n\t\t\t\tresult[t] = fields[t];\t\t\n\t\t\t}\n\t\t}\n\t}\n\t// Parse the DIV body\n\tvar startRegExp = /^\\s*<div\\s+([^>]*)>(\\s*<pre>)?/gi,\n\t\tendRegExp,\n\t\tmatch = startRegExp.exec(text);\n\tif(match) {\n\t\t// Old-style DIVs don't have the <pre> tag\n\t\tif(match[2]) {\n\t\t\tendRegExp = /<\\/pre>\\s*<\\/div>\\s*$/gi;\n\t\t} else {\n\t\t\tendRegExp = /<\\/div>\\s*$/gi;\n\t\t}\n\t\tvar endMatch = endRegExp.exec(text);\n\t\tif(endMatch) {\n\t\t\t// Extract the text\n\t\t\tresult.text = text.substring(match.index + match[0].length,endMatch.index);\n\t\t\t// Process the attributes\n\t\t\tvar attrRegExp = /\\s*([^=\\s]+)\\s*=\\s*\"([^\"]*)\"/gi,\n\t\t\t\tattrMatch;\n\t\t\tdo {\n\t\t\t\tattrMatch = attrRegExp.exec(match[1]);\n\t\t\t\tif(attrMatch) {\n\t\t\t\t\tvar name = attrMatch[1];\n\t\t\t\t\tvar value = attrMatch[2];\n\t\t\t\t\tresult[name] = value;\n\t\t\t\t}\n\t\t\t} while(attrMatch);\n\t\t\treturn result;\n\t\t}\n\t}\n\treturn undefined;\n};\n\nexports[\"application/x-tiddler-html-div\"] = function(text,fields) {\n\treturn [parseTiddlerDiv(text,fields)];\n};\n\nexports[\"application/json\"] = function(text,fields) {\n\tvar tiddlers = JSON.parse(text),\n\t\tresult = [],\n\t\tgetKnownFields = function(tid) {\n\t\t\tvar fields = {};\n\t\t\t\"title text created creator modified modifier type tags\".split(\" \").forEach(function(value) {\n\t\t\t\tif(tid[value] !== null) {\n\t\t\t\t\tfields[value] = tid[value];\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn fields;\n\t\t};\n\tfor(var t=0; t<tiddlers.length; t++) {\n\t\tresult.push(getKnownFields(tiddlers[t]));\n\t}\n\treturn result;\n};\n\n/*\nParse an HTML file into tiddlers. There are three possibilities:\n# A TiddlyWiki classic HTML file containing `text/x-tiddlywiki` tiddlers\n# A TiddlyWiki5 HTML file containing `text/vnd.tiddlywiki` tiddlers\n# An ordinary HTML file\n*/\nexports[\"text/html\"] = function(text,fields) {\n\t// Check if we've got a store area\n\tvar storeAreaMarkerRegExp = /<div id=[\"']?storeArea['\"]?( style=[\"']?display:none;[\"']?)?>/gi,\n\t\tmatch = storeAreaMarkerRegExp.exec(text);\n\tif(match) {\n\t\t// If so, it's either a classic TiddlyWiki file or an unencrypted TW5 file\n\t\t// First read the normal tiddlers\n\t\tvar results = deserializeTiddlyWikiFile(text,storeAreaMarkerRegExp.lastIndex,!!match[1],fields);\n\t\t// Then any system tiddlers\n\t\tvar systemAreaMarkerRegExp = /<div id=[\"']?systemArea['\"]?( style=[\"']?display:none;[\"']?)?>/gi,\n\t\t\tsysMatch = systemAreaMarkerRegExp.exec(text);\n\t\tif(sysMatch) {\n\t\t\tresults.push.apply(results,deserializeTiddlyWikiFile(text,systemAreaMarkerRegExp.lastIndex,!!sysMatch[1],fields));\n\t\t}\n\t\treturn results\n\t} else {\n\t\t// Check whether we've got an encrypted file\n\t\tvar encryptedStoreArea = $tw.utils.extractEncryptedStoreArea(text);\n\t\tif(encryptedStoreArea) {\n\t\t\t// If so, attempt to decrypt it using the current password\n\t\t\treturn $tw.utils.decryptStoreArea(encryptedStoreArea);\n\t\t} else {\n\t\t\t// It's not a TiddlyWiki so we'll return the entire HTML file as a tiddler\n\t\t\treturn deserializeHtmlFile(text,fields);\n\t\t}\n\t}\n};\n\nfunction deserializeHtmlFile(text,fields) {\n\tvar result = {};\n\t$tw.utils.each(fields,function(value,name) {\n\t\tresult[name] = value;\n\t});\n\tresult.text = text;\n\tresult.type = \"text/html\";\n\treturn [result];\n}\n\nfunction deserializeTiddlyWikiFile(text,storeAreaEnd,isTiddlyWiki5,fields) {\n\tvar results = [],\n\t\tendOfDivRegExp = /(<\\/div>\\s*)/gi,\n\t\tstartPos = storeAreaEnd,\n\t\tdefaultType = isTiddlyWiki5 ? undefined : \"text/x-tiddlywiki\";\n\tendOfDivRegExp.lastIndex = startPos;\n\tvar match = endOfDivRegExp.exec(text);\n\twhile(match) {\n\t\tvar endPos = endOfDivRegExp.lastIndex,\n\t\t\ttiddlerFields = parseTiddlerDiv(text.substring(startPos,endPos),fields,{type: defaultType});\n\t\tif(!tiddlerFields) {\n\t\t\tbreak;\n\t\t}\n\t\t$tw.utils.each(tiddlerFields,function(value,name) {\n\t\t\tif(typeof value === \"string\") {\n\t\t\t\ttiddlerFields[name] = $tw.utils.htmlDecode(value);\n\t\t\t}\n\t\t});\n\t\tif(tiddlerFields.text !== null) {\n\t\t\tresults.push(tiddlerFields);\n\t\t}\n\t\tstartPos = endPos;\n\t\tmatch = endOfDivRegExp.exec(text);\n\t}\n\treturn results;\n}\n\n})();\n",
"title": "$:/core/modules/deserializers.js",
"type": "application/javascript",
"module-type": "tiddlerdeserializer"
},
"$:/core/modules/filters/backlinks.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/backlinks.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning all the backlinks from a tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.backlinks = function(source,operator,options) {\n\tvar results = [];\n\t// Function to check an individual title\n\tfunction checkTiddler(title) {\n\t\t$tw.utils.pushTop(results,options.wiki.getTiddlerBacklinks(title));\n\t}\n\t// Iterate through the source tiddlers\n\tif($tw.utils.isArray(source)) {\n\t\t$tw.utils.each(source,function(title) {\n\t\t\tcheckTiddler(title);\n\t\t});\n\t} else {\n\t\t$tw.utils.each(source,function(element,title) {\n\t\t\tcheckTiddler(title);\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/backlinks.js",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/commands.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/commands.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the commands available in this wiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.commands = function(source,operator,options) {\n\tvar results = [];\n\t$tw.utils.each($tw.commands,function(commandInfo,name) {\n\t\tresults.push(name);\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/commands.js",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/each.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/each.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator that selects one tiddler for each unique value of the specified field\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.each = function(source,operator,options) {\n\t// Convert the source to an array if necessary\n\tif(!$tw.utils.isArray(source)) {\n\t\tvar copy = [];\n\t\t$tw.utils.each(source,function(element,title) {\n\t\t\tcopy.push(title);\n\t\t});\n\t\tsource = copy;\n\t}\n\t// Collect up the first tiddler with each unique value of the specified field\n\tvar results = [],values = {};\n\t$tw.utils.each(source,function(title) {\n\t\tvar tiddler = options.wiki.getTiddler(title);\n\t\tif(tiddler) {\n\t\t\tvar value = tiddler.getFieldString(operator.operand);\n\t\t\tif(!$tw.utils.hop(values,value)) {\n\t\t\t\tvalues[value] = true;\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/each.js",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/eachday.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/eachday.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator that selects one tiddler for each unique day covered by the specified date field\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.eachday = function(source,operator,options) {\n\t// Function to convert a date/time to a date integer\n\tvar toDate = function(value) {\n\t\tvalue = (new Date(value)).setHours(0,0,0,0);\n\t\treturn value+0;\n\t};\n\t// Convert the source to an array if necessary\n\tif(!$tw.utils.isArray(source)) {\n\t\tvar copy = [];\n\t\t$tw.utils.each(source,function(element,title) {\n\t\t\tcopy.push(title);\n\t\t});\n\t\tsource = copy;\n\t}\n\t// Collect up the first tiddler with each unique day value of the specified field\n\tvar results = [],values = [];\n\t$tw.utils.each(source,function(title) {\n\t\tvar tiddler = options.wiki.getTiddler(title);\n\t\tif(tiddler && tiddler.fields[operator.operand]) {\n\t\t\tvar value = toDate(tiddler.fields[operator.operand]);\n\t\t\tif(values.indexOf(value) === -1) {\n\t\t\t\tvalues.push(value);\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/eachday.js",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/field.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/field.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for comparing fields for equality\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.field = function(source,operator,options) {\n\tvar results = [],\n\t\tfieldname = (operator.suffix || operator.operator).toLowerCase(),\n\t\tisTitle = fieldname === \"title\";\n\t// Function to check an individual title\n\tfunction checkTiddler(title) {\n\t\tvar tiddler = options.wiki.getTiddler(title),\n\t\t\ttext = tiddler ? tiddler.getFieldString(fieldname) : (isTitle ? title : null),\n\t\t\tmatch;\n\t\tif(text !== null) {\n\t\t\tif(operator.regexp) {\n\t\t\t\tmatch = !!operator.regexp.exec(text);\n\t\t\t} else {\n\t\t\t\tmatch = text === operator.operand;\n\t\t\t}\n\t\t\tif(operator.prefix === \"!\") {\n\t\t\t\tmatch = !match;\n\t\t\t}\n\t\t\tif(match) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t}\n\t}\n\t// Iterate through the source tiddlers\n\tif($tw.utils.isArray(source)) {\n\t\t$tw.utils.each(source,function(title) {\n\t\t\tcheckTiddler(title);\n\t\t});\n\t} else {\n\t\t$tw.utils.each(source,function(element,title) {\n\t\t\tcheckTiddler(title);\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/field.js",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/fields.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/fields.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the fields on the selected tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.fields = function(source,operator,options) {\n\tvar self = this,\n\t\tresults = [];\n\t// Function to check an individual title\n\tfunction checkTiddler(title) {\n\t\t// Return the fields on the specified tiddler\n\t\tvar tiddler = options.wiki.getTiddler(title);\n\t\tif(tiddler) {\n\t\t\tfor(var fieldName in tiddler.fields) {\n\t\t\t\t$tw.utils.pushTop(results,fieldName);\n\t\t\t}\n\t\t}\n\t}\n\t// Iterate through the source tiddlers\n\tif($tw.utils.isArray(source)) {\n\t\t$tw.utils.each(source,function(title) {\n\t\t\tcheckTiddler(title);\n\t\t});\n\t} else {\n\t\t$tw.utils.each(source,function(element,title) {\n\t\t\tcheckTiddler(title);\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/fields.js",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/has.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/has.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for checking if a tiddler has the specified field\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.has = function(source,operator,options) {\n\tvar results = [];\n\t// Function to check an individual title\n\tfunction checkTiddler(title) {\n\t\tvar tiddler = options.wiki.getTiddler(title);\n\t\tif(tiddler) {\n\t\t\tvar match = $tw.utils.hop(tiddler.fields,operator.operand) && tiddler.fields[operator.operand] !== \"\";\n\t\t\tif(operator.prefix === \"!\") {\n\t\t\t\tmatch = !match;\n\t\t\t}\n\t\t\tif(match) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t}\n\t}\n\t// Iterate through the source tiddlers\n\tif($tw.utils.isArray(source)) {\n\t\t$tw.utils.each(source,function(title) {\n\t\t\tcheckTiddler(title);\n\t\t});\n\t} else {\n\t\t$tw.utils.each(source,function(element,title) {\n\t\t\tcheckTiddler(title);\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/has.js",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/indexes.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/indexes.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the indexes of a data tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.indexes = function(source,operator,options) {\n\tvar self = this,\n\t\tresults = [];\n\t// Function to check an individual title\n\tfunction checkTiddler(title) {\n\t\t// Return the fields on the specified tiddler\n\t\tvar data = options.wiki.getTiddlerData(title,{});\n\t\tif(data) {\n\t\t\t$tw.utils.pushTop(results,Object.keys(data));\n\t\t}\n\t}\n\t// Iterate through the source tiddlers\n\tif($tw.utils.isArray(source)) {\n\t\t$tw.utils.each(source,function(title) {\n\t\t\tcheckTiddler(title);\n\t\t});\n\t} else {\n\t\t$tw.utils.each(source,function(element,title) {\n\t\t\tcheckTiddler(title);\n\t\t});\n\t}\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/indexes.js",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/is/current.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/is/current.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[current]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.current = function(source,prefix,options) {\n\tvar results = [];\n\t// Function to check a tiddler\n\tfunction checkTiddler(title) {\n\t\tif(title !== options.currTiddlerTitle) {\n\t\t\tresults.push(title);\n\t\t}\n\t};\n\t// Iterate through the source tiddlers\n\tif($tw.utils.isArray(source)) {\n\t\tif(prefix === \"!\") {\n\t\t\t$tw.utils.each(source,function(title) {\n\t\t\t\tcheckTiddler(title);\n\t\t\t});\n\t\t} else {\n\t\t\tif(source.indexOf(options.currTiddlerTitle) !== -1) {\n\t\t\t\tresults.push(options.currTiddlerTitle);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tif(prefix === \"!\") {\n\t\t\t$tw.utils.each(source,function(element,title) {\n\t\t\t\tcheckTiddler(title);\n\t\t\t});\n\t\t} else {\n\t\t\tresults.push(options.currTiddlerTitle);\n\t\t}\n\t}\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/is/current.js",
"type": "application/javascript",
"module-type": "isfilteroperator"
},
"$:/core/modules/filters/is/image.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/is/image.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[image]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.image = function(source,prefix,options) {\n\tvar results = [];\n\t// Function to check a tiddler\n\tfunction checkTiddler(title) {\n\t\tvar match = options.wiki.isImageTiddler(title);\n\t\tif(prefix === \"!\") {\n\t\t\tmatch = !match;\n\t\t}\n\t\tif(match) {\n\t\t\tresults.push(title);\n\t\t}\n\t};\n\t// Iterate through the source tiddlers\n\tif($tw.utils.isArray(source)) {\n\t\t$tw.utils.each(source,function(title) {\n\t\t\tcheckTiddler(title);\n\t\t});\n\t} else {\n\t\t$tw.utils.each(source,function(element,title) {\n\t\t\tcheckTiddler(title);\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/is/image.js",
"type": "application/javascript",
"module-type": "isfilteroperator"
},
"$:/core/modules/filters/is/missing.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/is/missing.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[missing]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.missing = function(source,prefix,options) {\n\tvar results = [],\n\t\tmissingTitles;\n\t// Iterate through the source tiddlers\n\tif($tw.utils.isArray(source)) {\n\t\tmissingTitles = options.wiki.getMissingTitles();\n\t\t$tw.utils.each(source,function(title) {\n\t\t\tvar match = missingTitles.indexOf(title) !== -1;\n\t\t\tif(prefix === \"!\") {\n\t\t\t\tmatch = !match;\n\t\t\t}\n\t\t\tif(match) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tif(prefix !== \"!\") {\n\t\t\tmissingTitles = options.wiki.getMissingTitles();\n\t\t\t$tw.utils.each(missingTitles,function(title) {\n\t\t\t\tresults.push(title);\n\t\t\t});\n\t\t} else {\n\t\t\t$tw.utils.each(source,function(element,title) {\n\t\t\t\tresults.push(title);\n\t\t\t});\n\t\t}\n\t}\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/is/missing.js",
"type": "application/javascript",
"module-type": "isfilteroperator"
},
"$:/core/modules/filters/is/orphan.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/is/orphan.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[orphan]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.orphan = function(source,prefix,options) {\n\tvar results = [],\n\t\torphanTitles = options.wiki.getOrphanTitles();\n\t// Iterate through the source tiddlers\n\tif($tw.utils.isArray(source)) {\n\t\t$tw.utils.each(source,function(title) {\n\t\t\tvar match = orphanTitles.indexOf(title) !== -1;\n\t\t\tif(prefix === \"!\") {\n\t\t\t\tmatch = !match;\n\t\t\t}\n\t\t\tif(match) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\t$tw.utils.each(source,function(element,title) {\n\t\t\tvar match = orphanTitles.indexOf(title) !== -1;\n\t\t\tif(prefix === \"!\") {\n\t\t\t\tmatch = !match;\n\t\t\t}\n\t\t\tif(match) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/is/orphan.js",
"type": "application/javascript",
"module-type": "isfilteroperator"
},
"$:/core/modules/filters/is/shadow.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/is/shadow.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[shadow]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.shadow = function(source,prefix,options) {\n\tvar results = [];\n\t// Function to check a tiddler\n\tfunction checkTiddler(title) {\n\t\tvar match = options.wiki.isShadowTiddler(title);\n\t\tif(prefix === \"!\") {\n\t\t\tmatch = !match;\n\t\t}\n\t\tif(match) {\n\t\t\tresults.push(title);\n\t\t}\n\t};\n\t// Iterate through the source tiddlers\n\tif($tw.utils.isArray(source)) {\n\t\t$tw.utils.each(source,function(title) {\n\t\t\tcheckTiddler(title);\n\t\t});\n\t} else {\n\t\tif(prefix !== \"!\") {\n\t\t\t$tw.utils.each(options.wiki.shadowTiddlers,function(tiddler,title) {\n\t\t\t\tresults.push(title);\n\t\t\t});\n\t\t} else {\n\t\t\t$tw.utils.each(source,function(element,title) {\n\t\t\t\tcheckTiddler(title);\n\t\t\t});\n\t\t}\n\t}\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/is/shadow.js",
"type": "application/javascript",
"module-type": "isfilteroperator"
},
"$:/core/modules/filters/is/system.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/is/system.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[system]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.system = function(source,prefix,options) {\n\tvar results = [];\n\t// Function to check a tiddler\n\tfunction checkTiddler(title) {\n\t\tvar match = options.wiki.isSystemTiddler(title);\n\t\tif(prefix === \"!\") {\n\t\t\tmatch = !match;\n\t\t}\n\t\tif(match) {\n\t\t\tresults.push(title);\n\t\t}\n\t};\n\t// Iterate through the source tiddlers\n\tif($tw.utils.isArray(source)) {\n\t\t$tw.utils.each(source,function(title) {\n\t\t\tcheckTiddler(title);\n\t\t});\n\t} else {\n\t\t$tw.utils.each(source,function(element,title) {\n\t\t\tcheckTiddler(title);\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/is/system.js",
"type": "application/javascript",
"module-type": "isfilteroperator"
},
"$:/core/modules/filters/is/tiddler.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/is/tiddler.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[tiddler]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tiddler = function(source,prefix,options) {\n\tvar results = [];\n\t// Function to check a tiddler\n\tfunction checkTiddler(title) {\n\t\tvar match = options.wiki.tiddlerExists(title);\n\t\tif(prefix === \"!\") {\n\t\t\tmatch = !match;\n\t\t}\n\t\tif(match) {\n\t\t\tresults.push(title);\n\t\t}\n\t};\n\t// Iterate through the source tiddlers\n\tif($tw.utils.isArray(source)) {\n\t\t$tw.utils.each(source,function(title) {\n\t\t\tcheckTiddler(title);\n\t\t});\n\t} else {\n\t\t$tw.utils.each(source,function(element,title) {\n\t\t\tcheckTiddler(title);\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/is/tiddler.js",
"type": "application/javascript",
"module-type": "isfilteroperator"
},
"$:/core/modules/filters/is.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/is.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for checking tiddler properties\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar isFilterOperators;\n\nfunction getIsFilterOperators() {\n\tif(!isFilterOperators) {\n\t\tisFilterOperators = {};\n\t\t$tw.modules.applyMethods(\"isfilteroperator\",isFilterOperators);\n\t}\n\treturn isFilterOperators;\n};\n\n/*\nExport our filter function\n*/\nexports.is = function(source,operator,options) {\n\t// Dispatch to the correct isfilteroperator\n\tvar isFilterOperators = getIsFilterOperators();\n\tvar isFilterOperator = isFilterOperators[operator.operand];\n\tif(isFilterOperator) {\n\t\treturn isFilterOperator(source,operator.prefix,options);\n\t} else {\n\t\treturn [\"Filter Error: Unknown operand for the 'is' filter operator\"];\n\t}\n};\n\n})();\n",
"title": "$:/core/modules/filters/is.js",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/limit.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/limit.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for chopping the results to a specified maximum number of entries\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.limit = function(source,operator,options) {\n\tvar results = [];\n\t// Convert to an array if necessary\n\tif(!$tw.utils.isArray(source)) {\n\t\tvar copy = [];\n\t\t$tw.utils.each(source,function(element,title) {\n\t\t\tcopy.push(title);\n\t\t});\n\t\tsource = copy;\n\t}\n\t// Slice the array if necessary\n\tvar limit = Math.min(source.length,parseInt(operator.operand,10));\n\tif(operator.prefix === \"!\") {\n\t\tresults = source.slice(source.length - limit);\n\t} else {\n\t\tresults = source.slice(0,limit);\n\t}\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/limit.js",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/links.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/links.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning all the links from a tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.links = function(source,operator,options) {\n\tvar results = [];\n\t// Function to check an individual title\n\tfunction checkTiddler(title) {\n\t\t$tw.utils.pushTop(results,options.wiki.getTiddlerLinks(title));\n\t}\n\t// Iterate through the source tiddlers\n\tif($tw.utils.isArray(source)) {\n\t\t$tw.utils.each(source,function(title) {\n\t\t\tcheckTiddler(title);\n\t\t});\n\t} else {\n\t\t$tw.utils.each(source,function(element,title) {\n\t\t\tcheckTiddler(title);\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/links.js",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/list.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/list.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning the tiddlers whose title is listed in the operand tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.list = function(source,operator,options) {\n\tvar results = [],\n\t\ttr = $tw.utils.parseTextReference(operator.operand),\n\t\tlist = options.wiki.getTiddlerList(tr.title || options.currTiddlerTitle,tr.field,tr.index);\n\tfunction checkTiddler(title) {\n\t\tvar match = list.indexOf(title) !== -1;\n\t\tif(operator.prefix === \"!\") {\n\t\t\tmatch = !match;\n\t\t}\n\t\tif(match) {\n\t\t\tresults.push(title);\n\t\t}\n\t}\n\t// Iterate through the source tiddlers\n\tif($tw.utils.isArray(source)) {\n\t\t$tw.utils.each(source,function(title) {\n\t\t\tcheckTiddler(title);\n\t\t});\n\t} else {\n\t\tif(operator.prefix !== \"!\") {\n\t\t\tresults = list;\n\t\t} else {\n\t\t\t$tw.utils.each(source,function(element,title) {\n\t\t\t\tcheckTiddler(title);\n\t\t\t});\n\t\t}\n\t}\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/list.js",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/listed.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/listed.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning all tiddlers that have the selected tiddlers in a list\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.listed = function(source,operator,options) {\n\tvar results = [];\n\t// Function to check an individual title\n\tfunction checkTiddler(title) {\n\t\t$tw.utils.pushTop(results,options.wiki.findListingsOfTiddler(title));\n\t}\n\t// Iterate through the source tiddlers\n\tif($tw.utils.isArray(source)) {\n\t\t$tw.utils.each(source,function(title) {\n\t\t\tcheckTiddler(title);\n\t\t});\n\t} else {\n\t\t$tw.utils.each(source,function(element,title) {\n\t\t\tcheckTiddler(title);\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/listed.js",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/listops.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/listops.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operators for manipulating the current selection list\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nReverse list\n*/\nexports.reverse = function(source,operator,options) {\n\tvar results = [];\n\tif(!$tw.utils.isArray(source)) {\n\t\tsource = Object.keys(source).sort();\n\t}\n\t$tw.utils.each(source,function(title) {\n\t\tresults.unshift(title);\n\t});\n\treturn results;\n};\n\n/*\nFirst entry/entries in list\n*/\nexports.first = function(source,operator,options) {\n\tvar count = parseInt(operator.operand) || 1;\n\tif(!$tw.utils.isArray(source)) {\n\t\tsource = Object.keys(source).sort();\n\t}\n\treturn source.slice(0,Math.min(count,source.length));\n};\n\n/*\nLast entry/entries in list\n*/\nexports.last = function(source,operator,options) {\n\tvar count = parseInt(operator.operand) || 1;\n\tif(!$tw.utils.isArray(source)) {\n\t\tsource = Object.keys(source).sort();\n\t}\n\treturn source.slice(-count);\n};\n\n/*\nAll but the first entry/entries of the list\n*/\nexports.rest = function(source,operator,options) {\n\tvar count = parseInt(operator.operand) || 1;\n\tif(!$tw.utils.isArray(source)) {\n\t\tsource = Object.keys(source).sort();\n\t}\n\treturn source.slice(count);\n};\nexports.butfirst = exports.rest;\nexports.bf = exports.rest;\n\n/*\nAll but the last entry/entries of the list\n*/\nexports.butlast = function(source,operator,options) {\n\tvar count = parseInt(operator.operand) || 1;\n\tif(!$tw.utils.isArray(source)) {\n\t\tsource = Object.keys(source).sort();\n\t}\n\treturn source.slice(0,-count);\n};\nexports.bl = exports.butlast;\n\n/*\nThe nth member of the list\n*/\nexports.nth = function(source,operator,options) {\n\tvar count = parseInt(operator.operand) || 1;\n\tif(!$tw.utils.isArray(source)) {\n\t\tsource = Object.keys(source).sort();\n\t}\n\treturn source.slice(count-1,count);\n};\n\n})();\n",
"title": "$:/core/modules/filters/listops.js",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/modules.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/modules.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the titles of the modules of a given type in this wiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.modules = function(source,operator,options) {\n\tvar results = [],\n\t\tpushModules = function(type) {\n\t\t\t$tw.utils.each($tw.modules.types[type],function(moduleInfo,moduleName) {\n\t\t\t\tresults.push(moduleName);\n\t\t\t});\n\t\t};\n\t// Iterate through the source tiddlers\n\tif($tw.utils.isArray(source)) {\n\t\t$tw.utils.each(source,function(title) {\n\t\t\tpushModules(title);\n\t\t});\n\t} else {\n\t\t$tw.utils.each(source,function(element,title) {\n\t\t\tpushModules(title);\n\t\t});\n\t}\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/modules.js",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/moduletypes.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/moduletypes.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the module types in this wiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.moduletypes = function(source,operator,options) {\n\tvar results = [];\n\t$tw.utils.each($tw.modules.types,function(moduleInfo,type) {\n\t\tresults.push(type);\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/moduletypes.js",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/next.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/next.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning the tiddler whose title occurs next in the list supplied in the operand tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.next = function(source,operator,options) {\n\tvar results = [],\n\t\tlist = options.wiki.getTiddlerList(operator.operand);\n\n\tfunction checkTiddler(title) {\n\t\tvar match = list.indexOf(title);\n\t\t// increment match and then test if result is in range\n\t\tmatch++;\n\t\tif(match > 0 && match < list.length) {\n\t\t\tresults.push(list[match]);\n\t\t}\n\t}\n\t// Iterate through the source tiddlers\n\tif($tw.utils.isArray(source)) {\n\t\t$tw.utils.each(source,function(title) {\n\t\t\tcheckTiddler(title);\n\t\t});\n\t} else {\n\t\t$tw.utils.each(source,function(element,title) {\n\t\t\tcheckTiddler(title);\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/next.js",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/prefix.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/prefix.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for checking if a title starts with a prefix\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.prefix = function(source,operator,options) {\n\tvar results = [];\n\t// Function to check an individual title\n\tfunction checkTiddler(title) {\n\t\tvar match = title.substr(0,operator.operand.length).toLowerCase() === operator.operand.toLowerCase();\n\t\tif(operator.prefix === \"!\") {\n\t\t\tmatch = !match;\n\t\t}\n\t\tif(match) {\n\t\t\tresults.push(title);\n\t\t}\n\t}\n\t// Iterate through the source tiddlers\n\tif($tw.utils.isArray(source)) {\n\t\t$tw.utils.each(source,function(title) {\n\t\t\tcheckTiddler(title);\n\t\t});\n\t} else {\n\t\t$tw.utils.each(source,function(element,title) {\n\t\t\tcheckTiddler(title);\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/prefix.js",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/previous.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/previous.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning the tiddler whose title occurs immediately prior in the list supplied in the operand tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.previous = function(source,operator,options) {\n\tvar results = [],\n\t\tlist = options.wiki.getTiddlerList(operator.operand);\n\n\tfunction checkTiddler(title) {\n\t\tvar match = list.indexOf(title);\n\t\t// decrement match and then test if result is in range\n\t\tmatch--;\n\t\tif( match >= 0 ) {\n\t\t\tresults.push(list[match]);\n\t\t}\n\t}\n\t// Iterate through the source tiddlers\n\tif($tw.utils.isArray(source)) {\n\t\t$tw.utils.each(source,function(title) {\n\t\t\tcheckTiddler(title);\n\t\t});\n\t} else {\n\t\t$tw.utils.each(source,function(element,title) {\n\t\t\tcheckTiddler(title);\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/previous.js",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/sameday.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/sameday.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator that selects tiddlers with a modified date field on the same day as the provided value.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.sameday = function(source,operator,options) {\n\tvar results = [],\n\t\tisSameDay = function(dateField,dateString) {\n\t\t\tvar date1 = (new Date(dateField)).setHours(0,0,0,0),\n\t\t\t\tdate2 = (new Date($tw.utils.parseDate(dateString))).setHours(0,0,0,0);\n\t\t\treturn date1 === date2;\n\t\t};\n\t// Function to check an individual title\n\tfunction checkTiddler(title) {\n\t\tvar tiddler = options.wiki.getTiddler(title);\n\t\tif(tiddler) {\n\t\t\tvar match = isSameDay(tiddler.fields.modified,operator.operand);\n\t\t\tif(operator.prefix === \"!\") {\n\t\t\t\tmatch = !match;\n\t\t\t}\n\t\t\tif(match) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t}\n\t}\n\t// Iterate through the source tiddlers\n\tif($tw.utils.isArray(source)) {\n\t\t$tw.utils.each(source,function(title) {\n\t\t\tcheckTiddler(title);\n\t\t});\n\t} else {\n\t\t$tw.utils.each(source,function(element,title) {\n\t\t\tcheckTiddler(title);\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/sameday.js",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/search.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/search.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for searching for the text in the operand tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.search = function(source,operator,options) {\n\tvar invert = operator.prefix === \"!\";\n\treturn options.wiki.search(operator.operand,{\n\t\ttitles: source,\n\t\tinvert: invert\n\t});\n};\n\n})();\n",
"title": "$:/core/modules/filters/search.js",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/sort.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/sort.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for sorting\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.sort = function(source,operator,options) {\n\tvar results = prepare_results(source);\n\toptions.wiki.sortTiddlers(results,operator.operand,operator.prefix === \"!\",false,false);\n\treturn results;\n};\n\nexports.nsort = function(source,operator,options) {\n\tvar results = prepare_results(source);\n\toptions.wiki.sortTiddlers(results,operator.operand,operator.prefix === \"!\",false,true);\n\treturn results;\n};\n\nexports.sortcs = function(source,operator,options) {\n\tvar results = prepare_results(source);\n\toptions.wiki.sortTiddlers(results,operator.operand,operator.prefix === \"!\",true,false);\n\treturn results;\n};\n\nexports.nsortcs = function(source,operator,options) {\n\tvar results = prepare_results(source);\n\toptions.wiki.sortTiddlers(results,operator.operand,operator.prefix === \"!\",true,true);\n\treturn results;\n};\n\nvar prepare_results = function (source) {\n\tvar results;\n\tif($tw.utils.isArray(source)) {\n\t\tresults = source;\n\t} else {\n\t\tresults = [];\n\t\t$tw.utils.each(source,function(element,title) {\n\t\t\tresults.push(title);\n\t\t});\n\t}\n\treturn results;\n}\n\n})();\n",
"title": "$:/core/modules/filters/sort.js",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/tag.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/tag.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for checking for the presence of a tag\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tag = function(source,operator,options) {\n\tvar results = [];\n\t// Function to check an individual title\n\tfunction checkTiddler(title) {\n\t\tvar tiddler = options.wiki.getTiddler(title);\n\t\tif(tiddler) {\n\t\t\tvar match = tiddler.hasTag(operator.operand);\n\t\t\tif(operator.prefix === \"!\") {\n\t\t\t\tmatch = !match;\n\t\t\t}\n\t\t\tif(match) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t}\n\t}\n\t// Iterate through the source tiddlers\n\tif($tw.utils.isArray(source)) {\n\t\t$tw.utils.each(source,function(title) {\n\t\t\tcheckTiddler(title);\n\t\t});\n\t} else {\n\t\t$tw.utils.each(source,function(element,title) {\n\t\t\tcheckTiddler(title);\n\t\t});\n\t}\n\t// Sort the results if we are matching a tag\n\tif(operator.prefix !== \"!\") {\n\t\tresults = options.wiki.sortByList(results,operator.operand);\n\t}\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/tag.js",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/tagging.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/tagging.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning all tiddlers that are tagged with the selected tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tagging = function(source,operator,options) {\n\tvar results = [];\n\t// Function to check an individual title\n\tfunction checkTiddler(title) {\n\t\t$tw.utils.pushTop(results,options.wiki.getTiddlersWithTag(title));\n\t}\n\t// Iterate through the source tiddlers\n\tif($tw.utils.isArray(source)) {\n\t\t$tw.utils.each(source,function(title) {\n\t\t\tcheckTiddler(title);\n\t\t});\n\t} else {\n\t\t$tw.utils.each(source,function(element,title) {\n\t\t\tcheckTiddler(title);\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/tagging.js",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/tags.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/tags.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning all the tags of the selected tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tags = function(source,operator,options) {\n\tvar results = [];\n\t// Function to check an individual title\n\tfunction checkTiddler(title) {\n\t\tvar tiddler = options.wiki.getTiddler(title);\n\t\tif(tiddler && tiddler.fields.tags) {\n\t\t\t$tw.utils.pushTop(results,tiddler.fields.tags);\n\t\t}\n\t}\n\t// Iterate through the source tiddlers\n\tif($tw.utils.isArray(source)) {\n\t\t$tw.utils.each(source,function(title) {\n\t\t\tcheckTiddler(title);\n\t\t});\n\t} else {\n\t\t$tw.utils.each(source,function(element,title) {\n\t\t\tcheckTiddler(title);\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/tags.js",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/title.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/title.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for comparing title fields for equality\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.title = function(source,operator,options) {\n\tvar results = [];\n\t// Function to check an individual title\n\tfunction checkTiddler(title) {\n\t\tvar tiddler = options.wiki.getTiddler(title);\n\t\tif(tiddler) {\n\t\t\tvar match = tiddler.fields[operator.operator] === operator.operand;\n\t\t\tif(operator.prefix === \"!\") {\n\t\t\t\tmatch = !match;\n\t\t\t}\n\t\t\tif(match) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t}\n\t}\n\t// Iterate through the source tiddlers\n\tif($tw.utils.isArray(source)) {\n\t\t$tw.utils.each(source,function(title) {\n\t\t\tcheckTiddler(title);\n\t\t});\n\t} else {\n\t\t// If we're filtering a hashmap we change the behaviour to pass through missing tiddlers\n\t\tif(operator.prefix !== \"!\") {\n\t\t\tresults.push(operator.operand);\n\t\t} else {\n\t\t\t$tw.utils.each(source,function(element,title) {\n\t\t\t\tif(title !== operator.operand) {\n\t\t\t\t\tcheckTiddler(title);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/title.js",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/untagged.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/untagged.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning all the selected tiddlers that are untagged\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.untagged = function(source,operator,options) {\n\tvar results = [];\n\t// Function to check an individual title\n\tfunction checkTiddler(title) {\n\t\tvar tiddler = options.wiki.getTiddler(title),\n\t\t\tmatch = tiddler && $tw.utils.isArray(tiddler.fields.tags) && tiddler.fields.tags.length > 0;\n\t\tif(operator.prefix !== \"!\") {\n\t\t\tmatch = !match;\n\t\t}\n\t\tif(match) {\n\t\t\t$tw.utils.pushTop(results,title);\n\t\t}\n\t}\n\t// Iterate through the source tiddlers\n\tif($tw.utils.isArray(source)) {\n\t\t$tw.utils.each(source,function(title) {\n\t\t\tcheckTiddler(title);\n\t\t});\n\t} else {\n\t\t$tw.utils.each(source,function(element,title) {\n\t\t\tcheckTiddler(title);\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"title": "$:/core/modules/filters/untagged.js",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters.js": {
"text": "/*\\\ntitle: $:/core/modules/filters.js\ntype: application/javascript\nmodule-type: wikimethod\n\nAdds tiddler filtering to the $tw.Wiki object.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nParses an operation within a filter string\n\tresults: Array of array of operator nodes into which results should be inserted\n\tfilterString: filter string\n\tp: start position within the string\nReturns the new start position, after the parsed operation\n*/\nfunction parseFilterOperation(operators,filterString,p) {\n\tvar operator, operand, bracketPos, curlyBracketPos;\n\t// Skip the starting square bracket\n\tif(filterString.charAt(p++) !== \"[\") {\n\t\tthrow \"Missing [ in filter expression\";\n\t}\n\t// Process each operator in turn\n\tdo {\n\t\toperator = {};\n\t\t// Check for an operator prefix\n\t\tif(filterString.charAt(p) === \"!\") {\n\t\t\toperator.prefix = filterString.charAt(p++);\n\t\t}\n\t\t// Get the operator name\n\t\tvar nextBracketPos = filterString.substring(p).search(/[\\[\\{\\/]/);\n\t\tif(nextBracketPos === -1) {\n\t\t\tthrow \"Missing [ in filter expression\";\n\t\t}\n\t\tnextBracketPos += p;\n\t\tvar bracket = filterString.charAt(nextBracketPos);\n\t\toperator.operator = filterString.substring(p,nextBracketPos);\n\t\t\n\t\t// Any suffix?\n\t\tvar colon = operator.operator.indexOf(':');\n\t\tif(colon > -1) {\n\t\t\toperator.suffix = operator.operator.substring(colon + 1);\n\t\t\toperator.operator = operator.operator.substring(0,colon) || \"field\";\n\t\t}\n\t\t// Empty operator means: title\n\t\telse if(operator.operator === \"\") {\n\t\t\toperator.operator = \"title\";\n\t\t}\n\n\t\tp = nextBracketPos + 1;\n\t\tswitch (bracket) {\n\t\tcase '{': // Curly brackets\n\t\t\toperator.indirect = true;\n\t\t\tnextBracketPos = filterString.indexOf('}',p);\n\t\t\tbreak;\n\t\tcase '[': // Square brackets\n\t\t\tnextBracketPos = filterString.indexOf(']',p);\n\t\t\tbreak;\n\t\tcase '/': // regexp brackets\n\t\t\tvar rex = /^((?:[^\\\\\\/]*|\\\\.)*)\\/(?:\\(([mygi]+)\\))?/g,\n\t\t\t\trexMatch = rex.exec(filterString.substring(p));\n\t\t\tif(rexMatch) {\n\t\t\t\toperator.regexp = new RegExp(rexMatch[1], rexMatch[2]);\n\t\t\t\tnextBracketPos = p + rex.lastIndex - 1;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthrow \"Unterminated regular expression in filter expression\";\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\t\n\t\tif(nextBracketPos === -1) {\n\t\t\tthrow \"Missing closing bracket in filter expression\";\n\t\t}\n\t\tif(!operator.regexp) {\n\t\t\toperator.operand = filterString.substring(p,nextBracketPos);\n\t\t}\n\t\tp = nextBracketPos + 1;\n\t\t\t\n\t\t// Push this operator\n\t\toperators.push(operator);\n\t} while(filterString.charAt(p) !== \"]\");\n\t// Skip the ending square bracket\n\tif(filterString.charAt(p++) !== \"]\") {\n\t\tthrow \"Missing ] in filter expression\";\n\t}\n\t// Return the parsing position\n\treturn p;\n}\n\n/*\nParse a filter string\n*/\nexports.parseFilter = function(filterString) {\n\tfilterString = filterString || \"\";\n\tvar results = [], // Array of arrays of operator nodes {operator:,operand:}\n\t\tp = 0, // Current position in the filter string\n\t\tmatch;\n\tvar whitespaceRegExp = /(\\s+)/mg,\n\t\toperandRegExp = /((?:\\+|\\-)?)(?:(\\[)|(\"(?:[^\"])*\")|('(?:[^'])*')|([^\\s\\[\\]]+))/mg;\n\twhile(p < filterString.length) {\n\t\t// Skip any whitespace\n\t\twhitespaceRegExp.lastIndex = p;\n\t\tmatch = whitespaceRegExp.exec(filterString);\n\t\tif(match && match.index === p) {\n\t\t\tp = p + match[0].length;\n\t\t}\n\t\t// Match the start of the operation\n\t\tif(p < filterString.length) {\n\t\t\toperandRegExp.lastIndex = p;\n\t\t\tmatch = operandRegExp.exec(filterString);\n\t\t\tif(!match || match.index !== p) {\n\t\t\t\tthrow \"Syntax error in filter expression\";\n\t\t\t}\n\t\t\tvar operation = {\n\t\t\t\tprefix: \"\",\n\t\t\t\toperators: []\n\t\t\t};\n\t\t\tif(match[1]) {\n\t\t\t\toperation.prefix = match[1];\n\t\t\t\tp++;\n\t\t\t}\n\t\t\tif(match[2]) { // Opening square bracket\n\t\t\t\tp = parseFilterOperation(operation.operators,filterString,p);\n\t\t\t} else {\n\t\t\t\tp = match.index + match[0].length;\n\t\t\t}\n\t\t\tif(match[3] || match[4] || match[5]) { // Double quoted string, single quoted string or unquoted title\n\t\t\t\toperation.operators.push(\n\t\t\t\t\t{operator: \"title\", operand: match[3] || match[4] || match[5]}\n\t\t\t\t);\n\t\t\t}\n\t\t\tresults.push(operation);\n\t\t}\n\t}\n\treturn results;\n};\n\nexports.getFilterOperators = function() {\n\tif(!this.filterOperators) {\n\t\t$tw.Wiki.prototype.filterOperators = {};\n\t\t$tw.modules.applyMethods(\"filteroperator\",this.filterOperators);\n\t}\n\treturn this.filterOperators;\n};\n\nexports.filterTiddlers = function(filterString,currTiddlerTitle,tiddlerList) {\n\tvar fn = this.compileFilter(filterString);\n\treturn fn.call(this,tiddlerList || this.tiddlers,currTiddlerTitle);\n};\n\nexports.compileFilter = function(filterString) {\n\tvar filterParseTree;\n\ttry {\n\t\tfilterParseTree = this.parseFilter(filterString);\n\t} catch(e) {\n\t\treturn function(source,currTiddlerTitle) {\n\t\t\treturn [\"Filter error: \" + e];\n\t\t};\n\t}\n\t// Get the hashmap of filter operator functions\n\tvar filterOperators = this.getFilterOperators();\n\t// Assemble array of functions, one for each operation\n\tvar operationFunctions = [];\n\t// Step through the operations\n\tvar self = this;\n\t$tw.utils.each(filterParseTree,function(operation) {\n\t\t// Create a function for the chain of operators in the operation\n\t\tvar operationSubFunction = function(source,currTiddlerTitle) {\n\t\t\tvar accumulator = source,\n\t\t\t\tresults = [];\n\t\t\t$tw.utils.each(operation.operators,function(operator) {\n\t\t\t\tvar operatorFunction = filterOperators[operator.operator] || filterOperators.field || function(source,operator,operations) {\n\t\t\t\t\t\treturn [\"Filter Error: unknown operator '\" + operator.operator + \"'\"];\n\t\t\t\t\t},\n\t\t\t\t\toperand = operator.operand;\n\t\t\t\tif(operator.indirect) {\n\t\t\t\t\toperand = self.getTextReference(operator.operand,\"\",currTiddlerTitle);\n\t\t\t\t}\n\t\t\t\tresults = operatorFunction(accumulator,{\n\t\t\t\t\t\t\toperator: operator.operator,\n\t\t\t\t\t\t\toperand: operand,\n\t\t\t\t\t\t\tprefix: operator.prefix,\n\t\t\t\t\t\t\tsuffix: operator.suffix,\n\t\t\t\t\t\t\tregexp: operator.regexp\n\t\t\t\t\t\t},{\n\t\t\t\t\t\t\twiki: self,\n\t\t\t\t\t\t\tcurrTiddlerTitle: currTiddlerTitle\n\t\t\t\t\t\t});\n\t\t\t\taccumulator = results;\n\t\t\t});\n\t\t\treturn results;\n\t\t};\n\t\t// Wrap the operator functions in a wrapper function that depends on the prefix\n\t\toperationFunctions.push((function() {\n\t\t\tswitch(operation.prefix || \"\") {\n\t\t\t\tcase \"\": // No prefix means that the operation is unioned into the result\n\t\t\t\t\treturn function(results,source,currTiddlerTitle) {\n\t\t\t\t\t\t$tw.utils.pushTop(results,operationSubFunction(source,currTiddlerTitle));\n\t\t\t\t\t};\n\t\t\t\tcase \"-\": // The results of this operation are removed from the main result\n\t\t\t\t\treturn function(results,source,currTiddlerTitle) {\n\t\t\t\t\t\t$tw.utils.removeArrayEntries(results,operationSubFunction(source,currTiddlerTitle));\n\t\t\t\t\t};\n\t\t\t\tcase \"+\": // This operation is applied to the main results so far\n\t\t\t\t\treturn function(results,source,currTiddlerTitle) {\n\t\t\t\t\t\t// This replaces all the elements of the array, but keeps the actual array so that references to it are preserved\n\t\t\t\t\t\tsource = results.slice(0);\n\t\t\t\t\t\tresults.splice(0,results.length);\n\t\t\t\t\t\t$tw.utils.pushTop(results,operationSubFunction(source,currTiddlerTitle));\n\t\t\t\t\t};\n\t\t\t}\n\t\t})());\n\t});\n\t// Return a function that applies the operations to a source array/hashmap of tiddler titles\n\treturn function(source,currTiddlerTitle) {\n\t\tsource = source || self.tiddlers;\n\t\tvar results = [];\n\t\t$tw.utils.each(operationFunctions,function(operationFunction) {\n\t\t\toperationFunction(results,source,currTiddlerTitle);\n\t\t});\n\t\treturn results;\n\t};\n};\n\n})();\n",
"title": "$:/core/modules/filters.js",
"type": "application/javascript",
"module-type": "wikimethod"
},
"$:/core/modules/macros/changecount.js": {
"text": "/*\\\ntitle: $:/core/modules/macros/changecount.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to return the changecount for the current tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"changecount\";\n\nexports.params = [];\n\n/*\nRun the macro\n*/\nexports.run = function() {\n\treturn this.wiki.getChangeCount(this.getVariable(\"currentTiddler\")) + \"\";\n};\n\n})();\n",
"title": "$:/core/modules/macros/changecount.js",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/macros/makedatauri.js": {
"text": "/*\\\ntitle: $:/core/modules/macros/makedatauri.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to convert the content of a tiddler to a data URI\n\n<<makedatauri text:\"Text to be converted\" type:\"text/vnd.tiddlywiki\">>\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"makedatauri\";\n\nexports.params = [\n\t{name: \"text\"},\n\t{name: \"type\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(text,type) {\n\ttype = type || \"text/vnd.tiddlywiki\";\n\tvar typeInfo = $tw.config.contentTypeInfo[type] || $tw.config.contentTypeInfo[\"text/plain\"],\n\t\tisBase64 = typeInfo.encoding === \"base64\",\n\t\tparts = [];\n\tparts.push(\"data:\");\n\tparts.push(type);\n\tparts.push(isBase64 ? \";base64\" : \"\");\n\tparts.push(\",\");\n\tparts.push(isBase64 ? text : encodeURIComponent(text));\n\treturn parts.join(\"\");\n};\n\n})();\n",
"title": "$:/core/modules/macros/makedatauri.js",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/macros/qualify.js": {
"text": "/*\\\ntitle: $:/core/modules/macros/qualify.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to qualify a state tiddler title according\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"qualify\";\n\nexports.params = [\n\t{name: \"title\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(title) {\n\treturn title + \"-\" + this.getStateQualifier();\n};\n\n})();\n",
"title": "$:/core/modules/macros/qualify.js",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/macros/version.js": {
"text": "/*\\\ntitle: $:/core/modules/macros/version.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to return the TiddlyWiki core version number\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"version\";\n\nexports.params = [];\n\n/*\nRun the macro\n*/\nexports.run = function() {\n\treturn $tw.version;\n};\n\n})();\n",
"title": "$:/core/modules/macros/version.js",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/parsers/htmlparser.js": {
"text": "/*\\\ntitle: $:/core/modules/parsers/htmlparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe HTML parser displays text as raw HTML\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar HtmlParser = function(type,text,options) {\n\tthis.tree = [{\n\t\ttype: \"raw\",\n\t\thtml: text\n\t}];\n};\n\nexports[\"text/html\"] = HtmlParser;\n\n})();\n\n",
"title": "$:/core/modules/parsers/htmlparser.js",
"type": "application/javascript",
"module-type": "parser"
},
"$:/core/modules/parsers/imageparser.js": {
"text": "/*\\\ntitle: $:/core/modules/parsers/imageparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe image parser parses an image into an embeddable HTML element\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar ImageParser = function(type,text,options) {\n\tvar element = {\n\t\t\ttype: \"element\",\n\t\t\ttag: \"img\",\n\t\t\tattributes: {}\n\t\t},\n\t\tsrc;\n\tif(text) {\n\t\tif(type === \"application/pdf\" || type === \".pdf\") {\n\t\t\telement.attributes.src = {type: \"string\", value: \"data:application/pdf;base64,\" + text};\n\t\t\telement.tag = \"embed\";\n\t\t} else if(type === \"image/svg+xml\" || type === \".svg\") {\n\t\t\telement.attributes.src = {type: \"string\", value: \"data:image/svg+xml,\" + encodeURIComponent(text)};\n\t\t} else {\n\t\t\telement.attributes.src = {type: \"string\", value: \"data:\" + type + \";base64,\" + text};\n\t\t}\n\t}\n\tthis.tree = [element];\n};\n\nexports[\"image/svg+xml\"] = ImageParser;\nexports[\"image/jpg\"] = ImageParser;\nexports[\"image/jpeg\"] = ImageParser;\nexports[\"image/png\"] = ImageParser;\nexports[\"image/gif\"] = ImageParser;\nexports[\"application/pdf\"] = ImageParser;\nexports[\"image/x-icon\"] = ImageParser;\n\n})();\n\n",
"title": "$:/core/modules/parsers/imageparser.js",
"type": "application/javascript",
"module-type": "parser"
},
"$:/core/modules/parsers/textparser.js": {
"text": "/*\\\ntitle: $:/core/modules/parsers/textparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe plain text parser processes blocks of source text into a degenerate parse tree consisting of a single text node\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar TextParser = function(type,text,options) {\n\tthis.tree = [{\n\t\ttype: \"element\",\n\t\ttag: \"pre\",\n\t\tchildren: [{\n\t\t\ttype: \"text\",\n\t\t\ttext: text\n\t\t}]\n\t}];\n};\n\nexports[\"text/plain\"] = TextParser;\nexports[\"text/x-tiddlywiki\"] = TextParser;\nexports[\"application/javascript\"] = TextParser;\nexports[\"application/json\"] = TextParser;\nexports[\"text/css\"] = TextParser;\nexports[\"application/x-tiddler-dictionary\"] = TextParser;\n\n})();\n\n",
"title": "$:/core/modules/parsers/textparser.js",
"type": "application/javascript",
"module-type": "parser"
},
"$:/core/modules/parsers/wikiparser/rules/codeblock.js": {
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/codeblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for code blocks. For example:\n\n```\n\t```\n\tThis text will not be //wikified//\n\t```\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"codeblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match and get language if defined\n\tthis.matchRegExp = /```([\\w-]*)\\r?\\n/mg;\n};\n\nexports.parse = function() {\n\tvar reEnd = /(\\r?\\n```$)/mg;\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Look for the end of the block\n\treEnd.lastIndex = this.parser.pos;\n\tvar match = reEnd.exec(this.parser.source),\n\t\ttext;\n\t// Process the block\n\tif(match) {\n\t\ttext = this.parser.source.substring(this.parser.pos,match.index);\n\t\tthis.parser.pos = match.index + match[0].length;\n\t} else {\n\t\ttext = this.parser.source.substr(this.parser.pos);\n\t\tthis.parser.pos = this.parser.sourceLength;\n\t}\n\t// Return the $codeblock widget\n\treturn [{\n\t\t\ttype: \"element\",\n\t\t\ttag: \"$codeblock\",\n\t\t\tattributes: {\n\t\t\t\t\tcode: {type: \"string\", value: text},\n\t\t\t\t\tlanguage: {type: \"string\", value: this.match[1]}\n\t\t\t}\n\t}];\n};\n\n})();\n",
"title": "$:/core/modules/parsers/wikiparser/rules/codeblock.js",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/codeinline.js": {
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/codeinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for code runs. For example:\n\n```\n\tThis is a `code run`.\n\tThis is another ``code run``\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"codeinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /(``?)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\tvar reEnd = new RegExp(this.match[1], \"mg\");\n\t// Look for the end marker\n\treEnd.lastIndex = this.parser.pos;\n\tvar match = reEnd.exec(this.parser.source),\n\t\ttext;\n\t// Process the text\n\tif(match) {\n\t\ttext = this.parser.source.substring(this.parser.pos,match.index);\n\t\tthis.parser.pos = match.index + match[0].length;\n\t} else {\n\t\ttext = this.parser.source.substr(this.parser.pos);\n\t\tthis.parser.pos = this.parser.sourceLength;\n\t}\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"code\",\n\t\tchildren: [{\n\t\t\ttype: \"text\",\n\t\t\ttext: text\n\t\t}]\n\t}];\n};\n\n})();\n",
"title": "$:/core/modules/parsers/wikiparser/rules/codeinline.js",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/commentblock.js": {
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/commentblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for HTML comments. For example:\n\n```\n<!-- This is a comment -->\n```\n\nNote that the syntax for comments is simplified to an opening \"<!--\" sequence and a closing \"-->\" sequence -- HTML itself implements a more complex format (see http://ostermiller.org/findhtmlcomment.html)\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"commentblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\tthis.matchRegExp = /\\<!--/mg;\n\tthis.endMatchRegExp = /--\\>/mg;\n};\n\nexports.findNextMatch = function(startPos) {\n\tthis.matchRegExp.lastIndex = startPos;\n\tthis.match = this.matchRegExp.exec(this.parser.source);\n\tif(this.match) {\n\t\tthis.endMatchRegExp.lastIndex = startPos + this.match[0].length;\n\t\tthis.endMatch = this.endMatchRegExp.exec(this.parser.source);\n\t\tif(this.endMatch) {\n\t\t\treturn this.match.index;\n\t\t}\n\t}\n\treturn undefined;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.endMatchRegExp.lastIndex;\n\t// Don't return any elements\n\treturn [];\n};\n\n})();\n",
"title": "$:/core/modules/parsers/wikiparser/rules/commentblock.js",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/commentinline.js": {
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/commentinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for HTML comments. For example:\n\n```\n<!-- This is a comment -->\n```\n\nNote that the syntax for comments is simplified to an opening \"<!--\" sequence and a closing \"-->\" sequence -- HTML itself implements a more complex format (see http://ostermiller.org/findhtmlcomment.html)\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"commentinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\tthis.matchRegExp = /\\<!--/mg;\n\tthis.endMatchRegExp = /--\\>/mg;\n};\n\nexports.findNextMatch = function(startPos) {\n\tthis.matchRegExp.lastIndex = startPos;\n\tthis.match = this.matchRegExp.exec(this.parser.source);\n\tif(this.match) {\n\t\tthis.endMatchRegExp.lastIndex = startPos + this.match[0].length;\n\t\tthis.endMatch = this.endMatchRegExp.exec(this.parser.source);\n\t\tif(this.endMatch) {\n\t\t\treturn this.match.index;\n\t\t}\n\t}\n\treturn undefined;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.endMatchRegExp.lastIndex;\n\t// Don't return any elements\n\treturn [];\n};\n\n})();\n",
"title": "$:/core/modules/parsers/wikiparser/rules/commentinline.js",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/dash.js": {
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/dash.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for dashes. For example:\n\n```\nThis is an en-dash: --\n\nThis is an em-dash: ---\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"dash\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /-{2,3}(?!-)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\tvar dash = this.match[0].length === 2 ? \"–\" : \"—\";\n\treturn [{\n\t\ttype: \"entity\",\n\t\tentity: dash\n\t}];\n};\n\n})();\n",
"title": "$:/core/modules/parsers/wikiparser/rules/dash.js",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/emphasis.js": {
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for emphasis. For example:\n\n```\n\tThis is ''bold'' text\n\n\tThis is //italic// text\n\n\tThis is __underlined__ text\n\n\tThis is ^^superscript^^ text\n\n\tThis is ,,subscript,, text\n\n\tThis is ~~strikethrough~~ text\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"emphasis\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /''|\\/\\/|__|\\^\\^|,,|~~/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Figure out which element and closing regexp to use\n\tvar tag,reEnd;\n\tswitch(this.match[0]) {\n\t\tcase \"''\": // Bold\n\t\t\ttag = \"strong\";\n\t\t\treEnd = /''/mg;\n\t\t\tbreak;\n\t\tcase \"//\": // Italics\n\t\t\ttag = \"em\";\n\t\t\treEnd = /\\/\\//mg;\n\t\t\tbreak;\n\t\tcase \"__\": // Underline\n\t\t\ttag = \"u\";\n\t\t\treEnd = /__/mg;\n\t\t\tbreak;\n\t\tcase \"^^\": // Superscript\n\t\t\ttag = \"sup\";\n\t\t\treEnd = /\\^\\^/mg;\n\t\t\tbreak;\n\t\tcase \",,\": // Subscript\n\t\t\ttag = \"sub\";\n\t\t\treEnd = /,,/mg;\n\t\t\tbreak;\n\t\tcase \"~~\": // Strikethrough\n\t\t\ttag = \"strike\";\n\t\t\treEnd = /~~/mg;\n\t\t\tbreak;\n\t}\n\t// Parse the run including the terminator\n\tvar tree = this.parser.parseInlineRun(reEnd,{eatTerminator: true});\n\t// Return the classed span\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: tag,\n\t\tchildren: tree\n\t}];\n};\n\n})();\n",
"title": "$:/core/modules/parsers/wikiparser/rules/emphasis.js",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/entity.js": {
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/entity.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for HTML entities. For example:\n\n```\n\tThis is a copyright symbol: ©\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"entity\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /(&#?[a-zA-Z0-9]{2,8};)/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Get all the details of the match\n\tvar entityString = this.match[1];\n\t// Move past the macro call\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Return the entity\n\treturn [{type: \"entity\", entity: this.match[0]}];\n};\n\n})();\n",
"title": "$:/core/modules/parsers/wikiparser/rules/entity.js",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/extlink.js": {
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/extlink.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for external links. For example:\n\n```\nAn external link: http://www.tiddlywiki.com/\n\nA suppressed external link: ~http://www.tiddlyspace.com/\n```\n\nExternal links can be suppressed by preceding them with `~`.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"extlink\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /~?(?:file|http|https|mailto|ftp|irc|news|data|skype):[^\\s'\"<>]+(?:\\/|\\b)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Create the link unless it is suppressed\n\tif(this.match[0].substr(0,1) === \"~\") {\n\t\treturn [{type: \"text\", text: this.match[0].substr(1)}];\n\t} else {\n\t\treturn [{\n\t\t\ttype: \"element\",\n\t\t\ttag: \"a\",\n\t\t\tattributes: {\n\t\t\t\thref: {type: \"string\", value: this.match[0]},\n\t\t\t\t\"class\": {type: \"string\", value: \"tw-tiddlylink-external\"},\n\t\t\t\ttarget: {type: \"string\", value: \"_blank\"}\n\t\t\t},\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\", text: this.match[0]\n\t\t\t}]\n\t\t}];\n\t}\n};\n\n})();\n",
"title": "$:/core/modules/parsers/wikiparser/rules/extlink.js",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/filteredtranscludeblock.js": {
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/filteredtranscludeblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for block-level filtered transclusion. For example:\n\n```\n{{{ [tag[docs]] }}}\n{{{ [tag[docs]] |tooltip}}}\n{{{ [tag[docs]] ||TemplateTitle}}}\n{{{ [tag[docs]] |tooltip||TemplateTitle}}}\n{{{ [tag[docs]] }}width:40;height:50;}.class.class\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"filteredtranscludeblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\{\\{\\{([^\\|]+?)(?:\\|([^\\|\\{\\}]+))?(?:\\|\\|([^\\|\\{\\}]+))?\\}\\}([^\\}]*)\\}(?:\\.(\\S+))?(?:\\r?\\n|$)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Get the match details\n\tvar filter = this.match[1],\n\t\ttooltip = this.match[2],\n\t\ttemplate = $tw.utils.trim(this.match[3]),\n\t\tstyle = this.match[4],\n\t\tclasses = this.match[5];\n\t// Return the list widget\n\tvar node = {\n\t\ttype: \"element\",\n\t\ttag: \"$list\",\n\t\tattributes: {\n\t\t\tfilter: {type: \"string\", value: filter}\n\t\t},\n\t\tisBlock: true\n\t};\n\tif(tooltip) {\n\t\tnode.attributes.tooltip = {type: \"string\", value: tooltip};\n\t}\n\tif(template) {\n\t\tnode.attributes.template = {type: \"string\", value: template};\n\t}\n\tif(style) {\n\t\tnode.attributes.style = {type: \"string\", value: style};\n\t}\n\tif(classes) {\n\t\tnode.attributes[\"itemClass\"] = {type: \"string\", value: classes.split(\".\").join(\" \")};\n\t}\n\treturn [node];\n};\n\n})();\n",
"title": "$:/core/modules/parsers/wikiparser/rules/filteredtranscludeblock.js",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/filteredtranscludeinline.js": {
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/filteredtranscludeinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for inline filtered transclusion. For example:\n\n```\n{{{ [tag[docs]] }}}\n{{{ [tag[docs]] |tooltip}}}\n{{{ [tag[docs]] ||TemplateTitle}}}\n{{{ [tag[docs]] |tooltip||TemplateTitle}}}\n{{{ [tag[docs]] }}width:40;height:50;}.class.class\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"filteredtranscludeinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\{\\{\\{([^\\|]+?)(?:\\|([^\\|\\{\\}]+))?(?:\\|\\|([^\\|\\{\\}]+))?\\}\\}([^\\}]*)\\}(?:\\.(\\S+))?/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Get the match details\n\tvar filter = this.match[1],\n\t\ttooltip = this.match[2],\n\t\ttemplate = $tw.utils.trim(this.match[3]),\n\t\tstyle = this.match[4],\n\t\tclasses = this.match[5];\n\t// Return the list widget\n\tvar node = {\n\t\ttype: \"element\",\n\t\ttag: \"$list\",\n\t\tattributes: {\n\t\t\tfilter: {type: \"string\", value: filter}\n\t\t}\n\t};\n\tif(tooltip) {\n\t\tnode.attributes.tooltip = {type: \"string\", value: tooltip};\n\t}\n\tif(template) {\n\t\tnode.attributes.template = {type: \"string\", value: template};\n\t}\n\tif(style) {\n\t\tnode.attributes.style = {type: \"string\", value: style};\n\t}\n\tif(classes) {\n\t\tnode.attributes[\"itemClass\"] = {type: \"string\", value: classes.split(\".\").join(\" \")};\n\t}\n\treturn [node];\n};\n\n})();\n",
"title": "$:/core/modules/parsers/wikiparser/rules/filteredtranscludeinline.js",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/hardlinebreaks.js": {
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/hardlinebreaks.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for marking areas with hard line breaks. For example:\n\n```\n\"\"\"\nThis is some text\nThat is set like\nIt is a Poem\nWhen it is\nClearly\nNot\n\"\"\"\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"hardlinebreaks\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\"\"\"(?:\\r?\\n)?/mg;\n};\n\nexports.parse = function() {\n\tvar reEnd = /(\"\"\")|(\\r?\\n)/mg,\n\t\ttree = [];\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\tdo {\n\t\t// Parse the run up to the terminator\n\t\ttree.push.apply(tree,this.parser.parseInlineRun(reEnd,{eatTerminator: false}));\n\t\t// Redo the terminator match\n\t\treEnd.lastIndex = this.parser.pos;\n\t\tvar match = reEnd.exec(this.parser.source);\n\t\tif(match) {\n\t\t\tthis.parser.pos = reEnd.lastIndex;\n\t\t\t// Add a line break if the terminator was a line break\n\t\t\tif(match[2]) {\n\t\t\t\ttree.push({type: \"element\", tag: \"br\"});\n\t\t\t}\n\t\t}\n\t} while(match && !match[1]);\n\t// Return the nodes\n\treturn tree;\n};\n\n})();\n",
"title": "$:/core/modules/parsers/wikiparser/rules/hardlinebreaks.js",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/heading.js": {
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/heading.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for headings\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"heading\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /(!{1,6})/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Get all the details of the match\n\tvar headingLevel = this.match[1].length;\n\t// Move past the !s\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Parse any classes, whitespace and then the heading itself\n\tvar classes = this.parser.parseClasses();\n\tthis.parser.skipWhitespace({treatNewlinesAsNonWhitespace: true});\n\tvar tree = this.parser.parseInlineRun(/(\\r?\\n)/mg);\n\t// Return the heading\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"h\" + this.match[1].length, \n\t\tattributes: {\n\t\t\t\"class\": {type: \"string\", value: classes.join(\" \")}\n\t\t},\n\t\tchildren: tree\n\t}];\n};\n})();\n",
"title": "$:/core/modules/parsers/wikiparser/rules/heading.js",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/horizrule.js": {
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/horizrule.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for rules. For example:\n\n```\n---\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"horizrule\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /-{3,}\\r?(?:\\n|$)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\treturn [{type: \"element\", tag: \"hr\"}];\n};\n\n})();\n",
"title": "$:/core/modules/parsers/wikiparser/rules/horizrule.js",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/html.js": {
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/html.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki rule for HTML elements and widgets. For example:\n\n{{{\n<aside>\nThis is an HTML5 aside element\n</aside>\n\n<$slider target=\"MyTiddler\">\nThis is a widget invocation\n</$slider>\n\n}}}\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"html\";\nexports.types = {inline: true, block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n};\n\nexports.findNextMatch = function(startPos) {\n\t// Find the next tag\n\tthis.nextTag = this.findNextTag(this.parser.source,startPos,{\n\t\trequireLineBreak: this.is.block\n\t});\n\treturn this.nextTag ? this.nextTag.start : undefined;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Retrieve the most recent match so that recursive calls don't overwrite it\n\tvar tag = this.nextTag;\n\tthis.nextTag = null;\n\t// Advance the parser position to past the tag\n\tthis.parser.pos = tag.end;\n\t// Check for an immediately following double linebreak\n\tvar hasLineBreak = !tag.isSelfClosing && !!this.parseTokenRegExp(this.parser.source,this.parser.pos,/(\\r?\\n(?:\\r?\\n|$))/g);\n\t// Set whether we're in block mode\n\ttag.isBlock = this.is.block || hasLineBreak;\n\t// Parse the body if we need to\n\tif(!tag.isSelfClosing && $tw.config.htmlVoidElements.indexOf(tag.tag) === -1) {\n\t\t\tvar reEndString = \"</\" + $tw.utils.escapeRegExp(tag.tag) + \">\",\n\t\t\t\treEnd = new RegExp(\"(\" + reEndString + \")\",\"mg\");\n\t\tif(hasLineBreak) {\n\t\t\ttag.children = this.parser.parseBlocks(reEndString);\n\t\t} else {\n\t\t\ttag.children = this.parser.parseInlineRun(reEnd);\n\t\t}\n\t\treEnd.lastIndex = this.parser.pos;\n\t\tvar endMatch = reEnd.exec(this.parser.source);\n\t\tif(endMatch && endMatch.index === this.parser.pos) {\n\t\t\tthis.parser.pos = endMatch.index + endMatch[0].length;\n\t\t}\n\t}\n\t// Return the tag\n\treturn [tag];\n};\n\n/*\nLook for a whitespace token. Returns null if not found, otherwise returns {type: \"whitespace\", start:, end:,}\n*/\nexports.parseWhiteSpace = function(source,pos) {\n\tvar node = {\n\t\ttype: \"whitespace\",\n\t\tstart: pos\n\t};\n\tvar re = /(\\s)+/g;\n\tre.lastIndex = pos;\n\tvar match = re.exec(source);\n\tif(match && match.index === pos) {\n\t\tnode.end = pos + match[0].length;\n\t\treturn node;\n\t}\n\treturn null;\n};\n\n/*\nConvenience wrapper for parseWhiteSpace\n*/\nexports.skipWhiteSpace = function(source,pos) {\n\tvar whitespace = this.parseWhiteSpace(source,pos);\n\tif(whitespace) {\n\t\treturn whitespace.end;\n\t}\n\treturn pos;\n};\n\n/*\nLook for a given string token. Returns null if not found, otherwise returns {type: \"token\", value:, start:, end:,}\n*/\nexports.parseTokenString = function(source,pos,token) {\n\tvar match = source.indexOf(token,pos) === pos;\n\tif(match) {\n\t\treturn {\n\t\t\ttype: \"token\",\n\t\t\tvalue: token,\n\t\t\tstart: pos,\n\t\t\tend: pos + token.length\n\t\t};\n\t}\n\treturn null;\n};\n\n/*\nLook for a token matching a regex. Returns null if not found, otherwise returns {type: \"regexp\", match:, start:, end:,}\n*/\nexports.parseTokenRegExp = function(source,pos,reToken) {\n\tvar node = {\n\t\ttype: \"regexp\",\n\t\tstart: pos\n\t};\n\treToken.lastIndex = pos;\n\tnode.match = reToken.exec(source);\n\tif(node.match && node.match.index === pos) {\n\t\tnode.end = pos + node.match[0].length;\n\t\treturn node;\n\t} else {\n\t\treturn null;\n\t}\n};\n\n/*\nLook for a string literal. Returns null if not found, otherwise returns {type: \"string\", value:, start:, end:,}\n*/\nexports.parseStringLiteral = function(source,pos) {\n\tvar node = {\n\t\ttype: \"string\",\n\t\tstart: pos\n\t};\n\tvar reString = /(?:\"([^\"]*)\")|(?:'([^']*)')/g;\n\treString.lastIndex = pos;\n\tvar match = reString.exec(source);\n\tif(match && match.index === pos) {\n\t\tnode.value = match[1] === undefined ? match[2] : match[1];\n\t\tnode.end = pos + match[0].length;\n\t\treturn node;\n\t} else {\n\t\treturn null;\n\t}\n};\n\n/*\nLook for a macro invocation parameter. Returns null if not found, or {type: \"macro-parameter\", name:, value:, start:, end:}\n*/\nexports.parseMacroParameter = function(source,pos) {\n\tvar node = {\n\t\ttype: \"macro-parameter\",\n\t\tstart: pos\n\t};\n\t// Define our regexp\n\tvar reMacroParameter = /(?:([A-Za-z0-9\\-_]+)\\s*:)?(?:\\s*(?:\"([^\"]*)\"|'([^']*)'|\\[\\[([^\\]]*)\\]\\]|([^\\s>\"'=]+)))/g;\n\t// Skip whitespace\n\tpos = this.skipWhiteSpace(source,pos);\n\t// Look for the parameter\n\tvar token = this.parseTokenRegExp(source,pos,reMacroParameter);\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Get the parameter details\n\tnode.value = token.match[2] !== undefined ? token.match[2] : (\n\t\t\t\t\ttoken.match[3] !== undefined ? token.match[3] : (\n\t\t\t\t\t\ttoken.match[4] !== undefined ? token.match[4] : (\n\t\t\t\t\t\t\ttoken.match[5] !== undefined ? token.match[5] : (\n\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t);\n\tif(token.match[1]) {\n\t\tnode.name = token.match[1];\n\t}\n\t// Update the end position\n\tnode.end = pos;\n\treturn node;\n};\n\n/*\nLook for a macro invocation. Returns null if not found, or {type: \"macrocall\", name:, parameters:, start:, end:}\n*/\nexports.parseMacroInvocation = function(source,pos) {\n\tvar node = {\n\t\ttype: \"macrocall\",\n\t\tstart: pos,\n\t\tparams: []\n\t};\n\t// Define our regexps\n\tvar reMacroName = /([^\\s>\"'=]+)/g;\n\t// Skip whitespace\n\tpos = this.skipWhiteSpace(source,pos);\n\t// Look for a double less than sign\n\tvar token = this.parseTokenString(source,pos,\"<<\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Get the macro name\n\tvar name = this.parseTokenRegExp(source,pos,reMacroName);\n\tif(!name) {\n\t\treturn null;\n\t}\n\tnode.name = name.match[1];\n\tpos = name.end;\n\t// Process parameters\n\tvar parameter = this.parseMacroParameter(source,pos);\n\twhile(parameter) {\n\t\tnode.params.push(parameter);\n\t\tpos = parameter.end;\n\t\t// Get the next parameter\n\t\tparameter = this.parseMacroParameter(source,pos);\n\t}\n\t// Skip whitespace\n\tpos = this.skipWhiteSpace(source,pos);\n\t// Look for a double greater than sign\n\ttoken = this.parseTokenString(source,pos,\">>\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Update the end position\n\tnode.end = pos;\n\treturn node;\n};\n\n/*\nLook for an HTML attribute definition. Returns null if not found, otherwise returns {type: \"attribute\", name:, valueType: \"string|indirect|macro\", value:, start:, end:,}\n*/\nexports.parseAttribute = function(source,pos) {\n\tvar node = {\n\t\tstart: pos\n\t};\n\t// Define our regexps\n\tvar reAttributeName = /([^\\/\\s>\"'=]+)/g,\n\t\treUnquotedAttribute = /([^\\/\\s<>\"'=]+)/g,\n\t\treIndirectValue = /\\{\\{([^\\}]+)\\}\\}/g;\n\t// Skip whitespace\n\tpos = this.skipWhiteSpace(source,pos);\n\t// Get the attribute name\n\tvar name = this.parseTokenRegExp(source,pos,reAttributeName);\n\tif(!name) {\n\t\treturn null;\n\t}\n\tnode.name = name.match[1];\n\tpos = name.end;\n\t// Skip whitespace\n\tpos = this.skipWhiteSpace(source,pos);\n\t// Look for an equals sign\n\tvar token = this.parseTokenString(source,pos,\"=\");\n\tif(token) {\n\t\tpos = token.end;\n\t\t// Skip whitespace\n\t\tpos = this.skipWhiteSpace(source,pos);\n\t\t// Look for a string literal\n\t\tvar stringLiteral = this.parseStringLiteral(source,pos);\n\t\tif(stringLiteral) {\n\t\t\tpos = stringLiteral.end;\n\t\t\tnode.type = \"string\";\n\t\t\tnode.value = stringLiteral.value;\n\t\t} else {\n\t\t\t// Look for an indirect value\n\t\t\tvar indirectValue = this.parseTokenRegExp(source,pos,reIndirectValue);\n\t\t\tif(indirectValue) {\n\t\t\t\tpos = indirectValue.end;\n\t\t\t\tnode.type = \"indirect\";\n\t\t\t\tnode.textReference = indirectValue.match[1];\n\t\t\t} else {\n\t\t\t\t// Look for a unquoted value\n\t\t\t\tvar unquotedValue = this.parseTokenRegExp(source,pos,reUnquotedAttribute);\n\t\t\t\tif(unquotedValue) {\n\t\t\t\t\tpos = unquotedValue.end;\n\t\t\t\t\tnode.type = \"string\";\n\t\t\t\t\tnode.value = unquotedValue.match[1];\n\t\t\t\t} else {\n\t\t\t\t\t// Look for a macro invocation value\n\t\t\t\t\tvar macroInvocation = this.parseMacroInvocation(source,pos);\n\t\t\t\t\tif(macroInvocation) {\n\t\t\t\t\t\tpos = macroInvocation.end;\n\t\t\t\t\t\tnode.type = \"macro\";\n\t\t\t\t\t\tnode.value = macroInvocation;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnode.type = \"string\";\n\t\t\t\t\t\tnode.value = \"true\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} else {\n\t\tnode.type = \"string\";\n\t\tnode.value = \"true\";\n\t}\n\t// Update the end position\n\tnode.end = pos;\n\treturn node;\n};\n\n/*\nLook for an HTML tag. Returns null if not found, otherwise returns {type: \"tag\", name:, attributes: [], isSelfClosing:, start:, end:,}\n*/\nexports.parseTag = function(source,pos,options) {\n\toptions = options || {};\n\tvar token,\n\t\tnode = {\n\t\t\ttype: \"element\",\n\t\t\tstart: pos,\n\t\t\tattributes: {}\n\t\t};\n\t// Define our regexps\n\tvar reTagName = /([a-zA-Z0-9\\-\\$]+)/g;\n\t// Skip whitespace\n\tpos = this.skipWhiteSpace(source,pos);\n\t// Look for a less than sign\n\ttoken = this.parseTokenString(source,pos,\"<\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Get the tag name\n\ttoken = this.parseTokenRegExp(source,pos,reTagName);\n\tif(!token) {\n\t\treturn null;\n\t}\n\tnode.tag = token.match[1];\n\tpos = token.end;\n\t// Process attributes\n\tvar attribute = this.parseAttribute(source,pos);\n\twhile(attribute) {\n\t\tnode.attributes[attribute.name] = attribute;\n\t\tpos = attribute.end;\n\t\t// Get the next attribute\n\t\tattribute = this.parseAttribute(source,pos);\n\t}\n\t// Skip whitespace\n\tpos = this.skipWhiteSpace(source,pos);\n\t// Look for a closing slash\n\ttoken = this.parseTokenString(source,pos,\"/\");\n\tif(token) {\n\t\tpos = token.end;\n\t\tnode.isSelfClosing = true;\n\t}\n\t// Look for a greater than sign\n\ttoken = this.parseTokenString(source,pos,\">\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Check for a required line break\n\tif(options.requireLineBreak) {\n\t\ttoken = this.parseTokenRegExp(source,pos,/(\\r?\\n(?:\\r?\\n|$))/g);\n\t\tif(!token) {\n\t\t\treturn null;\n\t\t}\n\t}\n\t// Update the end position\n\tnode.end = pos;\n\treturn node;\n};\n\nexports.findNextTag = function(source,pos,options) {\n\t// A regexp for finding candidate HTML tags\n\tvar reLookahead = /<([a-zA-Z\\-\\$]+)/g;\n\t// Find the next candidate\n\treLookahead.lastIndex = pos;\n\tvar match = reLookahead.exec(source);\n\twhile(match) {\n\t\t// Try to parse the candidate as a tag\n\t\tvar tag = this.parseTag(source,match.index,options);\n\t\t// Return success\n\t\tif(tag && this.isLegalTag(tag.tag)) {\n\t\t\treturn tag;\n\t\t}\n\t\t// Look for the next match\n\t\treLookahead.lastIndex = match.index + 1;\n\t\tmatch = reLookahead.exec(source);\n\t}\n\t// Failed\n\treturn null;\n};\n\nexports.isLegalTag = function(tag) {\n\t// If it starts with a $ then we'll let anything go\n\tif(tag.charAt(0) === \"$\") {\n\t\treturn true;\n\t// If it starts with a dash then it's not legal\n\t} else if(tag.charAt(0) === \"-\") {\n\t\treturn false;\n\t} else {\n\t\t// Otherwise it's OK\n\t\treturn true;\n\t}\n};\n\n})();\n",
"title": "$:/core/modules/parsers/wikiparser/rules/html.js",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/list.js": {
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/list.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for lists. For example:\n\n```\n* This is an unordered list\n* It has two items\n\n# This is a numbered list\n## With a subitem\n# And a third item\n\n; This is a term that is being defined\n: This is the definition of that term\n```\n\nNote that lists can be nested arbitrarily:\n\n```\n#** One\n#* Two\n#** Three\n#**** Four\n#**# Five\n#**## Six\n## Seven\n### Eight\n## Nine\n```\n\nA CSS class can be applied to a list item as follows:\n\n```\n* List item one\n*.active List item two has the class `active`\n* List item three\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"list\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /([\\*#;:>]+)/mg;\n};\n\nvar listTypes = {\n\t\"*\": {listTag: \"ul\", itemTag: \"li\"},\n\t\"#\": {listTag: \"ol\", itemTag: \"li\"},\n\t\";\": {listTag: \"dl\", itemTag: \"dt\"},\n\t\":\": {listTag: \"dl\", itemTag: \"dd\"},\n\t\">\": {listTag: \"blockquote\", itemTag: \"p\"}\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Array of parse tree nodes for the previous row of the list\n\tvar listStack = [];\n\t// Cycle through the items in the list\n\twhile(true) {\n\t\t// Match the list marker\n\t\tvar reMatch = /([\\*#;:>]+)/mg;\n\t\treMatch.lastIndex = this.parser.pos;\n\t\tvar match = reMatch.exec(this.parser.source);\n\t\tif(!match || match.index !== this.parser.pos) {\n\t\t\tbreak;\n\t\t}\n\t\t// Check whether the list type of the top level matches\n\t\tvar listInfo = listTypes[match[0].charAt(0)];\n\t\tif(listStack.length > 0 && listStack[0].tag !== listInfo.listTag) {\n\t\t\tbreak;\n\t\t}\n\t\t// Move past the list marker\n\t\tthis.parser.pos = match.index + match[0].length;\n\t\t// Walk through the list markers for the current row\n\t\tfor(var t=0; t<match[0].length; t++) {\n\t\t\tlistInfo = listTypes[match[0].charAt(t)];\n\t\t\t// Remove any stacked up element if we can't re-use it because the list type doesn't match\n\t\t\tif(listStack.length > t && listStack[t].tag !== listInfo.listTag) {\n\t\t\t\tlistStack.splice(t,listStack.length - t);\n\t\t\t}\n\t\t\t// Construct the list element or reuse the previous one at this level\n\t\t\tif(listStack.length <= t) {\n\t\t\t\tvar listElement = {type: \"element\", tag: listInfo.listTag, children: [\n\t\t\t\t\t{type: \"element\", tag: listInfo.itemTag, children: []}\n\t\t\t\t]};\n\t\t\t\t// Link this list element into the last child item of the parent list item\n\t\t\t\tif(t) {\n\t\t\t\t\tvar prevListItem = listStack[t-1].children[listStack[t-1].children.length-1];\n\t\t\t\t\tprevListItem.children.push(listElement);\n\t\t\t\t}\n\t\t\t\t// Save this element in the stack\n\t\t\t\tlistStack[t] = listElement;\n\t\t\t} else if(t === (match[0].length - 1)) {\n\t\t\t\tlistStack[t].children.push({type: \"element\", tag: listInfo.itemTag, children: []});\n\t\t\t}\n\t\t}\n\t\tif(listStack.length > match[0].length) {\n\t\t\tlistStack.splice(match[0].length,listStack.length - match[0].length);\n\t\t}\n\t\t// Process the body of the list item into the last list item\n\t\tvar lastListChildren = listStack[listStack.length-1].children,\n\t\t\tlastListItem = lastListChildren[lastListChildren.length-1],\n\t\t\tclasses = this.parser.parseClasses();\n\t\tthis.parser.skipWhitespace({treatNewlinesAsNonWhitespace: true});\n\t\tvar tree = this.parser.parseInlineRun(/(\\r?\\n)/mg);\n\t\tlastListItem.children.push.apply(lastListItem.children,tree);\n\t\tif(classes.length > 0) {\n\t\t\t$tw.utils.addClassToParseTreeNode(lastListItem,classes.join(\" \"));\n\t\t}\n\t\t// Consume any whitespace following the list item\n\t\tthis.parser.skipWhitespace();\n\t}\n\t// Return the root element of the list\n\treturn [listStack[0]];\n};\n\n})();\n",
"title": "$:/core/modules/parsers/wikiparser/rules/list.js",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/macrocallblock.js": {
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/macrocallblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki rule for block macro calls\n\n```\n<<name value value2>>\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"macrocallblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /<<([^>\\s]+)(?:\\s*)((?:[^>]|(?:>(?!>)))*?)>>(?:\\r?\\n|$)/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Get all the details of the match\n\tvar macroName = this.match[1],\n\t\tparamString = this.match[2];\n\t// Move past the macro call\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\tvar params = [],\n\t\treParam = /\\s*(?:([A-Za-z0-9\\-_]+)\\s*:)?(?:\\s*(?:\"([^\"]*)\"|'([^']*)'|\\[\\[([^\\]]*)\\]\\]|([^\"'\\s]+)))/mg,\n\t\tparamMatch = reParam.exec(paramString);\n\twhile(paramMatch) {\n\t\t// Process this parameter\n\t\tvar paramInfo = {\n\t\t\tvalue: paramMatch[2] || paramMatch[3] || paramMatch[4] || paramMatch[5]\n\t\t};\n\t\tif(paramMatch[1]) {\n\t\t\tparamInfo.name = paramMatch[1];\n\t\t}\n\t\tparams.push(paramInfo);\n\t\t// Find the next match\n\t\tparamMatch = reParam.exec(paramString);\n\t}\n\treturn [{\n\t\ttype: \"macrocall\",\n\t\tname: macroName,\n\t\tparams: params,\n\t\tisBlock: true\n\t}];\n};\n\n})();\n",
"title": "$:/core/modules/parsers/wikiparser/rules/macrocallblock.js",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/macrocallinline.js": {
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/macrocallinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki rule for macro calls\n\n```\n<<name value value2>>\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"macrocallinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /<<([^\\s>]+)\\s*([\\s\\S]*?)>>/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Get all the details of the match\n\tvar macroName = this.match[1],\n\t\tparamString = this.match[2];\n\t// Move past the macro call\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\tvar params = [],\n\t\treParam = /\\s*(?:([A-Za-z0-9\\-_]+)\\s*:)?(?:\\s*(?:\"([^\"]*)\"|'([^']*)'|\\[\\[([^\\]]*)\\]\\]|([^\"'\\s]+)))/mg,\n\t\tparamMatch = reParam.exec(paramString);\n\twhile(paramMatch) {\n\t\t// Process this parameter\n\t\tvar paramInfo = {\n\t\t\tvalue: paramMatch[2] || paramMatch[3] || paramMatch[4] || paramMatch[5]\n\t\t};\n\t\tif(paramMatch[1]) {\n\t\t\tparamInfo.name = paramMatch[1];\n\t\t}\n\t\tparams.push(paramInfo);\n\t\t// Find the next match\n\t\tparamMatch = reParam.exec(paramString);\n\t}\n\treturn [{\n\t\ttype: \"macrocall\",\n\t\tname: macroName,\n\t\tparams: params\n\t}];\n};\n\n})();\n",
"title": "$:/core/modules/parsers/wikiparser/rules/macrocallinline.js",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/macrodef.js": {
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/macrodef.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki pragma rule for macro definitions\n\n```\n\\define name(param:defaultvalue,param2:defaultvalue)\ndefinition text, including $param$ markers\n\\end\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"macrodef\";\nexports.types = {pragma: true};\n\n/*\nInstantiate parse rule\n*/\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /^\\\\define\\s+([^(\\s]+)\\(\\s*([^)]*)\\)(\\r?\\n)?/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Move past the macro name and parameters\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Parse the parameters\n\tvar paramString = this.match[2],\n\t\tparams = [];\n\tif(paramString !== \"\") {\n\t\tvar reParam = /\\s*([A-Za-z0-9\\-_]+)(?:\\s*:\\s*(?:\"([^\"]*)\"|'([^']*)'|\\[\\[([^\\]]*)\\]\\]|([^\"'\\s]+)))?/mg,\n\t\t\tparamMatch = reParam.exec(paramString);\n\t\twhile(paramMatch) {\n\t\t\t// Save the parameter details\n\t\t\tvar paramInfo = {name: paramMatch[1]},\n\t\t\t\tdefaultValue = paramMatch[2] || paramMatch[3] || paramMatch[4] || paramMatch[5];\n\t\t\tif(defaultValue) {\n\t\t\t\tparamInfo[\"default\"] = defaultValue;\n\t\t\t}\n\t\t\tparams.push(paramInfo);\n\t\t\t// Look for the next parameter\n\t\t\tparamMatch = reParam.exec(paramString);\n\t\t}\n\t}\n\t// Is this a multiline definition?\n\tvar reEnd;\n\tif(this.match[3]) {\n\t\t// If so, the end of the body is marked with \\end\n\t\treEnd = /(\\r?\\n\\\\end\\r?\\n)/mg;\n\t} else {\n\t\t// Otherwise, the end of the definition is marked by the end of the line\n\t\treEnd = /(\\r?\\n)/mg;\n\t}\n\t// Find the end of the definition\n\treEnd.lastIndex = this.parser.pos;\n\tvar text,\n\t\tendMatch = reEnd.exec(this.parser.source);\n\tif(endMatch) {\n\t\ttext = this.parser.source.substring(this.parser.pos,endMatch.index);\n\t\tthis.parser.pos = endMatch.index + endMatch[0].length;\n\t} else {\n\t\t// We didn't find the end of the definition, so we'll make it blank\n\t\ttext = \"\";\n\t}\n\t// Save the macro definition\n\treturn [{\n\t\ttype: \"macrodef\",\n\t\tname: this.match[1],\n\t\tparams: params,\n\t\ttext: text\n\t}];\n};\n\n})();\n",
"title": "$:/core/modules/parsers/wikiparser/rules/macrodef.js",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/prettylink.js": {
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/prettylink.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for pretty links. For example:\n\n```\n[[Introduction]]\n\n[[Link description|TiddlerTitle]]\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"prettylink\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\[\\[(.*?)(?:\\|(.*?))?\\]\\]/mg;\n};\n\nvar isLinkExternal = function(to) {\n\tvar externalRegExp = /(?:file|http|https|mailto|ftp|irc|news|data|skype):[^\\s'\"]+(?:\\/|\\b)/i;\n\treturn externalRegExp.test(to);\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Process the link\n\tvar text = this.match[1],\n\t\tlink = this.match[2] || text;\n\tif(isLinkExternal(link)) {\n\t\treturn [{\n\t\t\ttype: \"element\",\n\t\t\ttag: \"a\",\n\t\t\tattributes: {\n\t\t\t\thref: {type: \"string\", value: link},\n\t\t\t\t\"class\": {type: \"string\", value: \"tw-tiddlylink-external\"},\n\t\t\t\ttarget: {type: \"string\", value: \"_blank\"}\n\t\t\t},\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\", text: text\n\t\t\t}]\n\t\t}];\n\t} else {\n\t\treturn [{\n\t\t\ttype: \"element\",\n\t\t\ttag: \"$link\",\n\t\t\tattributes: {\n\t\t\t\tto: {type: \"string\", value: link}\n\t\t\t},\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\", text: text\n\t\t\t}]\n\t\t}];\n\t}\n};\n\n})();\n",
"title": "$:/core/modules/parsers/wikiparser/rules/prettylink.js",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/quoteblock.js": {
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/quoteblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for quote blocks. For example:\n\n```\n\t<<<.optionalClass(es) optional cited from\n\ta quote\n\t<<<\n\t\n\t<<<.optionalClass(es)\n\ta quote\n\t<<< optional cited from\n```\n\nQuotes can be quoted by putting more <s\n\n```\n\t<<<\n\tQuote Level 1\n\t\n\t<<<<\n\tQuoteLevel 2\n\t<<<<\n\t\n\t<<<\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"quoteblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /(<<<+)/mg;\n};\n\nexports.parse = function() {\n\tvar classes = [\"tw-quote\"];\n\t// Get all the details of the match\n\tvar reEndString = \"^\" + this.match[1] + \"(?!<)\";\n\t// Move past the <s\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t\n\t// Parse any classes, whitespace and then the optional cite itself\n\tclasses.push.apply(classes, this.parser.parseClasses());\n\tthis.parser.skipWhitespace({treatNewlinesAsNonWhitespace: true});\n\tvar cite = this.parser.parseInlineRun(/(\\r?\\n)/mg);\n\n\t// before handling the cite, parse the body of the quote\n\tvar tree= this.parser.parseBlocks(reEndString);\n\t// If we got a cite, put it before the text\n\tif(cite.length > 0) {\n\t\ttree.unshift({\n\t\t\ttype: \"element\",\n\t\t\ttag: \"cite\",\n\t\t\tchildren: cite\n\t\t});\n\t}\n\n\t// Parse any optional cite\n\tthis.parser.skipWhitespace({treatNewlinesAsNonWhitespace: true});\n\tvar cite = this.parser.parseInlineRun(/(\\r?\\n)/mg);\n\t// If we got a cite, push it\n\tif(cite.length > 0) {\n\t\ttree.push({\n\t\t\ttype: \"element\",\n\t\t\ttag: \"cite\",\n\t\t\tchildren: cite\n\t\t});\n\t}\n\n\t// Return the blockquote element\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"blockquote\",\n\t\tattributes: {\n\t\t\tclass: { type: \"string\", value: classes.join(\" \") },\n\t\t},\n\t\tchildren: tree\n\t}];\n};\n\n})();\n",
"title": "$:/core/modules/parsers/wikiparser/rules/quoteblock.js",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/rules.js": {
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/rules.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki pragma rule for rules specifications\n\n```\n\\rules except ruleone ruletwo rulethree\n\\rules only ruleone ruletwo rulethree\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"rules\";\nexports.types = {pragma: true};\n\n/*\nInstantiate parse rule\n*/\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /^\\\\rules[^\\S\\n]/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Move past the pragma invocation\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Parse whitespace delimited tokens terminated by a line break\n\tvar reMatch = /[^\\S\\n]*(\\S+)|(\\r?\\n)/mg,\n\t\ttokens = [];\n\treMatch.lastIndex = this.parser.pos;\n\tvar match = reMatch.exec(this.parser.source);\n\twhile(match && match.index === this.parser.pos) {\n\t\tthis.parser.pos = reMatch.lastIndex;\n\t\t// Exit if we've got the line break\n\t\tif(match[2]) {\n\t\t\tbreak;\n\t\t}\n\t\t// Process the token\n\t\tif(match[1]) {\n\t\t\ttokens.push(match[1]);\n\t\t}\n\t\t// Match the next token\n\t\tmatch = reMatch.exec(this.parser.source);\n\t}\n\t// Process the tokens\n\tif(tokens.length > 0) {\n\t\tthis.parser.amendRules(tokens[0],tokens.slice(1));\n\t}\n\t// No parse tree nodes to return\n\treturn [];\n};\n\n})();\n",
"title": "$:/core/modules/parsers/wikiparser/rules/rules.js",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/styleblock.js": {
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/styleblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for assigning styles and classes to paragraphs and other blocks. For example:\n\n```\n@@.myClass\n@@background-color:red;\nThis paragraph will have the CSS class `myClass`.\n\n* The `<ul>` around this list will also have the class `myClass`\n* List item 2\n\n@@\n```\n\nNote that classes and styles can be mixed subject to the rule that styles must precede classes. For example\n\n```\n@@.myFirstClass.mySecondClass\n@@width:100px;.myThirdClass\nThis is a paragraph\n@@\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"styleblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /@@((?:[^\\.\\r\\n\\s:]+:[^\\r\\n;]+;)+)?(?:\\.([^\\r\\n\\s]+))?\\r?\\n/mg;\n};\n\nexports.parse = function() {\n\tvar reEndString = \"^@@(?:\\\\r?\\\\n)?\";\n\tvar classes = [], styles = [];\n\tdo {\n\t\t// Get the class and style\n\t\tif(this.match[1]) {\n\t\t\tstyles.push(this.match[1]);\n\t\t}\n\t\tif(this.match[2]) {\n\t\t\tclasses.push(this.match[2].split(\".\").join(\" \"));\n\t\t}\n\t\t// Move past the match\n\t\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t\t// Look for another line of classes and styles\n\t\tthis.match = this.matchRegExp.exec(this.parser.source);\n\t} while(this.match && this.match.index === this.parser.pos);\n\t// Parse the body\n\tvar tree = this.parser.parseBlocks(reEndString);\n\tfor(var t=0; t<tree.length; t++) {\n\t\tif(classes.length > 0) {\n\t\t\t$tw.utils.addClassToParseTreeNode(tree[t],classes.join(\" \"));\n\t\t}\n\t\tif(styles.length > 0) {\n\t\t\t$tw.utils.addAttributeToParseTreeNode(tree[t],\"style\",styles.join(\"\"));\n\t\t}\n\t}\n\treturn tree;\n};\n\n})();\n",
"title": "$:/core/modules/parsers/wikiparser/rules/styleblock.js",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/styleinline.js": {
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/styleinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for assigning styles and classes to inline runs. For example:\n\n```\n@@.myClass This is some text with a class@@\n@@background-color:red;This is some text with a background colour@@\n@@width:100px;.myClass This is some text with a class and a width@@\n```\n\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"styleinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /@@((?:[^\\.\\r\\n\\s:]+:[^\\r\\n;]+;)+)?(\\.(?:[^\\r\\n\\s]+)\\s+)?/mg;\n};\n\nexports.parse = function() {\n\tvar reEnd = /@@/g;\n\t// Get the styles and class\n\tvar stylesString = this.match[1],\n\t\tclassString = this.match[2] ? this.match[2].split(\".\").join(\" \") : undefined;\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Parse the run up to the terminator\n\tvar tree = this.parser.parseInlineRun(reEnd,{eatTerminator: true});\n\t// Return the classed span\n\tvar node = {\n\t\ttype: \"element\",\n\t\ttag: \"span\",\n\t\tattributes: {\n\t\t\t\"class\": {type: \"string\", value: \"tw-inline-style\"}\n\t\t},\n\t\tchildren: tree\n\t};\n\tif(classString) {\n\t\t$tw.utils.addClassToParseTreeNode(node,classString);\n\t}\n\tif(stylesString) {\n\t\t$tw.utils.addAttributeToParseTreeNode(node,\"style\",stylesString);\n\t}\n\treturn [node];\n};\n\n})();\n",
"title": "$:/core/modules/parsers/wikiparser/rules/styleinline.js",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/table.js": {
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/table.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for tables.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"table\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /^\\|(?:[^\\n]*)\\|(?:[fhck]?)\\r?(?:\\n|$)/mg;\n};\n\nvar processRow = function(prevColumns) {\n\tvar cellRegExp = /(?:\\|([^\\n\\|]*)\\|)|(\\|[fhck]?\\r?(?:\\n|$))/mg,\n\t\tcellTermRegExp = /((?:\\x20*)\\|)/mg,\n\t\ttree = [],\n\t\tcol = 0,\n\t\tcolSpanCount = 1,\n\t\tprevCell;\n\t// Match a single cell\n\tcellRegExp.lastIndex = this.parser.pos;\n\tvar cellMatch = cellRegExp.exec(this.parser.source);\n\twhile(cellMatch && cellMatch.index === this.parser.pos) {\n\t\tif(cellMatch[1] === \"~\") {\n\t\t\t// Rowspan\n\t\t\tvar last = prevColumns[col];\n\t\t\tif(last) {\n\t\t\t\tlast.rowSpanCount++;\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(last.element,\"rowspan\",last.rowSpanCount);\n\t\t\t\tvar vAlign = $tw.utils.getAttributeValueFromParseTreeNode(last.element,\"valign\",\"center\");\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(last.element,\"valign\",vAlign);\n\t\t\t\tif(colSpanCount > 1) {\n\t\t\t\t\t$tw.utils.addAttributeToParseTreeNode(last.element,\"colspan\",colSpanCount);\n\t\t\t\t\tcolSpanCount = 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Move to just before the `|` terminating the cell\n\t\t\tthis.parser.pos = cellRegExp.lastIndex - 1;\n\t\t} else if(cellMatch[1] === \">\") {\n\t\t\t// Colspan\n\t\t\tcolSpanCount++;\n\t\t\t// Move to just before the `|` terminating the cell\n\t\t\tthis.parser.pos = cellRegExp.lastIndex - 1;\n\t\t} else if(cellMatch[1] === \"<\" && prevCell) {\n\t\t\tcolSpanCount = 1 + $tw.utils.getAttributeValueFromParseTreeNode(prevCell,\"colspan\",1);\n\t\t\t$tw.utils.addAttributeToParseTreeNode(prevCell,\"colspan\",colSpanCount);\n\t\t\tcolSpanCount = 1;\n\t\t\t// Move to just before the `|` terminating the cell\n\t\t\tthis.parser.pos = cellRegExp.lastIndex - 1;\n\t\t} else if(cellMatch[2]) {\n\t\t\t// End of row\n\t\t\tif(prevCell && colSpanCount > 1) {\n\t\t\t\tif(prevCell.attributes && prevCell.attributes && prevCell.attributes.colspan) {\n\t\t\t\t\t\tcolSpanCount += prevCell.attributes.colspan.value;\n\t\t\t\t} else {\n\t\t\t\t\tcolSpanCount -= 1;\n\t\t\t\t}\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(prevCell,\"colspan\",colSpanCount);\n\t\t\t}\n\t\t\tthis.parser.pos = cellRegExp.lastIndex - 1;\n\t\t\tbreak;\n\t\t} else {\n\t\t\t// For ordinary cells, step beyond the opening `|`\n\t\t\tthis.parser.pos++;\n\t\t\t// Look for a space at the start of the cell\n\t\t\tvar spaceLeft = false,\n\t\t\t\tvAlign = null;\n\t\t\tif(this.parser.source.substr(this.parser.pos).search(/^\\^([^\\^]|\\^\\^)/) === 0) {\n\t\t\t\tvAlign = \"top\";\n\t\t\t} else if(this.parser.source.substr(this.parser.pos).search(/^,([^,]|,,)/) === 0) {\n\t\t\t\tvAlign = \"bottom\";\n\t\t\t}\n\t\t\tif(vAlign) {\n\t\t\t\tthis.parser.pos++;\n\t\t\t}\n\t\t\tvar chr = this.parser.source.substr(this.parser.pos,1);\n\t\t\twhile(chr === \" \") {\n\t\t\t\tspaceLeft = true;\n\t\t\t\tthis.parser.pos++;\n\t\t\t\tchr = this.parser.source.substr(this.parser.pos,1);\n\t\t\t}\n\t\t\t// Check whether this is a heading cell\n\t\t\tvar cell;\n\t\t\tif(chr === \"!\") {\n\t\t\t\tthis.parser.pos++;\n\t\t\t\tcell = {type: \"element\", tag: \"th\", children: []};\n\t\t\t} else {\n\t\t\t\tcell = {type: \"element\", tag: \"td\", children: []};\n\t\t\t}\n\t\t\ttree.push(cell);\n\t\t\t// Record information about this cell\n\t\t\tprevCell = cell;\n\t\t\tprevColumns[col] = {rowSpanCount:1,element:cell};\n\t\t\t// Check for a colspan\n\t\t\tif(colSpanCount > 1) {\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(cell,\"colspan\",colSpanCount);\n\t\t\t\tcolSpanCount = 1;\n\t\t\t}\n\t\t\t// Parse the cell\n\t\t\tcell.children = this.parser.parseInlineRun(cellTermRegExp,{eatTerminator: true});\n\t\t\t// Set the alignment for the cell\n\t\t\tif(vAlign) {\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(cell,\"valign\",vAlign);\n\t\t\t}\n\t\t\tif(this.parser.source.substr(this.parser.pos - 2,1) === \" \") { // spaceRight\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(cell,\"align\",spaceLeft ? \"center\" : \"left\");\n\t\t\t} else if(spaceLeft) {\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(cell,\"align\",\"right\");\n\t\t\t}\n\t\t\t// Move back to the closing `|`\n\t\t\tthis.parser.pos--;\n\t\t}\n\t\tcol++;\n\t\tcellRegExp.lastIndex = this.parser.pos;\n\t\tcellMatch = cellRegExp.exec(this.parser.source);\n\t}\n\treturn tree;\n};\n\nexports.parse = function() {\n\tvar rowContainerTypes = {\"c\":\"caption\", \"h\":\"thead\", \"\":\"tbody\", \"f\":\"tfoot\"},\n\t\ttable = {type: \"element\", tag: \"table\", children: []},\n\t\trowRegExp = /^\\|([^\\n]*)\\|([fhck]?)\\r?(?:\\n|$)/mg,\n\t\trowTermRegExp = /(\\|(?:[fhck]?)\\r?(?:\\n|$))/mg,\n\t\tprevColumns = [],\n\t\tcurrRowType,\n\t\trowContainer,\n\t\trowCount = 0;\n\t// Match the row\n\trowRegExp.lastIndex = this.parser.pos;\n\tvar rowMatch = rowRegExp.exec(this.parser.source);\n\twhile(rowMatch && rowMatch.index === this.parser.pos) {\n\t\tvar rowType = rowMatch[2];\n\t\t// Check if it is a class assignment\n\t\tif(rowType === \"k\") {\n\t\t\t$tw.utils.addClassToParseTreeNode(table,rowMatch[1]);\n\t\t\tthis.parser.pos = rowMatch.index + rowMatch[0].length;\n\t\t} else {\n\t\t\t// Otherwise, create a new row if this one is of a different type\n\t\t\tif(rowType !== currRowType) {\n\t\t\t\trowContainer = {type: \"element\", tag: rowContainerTypes[rowType], children: []};\n\t\t\t\ttable.children.push(rowContainer);\n\t\t\t\tcurrRowType = rowType;\n\t\t\t}\n\t\t\t// Is this a caption row?\n\t\t\tif(currRowType === \"c\") {\n\t\t\t\t// If so, move past the opening `|` of the row\n\t\t\t\tthis.parser.pos++;\n\t\t\t\t// Move the caption to the first row if it isn't already\n\t\t\t\tif(table.children.length !== 1) {\n\t\t\t\t\ttable.children.pop(); // Take rowContainer out of the children array\n\t\t\t\t\ttable.children.splice(0,0,rowContainer); // Insert it at the bottom\t\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\t// Set the alignment - TODO: figure out why TW did this\n//\t\t\t\trowContainer.attributes.align = rowCount === 0 ? \"top\" : \"bottom\";\n\t\t\t\t// Parse the caption\n\t\t\t\trowContainer.children = this.parser.parseInlineRun(rowTermRegExp,{eatTerminator: true});\n\t\t\t} else {\n\t\t\t\t// Create the row\n\t\t\t\tvar theRow = {type: \"element\", tag: \"tr\", children: []};\n\t\t\t\t$tw.utils.addClassToParseTreeNode(theRow,rowCount%2 ? \"oddRow\" : \"evenRow\");\n\t\t\t\trowContainer.children.push(theRow);\n\t\t\t\t// Process the row\n\t\t\t\ttheRow.children = processRow.call(this,prevColumns);\n\t\t\t\tthis.parser.pos = rowMatch.index + rowMatch[0].length;\n\t\t\t\t// Increment the row count\n\t\t\t\trowCount++;\n\t\t\t}\n\t\t}\n\t\trowMatch = rowRegExp.exec(this.parser.source);\n\t}\n\treturn [table];\n};\n\n})();\n",
"title": "$:/core/modules/parsers/wikiparser/rules/table.js",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/transcludeblock.js": {
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/transcludeblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for block-level transclusion. For example:\n\n```\n{{MyTiddler}}\n{{MyTiddler||TemplateTitle}}\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"transcludeblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\{\\{([^\\{\\}\\|]+)(?:\\|\\|([^\\|\\{\\}]+))?\\}\\}(?:\\r?\\n|$)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Get the match details\n\tvar textRef = $tw.utils.trim(this.match[1]),\n\t\ttr = $tw.utils.parseTextReference(textRef),\n\t\ttargetTitle = tr.title,\n\t\ttargetField = tr.field,\n\t\ttargetIndex = tr.index,\n\t\ttemplate = $tw.utils.trim(this.match[2]);\n\t// Prepare the transclude widget\n\tvar transcludeNode = {\n\t\t\ttype: \"element\",\n\t\t\ttag: \"$transclude\",\n\t\t\tattributes: {},\n\t\t\tisBlock: true\n\t\t};\n\tvar tiddlerNode = {\n\t\ttype: \"element\",\n\t\ttag: \"$tiddler\",\n\t\tattributes: {\n\t\t\ttiddler: {type: \"string\", value: targetTitle}\n\t\t},\n\t\tisBlock: true,\n\t\tchildren: [transcludeNode]\n\t};\n\tif(template) {\n\t\ttranscludeNode.attributes.tiddler = {type: \"string\", value: template};\n\t} else {\n\t\ttranscludeNode.attributes.tiddler = {type: \"string\", value: targetTitle};\n\t\tif(targetField) {\n\t\t\ttranscludeNode.attributes.field = {type: \"string\", value: targetField};\n\t\t}\n\t\tif(targetIndex) {\n\t\t\ttranscludeNode.attributes.index = {type: \"string\", value: targetIndex};\n\t\t}\n\t}\n\treturn [tiddlerNode];\n};\n\n})();\n",
"title": "$:/core/modules/parsers/wikiparser/rules/transcludeblock.js",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/transcludeinline.js": {
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/transcludeinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for inline-level transclusion. For example:\n\n```\n{{MyTiddler}}\n{{MyTiddler||TemplateTitle}}\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"transcludeinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\{\\{([^\\{\\}\\|]+)(?:\\|\\|([^\\|\\{\\}]+))?\\}\\}/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Get the match details\n\tvar textRef = $tw.utils.trim(this.match[1]),\n\t\ttr = $tw.utils.parseTextReference(textRef),\n\t\ttargetTitle = tr.title,\n\t\ttargetField = tr.field,\n\t\ttargetIndex = tr.index,\n\t\ttemplate = $tw.utils.trim(this.match[2]);\n\t// Prepare the transclude widget\n\tvar transcludeNode = {\n\t\t\ttype: \"element\",\n\t\t\ttag: \"$transclude\",\n\t\t\tattributes: {}\n\t\t};\n\tvar tiddlerNode = {\n\t\ttype: \"element\",\n\t\ttag: \"$tiddler\",\n\t\tattributes: {\n\t\t\ttiddler: {type: \"string\", value: targetTitle}\n\t\t},\n\t\tchildren: [transcludeNode]\n\t};\n\tif(template) {\n\t\ttranscludeNode.attributes.tiddler = {type: \"string\", value: template};\n\t} else {\n\t\ttranscludeNode.attributes.tiddler = {type: \"string\", value: targetTitle};\n\t\tif(targetField) {\n\t\t\ttranscludeNode.attributes.field = {type: \"string\", value: targetField};\n\t\t}\n\t\tif(targetIndex) {\n\t\t\ttranscludeNode.attributes.index = {type: \"string\", value: targetIndex};\n\t\t}\n\t}\n\treturn [tiddlerNode];\n};\n\n})();\n",
"title": "$:/core/modules/parsers/wikiparser/rules/transcludeinline.js",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/typedblock.js": {
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/typedblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for typed blocks. For example:\n\n```\n$$$.js\nThis will be rendered as JavaScript\n$$$\n\n$$$.svg\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"150\" height=\"100\">\n <circle cx=\"100\" cy=\"50\" r=\"40\" stroke=\"black\" stroke-width=\"2\" fill=\"red\" />\n</svg>\n$$$\n\n$$$text/vnd.tiddlywiki>text/html\nThis will be rendered as an //HTML representation// of WikiText\n$$$\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.name = \"typedblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\$\\$\\$([^ >\\r\\n]*)(?: *> *([^ \\r\\n]+))?\\r?\\n/mg;\n};\n\nexports.parse = function() {\n\tvar reEnd = /\\r?\\n\\$\\$\\$\\r?(?:\\n|$)/mg;\n\t// Save the type\n\tvar parseType = this.match[1],\n\t\trenderType = this.match[2];\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Look for the end of the block\n\treEnd.lastIndex = this.parser.pos;\n\tvar match = reEnd.exec(this.parser.source),\n\t\ttext;\n\t// Process the block\n\tif(match) {\n\t\ttext = this.parser.source.substring(this.parser.pos,match.index);\n\t\tthis.parser.pos = match.index + match[0].length;\n\t} else {\n\t\ttext = this.parser.source.substr(this.parser.pos);\n\t\tthis.parser.pos = this.parser.sourceLength;\n\t}\n\t// Parse the block according to the specified type\n\tvar parser = this.parser.wiki.parseText(parseType,text,{defaultType: \"text/plain\"});\n\t// If there's no render type, just return the parse tree\n\tif(!renderType) {\n\t\treturn parser.tree;\n\t} else {\n\t\t// Otherwise, render to the rendertype and return in a <PRE> tag\n\t\tvar widgetNode = this.parser.wiki.makeWidget(parser),\n\t\t\tcontainer = $tw.fakeDocument.createElement(\"div\");\n\t\twidgetNode.render(container,null);\n\t\tvar text = renderType === \"text/html\" ? container.innerHTML : container.textContent;\n\t\treturn [{\n\t\t\ttype: \"element\",\n\t\t\ttag: \"pre\",\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\",\n\t\t\t\ttext: text\n\t\t\t}]\n\t\t}];\n\t}\n};\n\n})();\n",
"title": "$:/core/modules/parsers/wikiparser/rules/typedblock.js",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/wikilink.js": {
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/wikilink.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for wiki links. For example:\n\n```\nAWikiLink\nAnotherLink\n~SuppressedLink\n```\n\nPrecede a camel case word with `~` to prevent it from being recognised as a link.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"wikilink\";\nexports.types = {inline: true};\n\nvar textPrimitives = {\n\tupperLetter: \"[A-Z\\u00c0-\\u00de\\u0150\\u0170]\",\n\tlowerLetter: \"[a-z0-9_\\\\-\\u00df-\\u00ff\\u0151\\u0171]\",\n\tanyLetter: \"[A-Za-z0-9_\\\\-\\u00c0-\\u00de\\u00df-\\u00ff\\u0150\\u0170\\u0151\\u0171]\",\n\tanyLetterStrict: \"[A-Za-z0-9\\u00c0-\\u00de\\u00df-\\u00ff\\u0150\\u0170\\u0151\\u0171]\"\n};\n\ntextPrimitives.unWikiLink = \"~\";\ntextPrimitives.wikiLink = textPrimitives.upperLetter + \"+\" +\n\ttextPrimitives.lowerLetter + \"+\" +\n\ttextPrimitives.upperLetter +\n\ttextPrimitives.anyLetter + \"*\";\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = new RegExp(textPrimitives.unWikiLink + \"?\" + textPrimitives.wikiLink,\"mg\");\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Get the details of the match\n\tvar linkText = this.match[0];\n\t// Move past the macro call\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// If the link starts with the unwikilink character then just output it as plain text\n\tif(linkText.substr(0,1) === textPrimitives.unWikiLink) {\n\t\treturn [{type: \"text\", text: linkText.substr(1)}];\n\t}\n\t// If the link has been preceded with a letter then don't treat it as a link\n\tif(this.match.index > 0) {\n\t\tvar preRegExp = new RegExp(textPrimitives.anyLetterStrict,\"mg\");\n\t\tpreRegExp.lastIndex = this.match.index-1;\n\t\tvar preMatch = preRegExp.exec(this.parser.source);\n\t\tif(preMatch && preMatch.index === this.match.index-1) {\n\t\t\treturn [{type: \"text\", text: linkText}];\n\t\t}\n\t}\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"$link\",\n\t\tattributes: {\n\t\t\tto: {type: \"string\", value: linkText}\n\t\t},\n\t\tchildren: [{\n\t\t\ttype: \"text\",\n\t\t\ttext: linkText\n\t\t}]\n\t}];\n};\n\n})();\n",
"title": "$:/core/modules/parsers/wikiparser/rules/wikilink.js",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/wikiparser.js": {
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/wikiparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe wiki text parser processes blocks of source text into a parse tree.\n\nThe parse tree is made up of nested arrays of these JavaScript objects:\n\n\t{type: \"element\", tag: <string>, attributes: {}, children: []} - an HTML element\n\t{type: \"text\", text: <string>} - a text node\n\t{type: \"entity\", value: <string>} - an entity\n\t{type: \"raw\", html: <string>} - raw HTML\n\nAttributes are stored as hashmaps of the following objects:\n\n\t{type: \"string\", value: <string>} - literal string\n\t{type: \"indirect\", textReference: <textReference>} - indirect through a text reference\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar WikiParser = function(type,text,options) {\n\tthis.wiki = options.wiki;\n\t// Initialise the classes if we don't have them already\n\tif(!this.pragmaRuleClasses) {\n\t\tWikiParser.prototype.pragmaRuleClasses = $tw.modules.createClassesFromModules(\"wikirule\",\"pragma\",$tw.WikiRuleBase);\n\t}\n\tif(!this.blockRuleClasses) {\n\t\tWikiParser.prototype.blockRuleClasses = $tw.modules.createClassesFromModules(\"wikirule\",\"block\",$tw.WikiRuleBase);\n\t}\n\tif(!this.inlineRuleClasses) {\n\t\tWikiParser.prototype.inlineRuleClasses = $tw.modules.createClassesFromModules(\"wikirule\",\"inline\",$tw.WikiRuleBase);\n\t}\n\t// Save the parse text\n\tthis.type = type || \"text/vnd.tiddlywiki\";\n\tthis.source = text || \"\";\n\tthis.sourceLength = this.source.length;\n\t// Set current parse position\n\tthis.pos = 0;\n\t// Instantiate the pragma parse rules\n\tthis.pragmaRules = this.instantiateRules(this.pragmaRuleClasses,\"pragma\",0);\n\t// Instantiate the parser block and inline rules\n\tthis.blockRules = this.instantiateRules(this.blockRuleClasses,\"block\",0);\n\tthis.inlineRules = this.instantiateRules(this.inlineRuleClasses,\"inline\",0);\n\t// Parse any pragmas\n\tthis.tree = this.parsePragmas();\n\t// Parse the text into inline runs or blocks\n\tif(options.parseAsInline) {\n\t\tthis.tree.push.apply(this.tree,this.parseInlineRun());\n\t} else {\n\t\tthis.tree.push.apply(this.tree,this.parseBlocks());\n\t}\n\t// Return the parse tree\n};\n\n/*\nInstantiate an array of parse rules\n*/\nWikiParser.prototype.instantiateRules = function(classes,type,startPos) {\n\tvar rulesInfo = [],\n\t\tself = this;\n\t$tw.utils.each(classes,function(RuleClass) {\n\t\t// Instantiate the rule\n\t\tvar rule = new RuleClass(self);\n\t\trule.is = {};\n\t\trule.is[type] = true;\n\t\trule.init(self);\n\t\tvar matchIndex = rule.findNextMatch(startPos);\n\t\tif(matchIndex !== undefined) {\n\t\t\trulesInfo.push({\n\t\t\t\trule: rule,\n\t\t\t\tmatchIndex: matchIndex\n\t\t\t});\n\t\t}\n\t});\n\treturn rulesInfo;\n};\n\n/*\nSkip any whitespace at the current position. Options are:\n\ttreatNewlinesAsNonWhitespace: true if newlines are NOT to be treated as whitespace\n*/\nWikiParser.prototype.skipWhitespace = function(options) {\n\toptions = options || {};\n\tvar whitespaceRegExp = options.treatNewlinesAsNonWhitespace ? /([^\\S\\n]+)/mg : /(\\s+)/mg;\n\twhitespaceRegExp.lastIndex = this.pos;\n\tvar whitespaceMatch = whitespaceRegExp.exec(this.source);\n\tif(whitespaceMatch && whitespaceMatch.index === this.pos) {\n\t\tthis.pos = whitespaceRegExp.lastIndex;\n\t}\n};\n\n/*\nGet the next match out of an array of parse rule instances\n*/\nWikiParser.prototype.findNextMatch = function(rules,startPos) {\n\t// Find the best matching rule by finding the closest match position\n\tvar matchingRule = undefined,\n\t\tmatchingRulePos = this.sourceLength;\n\t// Step through each rule\n\tfor(var t=0; t<rules.length; t++) {\n\t\tvar ruleInfo = rules[t];\n\t\t// Ask the rule to get the next match if we've moved past the current one\n\t\tif(ruleInfo.matchIndex !== undefined && ruleInfo.matchIndex < startPos) {\n\t\t\truleInfo.matchIndex = ruleInfo.rule.findNextMatch(startPos);\n\t\t}\n\t\t// Adopt this match if it's closer than the current best match\n\t\tif(ruleInfo.matchIndex !== undefined && ruleInfo.matchIndex <= matchingRulePos) {\n\t\t\tmatchingRule = ruleInfo;\n\t\t\tmatchingRulePos = ruleInfo.matchIndex;\n\t\t}\n\t}\n\treturn matchingRule;\n};\n\n/*\nParse any pragmas at the beginning of a block of parse text\n*/\nWikiParser.prototype.parsePragmas = function() {\n\tvar tree = [];\n\twhile(true) {\n\t\t// Skip whitespace\n\t\tthis.skipWhitespace();\n\t\t// Check for the end of the text\n\t\tif(this.pos >= this.sourceLength) {\n\t\t\tbreak;\n\t\t}\n\t\t// Check if we've arrived at a pragma rule match\n\t\tvar nextMatch = this.findNextMatch(this.pragmaRules,this.pos);\n\t\t// If not, just exit\n\t\tif(!nextMatch || nextMatch.matchIndex !== this.pos) {\n\t\t\tbreak;\n\t\t}\n\t\t// Process the pragma rule\n\t\ttree.push.apply(tree,nextMatch.rule.parse());\n\t}\n\treturn tree;\n};\n\n/*\nParse a block from the current position\n\tterminatorRegExpString: optional regular expression string that identifies the end of plain paragraphs. Must not include capturing parenthesis\n*/\nWikiParser.prototype.parseBlock = function(terminatorRegExpString) {\n\tvar terminatorRegExp = terminatorRegExpString ? new RegExp(\"(\" + terminatorRegExpString + \"|\\\\r?\\\\n\\\\r?\\\\n)\",\"mg\") : /(\\r?\\n\\r?\\n)/mg;\n\tthis.skipWhitespace();\n\tif(this.pos >= this.sourceLength) {\n\t\treturn [];\n\t}\n\t// Look for a block rule that applies at the current position\n\tvar nextMatch = this.findNextMatch(this.blockRules,this.pos);\n\tif(nextMatch && nextMatch.matchIndex === this.pos) {\n\t\treturn nextMatch.rule.parse();\n\t}\n\t// Treat it as a paragraph if we didn't find a block rule\n\treturn [{type: \"element\", tag: \"p\", children: this.parseInlineRun(terminatorRegExp)}];\n};\n\n/*\nParse a series of blocks of text until a terminating regexp is encountered or the end of the text\n\tterminatorRegExpString: terminating regular expression\n*/\nWikiParser.prototype.parseBlocks = function(terminatorRegExpString) {\n\tif(terminatorRegExpString) {\n\t\treturn this.parseBlocksTerminated(terminatorRegExpString);\n\t} else {\n\t\treturn this.parseBlocksUnterminated();\n\t}\n};\n\n/*\nParse a block from the current position to the end of the text\n*/\nWikiParser.prototype.parseBlocksUnterminated = function() {\n\tvar tree = [];\n\twhile(this.pos < this.sourceLength) {\n\t\ttree.push.apply(tree,this.parseBlock());\n\t}\n\treturn tree;\n};\n\n/*\nParse blocks of text until a terminating regexp is encountered\n*/\nWikiParser.prototype.parseBlocksTerminated = function(terminatorRegExpString) {\n\tvar terminatorRegExp = new RegExp(\"(\" + terminatorRegExpString + \")\",\"mg\"),\n\t\ttree = [];\n\t// Skip any whitespace\n\tthis.skipWhitespace();\n\t// Check if we've got the end marker\n\tterminatorRegExp.lastIndex = this.pos;\n\tvar match = terminatorRegExp.exec(this.source);\n\t// Parse the text into blocks\n\twhile(this.pos < this.sourceLength && !(match && match.index === this.pos)) {\n\t\tvar blocks = this.parseBlock(terminatorRegExpString);\n\t\ttree.push.apply(tree,blocks);\n\t\t// Skip any whitespace\n\t\tthis.skipWhitespace();\n\t\t// Check if we've got the end marker\n\t\tterminatorRegExp.lastIndex = this.pos;\n\t\tmatch = terminatorRegExp.exec(this.source);\n\t}\n\tif(match && match.index === this.pos) {\n\t\tthis.pos = match.index + match[0].length;\n\t}\n\treturn tree;\n};\n\n/*\nParse a run of text at the current position\n\tterminatorRegExp: a regexp at which to stop the run\n\toptions: see below\nOptions available:\n\teatTerminator: move the parse position past any encountered terminator (default false)\n*/\nWikiParser.prototype.parseInlineRun = function(terminatorRegExp,options) {\n\tif(terminatorRegExp) {\n\t\treturn this.parseInlineRunTerminated(terminatorRegExp,options);\n\t} else {\n\t\treturn this.parseInlineRunUnterminated(options);\n\t}\n};\n\nWikiParser.prototype.parseInlineRunUnterminated = function(options) {\n\tvar tree = [];\n\t// Find the next occurrence of an inline rule\n\tvar nextMatch = this.findNextMatch(this.inlineRules,this.pos);\n\t// Loop around the matches until we've reached the end of the text\n\twhile(this.pos < this.sourceLength && nextMatch) {\n\t\t// Process the text preceding the run rule\n\t\tif(nextMatch.matchIndex > this.pos) {\n\t\t\ttree.push({type: \"text\", text: this.source.substring(this.pos,nextMatch.matchIndex)});\n\t\t\tthis.pos = nextMatch.matchIndex;\n\t\t}\n\t\t// Process the run rule\n\t\ttree.push.apply(tree,nextMatch.rule.parse());\n\t\t// Look for the next run rule\n\t\tnextMatch = this.findNextMatch(this.inlineRules,this.pos);\n\t}\n\t// Process the remaining text\n\tif(this.pos < this.sourceLength) {\n\t\ttree.push({type: \"text\", text: this.source.substr(this.pos)});\n\t}\n\tthis.pos = this.sourceLength;\n\treturn tree;\n};\n\nWikiParser.prototype.parseInlineRunTerminated = function(terminatorRegExp,options) {\n\toptions = options || {};\n\tvar tree = [];\n\t// Find the next occurrence of the terminator\n\tterminatorRegExp.lastIndex = this.pos;\n\tvar terminatorMatch = terminatorRegExp.exec(this.source);\n\t// Find the next occurrence of a inlinerule\n\tvar inlineRuleMatch = this.findNextMatch(this.inlineRules,this.pos);\n\t// Loop around until we've reached the end of the text\n\twhile(this.pos < this.sourceLength && (terminatorMatch || inlineRuleMatch)) {\n\t\t// Return if we've found the terminator, and it precedes any inline rule match\n\t\tif(terminatorMatch) {\n\t\t\tif(!inlineRuleMatch || inlineRuleMatch.matchIndex >= terminatorMatch.index) {\n\t\t\t\tif(terminatorMatch.index > this.pos) {\n\t\t\t\t\ttree.push({type: \"text\", text: this.source.substring(this.pos,terminatorMatch.index)});\n\t\t\t\t}\n\t\t\t\tthis.pos = terminatorMatch.index;\n\t\t\t\tif(options.eatTerminator) {\n\t\t\t\t\tthis.pos += terminatorMatch[0].length;\n\t\t\t\t}\n\t\t\t\treturn tree;\n\t\t\t}\n\t\t}\n\t\t// Process any inline rule, along with the text preceding it\n\t\tif(inlineRuleMatch) {\n\t\t\t// Preceding text\n\t\t\tif(inlineRuleMatch.matchIndex > this.pos) {\n\t\t\t\ttree.push({type: \"text\", text: this.source.substring(this.pos,inlineRuleMatch.matchIndex)});\n\t\t\t\tthis.pos = inlineRuleMatch.matchIndex;\n\t\t\t}\n\t\t\t// Process the inline rule\n\t\t\ttree.push.apply(tree,inlineRuleMatch.rule.parse());\n\t\t\t// Look for the next inline rule\n\t\t\tinlineRuleMatch = this.findNextMatch(this.inlineRules,this.pos);\n\t\t\t// Look for the next terminator match\n\t\t\tterminatorRegExp.lastIndex = this.pos;\n\t\t\tterminatorMatch = terminatorRegExp.exec(this.source);\n\t\t}\n\t}\n\t// Process the remaining text\n\tif(this.pos < this.sourceLength) {\n\t\ttree.push({type: \"text\", text: this.source.substr(this.pos)});\n\t}\n\tthis.pos = this.sourceLength;\n\treturn tree;\n};\n\n/*\nParse zero or more class specifiers `.classname`\n*/\nWikiParser.prototype.parseClasses = function() {\n\tvar classRegExp = /\\.([^\\s\\.]+)/mg,\n\t\tclassNames = [];\n\tclassRegExp.lastIndex = this.pos;\n\tvar match = classRegExp.exec(this.source);\n\twhile(match && match.index === this.pos) {\n\t\tthis.pos = match.index + match[0].length;\n\t\tclassNames.push(match[1]);\n\t\tvar match = classRegExp.exec(this.source);\n\t}\n\treturn classNames;\n};\n\n/*\nAmend the rules used by this instance of the parser\n\ttype: `only` keeps just the named rules, `except` keeps all but the named rules\n\tnames: array of rule names\n*/\nWikiParser.prototype.amendRules = function(type,names) {\n\tnames = names || [];\n\t// Define the filter function\n\tvar keepFilter;\n\tif(type === \"only\") {\n\t\tkeepFilter = function(name) {\n\t\t\treturn names.indexOf(name) !== -1;\n\t\t};\n\t} else if(type === \"except\") {\n\t\tkeepFilter = function(name) {\n\t\t\treturn names.indexOf(name) === -1;\n\t\t};\n\t} else {\n\t\treturn;\n\t}\n\t// Define a function to process each of our rule arrays\n\tvar processRuleArray = function(ruleArray) {\n\t\tfor(var t=ruleArray.length-1; t>=0; t--) {\n\t\t\tif(!keepFilter(ruleArray[t].rule.name)) {\n\t\t\t\truleArray.splice(t,1);\n\t\t\t}\n\t\t}\n\t};\n\t// Process each rule array\n\tprocessRuleArray(this.pragmaRules);\n\tprocessRuleArray(this.blockRules);\n\tprocessRuleArray(this.inlineRules);\n}\n\nexports[\"text/vnd.tiddlywiki\"] = WikiParser;\n\n})();\n\n",
"title": "$:/core/modules/parsers/wikiparser/wikiparser.js",
"type": "application/javascript",
"module-type": "parser"
},
"$:/core/modules/parsers/wikiparser/rules/wikirulebase.js": {
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/wikirulebase.js\ntype: application/javascript\nmodule-type: global\n\nBase class for wiki parser rules\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nThis constructor is always overridden with a blank constructor, and so shouldn't be used\n*/\nvar WikiRuleBase = function() {\n};\n\n/*\nTo be overridden by individual rules\n*/\nWikiRuleBase.prototype.init = function(parser) {\n\tthis.parser = parser;\n};\n\n/*\nDefault implementation of findNextMatch uses RegExp matching\n*/\nWikiRuleBase.prototype.findNextMatch = function(startPos) {\n\tthis.matchRegExp.lastIndex = startPos;\n\tthis.match = this.matchRegExp.exec(this.parser.source);\n\treturn this.match ? this.match.index : undefined;\n};\n\nexports.WikiRuleBase = WikiRuleBase;\n\n})();\n",
"title": "$:/core/modules/parsers/wikiparser/rules/wikirulebase.js",
"type": "application/javascript",
"module-type": "global"
},
"$:/core/modules/pluginswitcher.js": {
"text": "/*\\\ntitle: $:/core/modules/pluginswitcher.js\ntype: application/javascript\nmodule-type: global\n\nManages switching plugins for themes and languages.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\noptions:\nwiki: wiki store to be used\npluginType: type of plugin to be switched\ncontrollerTitle: title of tiddler used to control switching of this resource\ndefaultPlugins: array of default plugins to be used if nominated plugin isn't found\n*/\nfunction PluginSwitcher(options) {\n\tthis.wiki = options.wiki;\n\tthis.pluginType = options.pluginType;\n\tthis.controllerTitle = options.controllerTitle;\n\tthis.defaultPlugins = options.defaultPlugins || [];\n\t// Switch to the current plugin\n\tthis.switchPlugins();\n\t// Listen for changes to the selected plugin\n\tvar self = this;\n\tthis.wiki.addEventListener(\"change\",function(changes) {\n\t\tif($tw.utils.hop(changes,self.controllerTitle)) {\n\t\t\tself.switchPlugins();\n\t\t}\n\t});\n}\n\nPluginSwitcher.prototype.switchPlugins = function() {\n\t// Get the name of the current theme\n\tvar selectedPluginTitle = this.wiki.getTiddlerText(this.controllerTitle);\n\t// If it doesn't exist, then fallback to one of the default themes\n\tvar index = 0;\n\twhile(!this.wiki.getTiddler(selectedPluginTitle) && index < this.defaultPlugins.length) {\n\t\tselectedPluginTitle = this.defaultPlugins[index++];\n\t}\n\t// Accumulate the titles of the plugins that we need to load\n\tvar plugins = [],\n\t\tself = this,\n\t\taccumulatePlugin = function(title) {\n\t\t\tvar tiddler = self.wiki.getTiddler(title);\n\t\t\tif(tiddler && tiddler.isPlugin() && plugins.indexOf(title) === -1) {\n\t\t\t\tplugins.push(title);\n\t\t\t\tvar pluginInfo = JSON.parse(self.wiki.getTiddlerText(title)),\n\t\t\t\t\tdependents = $tw.utils.parseStringArray(tiddler.fields.dependents || \"\");\n\t\t\t\t$tw.utils.each(dependents,function(title) {\n\t\t\t\t\taccumulatePlugin(title);\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\taccumulatePlugin(selectedPluginTitle);\n\t// Unregister any existing theme tiddlers\n\tvar unregisteredTiddlers = $tw.wiki.unregisterPluginTiddlers(this.pluginType);\n\t// Accumulate the titles of shadow tiddlers that have changed as a result of this switch\n\tvar changedTiddlers = {};\n\t$tw.utils.each(this.wiki.shadowTiddlers,function(shadowInfo,title) {\n\t\tif(unregisteredTiddlers.indexOf(shadowInfo.source) !== -1) {\n\t\t\tchangedTiddlers[title] = true; // isDeleted?\n\t\t}\n\t});\n\t// Register any new theme tiddlers\n\tvar registeredTiddlers = $tw.wiki.registerPluginTiddlers(this.pluginType,plugins);\n\t// Unpack the current theme tiddlers\n\t$tw.wiki.unpackPluginTiddlers();\n\t// Accumulate the affected shadow tiddlers\n\t$tw.utils.each(this.wiki.shadowTiddlers,function(shadowInfo,title) {\n\t\tif(registeredTiddlers.indexOf(shadowInfo.source) !== -1) {\n\t\t\tchangedTiddlers[title] = false; // isDeleted?\n\t\t}\n\t});\n\t// Issue change events for the modified tiddlers\n\t$tw.utils.each(changedTiddlers,function(status,title) {\n\t\tself.wiki.enqueueTiddlerEvent(title,status);\n\t});\n};\n\nexports.PluginSwitcher = PluginSwitcher;\n\n})();\n",
"title": "$:/core/modules/pluginswitcher.js",
"type": "application/javascript",
"module-type": "global"
},
"$:/core/modules/savers/andtidwiki.js": {
"text": "/*\\\ntitle: $:/core/modules/savers/andtidwiki.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via the AndTidWiki Android app\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false, netscape: false, Components: false */\n\"use strict\";\n\nvar AndTidWiki = function(wiki) {\n};\n\nAndTidWiki.prototype.save = function(text,method,callback) {\n\t// Get the pathname of this document\n\tvar pathname = decodeURIComponent(document.location.toString());\n\t// Strip the file://\n\tif(pathname.indexOf(\"file://\") === 0) {\n\t\tpathname = pathname.substr(7);\n\t}\n\t// Strip any query or location part\n\tvar p = pathname.indexOf(\"?\");\n\tif(p !== -1) {\n\t\tpathname = pathname.substr(0,p);\n\t}\n\tp = pathname.indexOf(\"#\");\n\tif(p !== -1) {\n\t\tpathname = pathname.substr(0,p);\n\t}\n\t// Save the file\n\twindow.twi.saveFile(pathname,text)\n\t// Call the callback\n\tcallback(null);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nAndTidWiki.prototype.info = {\n\tname: \"andtidwiki\",\n\tpriority: 1600,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn !!window.twi && !!window.twi.saveFile;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new AndTidWiki(wiki);\n};\n\n})();\n",
"title": "$:/core/modules/savers/andtidwiki.js",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/download.js": {
"text": "/*\\\ntitle: $:/core/modules/savers/download.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via HTML5's download APIs\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar DownloadSaver = function(wiki) {\n};\n\nDownloadSaver.prototype.save = function(text,method,callback) {\n\t// Get the current filename\n\tvar filename = \"tiddlywiki.html\",\n\t\tp = document.location.pathname.lastIndexOf(\"/\");\n\tif(p !== -1) {\n\t\tfilename = document.location.pathname.substr(p+1);\n\t}\n\t// Set up the link\n\tvar link = document.createElement(\"a\");\n\tlink.setAttribute(\"target\",\"_blank\");\n\tif(Blob !== undefined) {\n\t\tvar blob = new Blob([text], {type: \"text/html\"});\n\t\tlink.setAttribute(\"href\", URL.createObjectURL(blob));\n\t} else {\n\t\tlink.setAttribute(\"href\",\"data:text/html,\" + encodeURIComponent(text));\n\t}\n\tlink.setAttribute(\"download\",filename);\n\tdocument.body.appendChild(link);\n\tlink.click();\n\tdocument.body.removeChild(link);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nDownloadSaver.prototype.info = {\n\tname: \"download\",\n\tpriority: 100,\n\tcapabilities: [\"save\", \"download\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn document.createElement(\"a\").download !== undefined;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new DownloadSaver(wiki);\n};\n\n})();\n",
"title": "$:/core/modules/savers/download.js",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/fsosaver.js": {
"text": "/*\\\ntitle: $:/core/modules/savers/fsosaver.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via MS FileSystemObject ActiveXObject\n\nNote: Since TiddlyWiki's markup contains the MOTW, the FileSystemObject normally won't be available. \nHowever, if the wiki is loaded as an .HTA file (Windows HTML Applications) then the FSO can be used.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar FSOSaver = function(wiki) {\n};\n\nFSOSaver.prototype.save = function(text,method,callback) {\n\t// Get the pathname of this document\n\tvar pathname = unescape(document.location.pathname);\n\t// Test for a Windows path of the form /x:\\blah...\n\tif(/^\\/[A-Z]\\:\\\\[^\\\\]+/i.test(pathname)) {\t// ie: ^/[a-z]:/[^/]+\n\t\t// Remove the leading slash\n\t\tpathname = pathname.substr(1);\n\t} else if(document.location.hostname !== \"\" && /^\\/\\\\[^\\\\]+\\\\[^\\\\]+/i.test(pathname)) {\t// test for \\\\server\\share\\blah... - ^/[^/]+/[^/]+\n\t\t// Remove the leading slash\n\t\tpathname = pathname.substr(1);\n\t\t// reconstruct UNC path\n\t\tpathname = \"\\\\\\\\\" + document.location.hostname + pathname;\n\t} else return false;\n\t\n\t// Save the file (as UTF-16)\n\tvar fso = new ActiveXObject(\"Scripting.FileSystemObject\");\n\tvar file = fso.OpenTextFile(pathname,2,-1,-1);\n\t\n\tfile.Write(text);\n\tfile.Close();\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nFSOSaver.prototype.info = {\n\tname: \"FSOSaver\",\n\tpriority: 120,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\ttry {\n\t\treturn (window.location.protocol === \"file:\") && !!(new ActiveXObject(\"Scripting.FileSystemObject\"));\n\t} catch(e) { return false; }\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new FSOSaver(wiki);\n};\n\n})();\n",
"title": "$:/core/modules/savers/fsosaver.js",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/manualdownload.js": {
"text": "/*\\\ntitle: $:/core/modules/savers/manualdownload.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via HTML5's download APIs\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Title of the tiddler containing the download message\nvar downloadInstructionsTitle = \"$:/language/Modals/Download\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar ManualDownloadSaver = function(wiki) {\n};\n\nManualDownloadSaver.prototype.save = function(text,method,callback) {\n\t$tw.modal.display(downloadInstructionsTitle,{\n\t\tdownloadLink: \"data:text/html,\" + encodeURIComponent(text)\n\t});\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nManualDownloadSaver.prototype.info = {\n\tname: \"manualdownload\",\n\tpriority: 0,\n\tcapabilities: [\"save\", \"download\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn true;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new ManualDownloadSaver(wiki);\n};\n\n})();\n",
"title": "$:/core/modules/savers/manualdownload.js",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/msdownload.js": {
"text": "/*\\\ntitle: $:/core/modules/savers/msdownload.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via window.navigator.msSaveBlob()\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar MsDownloadSaver = function(wiki) {\n};\n\nMsDownloadSaver.prototype.save = function(text,method,callback) {\n\t// Get the current filename\n\tvar filename = \"tiddlywiki.html\",\n\t\tp = document.location.pathname.lastIndexOf(\"/\");\n\tif(p !== -1) {\n\t\tfilename = document.location.pathname.substr(p+1);\n\t}\n\t// Set up the link\n\tvar blob = new Blob([text], {type: \"text/html\"});\n\twindow.navigator.msSaveBlob(blob,filename);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nMsDownloadSaver.prototype.info = {\n\tname: \"msdownload\",\n\tpriority: 110,\n\tcapabilities: [\"save\", \"download\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn !!window.navigator.msSaveBlob;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new MsDownloadSaver(wiki);\n};\n\n})();\n",
"title": "$:/core/modules/savers/msdownload.js",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/tiddlyfox.js": {
"text": "/*\\\ntitle: $:/core/modules/savers/tiddlyfox.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via the TiddlyFox file extension\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false, netscape: false, Components: false */\n\"use strict\";\n\nvar TiddlyFoxSaver = function(wiki) {\n};\n\nTiddlyFoxSaver.prototype.save = function(text,method,callback) {\n\tvar messageBox = document.getElementById(\"tiddlyfox-message-box\");\n\tif(messageBox) {\n\t\t// Get the pathname of this document\n\t\tvar pathname = document.location.pathname;\n\t\t// Test for a Windows path of the form /x:/blah/blah\n\t\tif(/^\\/[A-Z]\\:\\//i.test(pathname)) {\n\t\t\t// Remove the leading slash\n\t\t\tpathname = pathname.substr(1);\n\t\t\t// Convert slashes to backslashes\n\t\t\tpathname = pathname.replace(/\\//g,\"\\\\\");\n\t\t}\n\t\t// Create the message element and put it in the message box\n\t\tvar message = document.createElement(\"div\");\n\t\tmessage.setAttribute(\"data-tiddlyfox-path\",decodeURIComponent(pathname));\n\t\tmessage.setAttribute(\"data-tiddlyfox-content\",text);\n\t\tmessageBox.appendChild(message);\n\t\t// Add an event handler for when the file has been saved\n\t\tmessage.addEventListener(\"tiddlyfox-have-saved-file\",function(event) {\n\t\t\tcallback(null);\n\t\t}, false);\n\t\t// Create and dispatch the custom event to the extension\n\t\tvar event = document.createEvent(\"Events\");\n\t\tevent.initEvent(\"tiddlyfox-save-file\",true,false);\n\t\tmessage.dispatchEvent(event);\n\t\treturn true;\n\t} else {\n\t\treturn false;\n\t}\n};\n\n/*\nInformation about this saver\n*/\nTiddlyFoxSaver.prototype.info = {\n\tname: \"tiddlyfox\",\n\tpriority: 1500,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn (window.location.protocol === \"file:\");\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new TiddlyFoxSaver(wiki);\n};\n\n})();\n",
"title": "$:/core/modules/savers/tiddlyfox.js",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/tiddlyie.js": {
"text": "/*\\\ntitle: $:/core/modules/savers/tiddlyie.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via Internet Explorer BHO extenion (TiddlyIE)\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar TiddlyIESaver = function(wiki) {\n};\n\nTiddlyIESaver.prototype.save = function(text,method,callback) {\n\t// Check existence of TiddlyIE BHO extension (note: only works after document is complete)\n\tif(typeof(window.TiddlyIE) != \"undefined\") {\n\t\t// Get the pathname of this document\n\t\tvar pathname = unescape(document.location.pathname);\n\t\t// Test for a Windows path of the form /x:/blah...\n\t\tif(/^\\/[A-Z]\\:\\/[^\\/]+/i.test(pathname)) {\t// ie: ^/[a-z]:/[^/]+ (is this better?: ^/[a-z]:/[^/]+(/[^/]+)*\\.[^/]+ )\n\t\t\t// Remove the leading slash\n\t\t\tpathname = pathname.substr(1);\n\t\t\t// Convert slashes to backslashes\n\t\t\tpathname = pathname.replace(/\\//g,\"\\\\\");\n\t\t} else if(document.hostname !== \"\" && /^\\/[^\\/]+\\/[^\\/]+/i.test(pathname)) {\t// test for \\\\server\\share\\blah... - ^/[^/]+/[^/]+\n\t\t\t// Convert slashes to backslashes\n\t\t\tpathname = pathname.replace(/\\//g,\"\\\\\");\n\t\t\t// reconstruct UNC path\n\t\t\tpathname = \"\\\\\\\\\" + document.location.hostname + pathname;\n\t\t} else return false;\n\t\t\n\t\t// Prompt the user to save the file\n\t\twindow.TiddlyIE.save(pathname, text);\n\t\treturn true;\n\t} else {\n\t\treturn false;\n\t}\n};\n\n/*\nInformation about this saver\n*/\nTiddlyIESaver.prototype.info = {\n\tname: \"tiddlyiesaver\",\n\tpriority: 1500,\n\tcapabilities: [\"save\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn (window.location.protocol === \"file:\");\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new TiddlyIESaver(wiki);\n};\n\n})();\n",
"title": "$:/core/modules/savers/tiddlyie.js",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/twedit.js": {
"text": "/*\\\ntitle: $:/core/modules/savers/twedit.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via the TWEdit iOS app\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false, netscape: false, Components: false */\n\"use strict\";\n\nvar TWEditSaver = function(wiki) {\n};\n\nTWEditSaver.prototype.save = function(text,method,callback) {\n\t// Bail if we're not running under TWEdit\n\tif(typeof DeviceInfo !== \"object\") {\n\t\treturn false;\n\t}\n\t// Get the pathname of this document\n\tvar pathname = decodeURIComponent(document.location.pathname);\n\t// Strip any query or location part\n\tvar p = pathname.indexOf(\"?\");\n\tif(p !== -1) {\n\t\tpathname = pathname.substr(0,p);\n\t}\n\tp = pathname.indexOf(\"#\");\n\tif(p !== -1) {\n\t\tpathname = pathname.substr(0,p);\n\t}\n\t// Remove the leading \"/Documents\" from path\n\tvar prefix = \"/Documents\";\n\tif(pathname.indexOf(prefix) === 0) {\n\t\tpathname = pathname.substr(prefix.length);\n\t}\n\t// Error handler\n\tvar errorHandler = function(event) {\n \t// Error\n \tcallback(\"Error saving to TWEdit: \" + event.target.error.code);\n };\n\t// Get the file system\n window.requestFileSystem(LocalFileSystem.PERSISTENT,0,function(fileSystem) {\n \t// Now we've got the filesystem, get the fileEntry\n fileSystem.root.getFile(pathname, {create: true}, function(fileEntry) {\n \t// Now we've got the fileEntry, create the writer\n \tfileEntry.createWriter(function(writer) {\n\t\t writer.onerror = errorHandler;\n\t\t writer.onwrite = function() {\n\t\t \tcallback(null);\n\t\t };\n\t\t writer.position = 0;\n\t\t writer.write(text);\n \t},errorHandler);\n }, errorHandler);\n }, errorHandler);\n return true;\n};\n\n/*\nInformation about this saver\n*/\nTWEditSaver.prototype.info = {\n\tname: \"twedit\",\n\tpriority: 1600,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn true;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new TWEditSaver(wiki);\n};\n\n/////////////////////////// Hack\n// HACK: This ensures that TWEdit recognises us as a TiddlyWiki document\nif($tw.browser) {\n\twindow.version = {title: \"TiddlyWiki\"};\n}\n\n})();\n",
"title": "$:/core/modules/savers/twedit.js",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/upload.js": {
"text": "/*\\\ntitle: $:/core/modules/savers/upload.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via upload to a server.\n\nDesigned to be compatible with BidiX's UploadPlugin at http://tiddlywiki.bidix.info/#UploadPlugin\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar UploadSaver = function(wiki) {\n\tthis.wiki = wiki;\n};\n\nUploadSaver.prototype.save = function(text,method,callback) {\n\t// Get the various parameters we need\n\tvar backupDir = this.wiki.getTextReference(\"$:/UploadBackupDir\") || \".\",\n\t\tusername = this.wiki.getTextReference(\"$:/UploadName\"),\n\t\tpassword = $tw.utils.getPassword(\"upload\"),\n\t\tuploadDir = this.wiki.getTextReference(\"$:/UploadDir\") || \".\",\n\t\tuploadFilename = this.wiki.getTextReference(\"$:/UploadFilename\") || \"index.html\",\n\t\turl = this.wiki.getTextReference(\"$:/UploadURL\");\n\t// Bail out if we don't have the bits we need\n\tif(!username || username.toString().trim() === \"\" || !password || password.toString().trim() === \"\") {\n\t\treturn false;\n\t}\n\t// Construct the url if not provided\n\tif(!url) {\n\t\turl = \"http://\" + username + \".tiddlyspot.com/store.cgi\";\n\t}\n\t// Assemble the header\n\tvar boundary = \"---------------------------\" + \"AaB03x\";\t\n\tvar uploadFormName = \"UploadPlugin\";\n\tvar head = [];\n\thead.push(\"--\" + boundary + \"\\r\\nContent-disposition: form-data; name=\\\"UploadPlugin\\\"\\r\\n\");\n\thead.push(\"backupDir=\" + backupDir + \";user=\" + username + \";password=\" + password + \";uploaddir=\" + uploadDir + \";;\"); \n\thead.push(\"\\r\\n\" + \"--\" + boundary);\n\thead.push(\"Content-disposition: form-data; name=\\\"userfile\\\"; filename=\\\"\" + uploadFilename + \"\\\"\");\n\thead.push(\"Content-Type: text/html;charset=UTF-8\");\n\thead.push(\"Content-Length: \" + text.length + \"\\r\\n\");\n\thead.push(\"\");\n\t// Assemble the tail and the data itself\n\tvar tail = \"\\r\\n--\" + boundary + \"--\\r\\n\",\n\t\tdata = head.join(\"\\r\\n\") + text + tail;\n\t// Do the HTTP post\n\tvar http = new XMLHttpRequest();\n\thttp.open(\"POST\",url,true,username,password);\n\thttp.setRequestHeader(\"Content-Type\",\"multipart/form-data; ;charset=UTF-8; boundary=\" + boundary);\n\thttp.onreadystatechange = function() {\n\t\tif(http.readyState == 4 && http.status == 200) {\n\t\t\tif(http.responseText.substr(0,4) === \"0 - \") {\n\t\t\t\tcallback(null);\n\t\t\t} else {\n\t\t\t\tcallback(http.responseText);\n\t\t\t}\n\t\t}\n\t};\n\thttp.send(data);\n\t$tw.notifier.display(\"$:/language/Notifications/Save/Starting\");\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nUploadSaver.prototype.info = {\n\tname: \"upload\",\n\tpriority: 2000,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn true;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new UploadSaver(wiki);\n};\n\n})();\n",
"title": "$:/core/modules/savers/upload.js",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/startup.js": {
"text": "/*\\\ntitle: $:/core/modules/startup.js\ntype: application/javascript\nmodule-type: startup\n\nThis is the main application logic for both the client and server\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.startup = function() {\n\tvar modules,n,m,f,commander;\n\t// Load modules\n\t$tw.modules.applyMethods(\"utils\",$tw.utils);\n\tif($tw.node) {\n\t\t$tw.modules.applyMethods(\"utils-node\",$tw.utils);\n\t}\n\t$tw.modules.applyMethods(\"global\",$tw);\n\t$tw.modules.applyMethods(\"config\",$tw.config);\n\tif($tw.browser) {\n\t\t$tw.utils.getBrowserInfo($tw.browser);\n\t}\n\t$tw.version = $tw.utils.extractVersionInfo();\n\t$tw.Tiddler.fieldModules = $tw.modules.getModulesByTypeAsHashmap(\"tiddlerfield\");\n\t$tw.modules.applyMethods(\"tiddlermethod\",$tw.Tiddler.prototype);\n\t$tw.modules.applyMethods(\"wikimethod\",$tw.Wiki.prototype);\n\t$tw.modules.applyMethods(\"tiddlerdeserializer\",$tw.Wiki.tiddlerDeserializerModules);\n\t$tw.macros = $tw.modules.getModulesByTypeAsHashmap(\"macro\");\n\t// Set up the parsers\n\t$tw.wiki.initParsers();\n\t// Set up the syncer object\n\t$tw.syncer = new $tw.Syncer({wiki: $tw.wiki});\n\t// Set up the command modules\n\t$tw.Commander.initCommands();\n\t// Kick off the language manager\n\t$tw.languageManager = new $tw.PluginSwitcher({\n\t\twiki: $tw.wiki,\n\t\tpluginType: \"language\",\n\t\tcontrollerTitle: \"$:/language\",\n\t\tdefaultPlugins: [\n\t\t\t\"$:/languages/en-US\"\n\t\t]\n\t});\n\t// Kick off the theme manager\n\t$tw.themeManager = new $tw.PluginSwitcher({\n\t\twiki: $tw.wiki,\n\t\tpluginType: \"theme\",\n\t\tcontrollerTitle: \"$:/theme\",\n\t\tdefaultPlugins: [\n\t\t\t\"$:/themes/tiddlywiki/snowwhite\",\n\t\t\t\"$:/themes/tiddlywiki/vanilla\"\n\t\t]\n\t});\n\t// Get the default tiddlers\n\tvar defaultTiddlersTitle = \"$:/DefaultTiddlers\",\n\t\tdefaultTiddlersTiddler = $tw.wiki.getTiddler(defaultTiddlersTitle),\n\t\tdefaultTiddlers = [];\n\tif(defaultTiddlersTiddler) {\n\t\tdefaultTiddlers = $tw.wiki.filterTiddlers(defaultTiddlersTiddler.fields.text);\n\t}\n\t// Initialise the story and history\n\tvar storyTitle = \"$:/StoryList\",\n\t\tstory = [];\n\tfor(var t=0; t<defaultTiddlers.length; t++) {\n\t\tstory[t] = defaultTiddlers[t];\n\t}\n\t$tw.wiki.addTiddler({title: storyTitle, text: \"\", list: story},$tw.wiki.getModificationFields());\n\t// Host-specific startup\n\tif($tw.browser) {\n\t\t// Set up our beforeunload handler\n\t\twindow.addEventListener(\"beforeunload\",function(event) {\n\t\t\tvar confirmationMessage = null;\n\t\t\tif($tw.syncer.isDirty()) {\n\t\t\t\tconfirmationMessage = \"You have unsaved changes in TiddlyWiki\";\n\t\t\t\tevent.returnValue = confirmationMessage; // Gecko\n\t\t\t}\n\t\t\treturn confirmationMessage;\n\t\t});\n\t\t// Install the popup manager\n\t\t$tw.popup = new $tw.utils.Popup({\n\t\t\trootElement: document.body\n\t\t});\n\t\t// Install the animator\n\t\t$tw.anim = new $tw.utils.Animator();\n\t\t// Create a root widget for attaching event handlers. By using it as the parentWidget for another widget tree, one can reuse the event handlers\n\t\t$tw.rootWidget = new widget.widget({\n\t\t\ttype: \"widget\",\n\t\t\tchildren: []\n\t\t},{\n\t\t\twiki: $tw.wiki,\n\t\t\tdocument: document\n\t\t});\n\t\t// Install the modal message mechanism\n\t\t$tw.modal = new $tw.utils.Modal($tw.wiki);\n\t\t$tw.rootWidget.addEventListener(\"tw-modal\",function(event) {\n\t\t\t$tw.modal.display(event.param);\n\t\t});\n\t\t// Install the notification mechanism\n\t\t$tw.notifier = new $tw.utils.Notifier($tw.wiki);\n\t\t$tw.rootWidget.addEventListener(\"tw-notify\",function(event) {\n\t\t\t$tw.notifier.display(event.param);\n\t\t});\n\t\t// Install the scroller\n\t\t$tw.pageScroller = new $tw.utils.PageScroller();\n\t\t$tw.rootWidget.addEventListener(\"tw-scroll\",function(event) {\n\t\t\t$tw.pageScroller.handleEvent(event);\n\t\t});\n\t\t// Install the save action handlers\n\t\t$tw.rootWidget.addEventListener(\"tw-save-wiki\",function(event) {\n\t\t\t$tw.syncer.saveWiki({\n\t\t\t\ttemplate: event.param,\n\t\t\t\tdownloadType: \"text/plain\"\n\t\t\t});\n\t\t});\n\t\t$tw.rootWidget.addEventListener(\"tw-auto-save-wiki\",function(event) {\n\t\t\t$tw.syncer.saveWiki({\n\t\t\t\tmethod: \"autosave\",\n\t\t\t\ttemplate: event.param,\n\t\t\t\tdownloadType: \"text/plain\"\n\t\t\t});\n\t\t});\n\t\t$tw.rootWidget.addEventListener(\"tw-download-file\",function(event) {\n\t\t\t$tw.syncer.saveWiki({\n\t\t\t\tmethod: \"download\",\n\t\t\t\ttemplate: event.param,\n\t\t\t\tdownloadType: \"text/plain\"\n\t\t\t});\n\t\t});\n\t\t// Listen out for login/logout/refresh events in the browser\n\t\t$tw.rootWidget.addEventListener(\"tw-login\",function() {\n\t\t\t$tw.syncer.handleLoginEvent();\n\t\t});\n\t\t$tw.rootWidget.addEventListener(\"tw-logout\",function() {\n\t\t\t$tw.syncer.handleLogoutEvent();\n\t\t});\n\t\t$tw.rootWidget.addEventListener(\"tw-server-refresh\",function() {\n\t\t\t$tw.syncer.handleRefreshEvent();\n\t\t});\n\t\t// Install the crypto event handlers\n\t\t$tw.rootWidget.addEventListener(\"tw-set-password\",function(event) {\n\t\t\t$tw.passwordPrompt.createPrompt({\n\t\t\t\tserviceName: \"Set a new password for this TiddlyWiki\",\n\t\t\t\tnoUserName: true,\n\t\t\t\tsubmitText: \"Set password\",\n\t\t\t\tcanCancel: true,\n\t\t\t\tcallback: function(data) {\n\t\t\t\t\tif(data) {\n\t\t\t\t\t\t$tw.crypto.setPassword(data.password);\n\t\t\t\t\t}\n\t\t\t\t\treturn true; // Get rid of the password prompt\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\t$tw.rootWidget.addEventListener(\"tw-clear-password\",function(event) {\n\t\t\t$tw.crypto.setPassword(null);\n\t\t});\n\t\t// Ensure that $:/isEncrypted is maintained properly\n\t\t$tw.wiki.addEventListener(\"change\",function(changes) {\n\t\t\tif($tw.utils.hop(changes,\"$:/isEncrypted\")) {\n\t\t\t\t$tw.crypto.updateCryptoStateTiddler();\n\t\t\t}\n\t\t});\n\t\t// Set up the favicon\n\t\tvar faviconTitle = \"$:/favicon.ico\",\n\t\t\tfaviconLink = document.getElementById(\"faviconLink\"),\n\t\t\tsetFavicon = function() {\n\t\t\t\tvar tiddler = $tw.wiki.getTiddler(faviconTitle);\n\t\t\t\tif(tiddler) {\n\t\t\t\t\tfaviconLink.setAttribute(\"href\",\"data:\" + tiddler.fields.type + \";base64,\" + tiddler.fields.text);\n\t\t\t\t}\n\t\t\t};\n\t\tsetFavicon();\n\t\t$tw.wiki.addEventListener(\"change\",function(changes) {\n\t\t\tif($tw.utils.hop(changes,faviconTitle)) {\n\t\t\t\tsetFavicon();\n\t\t\t}\n\t\t});\n\t\t// Set up the styles\n\t\tvar styleTemplateTitle = \"$:/core/ui/PageStylesheet\",\n\t\t\tstyleParser = $tw.wiki.parseTiddler(styleTemplateTitle);\n\t\t$tw.styleWidgetNode = $tw.wiki.makeWidget(styleParser,{document: $tw.fakeDocument});\n\t\t$tw.styleContainer = $tw.fakeDocument.createElement(\"style\");\n\t\t$tw.styleWidgetNode.render($tw.styleContainer,null);\n\t\t$tw.styleElement = document.createElement(\"style\");\n\t\t$tw.styleElement.innerHTML = $tw.styleContainer.textContent;\n\t\tdocument.head.insertBefore($tw.styleElement,document.head.firstChild);\n\t\t$tw.wiki.addEventListener(\"change\",function(changes) {\n\t\t\tif($tw.styleWidgetNode.refresh(changes,$tw.styleContainer,null)) {\n\t\t\t\t$tw.styleElement.innerHTML = $tw.styleContainer.textContent;\n\t\t\t}\n\t\t});\n\t\t// Display the PageMacros, which includes the PageTemplate\n\t\tvar templateTitle = \"$:/core/ui/PageMacros\",\n\t\t\tparser = $tw.wiki.parseTiddler(templateTitle);\n\t\t$tw.pageWidgetNode = $tw.wiki.makeWidget(parser,{document: document, parentWidget: $tw.rootWidget});\n\t\t$tw.pageContainer = document.createElement(\"div\");\n\t\t$tw.utils.addClass($tw.pageContainer,\"tw-page-container\");\n\t\tdocument.body.insertBefore($tw.pageContainer,document.body.firstChild);\n\t\t$tw.pageWidgetNode.render($tw.pageContainer,null);\n\t\t$tw.wiki.addEventListener(\"change\",function(changes) {\n\t\t\t$tw.pageWidgetNode.refresh(changes,$tw.pageContainer,null);\n\t\t});\n\t\t// Fix up the link between the root widget and the page container\n\t\t$tw.rootWidget.domNodes = [$tw.pageContainer];\n\t\t$tw.rootWidget.children = [$tw.pageWidgetNode];\n\t\t// If we're being viewed on a data: URI then give instructions for how to save\n\t\tif(document.location.protocol === \"data:\") {\n\t\t\t$tw.utils.dispatchCustomEvent(document,\"tw-modal\",{\n\t\t\t\tparam: \"$:/language/Modals/SaveInstructions\"\n\t\t\t});\n\t\t}\n\t\t// Call browser startup modules\n\t\t$tw.modules.forEachModuleOfType(\"browser-startup\",function(title,module) {\n\t\t\tif(module.startup) {\n\t\t\t\tmodule.startup();\n\t\t\t}\n\t\t});\n\t} else {\n\t\t// On the server, start a commander with the command line arguments\n\t\tcommander = new $tw.Commander(\n\t\t\t$tw.boot.argv,\n\t\t\tfunction(err) {\n\t\t\t\tif(err) {\n\t\t\t\t\tconsole.log(\"Error: \" + err);\n\t\t\t\t}\n\t\t\t},\n\t\t\t$tw.wiki,\n\t\t\t{output: process.stdout, error: process.stderr}\n\t\t);\n\t\tcommander.execute();\n\t}\n\n};\n\n})();\n",
"title": "$:/core/modules/startup.js",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/storyviews/classic.js": {
"text": "/*\\\ntitle: $:/core/modules/storyviews/classic.js\ntype: application/javascript\nmodule-type: storyview\n\nViews the story as a linear sequence\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar ClassicStoryView = function(listWidget) {\n\tthis.listWidget = listWidget;\n}\n\nClassicStoryView.prototype.navigateTo = function(historyInfo) {\n\tvar listElementIndex = this.listWidget.findListItem(0,historyInfo.title);\n\tif(listElementIndex === undefined) {\n\t\treturn;\n\t}\n\tvar listItemWidget = this.listWidget.children[listElementIndex],\n\t\ttargetElement = listItemWidget.findFirstDomNode();\n\t// Scroll the node into view\n\tthis.listWidget.dispatchEvent({type: \"tw-scroll\", target: targetElement});\n};\n\nClassicStoryView.prototype.insert = function(widget) {\n\tvar targetElement = widget.findFirstDomNode(),\n\t\tduration = $tw.utils.getAnimationDuration();\n\t// Get the current height of the tiddler\n\tvar computedStyle = window.getComputedStyle(targetElement),\n\t\tcurrMarginBottom = parseInt(computedStyle.marginBottom,10),\n\t\tcurrMarginTop = parseInt(computedStyle.marginTop,10),\n\t\tcurrHeight = targetElement.offsetHeight + currMarginTop;\n\t// Reset the margin once the transition is over\n\tsetTimeout(function() {\n\t\t$tw.utils.setStyle(targetElement,[\n\t\t\t{transition: \"none\"},\n\t\t\t{marginBottom: \"\"}\n\t\t]);\n\t},duration);\n\t// Set up the initial position of the element\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: \"none\"},\n\t\t{marginBottom: (-currHeight) + \"px\"},\n\t\t{opacity: \"0.0\"}\n\t]);\n\t$tw.utils.forceLayout(targetElement);\n\t// Transition to the final position\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: \"opacity \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"margin-bottom \" + duration + \"ms ease-in-out\"},\n\t\t{marginBottom: currMarginBottom + \"px\"},\n\t\t{opacity: \"1.0\"}\n\t]);\n};\n\nClassicStoryView.prototype.remove = function(widget) {\n\tvar targetElement = widget.findFirstDomNode(),\n\t\tduration = $tw.utils.getAnimationDuration();\n\t// Get the current height of the tiddler\n\tvar currWidth = targetElement.offsetWidth,\n\t\tcomputedStyle = window.getComputedStyle(targetElement),\n\t\tcurrMarginBottom = parseInt(computedStyle.marginBottom,10),\n\t\tcurrMarginTop = parseInt(computedStyle.marginTop,10),\n\t\tcurrHeight = targetElement.offsetHeight + currMarginTop;\n\t// Remove the dom nodes of the widget at the end of the transition\n\tsetTimeout(function() {\n\t\twidget.removeChildDomNodes();\n\t},duration);\n\t// Animate the closure\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: \"none\"},\n\t\t{transform: \"translateX(0px)\"},\n\t\t{marginBottom: currMarginBottom + \"px\"},\n\t\t{opacity: \"1.0\"}\n\t]);\n\t$tw.utils.forceLayout(targetElement);\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"opacity \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"margin-bottom \" + duration + \"ms ease-in-out\"},\n\t\t{transform: \"translateX(-\" + currWidth + \"px)\"},\n\t\t{marginBottom: (-currHeight) + \"px\"},\n\t\t{opacity: \"0.0\"}\n\t]);\n};\n\nexports.classic = ClassicStoryView;\n\n})();",
"title": "$:/core/modules/storyviews/classic.js",
"type": "application/javascript",
"module-type": "storyview"
},
"$:/core/modules/storyviews/pop.js": {
"text": "/*\\\ntitle: $:/core/modules/storyviews/pop.js\ntype: application/javascript\nmodule-type: storyview\n\nAnimates list insertions and removals\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar PopStoryView = function(listWidget) {\n\tthis.listWidget = listWidget;\n}\n\nPopStoryView.prototype.navigateTo = function(historyInfo) {\n\tvar listElementIndex = this.listWidget.findListItem(0,historyInfo.title);\n\tif(listElementIndex === undefined) {\n\t\treturn;\n\t}\n\tvar listItemWidget = this.listWidget.children[listElementIndex],\n\t\ttargetElement = listItemWidget.findFirstDomNode();\n\t// Scroll the node into view\n\tthis.listWidget.dispatchEvent({type: \"tw-scroll\", target: targetElement});\n};\n\nPopStoryView.prototype.insert = function(widget) {\n\tvar targetElement = widget.findFirstDomNode(),\n\t\tduration = $tw.utils.getAnimationDuration();\n\t// Reset once the transition is over\n\tsetTimeout(function() {\n\t\t$tw.utils.setStyle(targetElement,[\n\t\t\t{transition: \"none\"},\n\t\t\t{transform: \"none\"}\n\t\t]);\n\t},duration);\n\t// Set up the initial position of the element\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: \"none\"},\n\t\t{transform: \"scale(2)\"},\n\t\t{opacity: \"0.0\"}\n\t]);\n\t$tw.utils.forceLayout(targetElement);\n\t// Transition to the final position\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"opacity \" + duration + \"ms ease-in-out\"},\n\t\t{transform: \"scale(1)\"},\n\t\t{opacity: \"1.0\"}\n\t]);\n};\n\nPopStoryView.prototype.remove = function(widget) {\n\tvar targetElement = widget.findFirstDomNode(),\n\t\tduration = $tw.utils.getAnimationDuration();\n\t// Remove the element at the end of the transition\n\tsetTimeout(function() {\n\t\tif(targetElement.parentNode) {\n\t\t\twidget.removeChildDomNodes();\n\t\t}\n\t},duration);\n\t// Animate the closure\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: \"none\"},\n\t\t{transform: \"scale(1)\"},\n\t\t{opacity: \"1.0\"}\n\t]);\n\t$tw.utils.forceLayout(targetElement);\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"opacity \" + duration + \"ms ease-in-out\"},\n\t\t{transform: \"scale(0.1)\"},\n\t\t{opacity: \"0.0\"}\n\t]);\n};\n\nexports.pop = PopStoryView;\n\n})();\n",
"title": "$:/core/modules/storyviews/pop.js",
"type": "application/javascript",
"module-type": "storyview"
},
"$:/core/modules/storyviews/zoomin.js": {
"text": "/*\\\ntitle: $:/core/modules/storyviews/zoomin.js\ntype: application/javascript\nmodule-type: storyview\n\nZooms between individual tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar ZoominListView = function(listWidget) {\n\tvar self = this;\n\tthis.listWidget = listWidget;\n\t// Make all the tiddlers position absolute, and hide all but the first one\n\t$tw.utils.each(this.listWidget.children,function(itemWidget,index) {\n\t\tvar domNode = itemWidget.findFirstDomNode();\n\t\tif(index) {\n\t\t\tdomNode.style.display = \"none\";\n\t\t} else {\n\t\t\tself.currentTiddlerDomNode = domNode;\n\t\t}\n\t\tdomNode.style.position = \"absolute\";\n\t});\n}\n\nZoominListView.prototype.navigateTo = function(historyInfo) {\n\tvar duration = $tw.utils.getAnimationDuration(),\n\t\tlistElementIndex = this.listWidget.findListItem(0,historyInfo.title);\n\tif(listElementIndex === undefined) {\n\t\treturn;\n\t}\n\tvar listItemWidget = this.listWidget.children[listElementIndex],\n\t\ttargetElement = listItemWidget.findFirstDomNode();\n\t// Make the new tiddler be position absolute and visible so that we can measure it\n\t$tw.utils.setStyle(targetElement,[\n\t\t{position: \"absolute\"},\n\t\t{display: \"block\"},\n\t\t{transformOrigin: \"0 0\"},\n\t\t{transform: \"translateX(0px) translateY(0px) scale(1)\"},\n\t\t{transition: \"none\"},\n\t\t{opacity: \"0.0\"}\n\t]);\n\t// Get the position of the source node, or use the centre of the window as the source position\n\tvar sourceBounds = historyInfo.fromPageRect || {\n\t\t\tleft: window.innerWidth/2 - 2,\n\t\t\ttop: window.innerHeight/2 - 2,\n\t\t\twidth: window.innerWidth/8,\n\t\t\theight: window.innerHeight/8\n\t\t};\n\t// Try to find the title node in the target tiddler\n\tvar titleDomNode = findTitleDomNode(listItemWidget) || listItemWidget.findFirstDomNode(),\n\t\tzoomBounds = titleDomNode.getBoundingClientRect();\n\t// Compute the transform for the target tiddler to make the title lie over the source rectange\n\tvar targetBounds = targetElement.getBoundingClientRect(),\n\t\tscale = sourceBounds.width / zoomBounds.width,\n\t\tx = sourceBounds.left - targetBounds.left - (zoomBounds.left - targetBounds.left) * scale,\n\t\ty = sourceBounds.top - targetBounds.top - (zoomBounds.top - targetBounds.top) * scale;\n\t// Transform the target tiddler to its starting position\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transform: \"translateX(\" + x + \"px) translateY(\" + y + \"px) scale(\" + scale + \")\"}\n\t]);\n\t// Force layout\n\t$tw.utils.forceLayout(targetElement);\n\t// Apply the ending transitions with a timeout to ensure that the previously applied transformations are applied first\n\tvar self = this,\n\t\tprevCurrentTiddler = this.currentTiddlerDomNode;\n\tthis.currentTiddlerDomNode = targetElement;\n\t// Transform the target tiddler to its natural size\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms ease-in, opacity \" + duration + \"ms ease-in\"},\n\t\t{opacity: \"1.0\"},\n\t\t{transform: \"translateX(0px) translateY(0px) scale(1)\"},\n\t\t{zIndex: \"500\"},\n\t]);\n\t// Transform the previous tiddler out of the way and then hide it\n\tif(prevCurrentTiddler && prevCurrentTiddler !== targetElement) {\n\t\tvar scale = zoomBounds.width / sourceBounds.width;\n\t\tx = zoomBounds.left - targetBounds.left - (sourceBounds.left - targetBounds.left) * scale;\n\t\ty = zoomBounds.top - targetBounds.top - (sourceBounds.top - targetBounds.top) * scale;\n\t\t$tw.utils.setStyle(prevCurrentTiddler,[\n\t\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms ease-in, opacity \" + duration + \"ms ease-in\"},\n\t\t\t{opacity: \"0.0\"},\n\t\t\t{transformOrigin: \"0 0\"},\n\t\t\t{transform: \"translateX(\" + x + \"px) translateY(\" + y + \"px) scale(\" + scale + \")\"},\n\t\t\t{zIndex: \"0\"}\n\t\t]);\n\t\t// Hide the tiddler when the transition has finished\n\t\tsetTimeout(function() {\n\t\t\tif(self.currentTiddlerDomNode !== prevCurrentTiddler) {\n\t\t\t\tprevCurrentTiddler.style.display = \"none\";\n\t\t\t}\n\t\t},duration);\n\t}\n\t// Scroll the target into view\n//\t$tw.pageScroller.scrollIntoView(targetElement);\n};\n\n/*\nFind the first child DOM node of a widget that has the class \"title\"\n*/\nfunction findTitleDomNode(widget,targetClass) {\n\ttargetClass = targetClass || \"title\";\n\tvar domNode = widget.findFirstDomNode();\n\tif(domNode && domNode.querySelector) {\n\t\treturn domNode.querySelector(\".\" + targetClass);\n\t}\n\treturn null;\n}\n\nZoominListView.prototype.insert = function(widget) {\n\tvar targetElement = widget.findFirstDomNode();\n\t// Make the newly inserted node position absolute and hidden\n\t$tw.utils.setStyle(targetElement,[\n\t\t{display: \"none\"},\n\t\t{position: \"absolute\"}\n\t]);\n};\n\nZoominListView.prototype.remove = function(widget) {\n\tvar targetElement = widget.findFirstDomNode(),\n\t\tduration = $tw.utils.getAnimationDuration();\n\t// Set up the tiddler that is being closed\n\t$tw.utils.setStyle(targetElement,[\n\t\t{position: \"absolute\"},\n\t\t{display: \"block\"},\n\t\t{transformOrigin: \"50% 50%\"},\n\t\t{transform: \"translateX(0px) translateY(0px) scale(1)\"},\n\t\t{transition: \"none\"},\n\t\t{zIndex: \"0\"}\n\t]);\n\t// We'll move back to the previous or next element in the story\n\tvar toWidget = widget.previousSibling();\n\tif(!toWidget) {\n\t\ttoWidget = widget.nextSibling();\n\t}\n\tvar toWidgetDomNode = toWidget && toWidget.findFirstDomNode();\n\t// Set up the tiddler we're moving back in\n\tif(toWidgetDomNode) {\n\t\t$tw.utils.setStyle(toWidgetDomNode,[\n\t\t\t{position: \"absolute\"},\n\t\t\t{display: \"block\"},\n\t\t\t{transformOrigin: \"50% 50%\"},\n\t\t\t{transform: \"translateX(0px) translateY(0px) scale(10)\"},\n\t\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms ease-in, opacity \" + duration + \"ms ease-in\"},\n\t\t\t{opacity: \"0\"},\n\t\t\t{zIndex: \"500\"}\n\t\t]);\n\t\tthis.currentTiddlerDomNode = toWidgetDomNode;\n\t}\n\t// Animate them both\n\t// Force layout\n\t$tw.utils.forceLayout(this.listWidget.parentDomNode);\n\t// First, the tiddler we're closing\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transformOrigin: \"50% 50%\"},\n\t\t{transform: \"translateX(0px) translateY(0px) scale(0.1)\"},\n\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms ease-in, opacity \" + duration + \"ms ease-in\"},\n\t\t{opacity: \"0\"},\n\t\t{zIndex: \"0\"}\n\t]);\n\tsetTimeout(function() {\n\t\t// Delete the DOM node when the transition is over\n\t\twidget.removeChildDomNodes();\n\t},duration);\n\t// Now the tiddler we're going back to\n\tif(toWidgetDomNode) {\n\t\t$tw.utils.setStyle(toWidgetDomNode,[\n\t\t\t{transform: \"translateX(0px) translateY(0px) scale(1)\"},\n\t\t\t{opacity: \"1\"}\n\t\t]);\n\t}\n\treturn true; // Indicate that we'll delete the DOM node\n};\n\nexports.zoomin = ZoominListView;\n\n})();",
"title": "$:/core/modules/storyviews/zoomin.js",
"type": "application/javascript",
"module-type": "storyview"
},
"$:/core/modules/syncer.js": {
"text": "/*\\\ntitle: $:/core/modules/syncer.js\ntype: application/javascript\nmodule-type: global\n\nThe syncer tracks changes to the store. If a syncadaptor is used then individual tiddlers are synchronised through it. If there is no syncadaptor then the entire wiki is saved via saver modules.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInstantiate the syncer with the following options:\nwiki: wiki to be synced\n*/\nfunction Syncer(options) {\n\tvar self = this;\n\tthis.wiki = options.wiki;\n\t// Make a logger\n\tthis.logger = new $tw.utils.Logger(\"syncer\" + ($tw.browser ? \"-browser\" : \"\") + ($tw.node ? \"-server\" : \"\"));\n\t// Find a working syncadaptor\n\tthis.syncadaptor = undefined;\n\t$tw.modules.forEachModuleOfType(\"syncadaptor\",function(title,module) {\n\t\tif(!self.syncadaptor && module.adaptorClass) {\n\t\t\tself.syncadaptor = new module.adaptorClass(self);\n\t\t}\n\t});\n\t// Initialise our savers\n\tif($tw.browser) {\n\t\tthis.initSavers();\n\t}\n\t// Compile the dirty tiddler filter\n\tthis.filterFn = this.wiki.compileFilter(this.wiki.getTiddlerText(this.titleSyncFilter));\n\t// Record information for known tiddlers\n\tthis.readTiddlerInfo();\n\t// Tasks are {type: \"load\"/\"save\"/\"delete\", title:, queueTime:, lastModificationTime:}\n\tthis.taskQueue = {}; // Hashmap of tasks yet to be performed\n\tthis.taskInProgress = {}; // Hash of tasks in progress\n\tthis.taskTimerId = null; // Timer for task dispatch\n\tthis.pollTimerId = null; // Timer for polling server\n\t// Listen out for changes to tiddlers\n\tthis.wiki.addEventListener(\"change\",function(changes) {\n\t\tself.syncToServer(changes);\n\t});\n\t// Listen out for lazyLoad events\n\tif(this.syncadaptor) {\n\t\tthis.wiki.addEventListener(\"lazyLoad\",function(title) {\n\t\t\tself.handleLazyLoadEvent(title);\n\t\t});\n\t}\n\t// Get the login status\n\tthis.getStatus(function (err,isLoggedIn) {\n\t\t// Do a sync from the server\n\t\tself.syncFromServer();\n\t});\n}\n\n/*\nConstants\n*/\nSyncer.prototype.titleIsLoggedIn = \"$:/status/IsLoggedIn\";\nSyncer.prototype.titleUserName = \"$:/status/UserName\";\nSyncer.prototype.titleSyncFilter = \"$:/config/SyncFilter\";\nSyncer.prototype.titleAutoSave = \"$:/config/AutoSave\";\nSyncer.prototype.titleSavedNotification = \"$:/language/Notifications/Save/Done\";\nSyncer.prototype.taskTimerInterval = 1 * 1000; // Interval for sync timer\nSyncer.prototype.throttleInterval = 1 * 1000; // Defer saving tiddlers if they've changed in the last 1s...\nSyncer.prototype.fallbackInterval = 10 * 1000; // Unless the task is older than 10s\nSyncer.prototype.pollTimerInterval = 60 * 1000; // Interval for polling for changes from the adaptor\n\n/*\nRead (or re-read) the latest tiddler info from the store\n*/\nSyncer.prototype.readTiddlerInfo = function() {\n\t// Hashmap by title of {revision:,changeCount:,adaptorInfo:}\n\tthis.tiddlerInfo = {};\n\t// Record information for known tiddlers\n\tvar self = this,\n\t\ttiddlers = this.filterFn.call(this.wiki);\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar tiddler = self.wiki.getTiddler(title);\n\t\tself.tiddlerInfo[title] = {\n\t\t\trevision: tiddler.fields[\"revision\"],\n\t\t\tadaptorInfo: self.syncadaptor && self.syncadaptor.getTiddlerInfo(tiddler),\n\t\t\tchangeCount: self.wiki.getChangeCount(title)\n\t\t}\n\t});\n};\n\n/*\nSelect the appropriate saver modules and set them up\n*/\nSyncer.prototype.initSavers = function(moduleType) {\n\tmoduleType = moduleType || \"saver\";\n\t// Instantiate the available savers\n\tthis.savers = [];\n\tvar self = this;\n\t$tw.modules.forEachModuleOfType(moduleType,function(title,module) {\n\t\tif(module.canSave(self)) {\n\t\t\tself.savers.push(module.create(self.wiki));\n\t\t}\n\t});\n\t// Sort the savers into priority order\n\tthis.savers.sort(function(a,b) {\n\t\tif(a.info.priority < b.info.priority) {\n\t\t\treturn -1;\n\t\t} else {\n\t\t\tif(a.info.priority > b.info.priority) {\n\t\t\t\treturn +1;\n\t\t\t} else {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t}\n\t});\n};\n\n/*\nSave the wiki contents. Options are:\n\tmethod: \"save\" or \"download\"\n\ttemplate: the tiddler containing the template to save\n\tdownloadType: the content type for the saved file\n*/\nSyncer.prototype.saveWiki = function(options) {\n\toptions = options || {};\n\tvar self = this,\n\t\tmethod = options.method || \"save\",\n\t\ttemplate = options.template || \"$:/core/save/all\",\n\t\tdownloadType = options.downloadType || \"text/plain\",\n\t\ttext = this.wiki.renderTiddler(downloadType,template),\n\t\tcallback = function(err) {\n\t\t\tif(err) {\n\t\t\t\talert(\"Error while saving:\\n\\n\" + err);\n\t\t\t} else {\n\t\t\t\t$tw.notifier.display(self.titleSavedNotification);\n\t\t\t\tif(options.callback) {\n\t\t\t\t\toptions.callback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t// Ignore autosave if we've got a syncadaptor or autosave is disabled\n\tif(method === \"autosave\") {\n\t\tif(this.syncadaptor || this.wiki.getTiddlerText(this.titleAutoSave,\"yes\") !== \"yes\") {\n\t\t\treturn false;\n\t\t}\n\t}\n\t// Call the highest priority saver that supports this method\n\tfor(var t=this.savers.length-1; t>=0; t--) {\n\t\tvar saver = this.savers[t];\n\t\tif(saver.info.capabilities.indexOf(method) !== -1 && saver.save(text,method,callback)) {\n\t\t\tthis.logger.log(\"Saving wiki with method\",method,\"through saver\",saver.info.name);\n\t\t\t// Clear the task queue if we're saving (rather than downloading)\n\t\t\tif(method !== \"download\") {\n\t\t\t\tthis.readTiddlerInfo();\n\t\t\t\tthis.taskQueue = {};\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n};\n\n/*\nChecks whether the wiki is dirty (ie the window shouldn't be closed)\n*/\nSyncer.prototype.isDirty = function() {\n\treturn (this.numTasksInQueue() > 0) || (this.numTasksInProgress() > 0);\n};\n\n/*\nSave an incoming tiddler in the store, and updates the associated tiddlerInfo\n*/\nSyncer.prototype.storeTiddler = function(tiddlerFields) {\n\t// Save the tiddler\n\tvar tiddler = new $tw.Tiddler(this.wiki.getTiddler(tiddlerFields.title),tiddlerFields);\n\tthis.wiki.addTiddler(tiddler);\n\t// Save the tiddler revision and changeCount details\n\tthis.tiddlerInfo[tiddlerFields.title] = {\n\t\trevision: tiddlerFields.revision,\n\t\tadaptorInfo: this.syncadaptor.getTiddlerInfo(tiddler),\n\t\tchangeCount: this.wiki.getChangeCount(tiddlerFields.title)\n\t};\n};\n\nSyncer.prototype.getStatus = function(callback) {\n\tvar self = this;\n\t// Check if the adaptor supports getStatus()\n\tif(this.syncadaptor && this.syncadaptor.getStatus) {\n\t\t// Mark us as not logged in\n\t\tthis.wiki.addTiddler({title: this.titleIsLoggedIn,text: \"no\"});\n\t\t// Get login status\n\t\tthis.syncadaptor.getStatus(function(err,isLoggedIn,username) {\n\t\t\tif(err) {\n\t\t\t\tself.logger.alert(err);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Set the various status tiddlers\n\t\t\tself.wiki.addTiddler({title: self.titleIsLoggedIn,text: isLoggedIn ? \"yes\" : \"no\"});\n\t\t\tif(isLoggedIn) {\n\t\t\t\tself.wiki.addTiddler({title: self.titleUserName,text: username || \"\"});\n\t\t\t} else {\n\t\t\t\tself.wiki.deleteTiddler(self.titleUserName);\n\t\t\t}\n\t\t\t// Invoke the callback\n\t\t\tif(callback) {\n\t\t\t\tcallback(err,isLoggedIn,username);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tcallback(null,true,\"UNAUTHENTICATED\");\n\t}\n};\n\n/*\nSynchronise from the server by reading the skinny tiddler list and queuing up loads for any tiddlers that we don't already have up to date\n*/\nSyncer.prototype.syncFromServer = function() {\n\tif(this.syncadaptor && this.syncadaptor.getSkinnyTiddlers) {\n\t\tthis.logger.log(\"Retrieving skinny tiddler list\");\n\t\tvar self = this;\n\t\tif(this.pollTimerId) {\n\t\t\tclearTimeout(this.pollTimerId);\n\t\t\tthis.pollTimerId = null;\n\t\t}\n\t\tthis.syncadaptor.getSkinnyTiddlers(function(err,tiddlers) {\n\t\t\t// Trigger another sync\n\t\t\tself.pollTimerId = setTimeout(function() {\n\t\t\t\tself.pollTimerId = null;\n\t\t\t\tself.syncFromServer.call(self);\n\t\t\t},self.pollTimerInterval);\n\t\t\t// Check for errors\n\t\t\tif(err) {\n\t\t\t\tself.logger.alert(\"Error retrieving skinny tiddler list:\",err);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Process each incoming tiddler\n\t\t\tfor(var t=0; t<tiddlers.length; t++) {\n\t\t\t\t// Get the incoming tiddler fields, and the existing tiddler\n\t\t\t\tvar tiddlerFields = tiddlers[t],\n\t\t\t\t\tincomingRevision = tiddlerFields.revision + \"\",\n\t\t\t\t\ttiddler = self.wiki.getTiddler(tiddlerFields.title),\n\t\t\t\t\ttiddlerInfo = self.tiddlerInfo[tiddlerFields.title],\n\t\t\t\t\tcurrRevision = tiddlerInfo ? tiddlerInfo.revision : null;\n\t\t\t\t// Ignore the incoming tiddler if it's the same as the revision we've already got\n\t\t\t\tif(currRevision !== incomingRevision) {\n\t\t\t\t\t// Do a full load if we've already got a fat version of the tiddler\n\t\t\t\t\tif(tiddler && tiddler.fields.text !== undefined) {\n\t\t\t\t\t\t// Do a full load of this tiddler\n\t\t\t\t\t\tself.enqueueSyncTask({\n\t\t\t\t\t\t\ttype: \"load\",\n\t\t\t\t\t\t\ttitle: tiddlerFields.title\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Load the skinny version of the tiddler\n\t\t\t\t\t\tself.storeTiddler(tiddlerFields);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n};\n\n/*\nSynchronise a set of changes to the server\n*/\nSyncer.prototype.syncToServer = function(changes) {\n\tvar self = this,\n\t\tnow = new Date(),\n\t\tfilteredChanges = this.filterFn.call(this.wiki,changes);\n\t$tw.utils.each(changes,function(change,title,object) {\n\t\t// Process the change if it is a deletion of a tiddler we're already syncing, or is on the filtered change list\n\t\tif((change.deleted && $tw.utils.hop(self.tiddlerInfo,title)) || filteredChanges.indexOf(title) !== -1) {\n\t\t\t// Queue a task to sync this tiddler\n\t\t\tself.enqueueSyncTask({\n\t\t\t\ttype: change.deleted ? \"delete\" : \"save\",\n\t\t\t\ttitle: title\n\t\t\t});\n\t\t}\n\t});\n};\n\n/*\nLazily load a skinny tiddler if we can\n*/\nSyncer.prototype.handleLazyLoadEvent = function(title) {\n\t// Queue up a sync task to load this tiddler\n\tthis.enqueueSyncTask({\n\t\ttype: \"load\",\n\t\ttitle: title\n\t});\n};\n\n/*\nDispay a password prompt and allow the user to login\n*/\nSyncer.prototype.handleLoginEvent = function() {\n\tvar self = this;\n\tthis.getStatus(function(err,isLoggedIn,username) {\n\t\tif(!isLoggedIn) {\n\t\t\t$tw.passwordPrompt.createPrompt({\n\t\t\t\tserviceName: \"Login to TiddlySpace\",\n\t\t\t\tcallback: function(data) {\n\t\t\t\t\tself.login(data.username,data.password,function(err,isLoggedIn) {\n\t\t\t\t\t\tself.syncFromServer();\n\t\t\t\t\t});\n\t\t\t\t\treturn true; // Get rid of the password prompt\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n};\n\n/*\nAttempt to login to TiddlyWeb.\n\tusername: username\n\tpassword: password\n\tcallback: invoked with arguments (err,isLoggedIn)\n*/\nSyncer.prototype.login = function(username,password,callback) {\n\tthis.logger.log(\"Attempting to login as\",username);\n\tvar self = this;\n\tif(this.syncadaptor.login) {\n\t\tthis.syncadaptor.login(username,password,function(err) {\n\t\t\tif(err) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\tself.getStatus(function(err,isLoggedIn,username) {\n\t\t\t\tif(callback) {\n\t\t\t\t\tcallback(null,isLoggedIn);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t} else {\n\t\tcallback(null,true);\n\t}\n};\n\n/*\nAttempt to log out of TiddlyWeb\n*/\nSyncer.prototype.handleLogoutEvent = function() {\n\tthis.logger.log(\"Attempting to logout\");\n\tvar self = this;\n\tif(this.syncadaptor.logout) {\n\t\tthis.syncadaptor.logout(function(err) {\n\t\t\tif(err) {\n\t\t\t\tself.logger.alert(err);\n\t\t\t} else {\n\t\t\t\tself.getStatus();\n\t\t\t}\n\t\t});\n\t}\n};\n\n/*\nImmediately refresh from the server\n*/\nSyncer.prototype.handleRefreshEvent = function() {\n\tthis.syncFromServer();\n};\n\n/*\nQueue up a sync task. If there is already a pending task for the tiddler, just update the last modification time\n*/\nSyncer.prototype.enqueueSyncTask = function(task) {\n\tvar self = this,\n\t\tnow = new Date();\n\t// Set the timestamps on this task\n\ttask.queueTime = now;\n\ttask.lastModificationTime = now;\n\t// Fill in some tiddlerInfo if the tiddler is one we haven't seen before\n\tif(!$tw.utils.hop(this.tiddlerInfo,task.title)) {\n\t\tthis.tiddlerInfo[task.title] = {\n\t\t\trevision: null,\n\t\t\tadaptorInfo: {},\n\t\t\tchangeCount: -1\n\t\t}\n\t}\n\t// Bail if this is a save and the tiddler is already at the changeCount that the server has\n\tif(task.type === \"save\" && this.wiki.getChangeCount(task.title) <= this.tiddlerInfo[task.title].changeCount) {\n\t\treturn;\n\t}\n\t// Check if this tiddler is already in the queue\n\tif($tw.utils.hop(this.taskQueue,task.title)) {\n\t\t// this.logger.log(\"Re-queueing up sync task with type:\",task.type,\"title:\",task.title);\n\t\tvar existingTask = this.taskQueue[task.title];\n\t\t// If so, just update the last modification time\n\t\texistingTask.lastModificationTime = task.lastModificationTime;\n\t\t// If the new task is a save then we upgrade the existing task to a save. Thus a pending load is turned into a save if the tiddler changes locally in the meantime. But a pending save is not modified to become a load\n\t\tif(task.type === \"save\" || task.type === \"delete\") {\n\t\t\texistingTask.type = task.type;\n\t\t}\n\t} else {\n\t\t// this.logger.log(\"Queuing up sync task with type:\",task.type,\"title:\",task.title);\n\t\t// If it is not in the queue, insert it\n\t\tthis.taskQueue[task.title] = task;\n\t}\n\t// Process the queue\n\tif(this.syncadaptor) {\n\t\t$tw.utils.nextTick(function() {self.processTaskQueue.call(self);});\n\t}\n};\n\n/*\nReturn the number of tasks in progress\n*/\nSyncer.prototype.numTasksInProgress = function() {\n\treturn $tw.utils.count(this.taskInProgress);\n};\n\n/*\nReturn the number of tasks in the queue\n*/\nSyncer.prototype.numTasksInQueue = function() {\n\treturn $tw.utils.count(this.taskQueue);\n};\n\n/*\nTrigger a timeout if one isn't already outstanding\n*/\nSyncer.prototype.triggerTimeout = function() {\n\tvar self = this;\n\tif(!this.taskTimerId) {\n\t\tthis.taskTimerId = setTimeout(function() {\n\t\t\tself.taskTimerId = null;\n\t\t\tself.processTaskQueue.call(self);\n\t\t},self.taskTimerInterval);\n\t}\n};\n\n/*\nProcess the task queue, performing the next task if appropriate\n*/\nSyncer.prototype.processTaskQueue = function() {\n\tvar self = this;\n\t// Only process a task if we're not already performing a task. If we are already performing a task then we'll dispatch the next one when it completes\n\tif(this.numTasksInProgress() === 0) {\n\t\t// Choose the next task to perform\n\t\tvar task = this.chooseNextTask();\n\t\t// Perform the task if we had one\n\t\tif(task) {\n\t\t\t// Remove the task from the queue and add it to the in progress list\n\t\t\tdelete this.taskQueue[task.title];\n\t\t\tthis.taskInProgress[task.title] = task;\n\t\t\t// Dispatch the task\n\t\t\tthis.dispatchTask(task,function(err) {\n\t\t\t\tif(err) {\n\t\t\t\t\tself.logger.alert(\"Sync error while processing '\" + task.title + \"':\\n\" + err);\n\t\t\t\t}\n\t\t\t\t// Mark that this task is no longer in progress\n\t\t\t\tdelete self.taskInProgress[task.title];\n\t\t\t\t// Process the next task\n\t\t\t\tself.processTaskQueue.call(self);\n\t\t\t});\n\t\t} else {\n\t\t\t// Make sure we've set a time if there wasn't a task to perform, but we've still got tasks in the queue\n\t\t\tif(this.numTasksInQueue() > 0) {\n\t\t\t\tthis.triggerTimeout();\n\t\t\t}\n\t\t}\n\t}\n};\n\n/*\nChoose the next applicable task\n*/\nSyncer.prototype.chooseNextTask = function() {\n\tvar self = this,\n\t\tcandidateTask = null,\n\t\tnow = new Date();\n\t// Select the best candidate task\n\t$tw.utils.each(this.taskQueue,function(task,title) {\n\t\t// Exclude the task if there's one of the same name in progress\n\t\tif($tw.utils.hop(self.taskInProgress,title)) {\n\t\t\treturn;\n\t\t}\n\t\t// Exclude the task if it is a save and the tiddler has been modified recently, but not hit the fallback time\n\t\tif(task.type === \"save\" && (now - task.lastModificationTime) < self.throttleInterval &&\n\t\t\t(now - task.queueTime) < self.fallbackInterval) {\n\t\t\treturn;\t\n\t\t}\n\t\t// Exclude the task if it is newer than the current best candidate\n\t\tif(candidateTask && candidateTask.queueTime < task.queueTime) {\n\t\t\treturn;\n\t\t}\n\t\t// Now this is our best candidate\n\t\tcandidateTask = task;\n\t});\n\treturn candidateTask;\n};\n\n/*\nDispatch a task and invoke the callback\n*/\nSyncer.prototype.dispatchTask = function(task,callback) {\n\tvar self = this;\n\tif(task.type === \"save\") {\n\t\tvar changeCount = this.wiki.getChangeCount(task.title),\n\t\t\ttiddler = this.wiki.getTiddler(task.title);\n\t\tthis.logger.log(\"Dispatching 'save' task:\",task.title);\n\t\tif(tiddler) {\n\t\t\tthis.syncadaptor.saveTiddler(tiddler,function(err,adaptorInfo,revision) {\n\t\t\t\tif(err) {\n\t\t\t\t\treturn callback(err);\n\t\t\t\t}\n\t\t\t\t// Adjust the info stored about this tiddler\n\t\t\t\tself.tiddlerInfo[task.title] = {\n\t\t\t\t\tchangeCount: changeCount,\n\t\t\t\t\tadaptorInfo: adaptorInfo,\n\t\t\t\t\trevision: revision\n\t\t\t\t};\n\t\t\t\t// Invoke the callback\n\t\t\t\tcallback(null);\n\t\t\t});\n\t\t}\n\t} else if(task.type === \"load\") {\n\t\t// Load the tiddler\n\t\tthis.logger.log(\"Dispatching 'load' task:\",task.title);\n\t\tthis.syncadaptor.loadTiddler(task.title,function(err,tiddlerFields) {\n\t\t\tif(err) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\t// Store the tiddler\n\t\t\tif(tiddlerFields) {\n\t\t\t\tself.storeTiddler(tiddlerFields);\n\t\t\t}\n\t\t\t// Invoke the callback\n\t\t\tcallback(null);\n\t\t});\n\t} else if(task.type === \"delete\") {\n\t\t// Delete the tiddler\n\t\tthis.logger.log(\"Dispatching 'delete' task:\",task.title);\n\t\tthis.syncadaptor.deleteTiddler(task.title,function(err) {\n\t\t\tif(err) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\t// Invoke the callback\n\t\t\tcallback(null);\n\t\t});\n\t}\n};\n\nexports.Syncer = Syncer;\n\n})();\n",
"title": "$:/core/modules/syncer.js",
"type": "application/javascript",
"module-type": "global"
},
"$:/core/modules/tiddler.js": {
"text": "/*\\\ntitle: $:/core/modules/tiddler.js\ntype: application/javascript\nmodule-type: tiddlermethod\n\nExtension methods for the $tw.Tiddler object (constructor and methods required at boot time are in boot/boot.js)\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.hasTag = function(tag) {\n\treturn this.fields.tags && this.fields.tags.indexOf(tag) !== -1;\n};\n\nexports.isPlugin = function() {\n\treturn this.fields.type === \"application/json\" && this.hasField(\"plugin-type\");\n}\n\nexports.getFieldString = function(field) {\n\tvar value = this.fields[field];\n\t// Check for a missing field\n\tif(value === undefined || value === null) {\n\t\treturn \"\";\n\t}\n\t// Parse the field with the associated module (if any)\n\tvar fieldModule = $tw.Tiddler.fieldModules[field];\n\tif(fieldModule && fieldModule.stringify) {\n\t\treturn fieldModule.stringify.call(this,value);\n\t} else {\n\t\treturn value.toString();\n\t}\n};\n\n/*\nGet all the fields as a name:value block. Options:\n\texclude: an array of field names to exclude\n*/\nexports.getFieldStringBlock = function(options) {\n\toptions = options || {};\n\tvar exclude = options.exclude || [];\n\tvar fields = [];\n\tfor(var field in this.fields) {\n\t\tif($tw.utils.hop(this.fields,field)) {\n\t\t\tif(exclude.indexOf(field) === -1) {\n\t\t\t\tfields.push(field + \": \" + this.getFieldString(field));\n\t\t\t}\n\t\t}\n\t}\n\treturn fields.join(\"\\n\");\n};\n\n})();\n",
"title": "$:/core/modules/tiddler.js",
"type": "application/javascript",
"module-type": "tiddlermethod"
},
"$:/core/modules/utils/crypto.js": {
"text": "/*\\\ntitle: $:/core/modules/utils/crypto.js\ntype: application/javascript\nmodule-type: utils\n\nUtility functions related to crypto.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nLook for an encrypted store area in the text of a TiddlyWiki file\n*/\nexports.extractEncryptedStoreArea = function(text) {\n\tvar encryptedStoreAreaStartMarker = \"<pre id=\\\"encryptedStoreArea\\\" type=\\\"text/plain\\\" style=\\\"display:none;\\\">\",\n\t\tencryptedStoreAreaStart = text.indexOf(encryptedStoreAreaStartMarker);\n\tif(encryptedStoreAreaStart !== -1) {\n\t\tvar encryptedStoreAreaEnd = text.indexOf(\"</pre>\",encryptedStoreAreaStart);\n\t\tif(encryptedStoreAreaEnd !== -1) {\n\t\t\treturn $tw.utils.htmlDecode(text.substring(encryptedStoreAreaStart + encryptedStoreAreaStartMarker.length,encryptedStoreAreaEnd-1));\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nAttempt to extract the tiddlers from an encrypted store area using the current password. If the password is not provided then the password in the password store will be used\n*/\nexports.decryptStoreArea = function(encryptedStoreArea,password) {\n\tvar decryptedText = $tw.crypto.decrypt(encryptedStoreArea,password);\n\tif(decryptedText) {\n\t\tvar json = JSON.parse(decryptedText),\n\t\t\ttiddlers = [];\n\t\tfor(var title in json) {\n\t\t\tif(title !== \"$:/isEncrypted\") {\n\t\t\t\ttiddlers.push(json[title]);\n\t\t\t}\n\t\t}\n\t\treturn tiddlers;\n\t} else {\n\t\treturn null;\n\t}\n};\n\nexports.decryptStoreAreaInteractive = function(encryptedStoreArea,callback) {\n\t// Try to decrypt with the current password\n\tvar tiddlers = $tw.utils.decryptStoreArea(encryptedStoreArea);\n\tif(tiddlers) {\n\t\tcallback(tiddlers);\n\t} else {\n\t\t// Prompt for a new password and keep trying\n\t\t$tw.passwordPrompt.createPrompt({\n\t\t\tserviceName: \"Enter a password to decrypt the imported TiddlyWiki\",\n\t\t\tnoUserName: true,\n\t\t\tcanCancel: true,\n\t\t\tsubmitText: \"Decrypt\",\n\t\t\tcallback: function(data) {\n\t\t\t\t// Exit if the user cancelled\n\t\t\t\tif(!data) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\t// Attempt to decrypt the tiddlers\n\t\t\t\tvar tiddlers = $tw.utils.decryptStoreArea(encryptedStoreArea,data.password);\n\t\t\t\tif(tiddlers) {\n\t\t\t\t\tcallback(tiddlers);\n\t\t\t\t\t// Exit and remove the password prompt\n\t\t\t\t\treturn true;\n\t\t\t\t} else {\n\t\t\t\t\t// We didn't decrypt everything, so continue to prompt for password\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n};\n\n})();\n",
"title": "$:/core/modules/utils/crypto.js",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom/animations/slide.js": {
"text": "/*\\\ntitle: $:/core/modules/utils/dom/animations/slide.js\ntype: application/javascript\nmodule-type: animation\n\nA simple slide animation that varies the height of the element\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nfunction slideOpen(domNode,options) {\n\toptions = options || {};\n\tvar duration = options.duration || $tw.utils.getAnimationDuration();\n\t// Get the current height of the domNode\n\tvar computedStyle = window.getComputedStyle(domNode),\n\t\tcurrMarginBottom = parseInt(computedStyle.marginBottom,10),\n\t\tcurrMarginTop = parseInt(computedStyle.marginTop,10),\n\t\tcurrPaddingBottom = parseInt(computedStyle.paddingBottom,10),\n\t\tcurrPaddingTop = parseInt(computedStyle.paddingTop,10),\n\t\tcurrHeight = domNode.offsetHeight;\n\t// Reset the margin once the transition is over\n\tsetTimeout(function() {\n\t\t$tw.utils.setStyle(domNode,[\n\t\t\t{transition: \"none\"},\n\t\t\t{marginBottom: \"\"},\n\t\t\t{marginTop: \"\"},\n\t\t\t{paddingBottom: \"\"},\n\t\t\t{paddingTop: \"\"},\n\t\t\t{height: \"auto\"},\n\t\t\t{opacity: \"\"}\n\t\t]);\n\t\tif(options.callback) {\n\t\t\toptions.callback();\n\t\t}\n\t},duration);\n\t// Set up the initial position of the element\n\t$tw.utils.setStyle(domNode,[\n\t\t{transition: \"none\"},\n\t\t{marginTop: \"0px\"},\n\t\t{marginBottom: \"0px\"},\n\t\t{paddingTop: \"0px\"},\n\t\t{paddingBottom: \"0px\"},\n\t\t{height: \"0px\"},\n\t\t{opacity: \"0\"}\n\t]);\n\t$tw.utils.forceLayout(domNode);\n\t// Transition to the final position\n\t$tw.utils.setStyle(domNode,[\n\t\t{transition: \"margin-top \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"margin-bottom \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"padding-top \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"padding-bottom \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"height \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"opacity \" + duration + \"ms ease-in-out\"},\n\t\t{marginBottom: currMarginBottom + \"px\"},\n\t\t{marginTop: currMarginTop + \"px\"},\n\t\t{paddingBottom: currPaddingBottom + \"px\"},\n\t\t{paddingTop: currPaddingTop + \"px\"},\n\t\t{height: currHeight + \"px\"},\n\t\t{opacity: \"1\"}\n\t]);\n}\n\nfunction slideClosed(domNode,options) {\n\toptions = options || {};\n\tvar duration = options.duration || $tw.utils.getAnimationDuration(),\n\t\tcurrHeight = domNode.offsetHeight;\n\t// Clear the properties we've set when the animation is over\n\tsetTimeout(function() {\n\t\t$tw.utils.setStyle(domNode,[\n\t\t\t{transition: \"none\"},\n\t\t\t{marginBottom: \"\"},\n\t\t\t{marginTop: \"\"},\n\t\t\t{paddingBottom: \"\"},\n\t\t\t{paddingTop: \"\"},\n\t\t\t{height: \"auto\"},\n\t\t\t{opacity: \"\"}\n\t\t]);\n\t\tif(options.callback) {\n\t\t\toptions.callback();\n\t\t}\n\t},duration);\n\t// Set up the initial position of the element\n\t$tw.utils.setStyle(domNode,[\n\t\t{height: currHeight + \"px\"},\n\t\t{opacity: \"1\"}\n\t]);\n\t$tw.utils.forceLayout(domNode);\n\t// Transition to the final position\n\t$tw.utils.setStyle(domNode,[\n\t\t{transition: \"margin-top \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"margin-bottom \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"padding-top \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"padding-bottom \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"height \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"opacity \" + duration + \"ms ease-in-out\"},\n\t\t{marginTop: \"0px\"},\n\t\t{marginBottom: \"0px\"},\n\t\t{paddingTop: \"0px\"},\n\t\t{paddingBottom: \"0px\"},\n\t\t{height: \"0px\"},\n\t\t{opacity: \"0\"}\n\t]);\n}\n\nexports.slide = {\n\topen: slideOpen,\n\tclose: slideClosed\n};\n\n})();\n",
"title": "$:/core/modules/utils/dom/animations/slide.js",
"type": "application/javascript",
"module-type": "animation"
},
"$:/core/modules/utils/dom/animator.js": {
"text": "/*\\\ntitle: $:/core/modules/utils/dom/animator.js\ntype: application/javascript\nmodule-type: utils\n\nOrchestrates animations and transitions\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nfunction Animator() {\n\t// Get the registered animation modules\n\tthis.animations = {};\n\t$tw.modules.applyMethods(\"animation\",this.animations);\n}\n\nAnimator.prototype.perform = function(type,domNode,options) {\n\toptions = options || {};\n\t// Find an animation that can handle this type\n\tvar chosenAnimation;\n\t$tw.utils.each(this.animations,function(animation,name) {\n\t\tif($tw.utils.hop(animation,type)) {\n\t\t\tchosenAnimation = animation[type];\n\t\t}\n\t});\n\tif(!chosenAnimation) {\n\t\tchosenAnimation = function(domNode,options) {\n\t\t\tif(options.callback) {\n\t\t\t\toptions.callback();\n\t\t\t}\n\t\t};\n\t}\n\t// Call the animation\n\tchosenAnimation(domNode,options);\n};\n\nexports.Animator = Animator;\n\n})();\n",
"title": "$:/core/modules/utils/dom/animator.js",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom/browser.js": {
"text": "/*\\\ntitle: $:/core/modules/utils/dom/browser.js\ntype: application/javascript\nmodule-type: utils\n\nBrowser feature detection\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSet style properties of an element\n\telement: dom node\n\tstyles: ordered array of {name: value} pairs\n*/\nexports.setStyle = function(element,styles) {\n\tif(element.nodeType === 1) { // Element.ELEMENT_NODE\n\t\tfor(var t=0; t<styles.length; t++) {\n\t\t\tfor(var styleName in styles[t]) {\n\t\t\t\telement.style[$tw.utils.convertStyleNameToPropertyName(styleName)] = styles[t][styleName];\n\t\t\t}\n\t\t}\n\t}\n};\n\n/*\nConverts a standard CSS property name into the local browser-specific equivalent. For example:\n\t\"background-color\" --> \"backgroundColor\"\n\t\"transition\" --> \"webkitTransition\"\n*/\n\nvar styleNameCache = {}; // We'll cache the style name conversions\n\nexports.convertStyleNameToPropertyName = function(styleName) {\n\t// Return from the cache if we can\n\tif(styleNameCache[styleName]) {\n\t\treturn styleNameCache[styleName];\n\t}\n\t// Convert it by first removing any hyphens\n\tvar propertyName = $tw.utils.unHyphenateCss(styleName);\n\t// Then check if it needs a prefix\n\tif(document.body.style[propertyName] === undefined) {\n\t\tvar prefixes = [\"O\",\"MS\",\"Moz\",\"webkit\"];\n\t\tfor(var t=0; t<prefixes.length; t++) {\n\t\t\tvar prefixedName = prefixes[t] + propertyName.substr(0,1).toUpperCase() + propertyName.substr(1);\n\t\t\tif(document.body.style[prefixedName] !== undefined) {\n\t\t\t\tpropertyName = prefixedName;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\t// Put it in the cache too\n\tstyleNameCache[styleName] = propertyName;\n\treturn propertyName;\n};\n\n/*\nConverts a JS format CSS property name back into the dashed form used in CSS declarations. For example:\n\t\"backgroundColor\" --> \"background-color\"\n\t\"webkitTransform\" --> \"-webkit-transform\"\n*/\nexports.convertPropertyNameToStyleName = function(propertyName) {\n\t// Rehyphenate the name\n\tvar styleName = $tw.utils.hyphenateCss(propertyName);\n\t// If there's a webkit prefix, add a dash (other browsers have uppercase prefixes, and so get the dash automatically)\n\tif(styleName.indexOf(\"webkit\") === 0) {\n\t\tstyleName = \"-\" + styleName;\n\t} else if(styleName.indexOf(\"-m-s\") === 0) {\n\t\tstyleName = \"-ms\" + styleName.substr(4);\n\t}\n\treturn styleName;\n};\n\n/*\nRound trip a stylename to a property name and back again. For example:\n\t\"transform\" --> \"webkitTransform\" --> \"-webkit-transform\"\n*/\nexports.roundTripPropertyName = function(propertyName) {\n\treturn $tw.utils.convertPropertyNameToStyleName($tw.utils.convertStyleNameToPropertyName(propertyName));\n};\n\n/*\nConverts a standard event name into the local browser specific equivalent. For example:\n\t\"animationEnd\" --> \"webkitAnimationEnd\"\n*/\n\nvar eventNameCache = {}; // We'll cache the conversions\n\nvar eventNameMappings = {\n\t\"transitionEnd\": {\n\t\tcorrespondingCssProperty: \"transition\",\n\t\tmappings: {\n\t\t\ttransition: \"transitionend\",\n\t\t\tOTransition: \"oTransitionEnd\",\n\t\t\tMSTransition: \"msTransitionEnd\",\n\t\t\tMozTransition: \"transitionend\",\n\t\t\twebkitTransition: \"webkitTransitionEnd\"\n\t\t}\n\t},\n\t\"animationEnd\": {\n\t\tcorrespondingCssProperty: \"animation\",\n\t\tmappings: {\n\t\t\tanimation: \"animationend\",\n\t\t\tOAnimation: \"oAnimationEnd\",\n\t\t\tMSAnimation: \"msAnimationEnd\",\n\t\t\tMozAnimation: \"animationend\",\n\t\t\twebkitAnimation: \"webkitAnimationEnd\"\n\t\t}\n\t}\n};\n\nexports.convertEventName = function(eventName) {\n\tif(eventNameCache[eventName]) {\n\t\treturn eventNameCache[eventName];\n\t}\n\tvar newEventName = eventName,\n\t\tmappings = eventNameMappings[eventName];\n\tif(mappings) {\n\t\tvar convertedProperty = $tw.utils.convertStyleNameToPropertyName(mappings.correspondingCssProperty);\n\t\tif(mappings.mappings[convertedProperty]) {\n\t\t\tnewEventName = mappings.mappings[convertedProperty];\n\t\t}\n\t}\n\t// Put it in the cache too\n\teventNameCache[eventName] = newEventName;\n\treturn newEventName;\n};\n\n// Setup constants for the current browser\nexports.getBrowserInfo = function(info) {\n\tinfo.isIE = (/msie|trident/i.test(navigator.userAgent));\n};\n\n})();\n",
"title": "$:/core/modules/utils/dom/browser.js",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom.js": {
"text": "/*\\\ntitle: $:/core/modules/utils/dom.js\ntype: application/javascript\nmodule-type: utils\n\nVarious static DOM-related utility functions.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nDetermines whether element 'a' contains element 'b'\nCode thanks to John Resig, http://ejohn.org/blog/comparing-document-position/\n*/\nexports.domContains = function(a,b) {\n\treturn a.contains ?\n\t\ta !== b && a.contains(b) :\n\t\t!!(a.compareDocumentPosition(b) & 16);\n};\n\nexports.removeChildren = function(node) {\n\twhile(node.hasChildNodes()) {\n\t\tnode.removeChild(node.firstChild);\n\t}\n};\n\nexports.hasClass = function(el,className) {\n\treturn el && el.className && el.className.split(\" \").indexOf(className) !== -1;\n};\n\nexports.addClass = function(el,className) {\n\tvar c = el.className.split(\" \");\n\tif(c.indexOf(className) === -1) {\n\t\tc.push(className);\n\t}\n\tel.className = c.join(\" \");\n};\n\nexports.removeClass = function(el,className) {\n\tvar c = el.className.split(\" \"),\n\t\tp = c.indexOf(className);\n\tif(p !== -1) {\n\t\tc.splice(p,1);\n\t\tel.className = c.join(\" \");\n\t}\n};\n\nexports.toggleClass = function(el,className,status) {\n\tif(status === undefined) {\n\t\tstatus = !exports.hasClass(el,className);\n\t}\n\tif(status) {\n\t\texports.addClass(el,className);\n\t} else {\n\t\texports.removeClass(el,className);\n\t}\n};\n\n/*\nGet the scroll position of the viewport\nReturns:\n\t{\n\t\tx: horizontal scroll position in pixels,\n\t\ty: vertical scroll position in pixels\n\t}\n*/\nexports.getScrollPosition = function() {\n\tif(\"scrollX\" in window) {\n\t\treturn {x: window.scrollX, y: window.scrollY};\n\t} else {\n\t\treturn {x: document.documentElement.scrollLeft, y: document.documentElement.scrollTop};\n\t}\n};\n\n/*\nGets the bounding rectangle of an element in absolute page coordinates\n*/\nexports.getBoundingPageRect = function(element) {\n\tvar scrollPos = $tw.utils.getScrollPosition(),\n\t\tclientRect = element.getBoundingClientRect();\n\treturn {\n\t\tleft: clientRect.left + scrollPos.x,\n\t\twidth: clientRect.width,\n\t\tright: clientRect.right + scrollPos.x,\n\t\ttop: clientRect.top + scrollPos.y,\n\t\theight: clientRect.height,\n\t\tbottom: clientRect.bottom + scrollPos.y\n\t};\n};\n\n/*\nSaves a named password in the browser\n*/\nexports.savePassword = function(name,password) {\n\tif(window.localStorage) {\n\t\tlocalStorage.setItem(\"tw5-password-\" + name,password);\n\t}\n};\n\n/*\nRetrieve a named password from the browser\n*/\nexports.getPassword = function(name) {\n\treturn window.localStorage ? localStorage.getItem(\"tw5-password-\" + name) : \"\";\n};\n\n/*\nForce layout of a dom node and its descendents\n*/\nexports.forceLayout = function(element) {\n\tvar dummy = element.offsetWidth;\n};\n\n/*\nPulse an element for debugging purposes\n*/\nexports.pulseElement = function(element) {\n\t// Event handler to remove the class at the end\n\telement.addEventListener($tw.browser.animationEnd,function handler(event) {\n\t\telement.removeEventListener($tw.browser.animationEnd,handler,false);\n\t\t$tw.utils.removeClass(element,\"pulse\");\n\t},false);\n\t// Apply the pulse class\n\t$tw.utils.removeClass(element,\"pulse\");\n\t$tw.utils.forceLayout(element);\n\t$tw.utils.addClass(element,\"pulse\");\n};\n\n/*\nAttach specified event handlers to a DOM node\ndomNode: where to attach the event handlers\nevents: array of event handlers to be added (see below)\nEach entry in the events array is an object with these properties:\nhandlerFunction: optional event handler function\nhandlerObject: optional event handler object\nhandlerMethod: optionally specifies object handler method name (defaults to `handleEvent`)\n*/\nexports.addEventListeners = function(domNode,events) {\n\t$tw.utils.each(events,function(eventInfo) {\n\t\tvar handler;\n\t\tif(eventInfo.handlerFunction) {\n\t\t\thandler = eventInfo.handlerFunction;\n\t\t} else if(eventInfo.handlerObject) {\n\t\t\tif(eventInfo.handlerMethod) {\n\t\t\t\thandler = function(event) {\n\t\t\t\t\teventInfo.handlerObject[eventInfo.handlerMethod].call(eventInfo.handlerObject,event);\n\t\t\t\t};\t\n\t\t\t} else {\n\t\t\t\thandler = eventInfo.handlerObject;\n\t\t\t}\n\t\t}\n\t\tdomNode.addEventListener(eventInfo.name,handler,false);\n\t});\n};\n\n/*\nConstruct and dispatch a custom event\n*/\nexports.dispatchCustomEvent = function(target,name,members) {\n\tvar event = document.createEvent(\"Event\");\n\tevent.initEvent(name,true,true);\n\t$tw.utils.each(members,function(member,name) {\n\t\tevent[name] = member;\n\t});\n\ttarget.dispatchEvent(event); \n};\n\n\n})();\n",
"title": "$:/core/modules/utils/dom.js",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom/http.js": {
"text": "/*\\\ntitle: $:/core/modules/utils/dom/http.js\ntype: application/javascript\nmodule-type: utils\n\nBrowser HTTP support\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nA quick and dirty HTTP function; to be refactored later. Options are:\n\turl: URL to retrieve\n\ttype: GET, PUT, POST etc\n\tcallback: function invoked with (err,data)\n*/\nexports.httpRequest = function(options) {\n\tvar type = options.type || \"GET\",\n\t\theaders = options.headers || {accept: \"application/json\"},\n\t\trequest = new XMLHttpRequest(),\n\t\tdata = \"\",\n\t\tf,results;\n\t// Massage the data hashmap into a string\n\tif(options.data) {\n\t\tif(typeof options.data === \"string\") { // Already a string\n\t\t\tdata = options.data;\n\t\t} else { // A hashmap of strings\n\t\t\tresults = [];\n\t\t\t$tw.utils.each(options.data,function(dataItem,dataItemTitle) {\n\t\t\t\tresults.push(dataItemTitle + \"=\" + encodeURIComponent(dataItem));\n\t\t\t});\n\t\t\tdata = results.join(\"&\");\n\t\t}\n\t}\n\t// Set up the state change handler\n\trequest.onreadystatechange = function() {\n\t\tif(this.readyState === 4) {\n\t\t\tif(this.status === 200 || this.status === 204) {\n\t\t\t\t// Success!\n\t\t\t\toptions.callback(null,this.responseText,this);\n\t\t\t\treturn;\n\t\t\t}\n\t\t// Something went wrong\n\t\toptions.callback(\"XMLHttpRequest error code: \" + this.status);\n\t\t}\n\t};\n\t// Make the request\n\trequest.open(type,options.url,true);\n\tif(headers) {\n\t\t$tw.utils.each(headers,function(header,headerTitle,object) {\n\t\t\trequest.setRequestHeader(headerTitle,header);\n\t\t});\n\t}\n\tif(data && !$tw.utils.hop(headers,\"Content-type\")) {\n\t\trequest.setRequestHeader(\"Content-type\",\"application/x-www-form-urlencoded; charset=UTF-8\");\n\t}\n\trequest.send(data);\n\treturn request;\n};\n\n})();\n",
"title": "$:/core/modules/utils/dom/http.js",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom/keyboard.js": {
"text": "/*\\\ntitle: $:/core/modules/utils/dom/keyboard.js\ntype: application/javascript\nmodule-type: utils\n\nKeyboard utilities\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar namedKeys = {\n\t\"backspace\": 8,\n\t\"tab\": 9,\n\t\"enter\": 13,\n\t\"escape\": 27\n};\n\n/*\nParses a key descriptor into the structure:\n{\n\tkeyCode: numeric keycode\n\tshiftKey: boolean\n\taltKey: boolean\n\tctrlKey: boolean\n}\nKey descriptors have the following format:\n\tctrl+enter\n\tctrl+shift+alt+A\n*/\nexports.parseKeyDescriptor = function(keyDescriptor) {\n\tvar components = keyDescriptor.split(\"+\"),\n\t\tinfo = {\n\t\t\tkeyCode: 0,\n\t\t\tshiftKey: false,\n\t\t\taltKey: false,\n\t\t\tctrlKey: false\n\t\t};\n\tfor(var t=0; t<components.length; t++) {\n\t\tvar s = components[t].toLowerCase();\n\t\t// Look for modifier keys\n\t\tif(s === \"ctrl\") {\n\t\t\tinfo.ctrlKey = true;\n\t\t} else if(s === \"shift\") {\n\t\t\tinfo.shiftKey = true;\n\t\t} else if(s === \"alt\") {\n\t\t\tinfo.altKey = true;\n\t\t}\n\t\t// Replace named keys with their code\n\t\tif(namedKeys[s]) {\n\t\t\tinfo.keyCode = namedKeys[s];\n\t\t}\n\t}\n\treturn info;\n};\n\n})();\n",
"title": "$:/core/modules/utils/dom/keyboard.js",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom/modal.js": {
"text": "/*\\\ntitle: $:/core/modules/utils/dom/modal.js\ntype: application/javascript\nmodule-type: utils\n\nModal message mechanism\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nvar Modal = function(wiki) {\n\tthis.wiki = wiki;\n\tthis.modalCount = 0;\n};\n\n/*\nDisplay a modal dialogue\n\ttitle: Title of tiddler to display\n\toptions: see below\nOptions include:\n\tdownloadLink: Text of a big download link to include\n*/\nModal.prototype.display = function(title,options) {\n\toptions = options || {};\n\tvar self = this,\n\t\tduration = $tw.utils.getAnimationDuration(),\n\t\ttiddler = this.wiki.getTiddler(title);\n\t// Don't do anything if the tiddler doesn't exist\n\tif(!tiddler) {\n\t\treturn;\n\t}\n\t// Create the wrapper divs\n\tvar wrapper = document.createElement(\"div\"),\n\t\tmodalBackdrop = document.createElement(\"div\"),\n\t\tmodalWrapper = document.createElement(\"div\"),\n\t\tmodalHeader = document.createElement(\"div\"),\n\t\theaderTitle = document.createElement(\"h3\"),\n\t\tmodalBody = document.createElement(\"div\"),\n\t\tmodalLink = document.createElement(\"a\"),\n\t\tmodalFooter = document.createElement(\"div\"),\n\t\tmodalFooterHelp = document.createElement(\"span\"),\n\t\tmodalFooterButtons = document.createElement(\"span\");\n\t// Up the modal count and adjust the body class\n\tthis.modalCount++;\n\tthis.adjustPageClass();\n\t// Add classes\n\t$tw.utils.addClass(wrapper,\"modal-wrapper\");\n\t$tw.utils.addClass(modalBackdrop,\"modal-backdrop\");\n\t$tw.utils.addClass(modalWrapper,\"modal\");\n\t$tw.utils.addClass(modalHeader,\"modal-header\");\n\t$tw.utils.addClass(modalBody,\"modal-body\");\n\t$tw.utils.addClass(modalLink,\"btn btn-large btn-block btn-success\");\n\t$tw.utils.addClass(modalFooter,\"modal-footer\");\n\t// Join them together\n\twrapper.appendChild(modalBackdrop);\n\twrapper.appendChild(modalWrapper);\n\tmodalHeader.appendChild(headerTitle);\n\tmodalWrapper.appendChild(modalHeader);\n\tmodalWrapper.appendChild(modalBody);\n\tmodalFooter.appendChild(modalFooterHelp);\n\tmodalFooter.appendChild(modalFooterButtons);\n\tmodalWrapper.appendChild(modalFooter);\n\t// Render the title of the message\n\tvar titleText;\n\tif(tiddler && tiddler.fields && tiddler.fields.subtitle) {\n\t\ttitleText = tiddler.fields.subtitle;\n\t} else {\n\t\ttitleText = title;\n\t}\n\tvar headerParser = this.wiki.parseText(\"text/vnd.tiddlywiki\",titleText,{parseAsInline: true}),\n\t\theaderWidgetNode = this.wiki.makeWidget(headerParser,{parentWidget: $tw.rootWidget, document: document});\n\theaderWidgetNode.render(headerTitle,null);\n\tthis.wiki.addEventListener(\"change\",function(changes) {\n\t\theaderWidgetNode.refresh(changes,modalHeader,null);\n\t});\n\t// Render the body of the message\n\tvar bodyParser = this.wiki.parseTiddler(title),\n\t\tbodyWidgetNode = this.wiki.makeWidget(bodyParser,{parentWidget: $tw.rootWidget, document: document});\n\tbodyWidgetNode.render(modalBody,null);\n\tthis.wiki.addEventListener(\"change\",function(changes) {\n\t\tbodyWidgetNode.refresh(changes,modalBody,null);\n\t});\n\t// Setup the link if present\n\tif(options.downloadLink) {\n\t\tmodalLink.href = options.downloadLink\n\t\tmodalLink.appendChild(document.createTextNode(\"Right-click to save changes\"));\n\t\tmodalBody.appendChild(modalLink);\n\t}\n\t// Render the footer of the message\n\tif(tiddler && tiddler.fields && tiddler.fields.help) {\n\t\tvar link = document.createElement(\"a\");\n\t\tlink.setAttribute(\"href\",tiddler.fields.help);\n\t\tlink.setAttribute(\"target\",\"_blank\");\n\t\tlink.appendChild(document.createTextNode(\"Help\"));\n\t\tmodalFooterHelp.appendChild(link);\n\t\tmodalFooterHelp.style.float = \"left\";\n\t}\n\tvar footerText;\n\tif(tiddler && tiddler.fields && tiddler.fields.footer) {\n\t\tfooterText = tiddler.fields.footer;\n\t} else {\n\t\tfooterText = '<$button message=\"tw-close-tiddler\" class=\"btn btn-primary\">Close</$button>';\n\t}\n\tvar footerParser = this.wiki.parseText(\"text/vnd.tiddlywiki\",footerText,{parseAsInline: true}),\n\t\tfooterWidgetNode = this.wiki.makeWidget(footerParser,{parentWidget: $tw.rootWidget, document: document});\n\tfooterWidgetNode.render(modalFooterButtons,null);\n\tthis.wiki.addEventListener(\"change\",function(changes) {\n\t\tfooterWidgetNode.refresh(changes,modalFooterButtons,null);\n\t});\n\t// Add the close event handler\n\tvar closeHandler = function(event) {\n\t\t// Decrease the modal count and adjust the body class\n\t\tself.modalCount--;\n\t\tself.adjustPageClass();\n\t\t// Force layout and animate the modal message away\n\t\t$tw.utils.forceLayout(modalBackdrop);\n\t\t$tw.utils.forceLayout(modalWrapper);\n\t\t$tw.utils.setStyle(modalBackdrop,[\n\t\t\t{opacity: \"0\"}\n\t\t]);\n\t\t$tw.utils.setStyle(modalWrapper,[\n\t\t\t{transform: \"translateY(\" + window.innerHeight + \"px)\"}\n\t\t]);\n\t\t// Set up an event for the transition end\n\t\twindow.setTimeout(function() {\n\t\t\tif(wrapper.parentNode) {\n\t\t\t\t// Remove the modal message from the DOM\n\t\t\t\tdocument.body.removeChild(wrapper);\n\t\t\t}\n\t\t},duration);\n\t\t// Don't let anyone else handle the tw-close-tiddler message\n\t\treturn false;\n\t};\n\theaderWidgetNode.addEventListener(\"tw-close-tiddler\",closeHandler,false);\n\tbodyWidgetNode.addEventListener(\"tw-close-tiddler\",closeHandler,false);\n\tfooterWidgetNode.addEventListener(\"tw-close-tiddler\",closeHandler,false);\n\t// Set the initial styles for the message\n\t$tw.utils.setStyle(modalBackdrop,[\n\t\t{opacity: \"0\"}\n\t]);\n\t$tw.utils.setStyle(modalWrapper,[\n\t\t{transformOrigin: \"0% 0%\"},\n\t\t{transform: \"translateY(\" + (-window.innerHeight) + \"px)\"}\n\t]);\n\t// Put the message into the document\n\tdocument.body.appendChild(wrapper);\n\t// Set up animation for the styles\n\t$tw.utils.setStyle(modalBackdrop,[\n\t\t{transition: \"opacity \" + duration + \"ms ease-out\"}\n\t]);\n\t$tw.utils.setStyle(modalWrapper,[\n\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms ease-in-out\"}\n\t]);\n\t// Force layout\n\t$tw.utils.forceLayout(modalBackdrop);\n\t$tw.utils.forceLayout(modalWrapper);\n\t// Set final animated styles\n\t$tw.utils.setStyle(modalBackdrop,[\n\t\t{opacity: \"0.7\"}\n\t]);\n\t$tw.utils.setStyle(modalWrapper,[\n\t\t{transform: \"translateY(0px)\"}\n\t]);\n};\n\nModal.prototype.adjustPageClass = function() {\n\tif($tw.pageContainer) {\n\t\t$tw.utils.toggleClass($tw.pageContainer,\"tw-modal-displayed\",this.modalCount > 0);\n\t}\n};\n\nexports.Modal = Modal;\n\n})();\n",
"title": "$:/core/modules/utils/dom/modal.js",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom/notifier.js": {
"text": "/*\\\ntitle: $:/core/modules/utils/dom/notifier.js\ntype: application/javascript\nmodule-type: utils\n\nNotifier mechanism\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nvar Notifier = function(wiki) {\n\tthis.wiki = wiki;\n};\n\n/*\nDisplay a notification\n\ttitle: Title of tiddler containing the notification text\n\toptions: see below\nOptions include:\n*/\nNotifier.prototype.display = function(title,options) {\n\toptions = options || {};\n\t// Create the wrapper divs\n\tvar notification = document.createElement(\"div\"),\n\t\ttiddler = this.wiki.getTiddler(title),\n\t\tduration = $tw.utils.getAnimationDuration();\n\t// Don't do anything if the tiddler doesn't exist\n\tif(!tiddler) {\n\t\treturn;\n\t}\n\t// Add classes\n\t$tw.utils.addClass(notification,\"tw-notification\");\n\t// Render the body of the notification\n\tvar parser = this.wiki.parseTiddler(title),\n\t\twidgetNode = this.wiki.makeWidget(parser,{parentWidget: $tw.rootWidget, document: document});\n\twidgetNode.render(notification,null);\n\tthis.wiki.addEventListener(\"change\",function(changes) {\n\t\twidgetNode.refresh(changes,notification,null);\n\t});\n\t// Set the initial styles for the notification\n\t$tw.utils.setStyle(notification,[\n\t\t{opacity: \"0\"},\n\t\t{transformOrigin: \"0% 0%\"},\n\t\t{transform: \"translateY(\" + (-window.innerHeight) + \"px)\"},\n\t\t{transition: \"opacity \" + duration + \"ms ease-out, \" + $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms ease-in-out\"}\n\t]);\n\t// Add the notification to the DOM\n\tdocument.body.appendChild(notification);\n\t// Force layout\n\t$tw.utils.forceLayout(notification);\n\t// Set final animated styles\n\t$tw.utils.setStyle(notification,[\n\t\t{opacity: \"1.0\"},\n\t\t{transform: \"translateY(0px)\"}\n\t]);\n\t// Set a timer to remove the notification\n\twindow.setTimeout(function() {\n\t\t// Force layout and animate the notification away\n\t\t$tw.utils.forceLayout(notification);\n\t\t$tw.utils.setStyle(notification,[\n\t\t\t{opacity: \"0.0\"},\n\t\t\t{transform: \"translateX(\" + (notification.offsetWidth) + \"px)\"}\n\t\t]);\n\t\t// Remove the modal message from the DOM once the transition ends\n\t\tsetTimeout(function() {\n\t\t\tif(notification.parentNode) {\n\t\t\t\tdocument.body.removeChild(notification);\n\t\t\t}\n\t\t},duration);\n\t},$tw.config.preferences.notificationDuration);\n};\n\nexports.Notifier = Notifier;\n\n})();\n",
"title": "$:/core/modules/utils/dom/notifier.js",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom/popup.js": {
"text": "/*\\\ntitle: $:/core/modules/utils/dom/popup.js\ntype: application/javascript\nmodule-type: utils\n\nModule that creates a $tw.utils.Popup object prototype that manages popups in the browser\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nCreates a Popup object with these options:\n\trootElement: the DOM element to which the popup zapper should be attached\n*/\nvar Popup = function(options) {\n\toptions = options || {};\n\tthis.rootElement = options.rootElement || document.body;\n};\n\nPopup.prototype.show = function(options) {\n\tthis.cancel();\n\tthis.title = options.title;\n\tthis.wiki = options.wiki;\n\tthis.anchorDomNode = options.domNode;\n\t$tw.utils.addClass(this.anchorDomNode,\"tw-popup\");\n\tthis.rootElement.addEventListener(\"click\",this,false);\n};\n\nPopup.prototype.handleEvent = function(event) {\n\t// Dismiss the popup if we get a click on an element that doesn't have .tw-popup class\n\tif(event.type === \"click\") {\n\t\tvar node = event.target;\n\t\twhile(node && !$tw.utils.hasClass(node,\"tw-popup\")) {\n\t\t\tnode = node.parentNode;\n\t\t}\n\t\tif(!node) {\n\t\t\tthis.cancel();\n\t\t}\n\t}\n};\n\nPopup.prototype.cancel = function() {\n\tif(this.anchorDomNode) {\n\t\t$tw.utils.removeClass(this.anchorDomNode,\"tw-popup\");\n\t\tthis.anchorDomNode = null;\t\t\n\t}\n\tthis.rootElement.removeEventListener(\"click\",this,false);\n\tif(this.title) {\n\t\tthis.wiki.deleteTiddler(this.title);\n\t\tthis.title = null;\n\t}\n};\n\n/*\nTrigger a popup open or closed. Parameters are in a hashmap:\n\ttitle: title of the tiddler where the popup details are stored\n\tdomNode: dom node to which the popup will be positioned\n\twiki: wiki\n\tforce: if specified, forces the popup state to true or false\n*/\nPopup.prototype.triggerPopup = function(options) {\n\t// Get the current popup state tiddler\n\tvar value = options.wiki.getTextReference(options.title,\"\");\n\t// Check if the popup is open by checking whether it matches \"(<x>,<y>)\"\n\tvar state = !this.readPopupState(options.title,value);\n\tif(\"force\" in options) {\n\t\tstate = options.force;\n\t}\n\tif(state) {\n\t\t// Set the position if we're opening it\n\t\tthis.cancel();\n\t\toptions.wiki.setTextReference(options.title,\n\t\t\t\"(\" + options.domNode.offsetLeft + \",\" + options.domNode.offsetTop + \",\" + \n\t\t\t\toptions.domNode.offsetWidth + \",\" + options.domNode.offsetHeight + \")\");\n\t\tthis.show(options);\n\t} else {\n\t\tthis.cancel();\n\t}\n};\n\n/*\nReturns true if the specified title and text identifies an active popup\n*/\nPopup.prototype.readPopupState = function(title,text) {\n\tvar popupLocationRegExp = /^\\((-?[0-9\\.E]+),(-?[0-9\\.E]+),(-?[0-9\\.E]+),(-?[0-9\\.E]+)\\)$/,\n\t\tresult = false;\n\tif(this.title === title) {\n\t\tresult = popupLocationRegExp.test(text);\n\t}\n\treturn result;\n};\n\nexports.Popup = Popup;\n\n})();\n",
"title": "$:/core/modules/utils/dom/popup.js",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom/scroller.js": {
"text": "/*\\\ntitle: $:/core/modules/utils/dom/scroller.js\ntype: application/javascript\nmodule-type: utils\n\nModule that creates a $tw.utils.Scroller object prototype that manages scrolling in the browser\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nEvent handler for when the `tw-scroll` event hits the document body\n*/\nvar PageScroller = function() {\n\tthis.idRequestFrame = null;\n\tthis.requestAnimationFrame = window.requestAnimationFrame ||\n\t\twindow.webkitRequestAnimationFrame ||\n\t\twindow.mozRequestAnimationFrame ||\n\t\tfunction(callback) {\n\t\t\treturn window.setTimeout(callback, 1000/60);\n\t\t};\n\tthis.cancelAnimationFrame = window.cancelAnimationFrame ||\n\t\twindow.webkitCancelAnimationFrame ||\n\t\twindow.webkitCancelRequestAnimationFrame ||\n\t\twindow.mozCancelAnimationFrame ||\n\t\twindow.mozCancelRequestAnimationFrame ||\n\t\tfunction(id) {\n\t\t\twindow.clearTimeout(id);\n\t\t};\n};\n\nPageScroller.prototype.cancelScroll = function() {\n\tif(this.idRequestFrame) {\n\t\tthis.cancelAnimationFrame.call(window,this.idRequestFrame);\n\t\tthis.idRequestFrame = null;\n\t}\n};\n\n/*\nHandle an event\n*/\nPageScroller.prototype.handleEvent = function(event) {\n\tif(event.type === \"tw-scroll\") {\n\t\treturn this.scrollIntoView(event.target);\n\t}\n\treturn true;\n};\n\n/*\nHandle a scroll event hitting the page document\n*/\nPageScroller.prototype.scrollIntoView = function(element) {\n\tvar duration = $tw.utils.getAnimationDuration();\n\t// Get the offset bounds of the element\n\tvar bounds = {\n\t\t\tleft: element.offsetLeft,\n\t\t\ttop: element.offsetTop,\n\t\t\twidth: element.offsetWidth,\n\t\t\theight: element.offsetHeight\n\t\t};\n\t// Walk up the tree adjusting the offset bounds by each offsetParent\n\twhile(element.offsetParent) {\n\t\telement = element.offsetParent;\n\t\tbounds.left += element.offsetLeft;\n\t\tbounds.top += element.offsetTop;\n\t}\n\t// Now get ready to scroll the body\n\tthis.cancelScroll();\n\tthis.startTime = new Date();\n\tvar scrollPosition = $tw.utils.getScrollPosition(),\n\t\t// We'll consider the horizontal and vertical scroll directions separately via this function\n\t\tgetEndPos = function(targetPos,targetSize,currentPos,currentSize) {\n\t\t\t// If the target is above/left of the current view, then scroll to it's top/left\n\t\t\tif(targetPos <= currentPos) {\n\t\t\t\treturn targetPos;\n\t\t\t// If the target is smaller than the window and the scroll position is too far up, then scroll till the target is at the bottom of the window\n\t\t\t} else if(targetSize < currentSize && currentPos < (targetPos + targetSize - currentSize)) {\n\t\t\t\treturn targetPos + targetSize - currentSize;\n\t\t\t// If the target is big, then just scroll to the top\n\t\t\t} else if(currentPos < targetPos) {\n\t\t\t\treturn targetPos;\n\t\t\t// Otherwise, stay where we are\n\t\t\t} else {\n\t\t\t\treturn currentPos;\n\t\t\t}\n\t\t},\n\t\tendX = getEndPos(bounds.left,bounds.width,scrollPosition.x,window.innerWidth),\n\t\tendY = getEndPos(bounds.top,bounds.height,scrollPosition.y,window.innerHeight);\n\t// Only scroll if necessary\n\tif(endX !== scrollPosition.x || endY !== scrollPosition.y) {\n\t\tvar self = this,\n\t\t\tdrawFrame;\n\t\tdrawFrame = function () {\n\t\t\tvar t;\n\t\t\tif(duration <= 0) {\n\t\t\t\tt = 1;\n\t\t\t} else {\n\t\t\t\tt = ((new Date()) - self.startTime) / duration;\t\n\t\t\t}\n\t\t\tif(t >= 1) {\n\t\t\t\tself.cancelScroll();\n\t\t\t\tt = 1;\n\t\t\t}\n\t\t\tt = $tw.utils.slowInSlowOut(t);\n\t\t\twindow.scrollTo(scrollPosition.x + (endX - scrollPosition.x) * t,scrollPosition.y + (endY - scrollPosition.y) * t);\n\t\t\tif(t < 1) {\n\t\t\t\tself.idRequestFrame = self.requestAnimationFrame.call(window,drawFrame);\n\t\t\t}\n\t\t};\n\t\tdrawFrame();\n\t}\n};\n\nexports.PageScroller = PageScroller;\n\n})();\n",
"title": "$:/core/modules/utils/dom/scroller.js",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/fakedom.js": {
"text": "/*\\\ntitle: $:/core/modules/utils/fakedom.js\ntype: application/javascript\nmodule-type: global\n\nA barebones implementation of DOM interfaces needed by the rendering mechanism.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Sequence number used to enable us to track objects for testing\nvar sequenceNumber = null;\n\nvar bumpSequenceNumber = function(object) {\n\tif(sequenceNumber !== null) {\n\t\tobject.sequenceNumber = sequenceNumber++;\n\t}\n}\n\nvar TW_TextNode = function(text) {\n\tbumpSequenceNumber(this);\n\tthis.textContent = text;\n};\n\nObject.defineProperty(TW_TextNode.prototype, \"formattedTextContent\", {\n\tget: function() {\n\t\treturn this.textContent.replace(/(\\r?\\n)/g,\"\");\n\t}\n});\n\nvar TW_Element = function(tag,namespace) {\n\tbumpSequenceNumber(this);\n\tthis.isTiddlyWikiFakeDom = true;\n\tthis.tag = tag;\n\tthis.attributes = {};\n\tthis.isRaw = false;\n\tthis.children = [];\n\tthis.namespaceURI = namespace || \"http://www.w3.org/1999/xhtml\";\n};\n\nTW_Element.prototype.setAttribute = function(name,value) {\n\tif(this.isRaw) {\n\t\tthrow \"Cannot setAttribute on a raw TW_Element\";\n\t}\n\tthis.attributes[name] = value;\n};\n\nTW_Element.prototype.setAttributeNS = function(namespace,name,value) {\n\tthis.setAttribute(name,value);\n};\n\nTW_Element.prototype.removeAttribute = function(name) {\n\tif(this.isRaw) {\n\t\tthrow \"Cannot removeAttribute on a raw TW_Element\";\n\t}\n\tif($tw.utils.hop(this.attributes,name)) {\n\t\tdelete this.attributes[name];\n\t}\n};\n\nTW_Element.prototype.appendChild = function(node) {\n\tthis.children.push(node);\n\tnode.parentNode = this;\n};\n\nTW_Element.prototype.insertBefore = function(node,nextSibling) {\n\tif(nextSibling) {\n\t\tvar p = this.children.indexOf(nextSibling);\n\t\tif(p !== -1) {\n\t\t\tthis.children.splice(p,0,node);\n\t\t\tnode.parentNode = this;\n\t\t} else {\n\t\t\tthis.appendChild(node);\n\t\t}\n\t} else {\n\t\tthis.appendChild(node);\n\t}\n}\n\nTW_Element.prototype.removeChild = function(node) {\n\tvar p = this.children.indexOf(node);\n\tif(p !== -1) {\n\t\tthis.children.splice(p,1);\n\t}\n};\n\nTW_Element.prototype.hasChildNodes = function() {\n\treturn !!this.children.length;\n};\n\nObject.defineProperty(TW_Element.prototype, \"firstChild\", {\n get: function() {\n \treturn this.children[0];\n }\n});\n\nTW_Element.prototype.addEventListener = function(type,listener,useCapture) {\n\t// Do nothing\n};\n\nObject.defineProperty(TW_Element.prototype, \"className\", {\n\tget: function() {\n\t\treturn this.attributes[\"class\"] || \"\";\n\t},\n set: function(value) {\n \tthis.attributes[\"class\"] = value;\n }\n});\n\nObject.defineProperty(TW_Element.prototype, \"value\", {\n\tget: function() {\n\t\treturn this.attributes[\"value\"] || \"\";\n\t},\n set: function(value) {\n \tthis.attributes[\"value\"] = value;\n }\n});\n\nObject.defineProperty(TW_Element.prototype, \"outerHTML\", {\n get: function() {\n\t\tvar output = [],attr,a,v;\n\t\toutput.push(\"<\",this.tag);\n\t\tif(this.attributes) {\n\t\t\tattr = [];\n\t\t\tfor(a in this.attributes) {\n\t\t\t\tattr.push(a);\n\t\t\t}\n\t\t\tattr.sort();\n\t\t\tfor(a=0; a<attr.length; a++) {\n\t\t\t\tv = this.attributes[attr[a]];\n\t\t\t\tif(v !== undefined) {\n\t\t\t\t\toutput.push(\" \",attr[a],\"='\",$tw.utils.htmlEncode(v),\"'\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\toutput.push(\">\");\n\t\tif($tw.config.htmlVoidElements.indexOf(this.tag) === -1) {\n\t\t\toutput.push(this.innerHTML);\n\t\t\toutput.push(\"</\",this.tag,\">\");\n\t\t}\n\t\treturn output.join(\"\");\n }\n});\n\nObject.defineProperty(TW_Element.prototype, \"innerHTML\", {\n\tget: function() {\n\t\tif(this.isRaw) {\n\t\t\treturn this.rawHTML;\n\t\t} else {\n\t\t\tvar b = [];\n\t\t\t$tw.utils.each(this.children,function(node) {\n\t\t\t\tif(node instanceof TW_Element) {\n\t\t\t\t\tb.push(node.outerHTML);\n\t\t\t\t} else if(node instanceof TW_TextNode) {\n\t\t\t\t\tb.push($tw.utils.htmlEncode(node.textContent));\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn b.join(\"\");\n\t\t}\n\t},\n set: function(value) {\n \tthis.isRaw = true;\n \tthis.rawHTML = value;\n }\n});\n\nObject.defineProperty(TW_Element.prototype, \"textContent\", {\n\tget: function() {\n\t\tif(this.isRaw) {\n\t\t\tthrow \"Cannot get textContent on a raw TW_Element\";\n\t\t} else {\n\t\t\tvar b = [];\n\t\t\t$tw.utils.each(this.children,function(node) {\n\t\t\t\tb.push(node.textContent);\n\t\t\t});\n\t\t\treturn b.join(\"\");\n\t\t}\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"formattedTextContent\", {\n\tget: function() {\n\t\tif(this.isRaw) {\n\t\t\tthrow \"Cannot get formattedTextContent on a raw TW_Element\";\n\t\t} else {\n\t\t\tvar b = [],\n\t\t\t\tisBlock = $tw.config.htmlBlockElements.indexOf(this.tag) !== -1;\n\t\t\tif(isBlock) {\n\t\t\t\tb.push(\"\\n\");\n\t\t\t}\n\t\t\tif(this.tag === \"li\") {\n\t\t\t\tb.push(\"* \")\n\t\t\t}\n\t\t\t$tw.utils.each(this.children,function(node) {\n\t\t\t\tb.push(node.formattedTextContent);\n\t\t\t});\n\t\t\tif(isBlock) {\n\t\t\t\tb.push(\"\\n\");\n\t\t\t}\n\t\t\treturn b.join(\"\");\n\t\t}\n\t}\n});\n\nvar document = {\n\tsetSequenceNumber: function(value) {\n\t\tsequenceNumber = value;\n\t},\n\tcreateElementNS: function(namespace,tag) {\n\t\treturn new TW_Element(tag,namespace);\n\t},\n\tcreateElement: function(tag) {\n\t\treturn new TW_Element(tag);\n\t},\n\tcreateTextNode: function(text) {\n\t\treturn new TW_TextNode(text);\n\t},\n};\n\nexports.fakeDocument = document;\n\n})();\n",
"title": "$:/core/modules/utils/fakedom.js",
"type": "application/javascript",
"module-type": "global"
},
"$:/core/modules/utils/filesystem.js": {
"text": "/*\\\ntitle: $:/core/modules/utils/filesystem.js\ntype: application/javascript\nmodule-type: utils-node\n\nFile system utilities\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar fs = require(\"fs\"),\n\tpath = require(\"path\");\n\n/*\nRecursively (and synchronously) copy a directory and all its content\n*/\nexports.copyDirectory = function(srcPath,dstPath) {\n\t// Remove any trailing path separators\n\tsrcPath = $tw.utils.removeTrailingSeparator(srcPath);\n\tdstPath = $tw.utils.removeTrailingSeparator(dstPath);\n\t// Create the destination directory\n\tvar err = $tw.utils.createDirectory(dstPath);\n\tif(err) {\n\t\treturn err;\n\t}\n\t// Function to copy a folder full of files\n\tvar copy = function(srcPath,dstPath) {\n\t\tvar srcStats = fs.lstatSync(srcPath),\n\t\t\tdstExists = fs.existsSync(dstPath);\n\t\tif(srcStats.isFile()) {\n\t\t\t$tw.utils.copyFile(srcPath,dstPath);\n\t\t} else if(srcStats.isDirectory()) {\n\t\t\tvar items = fs.readdirSync(srcPath);\n\t\t\tfor(var t=0; t<items.length; t++) {\n\t\t\t\tvar item = items[t],\n\t\t\t\t\terr = copy(srcPath + path.sep + item,dstPath + path.sep + item);\n\t\t\t\tif(err) {\n\t\t\t\t\treturn err;\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t};\n\tcopy(srcPath,dstPath);\n\treturn null;\n};\n\n/*\nCopy a file\n*/\nvar FILE_BUFFER_LENGTH = 64 * 1024,\n\tfileBuffer = $tw.node && new Buffer(FILE_BUFFER_LENGTH);\n\nexports.copyFile = function(srcPath,dstPath) {\n\t// Create any directories in the destination\n\t$tw.utils.createDirectory(path.dirname(dstPath));\n\t// Copy the file\n\tvar srcFile = fs.openSync(srcPath,\"r\"),\n\t\tdstFile = fs.openSync(dstPath,\"w\"),\n\t\tbytesRead = 1,\n\t\tpos = 0;\n\twhile (bytesRead > 0) {\n\t\tbytesRead = fs.readSync(srcFile,fileBuffer,0,FILE_BUFFER_LENGTH,pos);\n\t\tfs.writeSync(dstFile,fileBuffer,0,bytesRead);\n\t\tpos += bytesRead;\n\t}\n\tfs.closeSync(srcFile);\n\tfs.closeSync(dstFile);\n\treturn null;\n}\n\n/*\nRemove trailing path separator\n*/\nexports.removeTrailingSeparator = function(dirPath) {\n\tvar len = dirPath.length;\n\tif(dirPath.charAt(len-1) === path.sep) {\n\t\tdirPath = dirPath.substr(0,len-1);\n\t}\n\treturn dirPath;\n};\n\n/*\nRecursively create a directory\n*/\nexports.createDirectory = function(dirPath) {\n\tvar parts = dirPath.split(path.sep);\n\tfor(var component=0; component<parts.length; component++) {\n\t\tvar subDirPath = parts.slice(0,component+1).join(path.sep);\n\t\tif(!$tw.utils.isDirectory(subDirPath)) {\n\t\t\ttry {\n\t\t\t\tfs.mkdirSync(subDirPath);\n\t\t\t} catch(e) {\n\t\t\t\treturn \"Error creating directory '\" + subDirPath + \"'\";\n\t\t\t}\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nCheck if a path identifies a directory\n*/\nexports.isDirectory = function(dirPath) {\n\treturn fs.existsSync(dirPath) && fs.statSync(dirPath).isDirectory();\n};\n\n})();\n",
"title": "$:/core/modules/utils/filesystem.js",
"type": "application/javascript",
"module-type": "utils-node"
},
"$:/core/modules/utils/logger.js": {
"text": "/*\\\ntitle: $:/core/modules/utils/logger.js\ntype: application/javascript\nmodule-type: utils\n\nA basic logging implementation\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar ALERT_TAG = \"$:/tags/Alert\";\n\n/*\nMake a new logger\n*/\nfunction Logger(componentName) {\n\tthis.componentName = componentName || \"\";\n}\n\n/*\nLog a message\n*/\nLogger.prototype.log = function(/* args */) {\n\tif(console !== undefined && console.log !== undefined) {\n\t\treturn Function.apply.call(console.log, console, [this.componentName + \":\"].concat(Array.prototype.slice.call(arguments,0)));\n\t}\n};\n\n/*\nAlert a message\n*/\nLogger.prototype.alert = function(/* args */) {\n\t// Prepare the text of the alert\n\tvar text = Array.prototype.join.call(arguments,\" \");\n\t// Check if there is an existing alert with the same text and the same component\n\tvar existingAlerts = $tw.wiki.getTiddlersWithTag(ALERT_TAG),\n\t\talertFields,\n\t\texistingCount,\n\t\tself = this;\n\t$tw.utils.each(existingAlerts,function(title) {\n\t\tvar tiddler = $tw.wiki.getTiddler(title);\n\t\tif(tiddler.fields.text === text && tiddler.fields.component === self.componentName && tiddler.fields.modified && (!alertFields || tiddler.fields.modified < alertFields.modified)) {\n\t\t\t\talertFields = $tw.utils.extend({},tiddler.fields);\n\t\t}\n\t});\n\tif(alertFields) {\n\t\texistingCount = alertFields.count || 1;\n\t} else {\n\t\talertFields = {\n\t\t\ttitle: $tw.wiki.generateNewTitle(\"$:/temp/alerts/alert\",{prefix: \"\"}),\n\t\t\ttext: text,\n\t\t\ttags: [ALERT_TAG],\n\t\t\tcomponent: this.componentName\n\t\t};\n\t\texistingCount = 0;\n\t}\n\talertFields.modified = new Date();\n\tif(++existingCount > 1) {\n\t\talertFields.count = existingCount;\n\t} else {\n\t\talertFields.count = undefined;\n\t}\n\t$tw.wiki.addTiddler(new $tw.Tiddler(alertFields));\n\t// Log it too\n\tthis.log.apply(this,Array.prototype.slice.call(arguments,0));\n};\n\nexports.Logger = Logger;\n\n})();\n",
"title": "$:/core/modules/utils/logger.js",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/parsetree.js": {
"text": "/*\\\ntitle: $:/core/modules/utils/parsetree.js\ntype: application/javascript\nmodule-type: utils\n\nParse tree utility functions.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.addAttributeToParseTreeNode = function(node,name,value) {\n\tif(node.type === \"element\") {\n\t\tnode.attributes = node.attributes || {};\n\t\tnode.attributes[name] = {type: \"string\", value: value};\n\t}\n};\n\nexports.getAttributeValueFromParseTreeNode = function(node,name,defaultValue) {\n\tif(node.type === \"element\" && node.attributes && node.attributes[name] && node.attributes[name].value !== undefined) {\n\t\treturn node.attributes[name].value;\n\t}\n\treturn defaultValue;\n};\n\nexports.addClassToParseTreeNode = function(node,classString) {\n\tvar classes = [];\n\tif(node.type === \"element\") {\n\t\tnode.attributes = node.attributes || {};\n\t\tnode.attributes[\"class\"] = node.attributes[\"class\"] || {type: \"string\", value: \"\"};\n\t\tif(node.attributes[\"class\"].type === \"string\") {\n\t\t\tif(node.attributes[\"class\"].value !== \"\") {\n\t\t\t\tclasses = node.attributes[\"class\"].value.split(\" \");\n\t\t\t}\n\t\t\tif(classString !== \"\") {\n\t\t\t\t$tw.utils.pushTop(classes,classString.split(\" \"));\n\t\t\t}\n\t\t\tnode.attributes[\"class\"].value = classes.join(\" \");\n\t\t}\n\t}\n};\n\nexports.addStyleToParseTreeNode = function(node,name,value) {\n\tif(node.type === \"element\") {\n\t\tnode.attributes = node.attributes || {};\n\t\tnode.attributes[\"style\"] = node.attributes[\"style\"] || {type: \"string\", value: \"\"};\n\t\tif(node.attributes[\"style\"].type === \"string\") {\n\t\t\tnode.attributes[\"style\"].value += name + \":\" + value + \";\";\n\t\t}\n\t}\n};\n\nexports.findParseTreeNode = function(nodeArray,search) {\n\tfor(var t=0; t<nodeArray.length; t++) {\n\t\tif(nodeArray[t].type === search.type && nodeArray[t].tag === search.tag) {\n\t\t\treturn nodeArray[t];\n\t\t}\n\t}\n\treturn undefined;\n};\n\n})();\n",
"title": "$:/core/modules/utils/parsetree.js",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/pluginmaker.js": {
"text": "/*\\\ntitle: $:/core/modules/utils/pluginmaker.js\ntype: application/javascript\nmodule-type: utils\n\nA quick and dirty way to pack up plugins within the browser.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nRepack a plugin, and then delete any non-shadow payload tiddlers\n*/\nexports.repackPlugin = function(title,additionalTiddlers,excludeTiddlers) {\n\tadditionalTiddlers = additionalTiddlers || [];\n\texcludeTiddlers = excludeTiddlers || [];\n\t// Get the plugin tiddler\n\tvar pluginTiddler = $tw.wiki.getTiddler(title);\n\tif(!pluginTiddler) {\n\t\tthrow \"No such tiddler as \" + title;\n\t}\n\t// Extract the JSON\n\ttry {\n\t\tvar jsonPluginTiddler = JSON.parse(pluginTiddler.fields.text);\n\t} catch(e) {\n\t\tthrow \"Cannot parse plugin tiddler \" + title + \"\\nError: \" + e;\n\t}\n\t// Get the list of tiddlers\n\tvar tiddlers = Object.keys(jsonPluginTiddler.tiddlers);\n\t// Add the additional tiddlers\n\t$tw.utils.pushTop(tiddlers,additionalTiddlers)\n\t// Remove any excluded tiddlers\n\tfor(var t=tiddlers.length-1; t>=0; t--) {\n\t\tif(excludeTiddlers.indexOf(tiddlers[t]) !== -1) {\n\t\t\ttiddlers.splice(t,1);\n\t\t}\n\t}\n\t// Pack up the tiddlers into a block of JSON\n\tvar plugins = {};\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar tiddler = $tw.wiki.getTiddler(title),\n\t\t\tfields = {};\n\t\t$tw.utils.each(tiddler.fields,function (value,name) {\n\t\t\tfields[name] = tiddler.getFieldString(name);\n\t\t});\n\t\tplugins[title] = fields;\n\t});\n\t// Retrieve and bump the version number\n\tvar pluginVersion = $tw.utils.parseVersion(pluginTiddler.getFieldString(\"version\") || \"0.0.0\") || {\n\t\t\tmajor: \"0\",\n\t\t\tminor: \"0\",\n\t\t\tpatch: \"0\"\n\t\t};\n\tpluginVersion.patch++;\n\tvar version = pluginVersion.major + \".\" + pluginVersion.minor + \".\" + pluginVersion.patch;\n\tif(pluginVersion.prerelease) {\n\t\tversion += \"-\" + pluginVersion.prerelease;\n\t}\n\tif(pluginVersion.build) {\n\t\tversion += \"+\" + pluginVersion.build;\n\t}\n\t// Save the tiddler\n\t$tw.wiki.addTiddler(new $tw.Tiddler(pluginTiddler,{text: JSON.stringify({tiddlers: plugins},null,4), version: version}));\n\t// Delete any non-shadow constituent tiddlers\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tif($tw.wiki.tiddlerExists(title)) {\n\t\t\t$tw.wiki.deleteTiddler(title);\n\t\t}\n\t});\n\t// Trigger an autosave\n\t$tw.rootWidget.dispatchEvent({type: \"tw-auto-save-wiki\"});\n\t// Return a heartwarming confirmation\n\treturn \"Plugin \" + title + \" successfully saved\";\n}\n\n})();\n",
"title": "$:/core/modules/utils/pluginmaker.js",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/utils.js": {
"text": "/*\\\ntitle: $:/core/modules/utils/utils.js\ntype: application/javascript\nmodule-type: utils\n\nVarious static utility functions.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nTrim whitespace from the start and end of a string\nThanks to Steven Levithan, http://blog.stevenlevithan.com/archives/faster-trim-javascript\n*/\nexports.trim = function(str) {\n\tif(typeof str === \"string\") {\n\t\treturn str.replace(/^\\s\\s*/, '').replace(/\\s\\s*$/, '');\n\t} else {\n\t\treturn str;\n\t}\n};\n\n/*\nReturn the number of keys in an object\n*/\nexports.count = function(object) {\n\tvar s = 0;\n\t$tw.utils.each(object,function() {s++;});\n\treturn s;\n};\n\n/*\nPush entries onto an array, removing them first if they already exist in the array\n\tarray: array to modify\n\tvalue: a single value to push or an array of values to push\n*/\nexports.pushTop = function(array,value) {\n\tvar t,p;\n\tif($tw.utils.isArray(value)) {\n\t\t// Remove any array entries that are duplicated in the new values\n\t\tfor(t=0; t<value.length; t++) {\n\t\t\tp = array.indexOf(value[t]);\n\t\t\tif(p !== -1) {\n\t\t\t\tarray.splice(p,1);\n\t\t\t}\n\t\t}\n\t\t// Push the values on top of the main array\n\t\tarray.push.apply(array,value);\n\t} else {\n\t\tp = array.indexOf(value);\n\t\tif(p !== -1) {\n\t\t\tarray.splice(p,1);\n\t\t}\n\t\tarray.push(value);\n\t}\n};\n\n/*\nRemove entries from an array\n\tarray: array to modify\n\tvalue: a single value to remove, or an array of values to remove\n*/\nexports.removeArrayEntries = function(array,value) {\n\tvar t,p;\n\tif($tw.utils.isArray(value)) {\n\t\tfor(t=0; t<value.length; t++) {\n\t\t\tp = array.indexOf(value[t]);\n\t\t\tif(p !== -1) {\n\t\t\t\tarray.splice(p,1);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tp = array.indexOf(value);\n\t\tif(p !== -1) {\n\t\t\tarray.splice(p,1);\n\t\t}\n\t}\n};\n\n/*\nCheck whether any members of a hashmap are present in another hashmap\n*/\nexports.checkDependencies = function(dependencies,changes) {\n\tvar hit = false;\n\t$tw.utils.each(changes,function(change,title) {\n\t\tif($tw.utils.hop(dependencies,title)) {\n\t\t\thit = true;\n\t\t}\n\t});\n\treturn hit;\n};\n\nexports.extend = function(object /* [, src] */) {\n\t$tw.utils.each(Array.prototype.slice.call(arguments, 1), function(source) {\n\t\tif(source) {\n\t\t\tfor(var property in source) {\n\t\t\t\tobject[property] = source[property];\n\t\t\t}\n\t\t}\n\t});\n\treturn object;\n};\n\nexports.deepCopy = function(object) {\n\tvar result,t;\n\tif($tw.utils.isArray(object)) {\n\t\t// Copy arrays\n\t\tresult = object.slice(0);\n\t} else if(typeof object === \"object\") {\n\t\tresult = {};\n\t\tfor(t in object) {\n\t\t\tif(object[t] !== undefined) {\n\t\t\t\tresult[t] = $tw.utils.deepCopy(object[t]);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tresult = object;\n\t}\n\treturn result;\n};\n\nexports.extendDeepCopy = function(object,extendedProperties) {\n\tvar result = $tw.utils.deepCopy(object),t;\n\tfor(t in extendedProperties) {\n\t\tif(extendedProperties[t] !== undefined) {\n\t\t\tresult[t] = $tw.utils.deepCopy(extendedProperties[t]);\n\t\t}\n\t}\n\treturn result;\n};\n\nexports.slowInSlowOut = function(t) {\n\treturn (1 - ((Math.cos(t * Math.PI) + 1) / 2));\n};\n\nexports.formatDateString = function (date,template) {\n\tvar t = template.replace(/0hh12/g,$tw.utils.pad($tw.utils.getHours12(date)));\n\tt = t.replace(/hh12/g,$tw.utils.getHours12(date));\n\tt = t.replace(/0hh/g,$tw.utils.pad(date.getHours()));\n\tt = t.replace(/hh/g,date.getHours());\n\tt = t.replace(/mmm/g,$tw.config.dateFormats.shortMonths[date.getMonth()]);\n\tt = t.replace(/0mm/g,$tw.utils.pad(date.getMinutes()));\n\tt = t.replace(/mm/g,date.getMinutes());\n\tt = t.replace(/0ss/g,$tw.utils.pad(date.getSeconds()));\n\tt = t.replace(/ss/g,date.getSeconds());\n\tt = t.replace(/[ap]m/g,$tw.utils.getAmPm(date).toLowerCase());\n\tt = t.replace(/[AP]M/g,$tw.utils.getAmPm(date).toUpperCase());\n\tt = t.replace(/wYYYY/g,$tw.utils.getYearForWeekNo(date));\n\tt = t.replace(/wYY/g,$tw.utils.pad($tw.utils.getYearForWeekNo(date)-2000));\n\tt = t.replace(/YYYY/g,date.getFullYear());\n\tt = t.replace(/YY/g,$tw.utils.pad(date.getFullYear()-2000));\n\tt = t.replace(/MMM/g,$tw.config.dateFormats.months[date.getMonth()]);\n\tt = t.replace(/0MM/g,$tw.utils.pad(date.getMonth()+1));\n\tt = t.replace(/MM/g,date.getMonth()+1);\n\tt = t.replace(/0WW/g,$tw.utils.pad($tw.utils.getWeek(date)));\n\tt = t.replace(/WW/g,$tw.utils.getWeek(date));\n\tt = t.replace(/DDD/g,$tw.config.dateFormats.days[date.getDay()]);\n\tt = t.replace(/ddd/g,$tw.config.dateFormats.shortDays[date.getDay()]);\n\tt = t.replace(/0DD/g,$tw.utils.pad(date.getDate()));\n\tt = t.replace(/DDth/g,date.getDate()+$tw.utils.getDaySuffix(date));\n\tt = t.replace(/DD/g,date.getDate());\n\tvar tz = date.getTimezoneOffset();\n\tvar atz = Math.abs(tz);\n\tt = t.replace(/TZD/g,(tz < 0 ? '+' : '-') + $tw.utils.pad(Math.floor(atz / 60)) + ':' + $tw.utils.pad(atz % 60));\n\tt = t.replace(/\\\\(.)/g,\"$1\");\n\treturn t;\n};\n\nexports.getAmPm = function(date) {\n\treturn date.getHours() >= 12 ? $tw.config.dateFormats.pm : $tw.config.dateFormats.am;\n};\n\nexports.getDaySuffix = function(date) {\n\treturn $tw.config.dateFormats.daySuffixes[date.getDate()-1];\n};\n\nexports.getWeek = function(date) {\n\tvar dt = new Date(date.getTime());\n\tvar d = dt.getDay();\n\tif(d === 0) d=7;// JavaScript Sun=0, ISO Sun=7\n\tdt.setTime(dt.getTime()+(4-d)*86400000);// shift day to Thurs of same week to calculate weekNo\n\tvar n = Math.floor((dt.getTime()-new Date(dt.getFullYear(),0,1)+3600000)/86400000);\n\treturn Math.floor(n/7)+1;\n};\n\nexports.getYearForWeekNo = function(date) {\n\tvar dt = new Date(date.getTime());\n\tvar d = dt.getDay();\n\tif(d === 0) d=7;// JavaScript Sun=0, ISO Sun=7\n\tdt.setTime(dt.getTime()+(4-d)*86400000);// shift day to Thurs of same week\n\treturn dt.getFullYear();\n};\n\nexports.getHours12 = function(date) {\n\tvar h = date.getHours();\n\treturn h > 12 ? h-12 : ( h > 0 ? h : 12 );\n};\n\n/*\nConvert a date delta in milliseconds into a string representation of \"23 seconds ago\", \"27 minutes ago\" etc.\n\tdelta: delta in milliseconds\nReturns an object with these members:\n\tdescription: string describing the delta period\n\tupdatePeriod: time in millisecond until the string will be inaccurate\n*/\nexports.getRelativeDate = function(delta) {\n\tvar futurep = false;\n\tif(delta < 0) {\n\t\tdelta = -1 * delta;\n\t\tfuturep = true;\n\t}\n\tvar units = [\n\t\t{name: \"years\", duration: 365 * 24 * 60 * 60 * 1000},\n\t\t{name: \"months\", duration: (365/12) * 24 * 60 * 60 * 1000},\n\t\t{name: \"days\", duration: 24 * 60 * 60 * 1000},\n\t\t{name: \"hours\", duration: 60 * 60 * 1000},\n\t\t{name: \"minutes\", duration: 60 * 1000},\n\t\t{name: \"seconds\", duration: 1000}\n\t];\n\tfor(var t=0; t<units.length; t++) {\n\t\tvar result = Math.floor(delta / units[t].duration);\n\t\tif(result >= 2) {\n\t\t\tvar desc = result + \" \" + units[t].name;\n\t\t\tif(futurep) {\n\t\t\t\tdesc = desc + \" from now\";\n\t\t\t} else {\n\t\t\t\tdesc = desc + \" ago\";\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tdelta: delta,\n\t\t\t\tdescription: desc,\n\t\t\t\tupdatePeriod: units[t].duration\n\t\t\t};\n\t\t}\n\t}\n\treturn {\n\t\tdelta: delta,\n\t\tdescription: \"1 second ago\",\n\t\tupdatePeriod: 1000\n\t};\n};\n\n// Convert & to \"&\", < to \"<\", > to \">\" and \" to \""\"\nexports.htmlEncode = function(s) {\n\tif(s) {\n\t\treturn s.toString().replace(/&/mg,\"&\").replace(/</mg,\"<\").replace(/>/mg,\">\").replace(/\\\"/mg,\""\");\n\t} else {\n\t\treturn \"\";\n\t}\n};\n\n// Converts all HTML entities to their character equivalents\nexports.entityDecode = function(s) {\n\tvar e = s.substr(1,s.length-2); // Strip the & and the ;\n\tif(e.charAt(0) === \"#\") {\n\t\tif(e.charAt(1) === \"x\" || e.charAt(1) === \"X\") {\n\t\t\treturn String.fromCharCode(parseInt(e.substr(2),16));\t\n\t\t} else {\n\t\t\treturn String.fromCharCode(parseInt(e.substr(1),10));\n\t\t}\n\t} else {\n\t\tvar c = $tw.config.htmlEntities[e];\n\t\tif(c) {\n\t\t\treturn String.fromCharCode(c);\n\t\t} else {\n\t\t\treturn s; // Couldn't convert it as an entity, just return it raw\n\t\t}\n\t}\n};\n\nexports.unescapeLineBreaks = function(s) {\n\treturn s.replace(/\\\\n/mg,\"\\n\").replace(/\\\\b/mg,\" \").replace(/\\\\s/mg,\"\\\\\").replace(/\\r/mg,\"\");\n};\n\n/*\n * Returns an escape sequence for given character. Uses \\x for characters <=\n * 0xFF to save space, \\u for the rest.\n *\n * The code needs to be in sync with th code template in the compilation\n * function for \"action\" nodes.\n */\n// Copied from peg.js, thanks to David Majda\nexports.escape = function(ch) {\n\tvar charCode = ch.charCodeAt(0);\n\tif(charCode <= 0xFF) {\n\t\treturn '\\\\x' + $tw.utils.pad(charCode.toString(16).toUpperCase());\n\t} else {\n\t\treturn '\\\\u' + $tw.utils.pad(charCode.toString(16).toUpperCase(),4);\n\t}\n};\n\n// Turns a string into a legal JavaScript string\n// Copied from peg.js, thanks to David Majda\nexports.stringify = function(s) {\n\t/*\n\t* ECMA-262, 5th ed., 7.8.4: All characters may appear literally in a string\n\t* literal except for the closing quote character, backslash, carriage return,\n\t* line separator, paragraph separator, and line feed. Any character may\n\t* appear in the form of an escape sequence.\n\t*\n\t* For portability, we also escape escape all non-ASCII characters.\n\t*/\n\treturn s\n\t\t.replace(/\\\\/g, '\\\\\\\\') // backslash\n\t\t.replace(/\"/g, '\\\\\"') // double quote character\n\t\t.replace(/'/g, \"\\\\'\") // single quote character\n\t\t.replace(/\\r/g, '\\\\r') // carriage return\n\t\t.replace(/\\n/g, '\\\\n') // line feed\n\t\t.replace(/[\\x80-\\uFFFF]/g, exports.escape); // non-ASCII characters\n};\n\n/*\nEscape the RegExp special characters with a preceding backslash\n*/\nexports.escapeRegExp = function(s) {\n return s.replace(/[\\-\\/\\\\\\^\\$\\*\\+\\?\\.\\(\\)\\|\\[\\]\\{\\}]/g, '\\\\$&');\n};\n\nexports.nextTick = function(fn) {\n/*global window: false */\n\tif(typeof window !== \"undefined\") {\n\t\t// Apparently it would be faster to use postMessage - http://dbaron.org/log/20100309-faster-timeouts\n\t\twindow.setTimeout(fn,4);\n\t} else {\n\t\tprocess.nextTick(fn);\n\t}\n};\n\n/*\nConvert a hyphenated CSS property name into a camel case one\n*/\nexports.unHyphenateCss = function(propName) {\n\treturn propName.replace(/-([a-z])/gi, function(match0,match1) {\n\t\treturn match1.toUpperCase();\n\t});\n};\n\n/*\nConvert a camelcase CSS property name into a dashed one (\"backgroundColor\" --> \"background-color\")\n*/\nexports.hyphenateCss = function(propName) {\n\treturn propName.replace(/([A-Z])/g, function(match0,match1) {\n\t\treturn \"-\" + match1.toLowerCase();\n\t});\n};\n\n/*\nParse a text reference of one of these forms:\n* title\n* !!field\n* title!!field\n* title##index\n* etc\nReturns an object with the following fields, all optional:\n* title: tiddler title\n* field: tiddler field name\n* index: JSON property index\n*/\nexports.parseTextReference = function(textRef) {\n\t// Separate out the title, field name and/or JSON indices\n\tvar reTextRef = /^\\s*([^!#]+)?(?:(?:!!([^\\s]+))|(?:##([^\\s]+)))?\\s*/mg,\n\t\tmatch = reTextRef.exec(textRef);\n\tif(match && reTextRef.lastIndex === textRef.length) {\n\t\t// Return the parts\n\t\treturn {\n\t\t\ttitle: match[1],\n\t\t\tfield: match[2],\n\t\t\tindex: match[3]\n\t\t};\n\t} else {\n\t\t// If we couldn't parse it (eg it started with a)\n\t\treturn {\n\t\t\ttitle: textRef\n\t\t};\n\t}\n};\n\n/*\nExtract the version number from the meta tag or from the boot file\n*/\n\nif($tw.browser) {\n\n// Browser version\nexports.extractVersionInfo = function() {\n\tvar metatags = document.getElementsByTagName(\"meta\");\n\tfor(var t=0; t<metatags.length; t++) {\n\t\tvar m = metatags[t];\n\t\tif(m.name === \"tiddlywiki-version\") {\n\t\t\treturn m.content;\n\t\t}\n\t}\n\treturn null;\n};\n\n} else {\n\n// Server version\nexports.extractVersionInfo = function() {\n\treturn $tw.packageInfo.version;\n};\n\n}\n\n/*\nGet the animation duration in ms\n*/\nexports.getAnimationDuration = function() {\n\treturn parseInt($tw.wiki.getTiddlerText(\"$:/config/AnimationDuration\",\"400\"),10);\n};\n\n/*\nHash a string to a number\nDerived from http://stackoverflow.com/a/15710692\n*/\nexports.hashString = function(str) {\n\treturn str.split(\"\").reduce(function(a,b) {\n\t\ta = ((a << 5) - a) + b.charCodeAt(0);\n\t\treturn a & a;\n\t},0);\n};\n\n/*\nDecode a base64 string\n*/\nexports.base64Decode = function(string64) {\n\tif($tw.browser) {\n\t\t// TODO\n\t\tthrow \"$tw.utils.base64Decode() doesn't work in the browser\";\n\t} else {\n\t\treturn (new Buffer(string64,\"base64\")).toString();\n\t}\n};\n\n/*\nConvert a hashmap into a tiddler dictionary format sequence of name:value pairs\n*/\nexports.makeTiddlerDictionary = function(data) {\n\tvar output = [];\n\tfor(var name in data) {\n\t\toutput.push(name + \": \" + data[name]);\n\t}\n\treturn output.join(\"\\n\");\n};\n\n})();\n",
"title": "$:/core/modules/utils/utils.js",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/widgets/browse.js": {
"text": "/*\\\ntitle: $:/core/modules/widgets/browse.js\ntype: application/javascript\nmodule-type: widget\n\nBrowse widget for browsing for files to import\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar BrowseWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nBrowseWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nBrowseWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create element\n\tvar domNode = this.document.createElement(\"input\");\n\tdomNode.setAttribute(\"type\",\"file\");\n\tdomNode.setAttribute(\"multiple\",\"multiple\");\n\t// Add a click event handler\n\tdomNode.addEventListener(\"change\",function (event) {\n\t\tself.wiki.readFiles(event.target.files,function(tiddlerFieldsArray) {\n\t\t\tself.dispatchEvent({type: \"tw-import-tiddlers\", param: JSON.stringify(tiddlerFieldsArray)});\n\t\t});\n\t\treturn false;\n\t},false);\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nBrowseWidget.prototype.execute = function() {\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nBrowseWidget.prototype.refresh = function(changedTiddlers) {\n\treturn false;\n};\n\nexports.browse = BrowseWidget;\n\n})();\n",
"title": "$:/core/modules/widgets/browse.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/button.js": {
"text": "/*\\\ntitle: $:/core/modules/widgets/button.js\ntype: application/javascript\nmodule-type: widget\n\nButton widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ButtonWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nButtonWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nButtonWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create element\n\tvar domNode = this.document.createElement(\"button\");\n\t// Assign classes\n\tvar classes = this[\"class\"].split(\" \") || [];\n\tif(this.selectedClass) {\n\t\tif(this.set && this.setTo && this.isSelected()) {\n\t\t\t$tw.utils.pushTop(classes,this.selectedClass.split(\" \"));\n\t\t}\n\t\tif(this.popup && this.isPoppedUp()) {\n\t\t\t$tw.utils.pushTop(classes,this.selectedClass.split(\" \"));\n\t\t}\n\t}\n\tdomNode.className = classes.join(\" \");\n\t// Assign classes\n\tif(this.style) {\n\t\tdomNode.setAttribute(\"style\",this.style);\n\t}\n\t// Add a click event handler\n\tdomNode.addEventListener(\"click\",function (event) {\n\t\tvar handled = false;\n\t\tif(self.to) {\n\t\t\tself.dispatchEvent({type: \"tw-navigate\", navigateTo: self.to, tiddlerTitle: self.getVariable(\"currentTiddler\")});\n\t\t\thandled = true;\n\t\t}\n\t\tif(self.message) {\n\t\t\tself.dispatchMessage(event);\n\t\t\thandled = true;\n\t\t}\n\t\tif(self.popup) {\n\t\t\tself.triggerPopup(event);\n\t\t\thandled = true;\n\t\t}\n\t\tif(self.set) {\n\t\t\tself.setTiddler();\n\t\t\thandled = true;\n\t\t}\n\t\tif(handled) {\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t}\n\t\treturn handled;\n\t},false);\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\nButtonWidget.prototype.isSelected = function() {\n\tvar tiddler = this.wiki.getTiddler(this.set);\n\treturn tiddler ? tiddler.fields.text === this.setTo : this.defaultSetValue === this.setTo;\n};\n\nButtonWidget.prototype.isPoppedUp = function() {\n\tvar tiddler = this.wiki.getTiddler(this.popup);\n\tvar result = tiddler && tiddler.fields.text ? $tw.popup.readPopupState(this.popup,tiddler.fields.text) : false;\n\treturn result;\n};\n\nButtonWidget.prototype.dispatchMessage = function(event) {\n\tthis.dispatchEvent({type: this.message, param: this.param, tiddlerTitle: this.getVariable(\"currentTiddler\")});\n};\n\nButtonWidget.prototype.triggerPopup = function(event) {\n\t$tw.popup.triggerPopup({\n\t\tdomNode: this.domNodes[0],\n\t\ttitle: this.popup,\n\t\twiki: this.wiki\n\t});\n};\n\nButtonWidget.prototype.setTiddler = function() {\n\tvar tiddler = this.wiki.getTiddler(this.set);\n\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,{title: this.set, text: this.setTo}));\n};\n\n/*\nCompute the internal state of the widget\n*/\nButtonWidget.prototype.execute = function() {\n\t// Get attributes\n\tthis.to = this.getAttribute(\"to\");\n\tthis.message = this.getAttribute(\"message\");\n\tthis.param = this.getAttribute(\"param\");\n\tthis.set = this.getAttribute(\"set\");\n\tthis.setTo = this.getAttribute(\"setTo\");\n\tthis.popup = this.getAttribute(\"popup\");\n\tthis.hover = this.getAttribute(\"hover\");\n\tthis[\"class\"] = this.getAttribute(\"class\",\"\");\n\tthis.style = this.getAttribute(\"style\");\n\tthis.selectedClass = this.getAttribute(\"selectedClass\");\n\tthis.defaultSetValue = this.getAttribute(\"default\");\n\t// Make child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nButtonWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.to || changedAttributes.message || changedAttributes.param || changedAttributes.set || changedAttributes.setTo || changedAttributes.popup || changedAttributes.hover || changedAttributes[\"class\"] || changedAttributes.selectedClass || changedAttributes.style || (this.set && changedTiddlers[this.set]) || (this.popup && changedTiddlers[this.popup])) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.button = ButtonWidget;\n\n})();\n",
"title": "$:/core/modules/widgets/button.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/checkbox.js": {
"text": "/*\\\ntitle: $:/core/modules/widgets/checkbox.js\ntype: application/javascript\nmodule-type: widget\n\nCheckbox widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar CheckboxWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nCheckboxWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nCheckboxWidget.prototype.render = function(parent,nextSibling) {\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Create our elements\n\tthis.labelDomNode = this.document.createElement(\"label\");\n\tthis.inputDomNode = this.document.createElement(\"input\");\n\tthis.inputDomNode.setAttribute(\"type\",\"checkbox\");\n\tif(this.getValue()) {\n\t\tthis.inputDomNode.setAttribute(\"checked\",\"true\");\n\t}\n\tthis.labelDomNode.appendChild(this.inputDomNode);\n\tthis.spanDomNode = this.document.createElement(\"span\");\n\tthis.labelDomNode.appendChild(this.spanDomNode);\n\t// Add a click event handler\n\t$tw.utils.addEventListeners(this.inputDomNode,[\n\t\t{name: \"change\", handlerObject: this, handlerMethod: \"handleChangeEvent\"}\n\t]);\n\t// Insert the label into the DOM and render any children\n\tparent.insertBefore(this.labelDomNode,nextSibling);\n\tthis.renderChildren(this.spanDomNode,null);\n\tthis.domNodes.push(this.labelDomNode);\n};\n\nCheckboxWidget.prototype.getValue = function() {\n\tvar tiddler = this.wiki.getTiddler(this.checkboxTitle);\n\treturn tiddler ? tiddler.hasTag(this.checkboxTag) : false;\n};\n\nCheckboxWidget.prototype.handleChangeEvent = function(event) {\n\tvar checked = this.inputDomNode.checked,\n\t\ttiddler = this.wiki.getTiddler(this.checkboxTitle);\n\tif(tiddler && tiddler.hasTag(this.checkboxTag) !== checked) {\n\t\tvar newTags = (tiddler.fields.tags || []).slice(0),\n\t\t\tpos = newTags.indexOf(this.checkboxTag);\n\t\tif(pos !== -1) {\n\t\t\tnewTags.splice(pos,1);\n\t\t}\n\t\tif(checked) {\n\t\t\tnewTags.push(this.checkboxTag);\n\t\t}\n\t\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,{tags: newTags},this.wiki.getModificationFields()));\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nCheckboxWidget.prototype.execute = function() {\n\t// Get the parameters from the attributes\n\tthis.checkboxTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.checkboxTag = this.getAttribute(\"tag\");\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nCheckboxWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler || changedAttributes.tag || changedAttributes[\"class\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\tvar refreshed = false;\n\t\tif(changedTiddlers[this.checkboxTitle]) {\n\t\t\tthis.inputDomNode.checked = this.getValue();\n\t\t\trefreshed = true;\n\t\t}\n\t\treturn this.refreshChildren(changedTiddlers) || refreshed;\n\t}\n};\n\nexports.checkbox = CheckboxWidget;\n\n})();\n",
"title": "$:/core/modules/widgets/checkbox.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/codeblock.js": {
"text": "/*\\\ntitle: $:/core/modules/widgets/codeblock.js\ntype: application/javascript\nmodule-type: widget\n\nCode block node widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar CodeBlockWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nCodeBlockWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nCodeBlockWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar codeNode = this.document.createElement(\"code\"),\n\t\tdomNode = this.document.createElement(\"pre\");\n\tcodeNode.appendChild(this.document.createTextNode(this.getAttribute(\"code\")));\n\tdomNode.appendChild(codeNode);\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.domNodes.push(domNode);\n\tif(this.postRender) {\n\t\tthis.postRender();\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nCodeBlockWidget.prototype.execute = function() {\n\tthis.language = this.getAttribute(\"language\");\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nCodeBlockWidget.prototype.refresh = function(changedTiddlers) {\n\treturn false;\n};\n\nexports.codeblock = CodeBlockWidget;\n\n})();\n",
"title": "$:/core/modules/widgets/codeblock.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/count.js": {
"text": "/*\\\ntitle: $:/core/modules/widgets/count.js\ntype: application/javascript\nmodule-type: widget\n\nCount widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar CountWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nCountWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nCountWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar textNode = this.document.createTextNode(this.currentCount);\n\tparent.insertBefore(textNode,nextSibling);\n\tthis.domNodes.push(textNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nCountWidget.prototype.execute = function() {\n\t// Get parameters from our attributes\n\tthis.filter = this.getAttribute(\"filter\");\n\t// Execute the filter\n\tif(this.filter) {\n\t\tthis.currentCount = this.wiki.filterTiddlers(this.filter,this.getVariable(\"currentTiddler\")).length;\n\t} else {\n\t\tthis.currentCount = undefined;\n\t}\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nCountWidget.prototype.refresh = function(changedTiddlers) {\n\t// Re-execute the filter to get the count\n\tvar oldCount = this.currentCount;\n\tthis.execute();\n\tif(this.currentCount !== oldCount) {\n\t\t// Regenerate and rerender the widget and replace the existing DOM node\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn false;\n\t}\n\n};\n\nexports.count = CountWidget;\n\n})();\n",
"title": "$:/core/modules/widgets/count.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/dropzone.js": {
"text": "/*\\\ntitle: $:/core/modules/widgets/dropzone.js\ntype: application/javascript\nmodule-type: widget\n\nDropzone widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar DropZoneWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nDropZoneWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nDropZoneWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create element\n\tvar domNode = this.document.createElement(\"div\");\n\tdomNode.className = \"tw-dropzone\";\n\t// Add event handlers\n\t$tw.utils.addEventListeners(domNode,[\n\t\t{name: \"dragenter\", handlerObject: this, handlerMethod: \"handleDragEnterEvent\"},\n\t\t{name: \"dragover\", handlerObject: this, handlerMethod: \"handleDragOverEvent\"},\n\t\t{name: \"dragleave\", handlerObject: this, handlerMethod: \"handleDragLeaveEvent\"},\n\t\t{name: \"drop\", handlerObject: this, handlerMethod: \"handleDropEvent\"},\n\t\t{name: \"paste\", handlerObject: this, handlerMethod: \"handlePasteEvent\"}\n\t]);\n\tdomNode.addEventListener(\"click\",function (event) {\n\t},false);\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\nDropZoneWidget.prototype.handleDragEnterEvent = function(event) {\n\t// We count enter/leave events\n\tthis.dragEnterCount = (this.dragEnterCount || 0) + 1;\n\t// If we're entering for the first time we need to apply highlighting\n\tif(this.dragEnterCount === 1) {\n\t\t$tw.utils.addClass(this.domNodes[0],\"tw-dragover\");\n\t}\n\t// Tell the browser that we're ready to handle the drop\n\tevent.preventDefault();\n\t// Tell the browser not to ripple the drag up to any parent drop handlers\n\tevent.stopPropagation();\n};\n\nDropZoneWidget.prototype.handleDragOverEvent = function(event) {\n\t// Tell the browser that we're still interested in the drop\n\tevent.preventDefault();\n\tevent.dataTransfer.dropEffect = \"copy\"; // Explicitly show this is a copy\n};\n\nDropZoneWidget.prototype.handleDragLeaveEvent = function(event) {\n\t// Reduce the enter count\n\tthis.dragEnterCount = (this.dragEnterCount || 0) - 1;\n\t// Remove highlighting if we're leaving externally\n\tif(this.dragEnterCount <= 0) {\n\t\t$tw.utils.removeClass(this.domNodes[0],\"tw-dragover\");\n\t}\n};\n\nDropZoneWidget.prototype.handleDropEvent = function(event) {\n\tvar self = this,\n\t\tdataTransfer = event.dataTransfer;\n\t// Reset the enter count\n\tthis.dragEnterCount = 0;\n\t// Remove highlighting\n\t$tw.utils.removeClass(this.domNodes[0],\"tw-dragover\");\n\t// Import any files in the drop\n\tvar numFiles = this.wiki.readFiles(dataTransfer.files,function(tiddlerFieldsArray) {\n\t\tself.dispatchEvent({type: \"tw-import-tiddlers\", param: JSON.stringify(tiddlerFieldsArray)});\n\t});\n\t// Try to import the various data types we understand\n\tif(numFiles === 0) {\n\t\tthis.importData(dataTransfer);\n\t}\n\t// Tell the browser that we handled the drop\n\tevent.preventDefault();\n\t// Stop the drop ripple up to any parent handlers\n\tevent.stopPropagation();\n};\n\nDropZoneWidget.prototype.importData = function(dataTransfer) {\n\t// Try each provided data type in turn\n\tfor(var t=0; t<this.importDataTypes.length; t++) {\n\t\tif(!$tw.browser.isIE || this.importDataTypes[t].IECompatible) {\n\t\t\t// Get the data\n\t\t\tvar dataType = this.importDataTypes[t];\n\t\t\t\tvar data = dataTransfer.getData(dataType.type);\n\t\t\t// Import the tiddlers in the data\n\t\t\tif(data !== \"\" && data !== null) {\n\t\t\t\tvar tiddlerFields = dataType.convertToFields(data);\n\t\t\t\tif(!tiddlerFields.title) {\n\t\t\t\t\ttiddlerFields.title = this.wiki.generateNewTitle(\"Untitled\");\n\t\t\t\t}\n\t\t\t\tthis.dispatchEvent({type: \"tw-import-tiddlers\", param: JSON.stringify([tiddlerFields])});\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t};\n};\n\nDropZoneWidget.prototype.importDataTypes = [\n\t{type: \"text/vnd.tiddler\", IECompatible: false, convertToFields: function(data) {\n\t\treturn JSON.parse(data);\n\t}},\n\t{type: \"URL\", IECompatible: true, convertToFields: function(data) {\n\t\t// Check for tiddler data URI\n\t\tvar match = decodeURI(data).match(/^data\\:text\\/vnd\\.tiddler,(.*)/i);\n\t\tif(match) {\n\t\t\treturn JSON.parse(match[1]);\n\t\t} else {\n\t\t\treturn { // As URL string\n\t\t\t\ttext: data\n\t\t\t};\n\t\t}\n\t}},\n\t{type: \"text/x-moz-url\", IECompatible: false, convertToFields: function(data) {\n\t\t// Check for tiddler data URI\n\t\tvar match = decodeURI(data).match(/^data\\:text\\/vnd\\.tiddler,(.*)/i);\n\t\tif(match) {\n\t\t\treturn JSON.parse(match[1]);\n\t\t} else {\n\t\t\treturn { // As URL string\n\t\t\t\ttext: data\n\t\t\t};\n\t\t}\n\t}},\n\t{type: \"text/plain\", IECompatible: false, convertToFields: function(data) {\n\t\treturn {\n\t\t\ttext: data\n\t\t};\n\t}},\n\t{type: \"Text\", IECompatible: true, convertToFields: function(data) {\n\t\treturn {\n\t\t\ttext: data\n\t\t};\n\t}},\n\t{type: \"text/uri-list\", IECompatible: false, convertToFields: function(data) {\n\t\treturn {\n\t\t\ttext: data\n\t\t};\n\t}}\n];\n\nDropZoneWidget.prototype.handlePasteEvent = function(event) {\n\t// Let the browser handle it if we're in a textarea or input box\n\tif([\"TEXTAREA\",\"INPUT\"].indexOf(event.target.tagName) == -1) {\n\t\tvar self = this,\n\t\t\titems = event.clipboardData.items;\n\t\t// Enumerate the clipboard items\n\t\tfor(var t = 0; t<items.length; t++) {\n\t\t\tvar item = items[t];\n\t\t\tif(item.kind === \"file\") {\n\t\t\t\t// Import any files\n\t\t\t\tthis.wiki.readFile(item.getAsFile(),function(tiddlerFieldsArray) {\n\t\t\t\t\tself.dispatchEvent({type: \"tw-import-tiddlers\", param: JSON.stringify(tiddlerFieldsArray)});\n\t\t\t\t});\n\t\t\t} else if(item.kind === \"string\") {\n\t\t\t\t// Create tiddlers from string items\n\t\t\t\titem.getAsString(function(str) {\n\t\t\t\t\tvar tiddlerFields = {\n\t\t\t\t\t\ttitle: self.wiki.generateNewTitle(\"Untitled\"),\n\t\t\t\t\t\ttext: str\n\t\t\t\t\t};\n\t\t\t\t\tself.dispatchEvent({type: \"tw-import-tiddlers\", param: JSON.stringify([tiddlerFields])});\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\t// Tell the browser that we've handled the paste\n\t\tevent.stopPropagation();\n\t\tevent.preventDefault();\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nDropZoneWidget.prototype.execute = function() {\n\t// Make child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nDropZoneWidget.prototype.refresh = function(changedTiddlers) {\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.dropzone = DropZoneWidget;\n\n})();\n",
"title": "$:/core/modules/widgets/dropzone.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/edit-bitmap.js": {
"text": "/*\\\ntitle: $:/core/modules/widgets/edit-bitmap.js\ntype: application/javascript\nmodule-type: widget\n\nEdit-bitmap widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Default image sizes\nvar DEFAULT_IMAGE_WIDTH = 300,\n\tDEFAULT_IMAGE_HEIGHT = 185;\n\n// Configuration tiddlers\nvar LINE_WIDTH_TITLE = \"$:/config/BitmapEditor/LineWidth\",\n\tLINE_COLOUR_TITLE = \"$:/config/BitmapEditor/Colour\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EditBitmapWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEditBitmapWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEditBitmapWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Create our element\n\tthis.canvasDomNode = $tw.utils.domMaker(\"canvas\",{\n\t\tdocument: this.document,\n\t\t\"class\":\"tw-edit-bitmapeditor\",\n\t\teventListeners: [{\n\t\t\tname: \"touchstart\", handlerObject: this, handlerMethod: \"handleTouchStartEvent\"\n\t\t},{\n\t\t\tname: \"touchmove\", handlerObject: this, handlerMethod: \"handleTouchMoveEvent\"\n\t\t},{\n\t\t\tname: \"touchend\", handlerObject: this, handlerMethod: \"handleTouchEndEvent\"\n\t\t},{\n\t\t\tname: \"mousedown\", handlerObject: this, handlerMethod: \"handleMouseDownEvent\"\n\t\t},{\n\t\t\tname: \"mousemove\", handlerObject: this, handlerMethod: \"handleMouseMoveEvent\"\n\t\t},{\n\t\t\tname: \"mouseup\", handlerObject: this, handlerMethod: \"handleMouseUpEvent\"\n\t\t}]\n\t});\n\tthis.widthDomNode = $tw.utils.domMaker(\"input\",{\n\t\tdocument: this.document,\n\t\t\"class\":\"tw-edit-bitmapeditor-width\",\n\t\teventListeners: [{\n\t\t\tname: \"change\", handlerObject: this, handlerMethod: \"handleWidthChangeEvent\"\n\t\t}]\n\t});\n\tthis.heightDomNode = $tw.utils.domMaker(\"input\",{\n\t\tdocument: this.document,\n\t\t\"class\":\"tw-edit-bitmapeditor-height\",\n\t\teventListeners: [{\n\t\t\tname: \"change\", handlerObject: this, handlerMethod: \"handleHeightChangeEvent\"\n\t\t}]\n\t});\n\t// Insert the elements into the DOM\n\tparent.insertBefore(this.canvasDomNode,nextSibling);\n\tparent.insertBefore(this.widthDomNode,nextSibling);\n\tparent.insertBefore(this.heightDomNode,nextSibling);\n\tthis.domNodes.push(this.canvasDomNode,this.widthDomNode,this.heightDomNode);\n\t// Load the image into the canvas\n\tthis.loadCanvas();\n};\n\n/*\nCompute the internal state of the widget\n*/\nEditBitmapWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.editTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n};\n\n/*\nNote that the bitmap editor intentionally doesn't try to refresh itself because it would be confusing to have the image changing spontaneously while editting it\n*/\nEditBitmapWidget.prototype.refresh = function(changedTiddlers) {\n\treturn false;\n};\n\nEditBitmapWidget.prototype.loadCanvas = function() {\n\tvar tiddler = this.wiki.getTiddler(this.editTitle),\n\t\tcurrImage = new Image();\n\t// Set up event handlers for loading the image\n\tvar self = this;\n\tcurrImage.onload = function() {\n\t\t// Copy the image to the on-screen canvas\n\t\tself.initCanvas(self.canvasDomNode,currImage.width,currImage.height,currImage);\n\t\t// And also copy the current bitmap to the off-screen canvas\n\t\tself.currCanvas = self.document.createElement(\"canvas\");\n\t\tself.initCanvas(self.currCanvas,currImage.width,currImage.height,currImage);\n\t\t// Set the width and height input boxes\n\t\tself.updateSize();\n\t};\n\tcurrImage.onerror = function() {\n\t\t// Set the on-screen canvas size and clear it\n\t\tself.initCanvas(self.canvasDomNode,DEFAULT_IMAGE_WIDTH,DEFAULT_IMAGE_HEIGHT);\n\t\t// Set the off-screen canvas size and clear it\n\t\tself.currCanvas = self.document.createElement(\"canvas\");\n\t\tself.initCanvas(self.currCanvas,DEFAULT_IMAGE_WIDTH,DEFAULT_IMAGE_HEIGHT);\n\t\t// Set the width and height input boxes\n\t\tself.updateSize();\n\t}\n\t// Get the current bitmap into an image object\n\tcurrImage.src = \"data:\" + tiddler.fields.type + \";base64,\" + tiddler.fields.text;\n};\n\nEditBitmapWidget.prototype.initCanvas = function(canvas,width,height,image) {\n\tcanvas.width = width;\n\tcanvas.height = height;\n\tvar ctx = canvas.getContext(\"2d\");\n\tif(image) {\n\t\tctx.drawImage(image,0,0);\n\t} else {\n\t\tctx.fillStyle = \"#fff\";\n\t\tctx.fillRect(0,0,canvas.width,canvas.height);\n\t}\n}\n\n/*\n** Update the input boxes with the actual size of the canvas\n*/\nEditBitmapWidget.prototype.updateSize = function() {\n\tthis.widthDomNode.value = this.currCanvas.width;\n\tthis.heightDomNode.value = this.currCanvas.height;\n};\n\n/*\n** Change the size of the canvas, preserving the current image\n*/\nEditBitmapWidget.prototype.changeCanvasSize = function(newWidth,newHeight) {\n\t// Create and size a new canvas\n\tvar newCanvas = this.document.createElement(\"canvas\");\n\tthis.initCanvas(newCanvas,newWidth,newHeight);\n\t// Copy the old image\n\tvar ctx = newCanvas.getContext(\"2d\");\n\tctx.drawImage(this.currCanvas,0,0);\n\t// Set the new canvas as the current one\n\tthis.currCanvas = newCanvas;\n\t// Set the size of the onscreen canvas\n\tthis.canvasDomNode.width = newWidth;\n\tthis.canvasDomNode.height = newHeight;\n\t// Paint the onscreen canvas with the offscreen canvas\n\tctx = this.canvasDomNode.getContext(\"2d\");\n\tctx.drawImage(this.currCanvas,0,0);\n};\n\nEditBitmapWidget.prototype.handleWidthChangeEvent = function(event) {\n\t// Get the new width\n\tvar newWidth = parseInt(this.widthDomNode.value,10);\n\t// Update if necessary\n\tif(newWidth > 0 && newWidth !== this.currCanvas.width) {\n\t\tthis.changeCanvasSize(newWidth,this.currCanvas.height);\n\t}\n\t// Update the input controls\n\tthis.updateSize();\n};\n\nEditBitmapWidget.prototype.handleHeightChangeEvent = function(event) {\n\t// Get the new width\n\tvar newHeight = parseInt(this.heightDomNode.value,10);\n\t// Update if necessary\n\tif(newHeight > 0 && newHeight !== this.currCanvas.height) {\n\t\tthis.changeCanvasSize(this.currCanvas.width,newHeight);\n\t}\n\t// Update the input controls\n\tthis.updateSize();\n};\n\nEditBitmapWidget.prototype.handleTouchStartEvent = function(event) {\n\tthis.brushDown = true;\n\tthis.strokeStart(event.touches[0].clientX,event.touches[0].clientY);\n\tevent.preventDefault();\n\tevent.stopPropagation();\n\treturn false;\n};\n\nEditBitmapWidget.prototype.handleTouchMoveEvent = function(event) {\n\tif(this.brushDown) {\n\t\tthis.strokeMove(event.touches[0].clientX,event.touches[0].clientY);\n\t}\n\tevent.preventDefault();\n\tevent.stopPropagation();\n\treturn false;\n};\n\nEditBitmapWidget.prototype.handleTouchEndEvent = function(event) {\n\tif(this.brushDown) {\n\t\tthis.brushDown = false;\n\t\tthis.strokeEnd();\n\t}\n\tevent.preventDefault();\n\tevent.stopPropagation();\n\treturn false;\n};\n\nEditBitmapWidget.prototype.handleMouseDownEvent = function(event) {\n\tthis.strokeStart(event.clientX,event.clientY);\n\tthis.brushDown = true;\n\tevent.preventDefault();\n\tevent.stopPropagation();\n\treturn false;\n};\n\nEditBitmapWidget.prototype.handleMouseMoveEvent = function(event) {\n\tif(this.brushDown) {\n\t\tthis.strokeMove(event.clientX,event.clientY);\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\treturn false;\n\t}\n\treturn true;\n};\n\nEditBitmapWidget.prototype.handleMouseUpEvent = function(event) {\n\tif(this.brushDown) {\n\t\tthis.brushDown = false;\n\t\tthis.strokeEnd();\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\treturn false;\n\t}\n\treturn true;\n};\n\nEditBitmapWidget.prototype.adjustCoordinates = function(x,y) {\n\tvar canvasRect = this.canvasDomNode.getBoundingClientRect(),\n\t\tscale = this.canvasDomNode.width/canvasRect.width;\n\treturn {x: (x - canvasRect.left) * scale, y: (y - canvasRect.top) * scale};\n};\n\nEditBitmapWidget.prototype.strokeStart = function(x,y) {\n\t// Start off a new stroke\n\tthis.stroke = [this.adjustCoordinates(x,y)];\n};\n\nEditBitmapWidget.prototype.strokeMove = function(x,y) {\n\tvar ctx = this.canvasDomNode.getContext(\"2d\"),\n\t\tt;\n\t// Add the new position to the end of the stroke\n\tthis.stroke.push(this.adjustCoordinates(x,y));\n\t// Redraw the previous image\n\tctx.drawImage(this.currCanvas,0,0);\n\t// Render the stroke\n\tctx.strokeStyle = this.wiki.getTiddlerText(LINE_COLOUR_TITLE,\"#ff0\");\n\tctx.lineWidth = parseInt(this.wiki.getTiddlerText(LINE_WIDTH_TITLE,\"3\"),10);\n\tctx.lineCap = \"round\";\n\tctx.lineJoin = \"round\";\n\tctx.beginPath();\n\tctx.moveTo(this.stroke[0].x,this.stroke[0].y);\n\tfor(t=1; t<this.stroke.length-1; t++) {\n\t\tvar s1 = this.stroke[t],\n\t\t\ts2 = this.stroke[t-1],\n\t\t\ttx = (s1.x + s2.x)/2,\n\t\t\tty = (s1.y + s2.y)/2;\n\t\tctx.quadraticCurveTo(s2.x,s2.y,tx,ty);\n\t}\n\tctx.stroke();\n};\n\nEditBitmapWidget.prototype.strokeEnd = function() {\n\t// Copy the bitmap to the off-screen canvas\n\tvar ctx = this.currCanvas.getContext(\"2d\");\n\tctx.drawImage(this.canvasDomNode,0,0);\n\t// Save the image into the tiddler\n\tthis.saveChanges();\n};\n\nEditBitmapWidget.prototype.saveChanges = function() {\n\tvar tiddler = this.wiki.getTiddler(this.editTitle);\n\tif(tiddler) {\n\t\t// data URIs look like \"data:<type>;base64,<text>\"\n\t\tvar dataURL = this.canvasDomNode.toDataURL(tiddler.fields.type,1.0),\n\t\t\tposColon = dataURL.indexOf(\":\"),\n\t\t\tposSemiColon = dataURL.indexOf(\";\"),\n\t\t\tposComma = dataURL.indexOf(\",\"),\n\t\t\ttype = dataURL.substring(posColon+1,posSemiColon),\n\t\t\ttext = dataURL.substring(posComma+1);\n\t\tvar update = {type: type, text: text};\n\t\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,update));\n\t}\n};\n\nexports[\"edit-bitmap\"] = EditBitmapWidget;\n\n})();\n",
"title": "$:/core/modules/widgets/edit-bitmap.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/edit-text.js": {
"text": "/*\\\ntitle: $:/core/modules/widgets/edit-text.js\ntype: application/javascript\nmodule-type: widget\n\nEdit-text widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar MIN_TEXT_AREA_HEIGHT = 100; // Minimum height of textareas in pixels\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EditTextWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEditTextWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEditTextWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Create our element\n\tvar editInfo = this.getEditInfo();\n\tvar domNode = this.document.createElement(this.editTag);\n\tif(this.editType) {\n\t\tdomNode.setAttribute(\"type\",this.editType);\n\t}\n\tif(editInfo.value === \"\" && this.editPlaceholder) {\n\t\tdomNode.setAttribute(\"placeholder\",this.editPlaceholder);\n\t}\n\t// Assign classes\n\tif(this.editClass) {\n\t\tdomNode.className = this.editClass;\n\t}\n\t// Set the text\n\tif(this.editTag === \"textarea\") {\n\t\tdomNode.appendChild(this.document.createTextNode(editInfo.value));\n\t} else {\n\t\tdomNode.value = editInfo.value;\n\t}\n\t// Add an input event handler\n\t$tw.utils.addEventListeners(domNode,[\n\t\t{name: \"focus\", handlerObject: this, handlerMethod: \"handleFocusEvent\"},\n\t\t{name: \"input\", handlerObject: this, handlerMethod: \"handleInputEvent\"}\n\t]);\n\t// Insert the element into the DOM\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.domNodes.push(domNode);\n\tif(this.postRender) {\n\t\tthis.postRender();\n\t}\n\t// Fix height\n\tthis.fixHeight();\n};\n\n/*\nGet the tiddler being edited and current value\n*/\nEditTextWidget.prototype.getEditInfo = function() {\n\t// Get the edit value\n\tvar self = this,\n\t\tvalue,\n\t\tupdate;\n\tif(this.editIndex) {\n\t\tvalue = this.wiki.extractTiddlerDataItem(this.editTitle,this.editIndex,this.editDefault);\n\t\tupdate = function(value) {\n\t\t\tvar data = self.wiki.getTiddlerData(self.editTitle,{});\n\t\t\tif(data[self.editIndex] !== value) {\n\t\t\t\tdata[self.editIndex] = value;\n\t\t\t\tself.wiki.setTiddlerData(self.editTitle,data);\n\t\t\t}\n\t\t};\n\t} else {\n\t\t// Get the current tiddler and the field name\n\t\tvar tiddler = this.wiki.getTiddler(this.editTitle);\n\t\tif(tiddler) {\n\t\t\t// If we've got a tiddler, the value to display is the field string value\n\t\t\tvalue = tiddler.getFieldString(this.editField);\n\t\t} else {\n\t\t\t// Otherwise, we need to construct a default value for the editor\n\t\t\tswitch(this.editField) {\n\t\t\t\tcase \"text\":\n\t\t\t\t\tvalue = \"Type the text for the tiddler '\" + this.editTitle + \"'\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"title\":\n\t\t\t\t\tvalue = this.editTitle;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tvalue = \"\";\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif(this.editDefault !== undefined) {\n\t\t\t\tvalue = this.editDefault;\n\t\t\t}\n\t\t}\n\t\tupdate = function(value) {\n\t\t\tvar tiddler = self.wiki.getTiddler(self.editTitle),\n\t\t\t\tupdateFields = {\n\t\t\t\t\ttitle: self.editTitle\n\t\t\t\t};\n\t\t\tupdateFields[self.editField] = value;\n\t\t\tself.wiki.addTiddler(new $tw.Tiddler(self.wiki.getCreationFields(),tiddler,updateFields,self.wiki.getModificationFields()));\n\t\t};\n\t}\n\treturn {value: value, update: update};\n};\n\n/*\nCompute the internal state of the widget\n*/\nEditTextWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.editTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.editField = this.getAttribute(\"field\",\"text\");\n\tthis.editIndex = this.getAttribute(\"index\");\n\tthis.editDefault = this.getAttribute(\"default\");\n\tthis.editClass = this.getAttribute(\"class\");\n\tthis.editPlaceholder = this.getAttribute(\"placeholder\");\n\tthis.editFocusPopup = this.getAttribute(\"focusPopup\");\n\t// Get the editor element tag and type\n\tvar tag,type;\n\tif(this.editField === \"text\") {\n\t\ttag = \"textarea\";\n\t} else {\n\t\ttag = \"input\";\n\t\tvar fieldModule = $tw.Tiddler.fieldModules[this.editField];\n\t\tif(fieldModule && fieldModule.editTag) {\n\t\t\ttag = fieldModule.editTag;\n\t\t}\n\t\tif(fieldModule && fieldModule.editType) {\n\t\t\ttype = fieldModule.editType;\n\t\t}\n\t\ttype = type || \"text\";\n\t}\n\t// Get the rest of our parameters\n\tthis.editTag = this.getAttribute(\"tag\",tag);\n\tthis.editType = this.getAttribute(\"type\",type);\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nEditTextWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\t// Completely rerender if any of our attributes have changed\n\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else if(changedTiddlers[this.editTitle]) {\n\t\tthis.updateEditor(this.getEditInfo().value);\n\t\treturn true;\n\t}\n\treturn false;\n};\n\n/*\nUpdate the editor with new text. This method is separate from updateEditorDomNode()\nso that subclasses can override updateEditor() and still use updateEditorDomNode()\n*/\nEditTextWidget.prototype.updateEditor = function(text) {\n\tthis.updateEditorDomNode(text);\n};\n\n/*\nUpdate the editor dom node with new text\n*/\nEditTextWidget.prototype.updateEditorDomNode = function(text) {\n\t// Replace the edit value if the tiddler we're editing has changed\n\tvar domNode = this.domNodes[0];\n\tif(!domNode.isTiddlyWikiFakeDom) {\n\t\tif(this.document.activeElement !== domNode) {\n\t\t\tdomNode.value = text;\n\t\t}\n\t\t// Fix the height if needed\n\t\tthis.fixHeight();\n\t}\n};\n\n/*\nFix the height of textareas to fit their content\n*/\nEditTextWidget.prototype.fixHeight = function() {\n\tvar self = this,\n\t\tdomNode = this.domNodes[0];\n\tif(domNode && !domNode.isTiddlyWikiFakeDom && this.editTag === \"textarea\") {\n\t\t$tw.utils.nextTick(function() {\n\t\t\t// Resize the textarea to fit its content, preserving scroll position\n\t\t\tvar scrollPosition = $tw.utils.getScrollPosition(),\n\t\t\t\tscrollTop = scrollPosition.y;\n\t\t\t// Set its height to auto so that it snaps to the correct height\n\t\t\tdomNode.style.height = \"auto\";\n\t\t\t// Calculate the revised height\n\t\t\tvar newHeight = Math.max(domNode.scrollHeight + domNode.offsetHeight - domNode.clientHeight,MIN_TEXT_AREA_HEIGHT);\n\t\t\t// Only try to change the height if it has changed\n\t\t\tif(newHeight !== domNode.offsetHeight) {\n\t\t\t\tdomNode.style.height = newHeight + \"px\";\n\t\t\t\t// Make sure that the dimensions of the textarea are recalculated\n\t\t\t\t$tw.utils.forceLayout(domNode);\n\t\t\t\t// Check that the scroll position is still visible before trying to scroll back to it\n\t\t\t\tscrollTop = Math.min(scrollTop,self.document.body.scrollHeight - window.innerHeight);\n\t\t\t\twindow.scrollTo(scrollPosition.x,scrollTop);\n\t\t\t}\n\t\t});\n\t}\n};\n\n/*\nHandle a dom \"input\" event\n*/\nEditTextWidget.prototype.handleInputEvent = function(event) {\n\tthis.saveChanges(this.domNodes[0].value);\n\tthis.fixHeight();\n\treturn true;\n};\n\nEditTextWidget.prototype.handleFocusEvent = function(event) {\n\tif(this.editFocusPopup) {\n\t\t$tw.popup.triggerPopup({\n\t\t\tdomNode: this.domNodes[0],\n\t\t\ttitle: this.editFocusPopup,\n\t\t\twiki: this.wiki,\n\t\t\tforce: true\n\t\t});\n\t}\n\treturn true;\n};\n\nEditTextWidget.prototype.saveChanges = function(text) {\n\tvar editInfo = this.getEditInfo();\n\tif(text !== editInfo.value) {\n\t\teditInfo.update(text);\n\t}\n};\n\nexports[\"edit-text\"] = EditTextWidget;\n\n})();\n",
"title": "$:/core/modules/widgets/edit-text.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/edit.js": {
"text": "/*\\\ntitle: $:/core/modules/widgets/edit.js\ntype: application/javascript\nmodule-type: widget\n\nEdit widget is a meta-widget chooses the appropriate actual editting widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EditWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEditWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEditWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n// Mappings from content type to editor type are stored in tiddlers with this prefix\nvar EDITOR_MAPPING_PREFIX = \"$:/config/EditorTypeMappings/\";\n\n/*\nCompute the internal state of the widget\n*/\nEditWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.editTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.editField = this.getAttribute(\"field\",\"text\");\n\tthis.editIndex = this.getAttribute(\"index\");\n\tthis.editClass = this.getAttribute(\"class\");\n\tthis.editPlaceholder = this.getAttribute(\"placeholder\");\n\t// Get the content type of the thing we're editing\n\tvar type;\n\tif(this.editField === \"text\") {\n\t\tvar tiddler = this.wiki.getTiddler(this.editTitle);\n\t\tif(tiddler) {\n\t\t\ttype = tiddler.fields.type;\n\t\t}\n\t}\n\ttype = type || \"text/vnd.tiddlywiki\";\n\t// Choose the appropriate edit widget\n\tvar editorType = this.wiki.getTiddlerText(EDITOR_MAPPING_PREFIX + type) || \"text\";\n\t// Make the child widgets\n\tthis.makeChildWidgets([{\n\t\ttype: \"edit-\" + editorType,\n\t\tattributes: {\n\t\t\ttiddler: {type: \"string\", value: this.editTitle},\n\t\t\tfield: {type: \"string\", value: this.editField},\n\t\t\tindex: {type: \"string\", value: this.editIndex},\n\t\t\t\"class\": {type: \"string\", value: this.editClass},\n\t\t\t\"placeholder\": {type: \"string\", value: this.editPlaceholder}\n\t\t}\n\t}]);\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nEditWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\nexports.edit = EditWidget;\n\n})();\n",
"title": "$:/core/modules/widgets/edit.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/element.js": {
"text": "/*\\\ntitle: $:/core/modules/widgets/element.js\ntype: application/javascript\nmodule-type: widget\n\nElement widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ElementWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nElementWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nElementWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar domNode = this.document.createElementNS(this.namespace,this.parseTreeNode.tag);\n\tthis.assignAttributes(domNode);\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nElementWidget.prototype.execute = function() {\n\t// Select the namespace for the tag\n\tvar tagNamespaces = {\n\t\t\tsvg: \"http://www.w3.org/2000/svg\",\n\t\t\tmath: \"http://www.w3.org/1998/Math/MathML\",\n\t\t\tbody: \"http://www.w3.org/1999/xhtml\"\n\t\t};\n\tthis.namespace = tagNamespaces[this.parseTreeNode.tag];\n\tif(this.namespace) {\n\t\tthis.setVariable(\"namespace\",this.namespace);\n\t} else {\n\t\tthis.namespace = this.getVariable(\"namespace\",{defaultValue: \"http://www.w3.org/1999/xhtml\"});\n\t}\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nElementWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes(),\n\t\thasChangedAttributes = $tw.utils.count(changedAttributes) > 0;\n\tif(hasChangedAttributes) {\n\t\t// Update our attributes\n\t\tthis.assignAttributes(this.domNodes[0]);\n\t}\n\treturn this.refreshChildren(changedTiddlers) || hasChangedAttributes;\n};\n\nexports.element = ElementWidget;\n\n})();\n",
"title": "$:/core/modules/widgets/element.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/encrypt.js": {
"text": "/*\\\ntitle: $:/core/modules/widgets/encrypt.js\ntype: application/javascript\nmodule-type: widget\n\nEncrypt widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EncryptWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEncryptWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEncryptWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar textNode = this.document.createTextNode(this.encryptedText);\n\tparent.insertBefore(textNode,nextSibling);\n\tthis.domNodes.push(textNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nEncryptWidget.prototype.execute = function() {\n\t// Get parameters from our attributes\n\tthis.filter = this.getAttribute(\"filter\",\"[!is[system]]\");\n\t// Encrypt the filtered tiddlers\n\tvar tiddlers = this.wiki.filterTiddlers(this.filter),\n\t\tjson = {},\n\t\tself = this;\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar tiddler = self.wiki.getTiddler(title),\n\t\t\tjsonTiddler = {};\n\t\tfor(var f in tiddler.fields) {\n\t\t\tjsonTiddler[f] = tiddler.getFieldString(f);\n\t\t}\n\t\tjson[title] = jsonTiddler;\n\t});\n\tthis.encryptedText = $tw.utils.htmlEncode($tw.crypto.encrypt(JSON.stringify(json)));\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nEncryptWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes(),\n\t\taffectedTiddlers = this.wiki.filterTiddlers(this.filter,null,changedTiddlers);\n\tif(changedAttributes.filter || affectedTiddlers.length > 0) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn false;\t\n\t}\n};\n\nexports.encrypt = EncryptWidget;\n\n})();\n",
"title": "$:/core/modules/widgets/encrypt.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/entity.js": {
"text": "/*\\\ntitle: $:/core/modules/widgets/entity.js\ntype: application/javascript\nmodule-type: widget\n\nHTML entity widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EntityWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEntityWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEntityWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.execute();\n\tvar textNode = this.document.createTextNode($tw.utils.entityDecode(this.parseTreeNode.entity));\n\tparent.insertBefore(textNode,nextSibling);\n\tthis.domNodes.push(textNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nEntityWidget.prototype.execute = function() {\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nEntityWidget.prototype.refresh = function(changedTiddlers) {\n\treturn false;\n};\n\nexports.entity = EntityWidget;\n\n})();\n",
"title": "$:/core/modules/widgets/entity.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/fieldmangler.js": {
"text": "/*\\\ntitle: $:/core/modules/widgets/fieldmangler.js\ntype: application/javascript\nmodule-type: widget\n\nField mangler widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar FieldManglerWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n\tthis.addEventListeners([\n\t\t{type: \"tw-remove-field\", handler: \"handleRemoveFieldEvent\"},\n\t\t{type: \"tw-add-field\", handler: \"handleAddFieldEvent\"},\n\t\t{type: \"tw-remove-tag\", handler: \"handleRemoveTagEvent\"},\n\t\t{type: \"tw-add-tag\", handler: \"handleAddTagEvent\"}\n\t]);\n};\n\n/*\nInherit from the base widget class\n*/\nFieldManglerWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nFieldManglerWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nFieldManglerWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.mangleTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nFieldManglerWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\nFieldManglerWidget.prototype.handleRemoveFieldEvent = function(event) {\n\tvar tiddler = this.wiki.getTiddler(this.mangleTitle),\n\t\tdeletion = {};\n\tdeletion[event.param] = undefined;\n\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,deletion));\n\treturn true;\n};\n\nFieldManglerWidget.prototype.handleAddFieldEvent = function(event) {\n\tvar tiddler = this.wiki.getTiddler(this.mangleTitle);\n\tif(tiddler && typeof event.param === \"string\") {\n\t\tvar name = event.param.toLowerCase();\n\t\tif(name !== \"\" && !$tw.utils.hop(tiddler.fields,name)) {\n\t\t\tvar addition = this.wiki.getModificationFields();\n\t\t\taddition[name] = \"\";\n\t\t\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,addition));\n\t\t}\n\t}\n\treturn true;\n};\n\nFieldManglerWidget.prototype.handleRemoveTagEvent = function(event) {\n\tvar tiddler = this.wiki.getTiddler(this.mangleTitle);\n\tif(tiddler && tiddler.fields.tags) {\n\t\tvar p = tiddler.fields.tags.indexOf(event.param);\n\t\tif(p !== -1) {\n\t\t\tvar modification = this.wiki.getModificationFields();\n\t\t\tmodification.tags = (tiddler.fields.tags || []).slice(0);\n\t\t\tmodification.tags.splice(p,1);\n\t\t\tif(modification.tags.length === 0) {\n\t\t\t\tmodification.tags = undefined;\n\t\t\t}\n\t\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,modification));\n\t\t}\n\t}\n\treturn true;\n};\n\nFieldManglerWidget.prototype.handleAddTagEvent = function(event) {\n\tvar tiddler = this.wiki.getTiddler(this.mangleTitle);\n\tif(tiddler && typeof event.param === \"string\" && event.param !== \"\") {\n\t\tvar modification = this.wiki.getModificationFields();\n\t\tmodification.tags = (tiddler.fields.tags || []).slice(0);\n\t\t$tw.utils.pushTop(modification.tags,event.param);\n\t\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,modification));\n\t}\n\treturn true;\n};\n\nexports.fieldmangler = FieldManglerWidget;\n\n})();\n",
"title": "$:/core/modules/widgets/fieldmangler.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/fields.js": {
"text": "/*\\\ntitle: $:/core/modules/widgets/fields.js\ntype: application/javascript\nmodule-type: widget\n\nFields widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar FieldsWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nFieldsWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nFieldsWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar textNode = this.document.createTextNode(this.text);\n\tparent.insertBefore(textNode,nextSibling);\n\tthis.domNodes.push(textNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nFieldsWidget.prototype.execute = function() {\n\t// Get parameters from our attributes\n\tthis.tiddlerTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.template = this.getAttribute(\"template\");\n\tthis.exclude = this.getAttribute(\"exclude\");\n\tthis.stripTitlePrefix = this.getAttribute(\"stripTitlePrefix\",\"no\") === \"yes\";\n\t// Get the value to display\n\tvar tiddler = this.wiki.getTiddler(this.tiddlerTitle);\n\t// Get the exclusion list\n\tvar exclude;\n\tif(this.exclude) {\n\t\texclude = this.exclude.split(\" \");\n\t} else {\n\t\texclude = [\"text\"]; \n\t}\n\t// Compose the template\n\tvar text = [];\n\tif(this.template && tiddler) {\n\t\tvar fields = [];\n\t\tfor(var fieldName in tiddler.fields) {\n\t\t\tif(exclude.indexOf(fieldName) === -1) {\n\t\t\t\tfields.push(fieldName);\n\t\t\t}\n\t\t}\n\t\tfields.sort();\n\t\tfor(var f=0; f<fields.length; f++) {\n\t\t\tfieldName = fields[f];\n\t\t\tif(exclude.indexOf(fieldName) === -1) {\n\t\t\t\tvar row = this.template,\n\t\t\t\t\tvalue = tiddler.getFieldString(fieldName);\n\t\t\t\tif(this.stripTitlePrefix && fieldName === \"title\") {\n\t\t\t\t\tvar reStrip = /^\\{[^\\}]+\\}(.+)/mg,\n\t\t\t\t\t\treMatch = reStrip.exec(value);\n\t\t\t\t\tif(reMatch) {\n\t\t\t\t\t\tvalue = reMatch[1];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\trow = row.replace(\"$name$\",fieldName);\n\t\t\t\trow = row.replace(\"$value$\",value);\n\t\t\t\trow = row.replace(\"$encoded_value$\",$tw.utils.htmlEncode(value));\n\t\t\t\ttext.push(row)\n\t\t\t}\n\t\t}\n\t}\n\tthis.text = text.join(\"\");\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nFieldsWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler || changedAttributes.template || changedAttributes.exclude || changedAttributes.stripTitlePrefix || changedTiddlers[this.tiddlerTitle]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn false;\t\n\t}\n};\n\nexports.fields = FieldsWidget;\n\n})();\n",
"title": "$:/core/modules/widgets/fields.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/keyboard.js": {
"text": "/*\\\ntitle: $:/core/modules/widgets/keyboard.js\ntype: application/javascript\nmodule-type: widget\n\nKeyboard shortcut widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar KeyboardWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nKeyboardWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nKeyboardWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create element\n\tvar domNode = this.document.createElement(\"div\");\n\t// Assign classes\n\tvar classes = (this[\"class\"] || \"\").split(\" \");\n\tclasses.push(\"tw-keyboard\");\n\tdomNode.className = classes.join(\" \");\n\t// Add a keyboard event handler\n\tdomNode.addEventListener(\"keydown\",function (event) {\n\t\tif(event.keyCode === self.keyInfo.keyCode && \n\t\t\tevent.shiftKey === self.keyInfo.shiftKey && \n\t\t\tevent.altKey === self.keyInfo.altKey && \n\t\t\tevent.ctrlKey === self.keyInfo.ctrlKey) {\n\t\t\tself.dispatchMessage(event);\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t},false);\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\nKeyboardWidget.prototype.dispatchMessage = function(event) {\n\tthis.dispatchEvent({type: this.message, param: this.param, tiddlerTitle: this.getVariable(\"currentTiddler\")});\n};\n\n/*\nCompute the internal state of the widget\n*/\nKeyboardWidget.prototype.execute = function() {\n\t// Get attributes\n\tthis.message = this.getAttribute(\"message\");\n\tthis.param = this.getAttribute(\"param\");\n\tthis.key = this.getAttribute(\"key\");\n\tthis.keyInfo = $tw.utils.parseKeyDescriptor(this.key);\n\tthis[\"class\"] = this.getAttribute(\"class\");\n\t// Make child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nKeyboardWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.message || changedAttributes.param || changedAttributes.key || changedAttributes[\"class\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.keyboard = KeyboardWidget;\n\n})();\n",
"title": "$:/core/modules/widgets/keyboard.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/link.js": {
"text": "/*\\\ntitle: $:/core/modules/widgets/link.js\ntype: application/javascript\nmodule-type: widget\n\nLink widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar LinkWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nLinkWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nLinkWidget.prototype.render = function(parent,nextSibling) {\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Get the value of the tw-wikilinks configuration macro\n\tvar wikiLinksMacro = this.getVariable(\"tw-wikilinks\"),\n\t\tuseWikiLinks = wikiLinksMacro ? !(wikiLinksMacro.trim() === \"no\") : true;\n\t// Render the link if required\n\tif(useWikiLinks) {\n\t\tthis.renderLink(parent,nextSibling);\n\t} else {\n\t\t// Just insert the link text\n\t\tvar domNode = this.document.createElement(\"span\");\n\t\tparent.insertBefore(domNode,nextSibling);\n\t\tthis.renderChildren(domNode,null);\n\t\tthis.domNodes.push(domNode);\n\t}\n};\n\n/*\nRender this widget into the DOM\n*/\nLinkWidget.prototype.renderLink = function(parent,nextSibling) {\n\tvar self = this;\n\t// Create our element\n\tvar domNode = this.document.createElement(\"a\");\n\t// Assign classes\n\t$tw.utils.addClass(domNode,\"tw-tiddlylink\");\n\tif(this.isShadow) {\n\t\t$tw.utils.addClass(domNode,\"tw-tiddlylink-shadow\");\n\t}\n\tif(this.isMissing && !this.isShadow) {\n\t\t$tw.utils.addClass(domNode,\"tw-tiddlylink-missing\");\n\t} else {\n\t\tif(!this.isMissing) {\n\t\t\t$tw.utils.addClass(domNode,\"tw-tiddlylink-resolves\");\n\t\t}\n\t}\n\t// Set an href\n\tvar wikiLinkTemplateMacro = this.getVariable(\"tw-wikilink-template\"),\n\t\twikiLinkTemplate = wikiLinkTemplateMacro ? wikiLinkTemplateMacro.trim() : \"#$uri_encoded$\",\n\t\twikiLinkText = wikiLinkTemplate.replace(\"$uri_encoded$\",encodeURIComponent(this.to));\n\twikiLinkText = wikiLinkText.replace(\"$uri_doubleencoded$\",encodeURIComponent(encodeURIComponent(this.to)));\n\tdomNode.setAttribute(\"href\",wikiLinkText);\n\t// Add a click event handler\n\t$tw.utils.addEventListeners(domNode,[\n\t\t{name: \"click\", handlerObject: this, handlerMethod: \"handleClickEvent\"},\n\t\t{name: \"dragstart\", handlerObject: this, handlerMethod: \"handleDragStartEvent\"},\n\t\t{name: \"dragend\", handlerObject: this, handlerMethod: \"handleDragEndEvent\"}\n\t]);\n\t// Insert the link into the DOM and render any children\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\nLinkWidget.prototype.handleClickEvent = function (event) {\n\t// Send the click on it's way as a navigate event\n\tvar bounds = this.domNodes[0].getBoundingClientRect();\n\tthis.dispatchEvent({\n\t\ttype: \"tw-navigate\",\n\t\tnavigateTo: this.to,\n\t\tnavigateFromTitle: this.getVariable(\"storyTiddler\"),\n\t\tnavigateFromNode: this,\n\t\tnavigateFromClientRect: { top: bounds.top, left: bounds.left, width: bounds.width, right: bounds.right, bottom: bounds.bottom, height: bounds.height\n\t\t},\n\t\tnavigateSuppressNavigation: event.metaKey || event.ctrlKey\n\t});\n\tevent.preventDefault();\n\tevent.stopPropagation();\n\treturn false;\n};\n\nLinkWidget.prototype.handleDragStartEvent = function(event) {\n\tif(this.to) {\n\t\t// Set the dragging class on the element being dragged\n\t\t$tw.utils.addClass(event.target,\"tw-tiddlylink-dragging\");\n\t\t// Create the drag image elements\n\t\tthis.dragImage = this.document.createElement(\"div\");\n\t\tthis.dragImage.className = \"tw-tiddler-dragger\";\n\t\tvar inner = this.document.createElement(\"div\");\n\t\tinner.className = \"tw-tiddler-dragger-inner\";\n\t\tinner.appendChild(this.document.createTextNode(this.to));\n\t\tthis.dragImage.appendChild(inner);\n\t\tthis.document.body.appendChild(this.dragImage);\n\t\t// Astoundingly, we need to cover the dragger up: http://www.kryogenix.org/code/browser/custom-drag-image.html\n\t\tvar cover = this.document.createElement(\"div\");\n\t\tcover.className = \"tw-tiddler-dragger-cover\";\n\t\tcover.style.left = (inner.offsetLeft - 16) + \"px\";\n\t\tcover.style.top = (inner.offsetTop - 16) + \"px\";\n\t\tcover.style.width = (inner.offsetWidth + 32) + \"px\";\n\t\tcover.style.height = (inner.offsetHeight + 32) + \"px\";\n\t\tthis.dragImage.appendChild(cover);\n\t\t// Set the data transfer properties\n\t\tvar dataTransfer = event.dataTransfer;\n\t\t// First the image\n\t\tdataTransfer.effectAllowed = \"copy\";\n\t\tif(dataTransfer.setDragImage) {\n\t\t\tdataTransfer.setDragImage(this.dragImage.firstChild,-16,-16);\n\t\t}\n\t\t// Then the data\n\t\tdataTransfer.clearData();\n\t\tvar jsonData = this.wiki.getTiddlerAsJson(this.to),\n\t\t\ttextData = this.wiki.getTiddlerText(this.to,\"\");\n\t\t// IE doesn't like these content types\n\t\tif(!$tw.browser.isIE) {\n\t\t\tdataTransfer.setData(\"text/vnd.tiddler\",jsonData);\n\t\t\tdataTransfer.setData(\"text/plain\",textData);\n\t\t\tdataTransfer.setData(\"text/x-moz-url\",\"data:text/vnd.tiddler,\" + encodeURI(jsonData));\n\t\t}\n\t\tdataTransfer.setData(\"URL\",\"data:text/vnd.tiddler,\" + encodeURI(jsonData));\n\t\tdataTransfer.setData(\"Text\",textData);\n\t\tevent.stopPropagation();\n\t} else {\n\t\tevent.preventDefault();\n\t}\n};\n\nLinkWidget.prototype.handleDragEndEvent = function(event) {\n\t// Remove the dragging class on the element being dragged\n\t$tw.utils.removeClass(event.target,\"tw-tiddlylink-dragging\");\n\t// Delete the drag image element\n\tif(this.dragImage) {\n\t\tthis.dragImage.parentNode.removeChild(this.dragImage);\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nLinkWidget.prototype.execute = function() {\n\t// Get the target tiddler title\n\tthis.to = this.getAttribute(\"to\",this.getVariable(\"currentTiddler\"));\n\t// Determine the link characteristics\n\tthis.isMissing = !this.wiki.tiddlerExists(this.to);\n\tthis.isShadow = this.wiki.isShadowTiddler(this.to);\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nLinkWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.to || changedTiddlers[this.to]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.link = LinkWidget;\n\n})();\n",
"title": "$:/core/modules/widgets/link.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/linkcatcher.js": {
"text": "/*\\\ntitle: $:/core/modules/widgets/linkcatcher.js\ntype: application/javascript\nmodule-type: widget\n\nLinkcatcher widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar LinkCatcherWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n\tthis.addEventListeners([\n\t\t{type: \"tw-navigate\", handler: \"handleNavigateEvent\"}\n\t]);\n};\n\n/*\nInherit from the base widget class\n*/\nLinkCatcherWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nLinkCatcherWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nLinkCatcherWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.catchTo = this.getAttribute(\"to\");\n\tthis.catchMessage = this.getAttribute(\"message\");\n\tthis.catchSet = this.getAttribute(\"set\");\n\tthis.catchSetTo = this.getAttribute(\"setTo\");\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nLinkCatcherWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.to || changedAttributes.message || changedAttributes.set || changedAttributes.setTo) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\n/*\nHandle a tw-navigate event\n*/\nLinkCatcherWidget.prototype.handleNavigateEvent = function(event) {\n\tif(this.catchTo) {\n\t\tthis.wiki.setTextReference(this.catchTo,event.navigateTo,this.getVariable(\"currentTiddler\"));\n\t}\n\tif(this.catchMessage) {\n\t\tthis.dispatchEvent({\n\t\t\ttype: this.catchMessage,\n\t\t\tparam: event.navigateTo\n\t\t});\n\t}\n\tif(this.catchSet) {\n\t\tvar tiddler = this.wiki.getTiddler(this.catchSet);\n\t\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,{title: this.catchSet, text: this.catchSetTo}));\n\t}\n\treturn false;\n};\n\nexports.linkcatcher = LinkCatcherWidget;\n\n})();\n",
"title": "$:/core/modules/widgets/linkcatcher.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/list.js": {
"text": "/*\\\ntitle: $:/core/modules/widgets/list.js\ntype: application/javascript\nmodule-type: widget\n\nList and list item widgets\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\n/*\nThe list widget creates list element sub-widgets that reach back into the list widget for their configuration\n*/\n\nvar ListWidget = function(parseTreeNode,options) {\n\t// Initialise the storyviews if they've not been done already\n\tif(!this.storyViews) {\n\t\tListWidget.prototype.storyViews = {};\n\t\t$tw.modules.applyMethods(\"storyview\",this.storyViews);\n\t}\n\t// Main initialisation inherited from widget.js\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nListWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nListWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n\t// Construct the storyview\n\tvar StoryView = this.storyViews[this.storyViewName];\n\tthis.storyview = StoryView ? new StoryView(this) : null;\n};\n\n/*\nCompute the internal state of the widget\n*/\nListWidget.prototype.execute = function() {\n\t// Get our attributes\n\tthis.template = this.getAttribute(\"template\");\n\tthis.editTemplate = this.getAttribute(\"editTemplate\");\n\tthis.variableName = this.getAttribute(\"variable\",\"currentTiddler\");\n\tthis.storyViewName = this.getAttribute(\"storyview\");\n\tthis.historyTitle = this.getAttribute(\"history\");\n\t// Compose the list elements\n\tthis.list = this.getTiddlerList();\n\tvar members = [],\n\t\tself = this;\n\t// Check for an empty list\n\tif(this.list.length === 0) {\n\t\tmembers = this.getEmptyMessage();\n\t} else {\n\t\t$tw.utils.each(this.list,function(title,index) {\n\t\t\tmembers.push(self.makeItemTemplate(title));\n\t\t});\n\t}\n\t// Construct the child widgets\n\tthis.makeChildWidgets(members);\n\t// Clear the last history\n\tthis.history = [];\n};\n\nListWidget.prototype.getTiddlerList = function() {\n\tvar defaultFilter = \"[!is[system]sort[title]]\";\n\treturn this.wiki.filterTiddlers(this.getAttribute(\"filter\",defaultFilter),this.getVariable(\"currentTiddler\"));\n};\n\nListWidget.prototype.getEmptyMessage = function() {\n\tvar emptyMessage = this.getAttribute(\"emptyMessage\",\"\"),\n\t\tparser = this.wiki.parseText(\"text/vnd.tiddlywiki\",emptyMessage,{parseAsInline: true});\n\tif(parser) {\n\t\treturn parser.tree;\n\t} else {\n\t\treturn [];\n\t}\n};\n\n/*\nCompose the template for a list item\n*/\nListWidget.prototype.makeItemTemplate = function(title) {\n\t// Check if the tiddler is a draft\n\tvar tiddler = this.wiki.getTiddler(title),\n\t\tisDraft = tiddler && tiddler.hasField(\"draft.of\"),\n\t\ttemplate = this.template,\n\t\ttemplateTree;\n\tif(isDraft && this.editTemplate) {\n\t\ttemplate = this.editTemplate;\n\t}\n\t// Compose the transclusion of the template\n\tif(template) {\n\t\ttemplateTree = [{type: \"transclude\", attributes: {tiddler: {type: \"string\", value: template}}}];\n\t} else {\n\t\tif(this.parseTreeNode.children && this.parseTreeNode.children.length > 0) {\n\t\t\ttemplateTree = this.parseTreeNode.children;\n\t\t} else {\n\t\t\t// Default template is a link to the title\n\t\t\ttemplateTree = [{type: \"element\", tag: this.parseTreeNode.isBlock ? \"div\" : \"span\", children: [{type: \"link\", attributes: {to: {type: \"string\", value: title}}, children: [\n\t\t\t\t\t{type: \"text\", text: title}\n\t\t\t]}]}];\n\t\t}\n\t}\n\t// Return the list item\n\treturn {type: \"listitem\", itemTitle: title, variableName: this.variableName, children: templateTree};\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nListWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\t// Completely refresh if any of our attributes have changed\n\tif(changedAttributes.filter || changedAttributes.template || changedAttributes.editTemplate || changedAttributes.emptyMessage || changedAttributes.storyview || changedAttributes.history) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\t// Handle any changes to the list\n\t\tvar hasChanged = this.handleListChanges(changedTiddlers);\n\t\t// Handle any changes to the history stack\n\t\tif(this.historyTitle && changedTiddlers[this.historyTitle]) {\n\t\t\tthis.handleHistoryChanges();\n\t\t}\n\t\treturn hasChanged;\n\t}\n};\n\n/*\nHandle any changes to the history list\n*/\nListWidget.prototype.handleHistoryChanges = function() {\n\t// Get the history data\n\tvar newHistory = this.wiki.getTiddlerData(this.historyTitle,[]);\n\t// Ignore any entries of the history that match the previous history\n\tvar entry = 0;\n\twhile(entry < newHistory.length && entry < this.history.length && newHistory[entry].title === this.history[entry].title) {\n\t\tentry++;\n\t}\n\t// Navigate forwards to each of the new tiddlers\n\twhile(entry < newHistory.length) {\n\t\tif(this.storyview && this.storyview.navigateTo) {\n\t\t\tthis.storyview.navigateTo(newHistory[entry]);\n\t\t}\n\t\tentry++;\n\t}\n\t// Update the history\n\tthis.history = newHistory;\n};\n\n/*\nProcess any changes to the list\n*/\nListWidget.prototype.handleListChanges = function(changedTiddlers) {\n\t// Get the new list\n\tvar prevList = this.list;\n\tthis.list = this.getTiddlerList();\n\t// Check for an empty list\n\tif(this.list.length === 0) {\n\t\t// Check if it was empty before\n\t\tif(prevList.length === 0) {\n\t\t\t// If so, just refresh the empty message\n\t\t\treturn this.refreshChildren(changedTiddlers);\n\t\t} else {\n\t\t\t// Replace the previous content with the empty message\n\t\t\tfor(t=this.children.length-1; t>=0; t--) {\n\t\t\t\tthis.removeListItem(t);\n\t\t\t}\n\t\t\tvar nextSibling = this.findNextSiblingDomNode();\n\t\t\tthis.makeChildWidgets(this.getEmptyMessage());\n\t\t\tthis.renderChildren(this.parentDomNode,nextSibling);\n\t\t\treturn true;\n\t\t}\n\t} else {\n\t\t// If the list was empty then we need to remove the empty message\n\t\tif(prevList.length === 0) {\n\t\t\tthis.removeChildDomNodes();\n\t\t\tthis.children = [];\n\t\t}\n\t\t// Cycle through the list, inserting and removing list items as needed\n\t\tvar hasRefreshed = false;\n\t\tfor(var t=0; t<this.list.length; t++) {\n\t\t\tvar index = this.findListItem(t,this.list[t]);\n\t\t\tif(index === undefined) {\n\t\t\t\t// The list item must be inserted\n\t\t\t\tthis.insertListItem(t,this.list[t]);\n\t\t\t\thasRefreshed = true;\n\t\t\t} else {\n\t\t\t\t// There are intervening list items that must be removed\n\t\t\t\tfor(var n=index-1; n>=t; n--) {\n\t\t\t\t\tthis.removeListItem(n);\n\t\t\t\t\thasRefreshed = true;\n\t\t\t\t}\n\t\t\t\t// Refresh the item we're reusing\n\t\t\t\tvar refreshed = this.children[t].refresh(changedTiddlers);\n\t\t\t\thasRefreshed = hasRefreshed || refreshed;\n\t\t\t}\n\t\t}\n\t\t// Remove any left over items\n\t\tfor(t=this.children.length-1; t>=this.list.length; t--) {\n\t\t\tthis.removeListItem(t);\n\t\t\thasRefreshed = true;\n\t\t}\n\t\treturn hasRefreshed;\n\t}\n};\n\n/*\nFind the list item with a given title, starting from a specified position\n*/\nListWidget.prototype.findListItem = function(startIndex,title) {\n\twhile(startIndex < this.children.length) {\n\t\tif(this.children[startIndex].parseTreeNode.itemTitle === title) {\n\t\t\treturn startIndex;\n\t\t}\n\t\tstartIndex++;\n\t}\n\treturn undefined;\n};\n\n/*\nInsert a new list item at the specified index\n*/\nListWidget.prototype.insertListItem = function(index,title) {\n\t// Create, insert and render the new child widgets\n\tvar widget = this.makeChildWidget(this.makeItemTemplate(title));\n\twidget.parentDomNode = this.parentDomNode; // Hack to enable findNextSiblingDomNode() to work\n\tthis.children.splice(index,0,widget);\n\tvar nextSibling = widget.findNextSiblingDomNode();\n\twidget.render(this.parentDomNode,nextSibling);\n\t// Animate the insertion if required\n\tif(this.storyview && this.storyview.insert) {\n\t\tthis.storyview.insert(widget);\n\t}\n\treturn true;\n};\n\n/*\nRemove the specified list item\n*/\nListWidget.prototype.removeListItem = function(index) {\n\tvar widget = this.children[index];\n\t// Animate the removal if required\n\tif(this.storyview && this.storyview.remove) {\n\t\tthis.storyview.remove(widget);\n\t} else {\n\t\twidget.removeChildDomNodes();\n\t}\n\t// Remove the child widget\n\tthis.children.splice(index,1);\n};\n\nexports.list = ListWidget;\n\nvar ListItemWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nListItemWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nListItemWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nListItemWidget.prototype.execute = function() {\n\t// Set the current list item title\n\tthis.setVariable(this.parseTreeNode.variableName,this.parseTreeNode.itemTitle);\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nListItemWidget.prototype.refresh = function(changedTiddlers) {\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.listitem = ListItemWidget;\n\n})();\n",
"title": "$:/core/modules/widgets/list.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/macrocall.js": {
"text": "/*\\\ntitle: $:/core/modules/widgets/macrocall.js\ntype: application/javascript\nmodule-type: widget\n\nMacrocall widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar MacroCallWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nMacroCallWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nMacroCallWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nMacroCallWidget.prototype.execute = function() {\n\t// Get the parse type if specified\n\tthis.parseType = this.getAttribute(\"$type\",\"text/vnd.tiddlywiki\");\n\tthis.renderOutput = this.getAttribute(\"$output\",\"text/html\");\n\t// Merge together the parameters specified in the parse tree with the specified attributes\n\tvar params = this.parseTreeNode.params ? this.parseTreeNode.params.slice(0) : [];\n\t$tw.utils.each(this.attributes,function(attribute,name) {\n\t\tif(name.charAt(0) !== \"$\") {\n\t\t\tparams.push({name: name, value: attribute});\t\t\t\n\t\t}\n\t});\n\t// Get the macro value\n\tvar text = this.getVariable(this.parseTreeNode.name || this.getAttribute(\"$name\"),{params: params}),\n\t\tparseTreeNodes;\n\t// Are we rendering to HTML?\n\tif(this.renderOutput === \"text/html\") {\n\t\t// If so we'll return the parsed macro\n\t\tvar parser = this.wiki.parseText(this.parseType,text,\n\t\t\t\t\t\t\t{parseAsInline: !this.parseTreeNode.isBlock});\n\t\tparseTreeNodes = parser ? parser.tree : [];\n\t} else {\n\t\t// Otherwise, we'll render the text\n\t\tvar plainText = this.wiki.renderText(\"text/plain\",this.parseType,text,{parentWidget: this});\n\t\tparseTreeNodes = [{type: \"text\", text: plainText}];\n\t}\n\t// Construct the child widgets\n\tthis.makeChildWidgets(parseTreeNodes);\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nMacroCallWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif($tw.utils.count(changedAttributes) > 0) {\n\t\t// Rerender ourselves\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports.macrocall = MacroCallWidget;\n\n})();\n",
"title": "$:/core/modules/widgets/macrocall.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/navigator.js": {
"text": "/*\\\ntitle: $:/core/modules/widgets/navigator.js\ntype: application/javascript\nmodule-type: widget\n\nNavigator widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar NavigatorWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n\tthis.addEventListeners([\n\t\t{type: \"tw-navigate\", handler: \"handleNavigateEvent\"},\n\t\t{type: \"tw-edit-tiddler\", handler: \"handleEditTiddlerEvent\"},\n\t\t{type: \"tw-delete-tiddler\", handler: \"handleDeleteTiddlerEvent\"},\n\t\t{type: \"tw-save-tiddler\", handler: \"handleSaveTiddlerEvent\"},\n\t\t{type: \"tw-cancel-tiddler\", handler: \"handleCancelTiddlerEvent\"},\n\t\t{type: \"tw-close-tiddler\", handler: \"handleCloseTiddlerEvent\"},\n\t\t{type: \"tw-close-all-tiddlers\", handler: \"handleCloseAllTiddlersEvent\"},\n\t\t{type: \"tw-close-other-tiddlers\", handler: \"handleCloseOtherTiddlersEvent\"},\n\t\t{type: \"tw-new-tiddler\", handler: \"handleNewTiddlerEvent\"},\n\t\t{type: \"tw-import-tiddlers\", handler: \"handleImportTiddlersEvent\"},\n\t]);\n};\n\n/*\nInherit from the base widget class\n*/\nNavigatorWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nNavigatorWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nNavigatorWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.storyTitle = this.getAttribute(\"story\");\n\tthis.historyTitle = this.getAttribute(\"history\");\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nNavigatorWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.story || changedAttributes.history) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\nNavigatorWidget.prototype.getStoryList = function() {\n\treturn this.storyTitle ? this.wiki.getTiddlerList(this.storyTitle) : null;\n};\n\nNavigatorWidget.prototype.saveStoryList = function(storyList) {\n\tvar storyTiddler = this.wiki.getTiddler(this.storyTitle);\n\tthis.wiki.addTiddler(new $tw.Tiddler(\n\t\t{title: this.storyTitle},\n\t\tstoryTiddler,\n\t\t{list: storyList}\n\t));\n};\n\nNavigatorWidget.prototype.findTitleInStory = function(storyList,title,defaultIndex) {\n\tvar p = storyList.indexOf(title);\n\treturn p === -1 ? defaultIndex : p;\n};\n\nNavigatorWidget.prototype.removeTitleFromStory = function(storyList,title) {\n\tvar p = storyList.indexOf(title);\n\twhile(p !== -1) {\n\t\tstoryList.splice(p,1);\n\t\tp = storyList.indexOf(title);\n\t}\n};\n\nNavigatorWidget.prototype.replaceFirstTitleInStory = function(storyList,oldTitle,newTitle) {\n\tvar pos = storyList.indexOf(oldTitle);\n\tif(pos !== -1) {\n\t\tstoryList[pos] = newTitle;\n\t\tdo {\n\t\t\tpos = storyList.indexOf(oldTitle,pos + 1);\n\t\t\tif(pos !== -1) {\n\t\t\t\tstoryList.splice(pos,1);\n\t\t\t}\n\t\t} while(pos !== -1);\n\t} else {\n\t\tstoryList.splice(0,0,newTitle);\n\t}\n};\n\nNavigatorWidget.prototype.addToStory = function(title,fromTitle) {\n\tvar storyList = this.getStoryList();\n\tif(storyList) {\n\t\t// See if the tiddler is already there\n\t\tvar slot = this.findTitleInStory(storyList,title,-1);\n\t\t// If not we need to add it\n\t\tif(slot === -1) {\n\t\t\t// First we try to find the position of the story element we navigated from\n\t\t\tslot = this.findTitleInStory(storyList,fromTitle,-1) + 1;\n\t\t\t// Add the tiddler\n\t\t\tstoryList.splice(slot,0,title);\n\t\t\t// Save the story\n\t\t\tthis.saveStoryList(storyList);\n\t\t}\n\t}\n};\n\n/*\nAdd a new record to the top of the history stack\ntitle: a title string or an array of title strings\nfromPageRect: page coordinates of the origin of the navigation\n*/\nNavigatorWidget.prototype.addToHistory = function(title,fromPageRect) {\n\tvar titles = $tw.utils.isArray(title) ? title : [title];\n\t// Add a new record to the top of the history stack\n\tif(this.historyTitle) {\n\t\tvar historyList = this.wiki.getTiddlerData(this.historyTitle,[]);\n\t\t$tw.utils.each(titles,function(title) {\n\t\t\thistoryList.push({title: title, fromPageRect: fromPageRect});\n\t\t});\n\t\tthis.wiki.setTiddlerData(this.historyTitle,historyList,{\"current-tiddler\": titles[titles.length-1]});\n\t\tthis.wiki.addTiddler(new $tw.Tiddler());\n\t}\n};\n\n/*\nHandle a tw-navigate event\n*/\nNavigatorWidget.prototype.handleNavigateEvent = function(event) {\n\tthis.addToStory(event.navigateTo,event.navigateFromTitle);\n\tif(!event.navigateSuppressNavigation) {\n\t\tthis.addToHistory(event.navigateTo,event.navigateFromClientRect);\n\t}\n\treturn false;\n};\n\n// Close a specified tiddler\nNavigatorWidget.prototype.handleCloseTiddlerEvent = function(event) {\n\tvar title = event.param || event.tiddlerTitle,\n\t\tstoryList = this.getStoryList();\n\t// Look for tiddlers with this title to close\n\tthis.removeTitleFromStory(storyList,title);\n\tthis.saveStoryList(storyList);\n\treturn false;\n};\n\n// Close all tiddlers\nNavigatorWidget.prototype.handleCloseAllTiddlersEvent = function(event) {\n\tthis.saveStoryList([]);\n\treturn false;\n};\n\n// Close other tiddlers\nNavigatorWidget.prototype.handleCloseOtherTiddlersEvent = function(event) {\n\tvar title = event.param || event.tiddlerTitle;\n\tthis.saveStoryList([title]);\n\treturn false;\n};\n\n// Place a tiddler in edit mode\nNavigatorWidget.prototype.handleEditTiddlerEvent = function(event) {\n\t// Replace the specified tiddler with a draft in edit mode\n\tvar title = event.param || event.tiddlerTitle,\n\t\tdraftTiddler = this.makeDraftTiddler(title),\n\t\tdraftTitle = draftTiddler.fields.title,\n\t\tstoryList = this.getStoryList();\n\tthis.removeTitleFromStory(storyList,draftTitle);\n\tthis.replaceFirstTitleInStory(storyList,title,draftTitle);\n\tthis.addToHistory(draftTitle,event.navigateFromClientRect);\n\tthis.saveStoryList(storyList);\n\treturn false;\n};\n\n// Delete a tiddler\nNavigatorWidget.prototype.handleDeleteTiddlerEvent = function(event) {\n\t// Get the tiddler we're deleting\n\tvar title = event.param || event.tiddlerTitle,\n\t\ttiddler = this.wiki.getTiddler(title),\n\t\tstoryList = this.getStoryList();\n\t// Check if the tiddler we're deleting is in draft mode\n\tif(tiddler.hasField(\"draft.title\")) {\n\t\t// Delete the original tiddler\n\t\tvar originalTitle = tiddler.fields[\"draft.of\"];\n\t\t// Ask for confirmation if the tiddler has changed\n\t\tif(!confirm(\"Do you wish to delete the tiddler '\" + originalTitle + \"'\")) {\n\t\t\treturn false;\n\t\t}\n\t\tthis.wiki.deleteTiddler(originalTitle);\n\t\tthis.removeTitleFromStory(storyList,originalTitle);\n\t}\n\t// Delete this tiddler\n\tthis.wiki.deleteTiddler(title);\n\t// Remove the closed tiddler from the story\n\tthis.removeTitleFromStory(storyList,title);\n\tthis.saveStoryList(storyList);\n\t// Send a notification event\n\tthis.dispatchEvent({type: \"tw-auto-save-wiki\"});\n\treturn false;\n};\n\n/*\nCreate/reuse the draft tiddler for a given title\n*/\nNavigatorWidget.prototype.makeDraftTiddler = function(targetTitle) {\n\t// See if there is already a draft tiddler for this tiddler\n\tvar drafts = [];\n\tthis.wiki.forEachTiddler({includeSystem: true},function(title,tiddler) {\n\t\tif(tiddler.fields[\"draft.title\"] && tiddler.fields[\"draft.of\"] === targetTitle) {\n\t\t\tdrafts.push(tiddler);\n\t\t}\n\t});\n\tif(drafts.length > 0) {\n\t\treturn drafts[0];\n\t}\n\t// Get the current value of the tiddler we're editing\n\tvar tiddler = this.wiki.getTiddler(targetTitle),\n\t\tdraftTitle = this.generateDraftTitle(targetTitle);\n\t// Save the initial value of the draft tiddler\n\tvar draftTiddler = new $tw.Tiddler(\n\t\t\ttiddler,\n\t\t\t{\n\t\t\t\ttitle: draftTitle,\n\t\t\t\t\"draft.title\": targetTitle,\n\t\t\t\t\"draft.of\": targetTitle\n\t\t\t},\n\t\t\tthis.wiki.getModificationFields()\n\t\t);\n\tthis.wiki.addTiddler(draftTiddler);\n\treturn draftTiddler;\n};\n\n/*\nGenerate a title for the draft of a given tiddler\n*/\nNavigatorWidget.prototype.generateDraftTitle = function(title) {\n\tvar c = 0;\n\tdo {\n\t\tvar draftTitle = \"Draft \" + (c ? (c + 1) + \" \" : \"\") + \"of '\" + title + \"'\";\n\t\tc++;\n\t} while(this.wiki.tiddlerExists(draftTitle));\n\treturn draftTitle;\n};\n\n// Take a tiddler out of edit mode, saving the changes\nNavigatorWidget.prototype.handleSaveTiddlerEvent = function(event) {\n\tvar title = event.param || event.tiddlerTitle,\n\t\ttiddler = this.wiki.getTiddler(title),\n\t\tstoryList = this.getStoryList(),\n\t\tstoryTiddlerModified = false; // We have to special case saving the story tiddler itself\n\t// Replace the original tiddler with the draft\n\tif(tiddler) {\n\t\tvar draftTitle = (tiddler.fields[\"draft.title\"] || \"\").trim(),\n\t\t\tdraftOf = (tiddler.fields[\"draft.of\"] || \"\").trim();\n\t\tif(draftTitle) {\n\t\t\tvar isRename = draftOf !== draftTitle,\n\t\t\t\tisConfirmed = true;\n\t\t\tif(isRename && this.wiki.tiddlerExists(draftTitle)) {\n\t\t\t\tisConfirmed = confirm(\"Do you wish to overwrite the tiddler '\" + draftTitle + \"'?\");\n\t\t\t}\n\t\t\tif(isConfirmed) {\n\t\t\t\t// Save the draft tiddler as the real tiddler\n\t\t\t\tthis.wiki.addTiddler(new $tw.Tiddler(this.wiki.getCreationFields(),tiddler,{\n\t\t\t\t\ttitle: draftTitle,\n\t\t\t\t\t\"draft.title\": undefined, \n\t\t\t\t\t\"draft.of\": undefined\n\t\t\t\t},this.wiki.getModificationFields()));\n\t\t\t\t// Remove the draft tiddler\n\t\t\t\tthis.wiki.deleteTiddler(title);\n\t\t\t\t// Remove the original tiddler if we're renaming it\n\t\t\t\tif(isRename) {\n\t\t\t\t\tthis.wiki.deleteTiddler(draftOf);\n\t\t\t\t}\n\t\t\t\t// Replace the draft in the story with the original\n\t\t\t\tthis.replaceFirstTitleInStory(storyList,title,draftTitle);\n\t\t\t\tthis.addToHistory(draftTitle,event.navigateFromClientRect);\n\t\t\t\tif(draftTitle !== this.storyTitle) {\n\t\t\t\t\tthis.saveStoryList(storyList);\n\t\t\t\t}\n\t\t\t\t// Send a notification event\n\t\t\t\tthis.dispatchEvent({type: \"tw-auto-save-wiki\"});\n\t\t\t}\n\t\t}\n\t}\n\treturn false;\n};\n\n// Take a tiddler out of edit mode without saving the changes\nNavigatorWidget.prototype.handleCancelTiddlerEvent = function(event) {\n\t// Flip the specified tiddler from draft back to the original\n\tvar draftTitle = event.param || event.tiddlerTitle,\n\t\tdraftTiddler = this.wiki.getTiddler(draftTitle),\n\t\toriginalTitle = draftTiddler.fields[\"draft.of\"],\n\t\tstoryList = this.getStoryList();\n\tif(draftTiddler && originalTitle) {\n\t\t// Remove the draft tiddler\n\t\tthis.wiki.deleteTiddler(draftTitle);\n\t\tthis.replaceFirstTitleInStory(storyList,draftTitle,originalTitle);\n\t\tthis.addToHistory(originalTitle,event.navigateFromClientRect);\n\t\tthis.saveStoryList(storyList);\n\t}\n\treturn false;\n};\n\n// Create a new draft tiddler\nNavigatorWidget.prototype.handleNewTiddlerEvent = function(event) {\n\t// Get the story details\n\tvar storyList = this.getStoryList();\n\t// Get the template tiddler if there is one\n\tvar templateTiddler = this.wiki.getTiddler(event.param);\n\t// Create the new tiddler\n\tvar title = this.wiki.generateNewTitle((templateTiddler && templateTiddler.fields.title) || \"New Tiddler\");\n\tvar tiddler = new $tw.Tiddler(this.wiki.getCreationFields(),{\n\t\ttext: \"Newly created tiddler\",\n\t\ttitle: title\n\t},this.wiki.getModificationFields());\n\tthis.wiki.addTiddler(tiddler);\n\t// Create the draft tiddler\n\tvar draftTitle = this.generateDraftTitle(title),\n\t\tdraftTiddler = new $tw.Tiddler({\n\t\t\ttext: \"\"\n\t\t},templateTiddler,\n\t\tthis.wiki.getCreationFields(),\n\t\t{\n\t\t\ttitle: draftTitle,\n\t\t\t\"draft.title\": title,\n\t\t\t\"draft.of\": title\n\t\t},this.wiki.getModificationFields());\n\tthis.wiki.addTiddler(draftTiddler);\n\t// Update the story to insert the new draft at the top\n\tvar slot = storyList.indexOf(event.navigateFromTitle);\n\tstoryList.splice(slot + 1,0,draftTitle);\n\t// Save the updated story\n\tthis.saveStoryList(storyList);\n\t// Add a new record to the top of the history stack\n\tthis.addToHistory(draftTitle);\n\treturn false;\n};\n\n// Import JSON tiddlers\nNavigatorWidget.prototype.handleImportTiddlersEvent = function(event) {\n\tvar self = this;\n\t// Get the tiddlers\n\tvar tiddlers = [];\n\ttry {\n\t\ttiddlers = JSON.parse(event.param);\t\n\t} catch(e) {\n\t}\n\t// Process each tiddler\n\tvar importedTiddlers = [];\n\t$tw.utils.each(tiddlers,function(tiddlerFields) {\n\t\tvar title = tiddlerFields.title;\n\t\t// Add it to the store\n\t\tvar imported = self.wiki.importTiddler(new $tw.Tiddler(\n\t\t\tself.wiki.getCreationFields(),\n\t\t\tself.wiki.getModificationFields(),\n\t\t\ttiddlerFields\n\t\t));\n\t\tif(imported) {\n\t\t\timportedTiddlers.push(title);\n\t\t}\n\t});\n\t// Get the story and history details\n\tvar storyList = this.getStoryList(),\n\t\thistory = [];\n\t// Create the import report tiddler\n\tif(importedTiddlers.length === 0) {\n\t\treturn false;\n\t}\n\tvar title;\n\tif(importedTiddlers.length > 1) {\n\t\ttitle = this.wiki.generateNewTitle(\"$:/temp/ImportReport\");\n\t\tvar tiddlerFields = {\n\t\t\ttitle: title,\n\t\t\ttext: \"# [[\" + importedTiddlers.join(\"]]\\n# [[\") + \"]]\\n\"\n\t\t};\n\t\tthis.wiki.addTiddler(new $tw.Tiddler(\n\t\t\tself.wiki.getCreationFields(),\n\t\t\ttiddlerFields,\n\t\t\tself.wiki.getModificationFields()\n\t\t));\n\t} else {\n\t\ttitle = importedTiddlers[0];\n\t}\n\t// Add it to the story\n\tif(storyList.indexOf(title) === -1) {\n\t\tstoryList.unshift(title);\n\t}\n\t// And to history\n\thistory.push(title);\n\t// Save the updated story and history\n\tthis.saveStoryList(storyList);\n\tthis.addToHistory(history);\n\treturn false;\n};\n\nexports.navigator = NavigatorWidget;\n\n})();\n",
"title": "$:/core/modules/widgets/navigator.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/password.js": {
"text": "/*\\\ntitle: $:/core/modules/widgets/password.js\ntype: application/javascript\nmodule-type: widget\n\nPassword widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar PasswordWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nPasswordWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nPasswordWidget.prototype.render = function(parent,nextSibling) {\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Get the current password\n\tvar password = $tw.browser ? $tw.utils.getPassword(this.passwordName) || \"\" : \"\";\n\t// Create our element\n\tvar domNode = this.document.createElement(\"input\");\n\tdomNode.setAttribute(\"type\",\"password\");\n\tdomNode.setAttribute(\"value\",password);\n\t// Add a click event handler\n\t$tw.utils.addEventListeners(domNode,[\n\t\t{name: \"change\", handlerObject: this, handlerMethod: \"handleChangeEvent\"}\n\t]);\n\t// Insert the label into the DOM and render any children\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\nPasswordWidget.prototype.handleChangeEvent = function(event) {\n\tvar password = this.domNodes[0].value;\n\treturn $tw.utils.savePassword(this.passwordName,password);\n};\n\n/*\nCompute the internal state of the widget\n*/\nPasswordWidget.prototype.execute = function() {\n\t// Get the parameters from the attributes\n\tthis.passwordName = this.getAttribute(\"name\",\"\");\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nPasswordWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.name) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports.password = PasswordWidget;\n\n})();\n",
"title": "$:/core/modules/widgets/password.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/radio.js": {
"text": "/*\\\ntitle: $:/core/modules/widgets/radio.js\ntype: application/javascript\nmodule-type: widget\n\nRadio widget\n\nWill set a field to the selected value:\n\n```\n\t<$radio field=\"myfield\" value=\"check 1\">one</$radio>\n\t<$radio field=\"myfield\" value=\"check 2\">two</$radio>\n\t<$radio field=\"myfield\" value=\"check 3\">three</$radio>\n```\n\n|Parameter |Description |h\n|tiddler |Name of the tiddler in which the field should be set. Defaults to current tiddler |\n|field |The name of the field to be set |\n|value |The value to set |\n|class |Optional class name(s) |\n\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar RadioWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nRadioWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nRadioWidget.prototype.render = function(parent,nextSibling) {\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Create our elements\n\tthis.labelDomNode = this.document.createElement(\"label\");\n\tthis.labelDomNode.setAttribute(\"class\",this.radioClass);\n\tthis.inputDomNode = this.document.createElement(\"input\");\n\tthis.inputDomNode.setAttribute(\"type\",\"radio\");\n\tif(this.getValue() == this.radioValue) {\n\t\tthis.inputDomNode.setAttribute(\"checked\",\"true\");\n\t}\n\tthis.labelDomNode.appendChild(this.inputDomNode);\n\tthis.spanDomNode = this.document.createElement(\"span\");\n\tthis.labelDomNode.appendChild(this.spanDomNode);\n\t// Add a click event handler\n\t$tw.utils.addEventListeners(this.inputDomNode,[\n\t\t{name: \"change\", handlerObject: this, handlerMethod: \"handleChangeEvent\"}\n\t]);\n\t// Insert the label into the DOM and render any children\n\tparent.insertBefore(this.labelDomNode,nextSibling);\n\tthis.renderChildren(this.spanDomNode,null);\n\tthis.domNodes.push(this.labelDomNode);\n};\n\nRadioWidget.prototype.getValue = function() {\n\tvar tiddler = this.wiki.getTiddler(this.radioTitle);\n\treturn tiddler && tiddler.getFieldString(this.radioField);\n};\n\nRadioWidget.prototype.setValue = function() {\n\tif(this.radioField) {\n\t\tvar tiddler = this.wiki.getTiddler(this.radioTitle),\n\t\t\taddition = {};\n\t\taddition[this.radioField] = this.radioValue;\n\t\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,addition));\n\t}\n};\n\nRadioWidget.prototype.handleChangeEvent = function(event) {\n\tif(this.inputDomNode.checked) {\n\t\tthis.setValue();\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nRadioWidget.prototype.execute = function() {\n\t// Get the parameters from the attributes\n\tthis.radioTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.radioField = this.getAttribute(\"field\");\n\tthis.radioValue = this.getAttribute(\"value\");\n\tthis.radioClass = this.getAttribute(\"class\",\"\");\n\tif(this.radioClass !== \"\") {\n\t\tthis.radioClass += \" \";\n\t}\n\tthis.radioClass += \"tw-radio\";\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nRadioWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.value || changedAttributes[\"class\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\tvar refreshed = false;\n\t\tif(changedTiddlers[this.radioTitle]) {\n\t\t\tthis.inputDomNode.checked = this.getValue() === this.radioValue;\n\t\t\trefreshed = true;\n\t\t}\n\t\treturn this.refreshChildren(changedTiddlers) || refreshed;\n\t}\n};\n\nexports.radio = RadioWidget;\n\n})();\n",
"title": "$:/core/modules/widgets/radio.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/raw.js": {
"text": "/*\\\ntitle: $:/core/modules/widgets/raw.js\ntype: application/javascript\nmodule-type: widget\n\nRaw widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar RawWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nRawWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nRawWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.execute();\n\tvar div = this.document.createElement(\"div\");\n\tdiv.innerHTML=this.parseTreeNode.html;\n\tparent.insertBefore(div,nextSibling);\n\tthis.domNodes.push(div);\t\n};\n\n/*\nCompute the internal state of the widget\n*/\nRawWidget.prototype.execute = function() {\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nRawWidget.prototype.refresh = function(changedTiddlers) {\n\treturn false;\n};\n\nexports.raw = RawWidget;\n\n})();\n",
"title": "$:/core/modules/widgets/raw.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/reveal.js": {
"text": "/*\\\ntitle: $:/core/modules/widgets/reveal.js\ntype: application/javascript\nmodule-type: widget\n\nReveal widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar RevealWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nRevealWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nRevealWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar domNode = this.document.createElement(this.parseTreeNode.isBlock ? \"div\" : \"span\");\n\tvar classes = this[\"class\"].split(\" \") || [];\n\tclasses.push(\"tw-reveal\");\n\tdomNode.className = classes.join(\" \");\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tif(!domNode.isTiddlyWikiFakeDom && this.type === \"popup\" && this.isOpen) {\n\t\tthis.positionPopup(domNode);\n\t\t$tw.utils.addClass(domNode,\"tw-popup\"); // Make sure that clicks don't dismiss popups within the revealed content\n\t}\n\tif(!this.isOpen) {\n\t\tdomNode.setAttribute(\"hidden\",\"true\")\n\t}\n\tthis.domNodes.push(domNode);\n};\n\nRevealWidget.prototype.positionPopup = function(domNode) {\n\tdomNode.style.position = \"absolute\";\n\tdomNode.style.zIndex = \"1000\";\n\tswitch(this.position) {\n\t\tcase \"left\":\n\t\t\tdomNode.style.left = (this.popup.left - domNode.offsetWidth) + \"px\";\n\t\t\tdomNode.style.top = this.popup.top + \"px\";\n\t\t\tbreak;\n\t\tcase \"above\":\n\t\t\tdomNode.style.left = this.popup.left + \"px\";\n\t\t\tdomNode.style.top = (this.popup.top - domNode.offsetHeight) + \"px\";\n\t\t\tbreak;\n\t\tcase \"aboveright\":\n\t\t\tdomNode.style.left = (this.popup.left + this.popup.width) + \"px\";\n\t\t\tdomNode.style.top = (this.popup.top + this.popup.height - domNode.offsetHeight) + \"px\";\n\t\t\tbreak;\n\t\tcase \"right\":\n\t\t\tdomNode.style.left = (this.popup.left + this.popup.width) + \"px\";\n\t\t\tdomNode.style.top = this.popup.top + \"px\";\n\t\t\tbreak;\n\t\tcase \"belowleft\":\n\t\t\tdomNode.style.left = (this.popup.left + this.popup.width - domNode.offsetWidth) + \"px\";\n\t\t\tdomNode.style.top = (this.popup.top + this.popup.height) + \"px\";\n\t\t\tbreak;\n\t\tdefault: // Below\n\t\t\tdomNode.style.left = this.popup.left + \"px\";\n\t\t\tdomNode.style.top = (this.popup.top + this.popup.height) + \"px\";\n\t\t\tbreak;\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nRevealWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.state = this.getAttribute(\"state\");\n\tthis.type = this.getAttribute(\"type\");\n\tthis.text = this.getAttribute(\"text\");\n\tthis.position = this.getAttribute(\"position\");\n\tthis[\"class\"] = this.getAttribute(\"class\",\"\");\n\tthis[\"default\"] = this.getAttribute(\"default\",\"\");\n\tthis.animate = this.getAttribute(\"animate\",\"no\");\n\tthis.retain = this.getAttribute(\"retain\",\"no\");\n\tthis.openAnimation = this.animate === \"no\" ? undefined : \"open\";\n\tthis.closeAnimation = this.animate === \"no\" ? undefined : \"close\";\n\t// Compute the title of the state tiddler and read it\n\tthis.stateTitle = this.state;\n\tthis.readState();\n\t// Construct the child widgets\n\tvar childNodes = this.isOpen ? this.parseTreeNode.children : [];\n\tthis.hasChildNodes = this.isOpen;\n\tthis.makeChildWidgets(childNodes);\n};\n\n/*\nRead the state tiddler\n*/\nRevealWidget.prototype.readState = function() {\n\t// Read the information from the state tiddler\n\tif(this.stateTitle) {\n\t\tvar state = this.wiki.getTextReference(this.stateTitle,this[\"default\"],this.getVariable(\"currentTiddler\"));\n\t\tswitch(this.type) {\n\t\t\tcase \"popup\":\n\t\t\t\tthis.readPopupState(state);\n\t\t\t\tbreak;\n\t\t\tcase \"match\":\n\t\t\t\tthis.readMatchState(state);\n\t\t\t\tbreak;\n\t\t\tcase \"nomatch\":\n\t\t\t\tthis.readMatchState(state);\n\t\t\t\tthis.isOpen = !this.isOpen;\n\t\t\t\tbreak;\n\t\t}\n\t}\n};\n\nRevealWidget.prototype.readMatchState = function(state) {\n\tthis.isOpen = state === this.text;\n};\n\nRevealWidget.prototype.readPopupState = function(state) {\n\tvar popupLocationRegExp = /^\\((-?[0-9\\.E]+),(-?[0-9\\.E]+),(-?[0-9\\.E]+),(-?[0-9\\.E]+)\\)$/,\n\t\tmatch = popupLocationRegExp.exec(state);\n\t// Check if the state matches the location regexp\n\tif(match) {\n\t\t// If so, we're open\n\t\tthis.isOpen = true;\n\t\t// Get the location\n\t\tthis.popup = {\n\t\t\tleft: parseFloat(match[1]),\n\t\t\ttop: parseFloat(match[2]),\n\t\t\twidth: parseFloat(match[3]),\n\t\t\theight: parseFloat(match[4])\n\t\t};\n\t} else {\n\t\t// If not, we're closed\n\t\tthis.isOpen = false;\n\t}\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nRevealWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.state || changedAttributes.type || changedAttributes.text || changedAttributes.position || changedAttributes[\"default\"] || changedAttributes.animate) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\tvar refreshed = false,\n\t\t\tcurrentlyOpen = this.isOpen;\n\t\tthis.readState();\n\t\tif(this.isOpen !== currentlyOpen) {\n\t\t\tif(this.retain === \"yes\") {\n\t\t\t\tthis.updateState();\n\t\t\t} else {\n\t\t\t\tthis.refreshSelf();\n\t\t\t\trefreshed = true;\n\t\t\t}\n\t\t}\n\t\treturn this.refreshChildren(changedTiddlers) || refreshed;\n\t}\n};\n\n/*\nCalled by refresh() to dynamically show or hide the content\n*/\nRevealWidget.prototype.updateState = function() {\n\t// Read the current state\n\tthis.readState();\n\t// Construct the child nodes if needed\n\tvar domNode = this.domNodes[0];\n\tif(this.isOpen && !this.hasChildNodes) {\n\t\tthis.hasChildNodes = true;\n\t\tthis.makeChildWidgets(this.parseTreeNode.children);\n\t\tthis.renderChildren(domNode,null);\n\t}\n\t// Animate our DOM node\n\tif(!domNode.isTiddlyWikiFakeDom && this.type === \"popup\" && this.isOpen) {\n\t\tthis.positionPopup(domNode);\n\t\t$tw.utils.addClass(domNode,\"tw-popup\"); // Make sure that clicks don't dismiss popups within the revealed content\n\n\t}\n\tif(this.isOpen) {\n\t\tdomNode.removeAttribute(\"hidden\");\n $tw.anim.perform(this.openAnimation,domNode);\n\t} else {\n\t\t$tw.anim.perform(this.closeAnimation,domNode,{callback: function() {\n\t\t\tdomNode.setAttribute(\"hidden\",\"true\");\n }});\n\t}\n};\n\nexports.reveal = RevealWidget;\n\n})();\n",
"title": "$:/core/modules/widgets/reveal.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/set.js": {
"text": "/*\\\ntitle: $:/core/modules/widgets/set.js\ntype: application/javascript\nmodule-type: widget\n\nSet variable widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar SetWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nSetWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nSetWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nSetWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.setName = this.getAttribute(\"name\",\"currentTiddler\");\n\tthis.setValue = this.getAttribute(\"value\");\n\t// Set context variable\n\tthis.setVariable(this.setName,this.setValue,this.parseTreeNode.params);\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nSetWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.name || changedAttributes.value) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\nexports.setvariable = SetWidget;\nexports.set = SetWidget;\n\n})();\n",
"title": "$:/core/modules/widgets/set.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/text.js": {
"text": "/*\\\ntitle: $:/core/modules/widgets/text.js\ntype: application/javascript\nmodule-type: widget\n\nText node widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar TextNodeWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nTextNodeWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nTextNodeWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar text = this.getAttribute(\"text\",this.parseTreeNode.text),\n\t\ttextNode = this.document.createTextNode(text);\n\tparent.insertBefore(textNode,nextSibling);\n\tthis.domNodes.push(textNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nTextNodeWidget.prototype.execute = function() {\n\t// Nothing to do for a text node\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nTextNodeWidget.prototype.refresh = function(changedTiddlers) {\n\treturn false;\n};\n\nexports.text = TextNodeWidget;\n\n})();\n",
"title": "$:/core/modules/widgets/text.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/tiddler.js": {
"text": "/*\\\ntitle: $:/core/modules/widgets/tiddler.js\ntype: application/javascript\nmodule-type: widget\n\nTiddler widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar TiddlerWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nTiddlerWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nTiddlerWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nTiddlerWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.tiddlerTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\t// Set context variables\n\tthis.setVariable(\"currentTiddler\",this.tiddlerTitle);\n\tthis.setVariable(\"missingTiddlerClass\",(this.wiki.tiddlerExists(this.tiddlerTitle) || this.wiki.isShadowTiddler(this.tiddlerTitle)) ? \"tw-tiddler-exists\" : \"tw-tiddler-missing\");\n\tthis.setVariable(\"shadowTiddlerClass\",this.wiki.isShadowTiddler(this.tiddlerTitle) ? \"tw-tiddler-shadow\" : \"\");\n\tthis.setVariable(\"systemTiddlerClass\",this.wiki.isSystemTiddler(this.tiddlerTitle) ? \"tw-tiddler-system\" : \"\");\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nTiddlerWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\nexports.tiddler = TiddlerWidget;\n\n})();\n",
"title": "$:/core/modules/widgets/tiddler.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/transclude.js": {
"text": "/*\\\ntitle: $:/core/modules/widgets/transclude.js\ntype: application/javascript\nmodule-type: widget\n\nTransclude widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar TranscludeWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nTranscludeWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nTranscludeWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nTranscludeWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.transcludeTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.transcludeField = this.getAttribute(\"field\");\n\tthis.transcludeIndex = this.getAttribute(\"index\");\n\tthis.transcludeMode = this.getAttribute(\"mode\");\n\t// Check for recursion\n\tvar recursionMarker = this.makeRecursionMarker();;\n\tif(this.parentWidget && this.parentWidget.hasVariable(\"transclusion\",recursionMarker)) {\n\t\tthis.makeChildWidgets([{type: \"text\", text: \"Tiddler recursion error in transclude widget\"}]);\n\t\treturn;\n\t}\n\t// Set context variables for recursion detection\n\tthis.setVariable(\"transclusion\",recursionMarker);\n\t// Parse the text reference\n\tvar parseAsInline = !this.parseTreeNode.isBlock;\n\tif(this.transcludeMode === \"inline\") {\n\t\tparseAsInline = true;\n\t} else if(this.transcludeMode === \"block\") {\n\t\tparseAsInline = false;\n\t}\n\tvar parser = this.wiki.parseTextReference(\n\t\t\t\t\t\tthis.transcludeTitle,\n\t\t\t\t\t\tthis.transcludeField,\n\t\t\t\t\t\tthis.transcludeIndex,\n\t\t\t\t\t\t{parseAsInline: parseAsInline}),\n\t\tparseTreeNodes = parser ? parser.tree : this.parseTreeNode.children;\n\t// Construct the child widgets\n\tthis.makeChildWidgets(parseTreeNodes);\n};\n\n/*\nCompose a string comprising the title, field and/or index to identify this transclusion for recursion detection\n*/\nTranscludeWidget.prototype.makeRecursionMarker = function() {\n\tvar output = [];\n\toutput.push(\"{\");\n\toutput.push(this.getVariable(\"currentTiddler\",{defaultValue: \"\"}));\n\toutput.push(\"|\");\n\toutput.push(this.transcludeTitle || \"\");\n\toutput.push(\"|\");\n\toutput.push(this.transcludeField || \"\");\n\toutput.push(\"|\");\n\toutput.push(this.transcludeIndex || \"\");\n\toutput.push(\"}\");\n\treturn output.join(\"\");\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nTranscludeWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedTiddlers[this.transcludeTitle]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\nexports.transclude = TranscludeWidget;\n\n})();\n",
"title": "$:/core/modules/widgets/transclude.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/view.js": {
"text": "/*\\\ntitle: $:/core/modules/widgets/view.js\ntype: application/javascript\nmodule-type: widget\n\nView widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ViewWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nViewWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nViewWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tif(this.text) {\n\t\tvar textNode = this.document.createTextNode(this.text);\n\t\tparent.insertBefore(textNode,nextSibling);\n\t\tthis.domNodes.push(textNode);\n\t} else {\n\t\tthis.makeChildWidgets();\n\t\tthis.renderChildren(parent,nextSibling);\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nViewWidget.prototype.execute = function() {\n\t// Get parameters from our attributes\n\tthis.viewTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.viewField = this.getAttribute(\"field\",\"text\");\n\tthis.viewIndex = this.getAttribute(\"index\");\n\tthis.viewFormat = this.getAttribute(\"format\",\"text\");\n\tthis.viewTemplate = this.getAttribute(\"template\",\"\");\n\tswitch(this.viewFormat) {\n\t\tcase \"htmlwikified\":\n\t\t\tthis.text = this.getValueAsHtmlWikified();\n\t\t\tbreak;\n\t\tcase \"htmlencoded\":\n\t\t\tthis.text = this.getValueAsHtmlEncoded();\n\t\t\tbreak;\n\t\tcase \"urlencoded\":\n\t\t\tthis.text = this.getValueAsUrlEncoded();\n\t\t\tbreak;\n\t\tcase \"doubleurlencoded\":\n\t\t\tthis.text = this.getValueAsDoubleUrlEncoded();\n\t\t\tbreak;\n\t\tcase \"date\":\n\t\t\tthis.text = this.getValueAsDate(this.viewTemplate);\n\t\t\tbreak;\n\t\tcase \"relativedate\":\n\t\t\tthis.text = this.getValueAsRelativeDate();\n\t\t\tbreak;\n\t\tcase \"stripcomments\":\n\t\t\tthis.text = this.getValueAsStrippedComments();\n\t\t\tbreak;\n\t\tcase \"jsencoded\":\n\t\t\tthis.text = this.getValueAsJsEncoded();\n\t\t\tbreak;\n\t\tdefault: // \"text\"\n\t\t\tthis.text = this.getValueAsText();\n\t\t\tbreak;\n\t}\n};\n\n/*\nThe various formatter functions are baked into this widget for the moment. Eventually they will be replaced by macro functions\n*/\n\n/*\nRetrieve the value of the widget. Options are:\nasString: Optionally return the value as a string\n*/\nViewWidget.prototype.getValue = function(options) {\n\toptions = options || {};\n\tvar value = options.asString ? \"\" : undefined;\n\tif(this.viewIndex) {\n\t\tvalue = this.wiki.extractTiddlerDataItem(this.viewTitle,this.viewIndex);\n\t} else {\n\t\tvar tiddler = this.wiki.getTiddler(this.viewTitle);\n\t\tif(tiddler) {\n\t\t\tif(this.viewField === \"text\") {\n\t\t\t\t// Calling getTiddlerText() triggers lazy loading of skinny tiddlers\n\t\t\t\tvalue = this.wiki.getTiddlerText(this.viewTitle);\n\t\t\t} else {\n\t\t\t\tif($tw.utils.hop(tiddler.fields,this.viewField)) {\n\t\t\t\t\tif(options.asString) {\n\t\t\t\t\t\tvalue = tiddler.getFieldString(this.viewField);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvalue = tiddler.fields[this.viewField];\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif(this.viewField === \"title\") {\n\t\t\t\tvalue = this.viewTitle;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n\nViewWidget.prototype.getValueAsText = function() {\n\treturn this.getValue({asString: true});\n};\n\nViewWidget.prototype.getValueAsHtmlWikified = function() {\n\treturn this.wiki.renderText(\"text/html\",\"text/vnd.tiddlywiki\",this.getValueAsText(),{parentWidget: this});\n};\n\nViewWidget.prototype.getValueAsHtmlEncoded = function() {\n\treturn $tw.utils.htmlEncode(this.getValueAsText());\n};\n\nViewWidget.prototype.getValueAsUrlEncoded = function() {\n\treturn encodeURIComponent(this.getValueAsText());\n};\n\nViewWidget.prototype.getValueAsDoubleUrlEncoded = function() {\n\treturn encodeURIComponent(encodeURIComponent(this.getValueAsText()));\n};\n\nViewWidget.prototype.getValueAsDate = function(format) {\n\tformat = format || \"YYYY MM DD 0hh:0mm\";\n\tvar value = $tw.utils.parseDate(this.getValue());\n\tif(value && $tw.utils.isDate(value) && value.toString() !== \"Invalid Date\") {\n\t\treturn $tw.utils.formatDateString(value,format);\n\t} else {\n\t\treturn \"\";\n\t}\n};\n\nViewWidget.prototype.getValueAsRelativeDate = function(format) {\n\tvar value = $tw.utils.parseDate(this.getValue());\n\tif(value && $tw.utils.isDate(value) && value.toString() !== \"Invalid Date\") {\n\t\treturn $tw.utils.getRelativeDate((new Date()) - (new Date(value))).description;\n\t} else {\n\t\treturn \"\";\n\t}\n};\n\nViewWidget.prototype.getValueAsStrippedComments = function() {\n\tvar lines = this.getValueAsText().split(\"\\n\"),\n\t\tout = [];\n\tfor(var line=0; line<lines.length; line++) {\n\t\tvar text = lines[line];\n\t\tif(!/^\\s*\\/\\/#/.test(text)) {\n\t\t\tout.push(text);\n\t\t}\n\t}\n\treturn out.join(\"\\n\");\n};\n\nViewWidget.prototype.getValueAsJsEncoded = function() {\n\treturn $tw.utils.stringify(this.getValueAsText());\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nViewWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedAttributes.template || changedAttributes.format || changedTiddlers[this.viewTitle]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn false;\t\n\t}\n};\n\nexports.view = ViewWidget;\n\n})();\n",
"title": "$:/core/modules/widgets/view.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/widget.js": {
"text": "/*\\\ntitle: $:/core/modules/widgets/widget.js\ntype: application/javascript\nmodule-type: widget\n\nWidget base class\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nCreate a widget object for a parse tree node\n\tparseTreeNode: reference to the parse tree node to be rendered\n\toptions: see below\nOptions include:\n\twiki: mandatory reference to wiki associated with this render tree\n\tvariables: optional hashmap of context variables (see below)\n\tparentWidget: optional reference to a parent renderer node for the context chain\n\tdocument: optional document object to use instead of global document\nContext variables include:\n\tcurrentTiddler: title of the tiddler providing the context\n*/\nvar Widget = function(parseTreeNode,options) {\n\tif(arguments.length > 0) {\n\t\tthis.initialise(parseTreeNode,options);\n\t}\n};\n\n/*\nInitialise widget properties. These steps are pulled out of the constructor so that we can reuse them in subclasses\n*/\nWidget.prototype.initialise = function(parseTreeNode,options) {\n\toptions = options || {};\n\t// Save widget info\n\tthis.parseTreeNode = parseTreeNode;\n\tthis.wiki = options.wiki;\n\tthis.parentWidget = options.parentWidget;\n\tthis.variablesConstructor = function() {};\n\tthis.variablesConstructor.prototype = this.parentWidget ? this.parentWidget.variables : {};\n\tthis.variables = new this.variablesConstructor();\n\tthis.document = options.document;\n\tthis.attributes = {};\n\tthis.children = [];\n\tthis.domNodes = [];\n\tthis.eventListeners = {};\n\t// Hashmap of the widget classes\n\tif(!this.widgetClasses) {\n\t\tWidget.prototype.widgetClasses = $tw.modules.applyMethods(\"widget\");\n\t}\n};\n\n/*\nRender this widget into the DOM\n*/\nWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nWidget.prototype.execute = function() {\n\tthis.makeChildWidgets();\n};\n\n/*\nSet the value of a context variable\nname: name of the variable\nvalue: value of the variable\nparams: array of {name:, default:} for each parameter\n*/\nWidget.prototype.setVariable = function(name,value,params) {\n\tthis.variables[name] = {value: value, params: params};\n};\n\n/*\nGet the prevailing value of a context variable\nname: name of variable\noptions: see below\nOptions include\nparams: array of {name:, value:} for each parameter\ndefaultValue: default value if the variable is not defined\n*/\nWidget.prototype.getVariable = function(name,options) {\n\toptions = options || {};\n\tvar actualParams = options.params || [];\n\t// If the variable doesn't exist then look for a macro module\n\tif(!(name in this.variables)) {\n\t\treturn this.evaluateMacroModule(name,actualParams,options.defaultValue);\n\t}\n\tvar variable = this.variables[name],\n\t\tvalue = variable.value || \"\";\n\t// Substitute any parameters specified in the definition\n\tvalue = this.substituteVariableParameters(value,variable.params,actualParams);\n\tvalue = this.substituteVariableReferences(value);\n\treturn value;\n};\n\nWidget.prototype.substituteVariableParameters = function(text,formalParams,actualParams) {\n\tif(formalParams) {\n\t\tvar nextAnonParameter = 0, // Next candidate anonymous parameter in macro call\n\t\t\tparamInfo, paramValue;\n\t\t// Step through each of the parameters in the macro definition\n\t\tfor(var p=0; p<formalParams.length; p++) {\n\t\t\t// Check if we've got a macro call parameter with the same name\n\t\t\tparamInfo = formalParams[p];\n\t\t\tparamValue = undefined;\n\t\t\tfor(var m=0; m<actualParams.length; m++) {\n\t\t\t\tif(actualParams[m].name === paramInfo.name) {\n\t\t\t\t\tparamValue = actualParams[m].value;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// If not, use the next available anonymous macro call parameter\n\t\t\twhile(nextAnonParameter < actualParams.length && actualParams[nextAnonParameter].name) {\n\t\t\t\tnextAnonParameter++;\n\t\t\t}\n\t\t\tif(paramValue === undefined && nextAnonParameter < actualParams.length) {\n\t\t\t\tparamValue = actualParams[nextAnonParameter++].value;\n\t\t\t}\n\t\t\t// If we've still not got a value, use the default, if any\n\t\t\tparamValue = paramValue || paramInfo[\"default\"] || \"\";\n\t\t\t// Replace any instances of this parameter\n\t\t\ttext = text.replace(new RegExp(\"\\\\$\" + $tw.utils.escapeRegExp(paramInfo.name) + \"\\\\$\",\"mg\"),paramValue);\n\t\t}\n\t}\n\treturn text;\n};\n\nWidget.prototype.substituteVariableReferences = function(text) {\n\tvar self = this;\n\treturn text.replace(/\\$\\(([^\\)\\$]+)\\)\\$/g,function(match,p1,offset,string) {\n\t\treturn self.getVariable(p1,{defaultValue: \"\"});\n\t});\n};\n\nWidget.prototype.evaluateMacroModule = function(name,actualParams,defaultValue) {\n\tif($tw.utils.hop($tw.macros,name)) {\n\t\tvar macro = $tw.macros[name],\n\t\t\targs = [];\n\t\tif(macro.params.length > 0) {\n\t\t\tvar nextAnonParameter = 0, // Next candidate anonymous parameter in macro call\n\t\t\t\tparamInfo, paramValue;\n\t\t\t// Step through each of the parameters in the macro definition\n\t\t\tfor(var p=0; p<macro.params.length; p++) {\n\t\t\t\t// Check if we've got a macro call parameter with the same name\n\t\t\t\tparamInfo = macro.params[p];\n\t\t\t\tparamValue = undefined;\n\t\t\t\tfor(var m=0; m<actualParams.length; m++) {\n\t\t\t\t\tif(actualParams[m].name === paramInfo.name) {\n\t\t\t\t\t\tparamValue = actualParams[m].value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// If not, use the next available anonymous macro call parameter\n\t\t\t\twhile(nextAnonParameter < actualParams.length && actualParams[nextAnonParameter].name) {\n\t\t\t\t\tnextAnonParameter++;\n\t\t\t\t}\n\t\t\t\tif(paramValue === undefined && nextAnonParameter < actualParams.length) {\n\t\t\t\t\tparamValue = actualParams[nextAnonParameter++].value;\n\t\t\t\t}\n\t\t\t\t// If we've still not got a value, use the default, if any\n\t\t\t\tparamValue = paramValue || paramInfo[\"default\"] || \"\";\n\t\t\t\t// Save the parameter\n\t\t\t\targs.push(paramValue);\n\t\t\t}\n\t\t}\n\t\telse for(var i=0; i<actualParams.length; ++i) {\n\t\t\targs.push(actualParams[i].value);\n\t\t}\n\t\treturn macro.run.apply(this,args)\n\t} else {\n\t\treturn defaultValue;\n\t}\n};\n\n/*\nCheck whether a given context variable value exists in the parent chain\n*/\nWidget.prototype.hasVariable = function(name,value) {\n\tvar node = this;\n\twhile(node) {\n\t\tif($tw.utils.hop(node.variables,name) && node.variables[name].value === value) {\n\t\t\treturn true;\n\t\t}\n\t\tnode = node.parentWidget;\n\t}\n\treturn false;\n};\n\n/*\nConstruct a qualifying string based on a hash of concatenating the values of a given variable in the parent chain\n*/\nWidget.prototype.getStateQualifier = function(name) {\n\tname = name || \"transclusion\";\n\tvar output = [],\n\t\tnode = this;\n\twhile(node) {\n\t\tif($tw.utils.hop(node.variables,name)) {\n\t\t\toutput.push(node.getVariable(name));\n\t\t}\n\t\tnode = node.parentWidget;\n\t}\n\treturn \"{\" + $tw.utils.hashString(output.join(\"\")) + \"}\";\n};\n\n/*\nCompute the current values of the attributes of the widget. Returns a hashmap of the names of the attributes that have changed\n*/\nWidget.prototype.computeAttributes = function() {\n\tvar changedAttributes = {},\n\t\tself = this,\n\t\tvalue;\n\t$tw.utils.each(this.parseTreeNode.attributes,function(attribute,name) {\n\t\tif(attribute.type === \"indirect\") {\n\t\t\tvalue = self.wiki.getTextReference(attribute.textReference,\"\",self.getVariable(\"currentTiddler\"));\n\t\t} else if(attribute.type === \"macro\") {\n\t\t\tvalue = self.getVariable(attribute.value.name,{params: attribute.value.params});\n\t\t} else { // String attribute\n\t\t\tvalue = attribute.value;\n\t\t}\n\t\t// Check whether the attribute has changed\n\t\tif(self.attributes[name] !== value) {\n\t\t\tself.attributes[name] = value;\n\t\t\tchangedAttributes[name] = true;\n\t\t}\n\t});\n\treturn changedAttributes;\n};\n\n/*\nCheck for the presence of an attribute\n*/\nWidget.prototype.hasAttribute = function(name) {\n\treturn $tw.utils.hop(this.attributes,name);\n};\n\n/*\nGet the value of an attribute\n*/\nWidget.prototype.getAttribute = function(name,defaultText) {\n\tif($tw.utils.hop(this.attributes,name)) {\n\t\treturn this.attributes[name];\n\t} else {\n\t\treturn defaultText;\n\t}\n};\n\n/*\nAssign the computed attributes of the widget to a domNode\n*/\nWidget.prototype.assignAttributes = function(domNode) {\n\tvar self = this;\n\t$tw.utils.each(this.attributes,function(v,a) {\n\t\tif(v !== undefined) {\n\t\t\t// Setting certain attributes can cause a DOM error (eg xmlns on the svg element)\n\t\t\ttry {\n\t\t\t\tdomNode.setAttributeNS(null,a,v);\n\t\t\t} catch(e) {\n\t\t\t}\n\t\t}\n\t});\n};\n\n/*\nMake child widgets correspondng to specified parseTreeNodes\n*/\nWidget.prototype.makeChildWidgets = function(parseTreeNodes) {\n\tthis.children = [];\n\tvar self = this;\n\t$tw.utils.each(parseTreeNodes || (this.parseTreeNode && this.parseTreeNode.children),function(childNode) {\n\t\tself.children.push(self.makeChildWidget(childNode));\n\t});\n};\n\n/*\nConstruct the widget object for a parse tree node\n*/\nWidget.prototype.makeChildWidget = function(parseTreeNode) {\n\tvar WidgetClass = this.widgetClasses[parseTreeNode.type];\n\tif(!WidgetClass) {\n\t\tWidgetClass = this.widgetClasses[\"text\"];\n\t\tparseTreeNode = {type: \"text\", text: \"Undefined widget '\" + parseTreeNode.type + \"'\"};\n\t}\n\treturn new WidgetClass(parseTreeNode,{\n\t\twiki: this.wiki,\n\t\tvariables: {},\n\t\tparentWidget: this,\n\t\tdocument: this.document\n\t});\n};\n\n/*\nGet the next sibling of this widget\n*/\nWidget.prototype.nextSibling = function() {\n\tif(this.parentWidget) {\n\t\tvar index = this.parentWidget.children.indexOf(this);\n\t\tif(index !== -1 && index < this.parentWidget.children.length-1) {\n\t\t\treturn this.parentWidget.children[index+1];\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nGet the previous sibling of this widget\n*/\nWidget.prototype.previousSibling = function() {\n\tif(this.parentWidget) {\n\t\tvar index = this.parentWidget.children.indexOf(this);\n\t\tif(index !== -1 && index > 0) {\n\t\t\treturn this.parentWidget.children[index-1];\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nRender the children of this widget into the DOM\n*/\nWidget.prototype.renderChildren = function(parent,nextSibling) {\n\t$tw.utils.each(this.children,function(childWidget) {\n\t\tchildWidget.render(parent,nextSibling);\n\t});\n};\n\n/*\nAdd a list of event listeners from an array [{type:,handler:},...]\n*/\nWidget.prototype.addEventListeners = function(listeners) {\n\tvar self = this;\n\t$tw.utils.each(listeners,function(listenerInfo) {\n\t\tself.addEventListener(listenerInfo.type,listenerInfo.handler);\t\t\n\t});\n};\n\n/*\nAdd an event listener\n*/\nWidget.prototype.addEventListener = function(type,handler) {\n\tvar self = this;\n\tif(typeof handler === \"string\") { // The handler is a method name on this widget\n\t\tthis.eventListeners[type] = function(event) {\n\t\t\treturn self[handler].call(self,event);\n\t\t};\n\t} else { // The handler is a function\n\t\tthis.eventListeners[type] = function(event) {\n\t\t\treturn handler.call(self,event);\n\t\t}\n\n\t}\n};\n\n/*\nDispatch an event to a widget. If the widget doesn't handle the event then it is also dispatched to the parent widget\n*/\nWidget.prototype.dispatchEvent = function(event) {\n\t// Dispatch the event if this widget handles it\n\tvar listener = this.eventListeners[event.type];\n\tif(listener) {\n\t\t// Don't propagate the event if the listener returned false\n\t\tif(!listener(event)) {\n\t\t\treturn false;\n\t\t}\n\t}\n\t// Dispatch the event to the parent widget\n\tif(this.parentWidget) {\n\t\treturn this.parentWidget.dispatchEvent(event);\n\t}\n\treturn true;\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nWidget.prototype.refresh = function(changedTiddlers) {\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nRebuild a previously rendered widget\n*/\nWidget.prototype.refreshSelf = function() {\n\tvar nextSibling = this.findNextSiblingDomNode();\n\tthis.removeChildDomNodes();\n\tthis.render(this.parentDomNode,nextSibling);\n};\n\n/*\nRefresh all the children of a widget\n*/\nWidget.prototype.refreshChildren = function(changedTiddlers) {\n\tvar self = this,\n\t\trefreshed = false;\n\t$tw.utils.each(this.children,function(childWidget) {\n\t\trefreshed = childWidget.refresh(changedTiddlers) || refreshed;\n\t});\n\treturn refreshed;\n};\n\n/*\nFind the next sibling in the DOM to this widget. This is done by scanning the widget tree through all next siblings and their descendents that share the same parent DOM node\n*/\nWidget.prototype.findNextSiblingDomNode = function(startIndex) {\n\t// Refer to this widget by its index within its parents children\n\tvar parent = this.parentWidget,\n\t\tindex = startIndex !== undefined ? startIndex : parent.children.indexOf(this);\nif(index === -1) {\n\tthrow \"node not found in parents children\";\n}\n\t// Look for a DOM node in the later siblings\n\twhile(++index < parent.children.length) {\n\t\tvar domNode = parent.children[index].findFirstDomNode();\n\t\tif(domNode) {\n\t\t\treturn domNode;\n\t\t}\n\t}\n\t// Go back and look for later siblings of our parent if it has the same parent dom node\n\tvar grandParent = parent.parentWidget;\n\tif(grandParent && parent.parentDomNode === this.parentDomNode) {\n\t\tindex = grandParent.children.indexOf(parent);\n\t\treturn parent.findNextSiblingDomNode(index);\n\t}\n\treturn null;\n};\n\n/*\nFind the first DOM node generated by a widget or its children\n*/\nWidget.prototype.findFirstDomNode = function() {\n\t// Return the first dom node of this widget, if we've got one\n\tif(this.domNodes.length > 0) {\n\t\treturn this.domNodes[0];\n\t}\n\t// Otherwise, recursively call our children\n\tfor(var t=0; t<this.children.length; t++) {\n\t\tvar domNode = this.children[t].findFirstDomNode();\n\t\tif(domNode) {\n\t\t\treturn domNode;\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nRemove any DOM nodes created by this widget or its children\n*/\nWidget.prototype.removeChildDomNodes = function() {\n\t// If this widget has directly created DOM nodes, delete them and exit. This assumes that any child widgets are contained within the created DOM nodes, which would normally be the case \n\tif(this.domNodes.length > 0) {\n\t\t$tw.utils.each(this.domNodes,function(domNode) {\n\t\t\tdomNode.parentNode.removeChild(domNode);\n\t\t});\n\t\tthis.domNodes = [];\n\t} else {\n\t\t// Otherwise, ask the child widgets to delete their DOM nodes\n\t\t$tw.utils.each(this.children,function(childWidget) {\n\t\t\tchildWidget.removeChildDomNodes();\n\t\t});\n\t}\n};\n\nexports.widget = Widget;\n\n})();\n",
"title": "$:/core/modules/widgets/widget.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/wiki.js": {
"text": "/*\\\ntitle: $:/core/modules/wiki.js\ntype: application/javascript\nmodule-type: wikimethod\n\nExtension methods for the $tw.Wiki object\n\nAdds the following properties to the wiki object:\n\n* `eventListeners` is a hashmap by type of arrays of listener functions\n* `changedTiddlers` is a hashmap describing changes to named tiddlers since wiki change events were last dispatched. Each entry is a hashmap containing two fields:\n\tmodified: true/false\n\tdeleted: true/false\n* `changeCount` is a hashmap by tiddler title containing a numerical index that starts at zero and is incremented each time a tiddler is created changed or deleted\n* `caches` is a hashmap by tiddler title containing a further hashmap of named cache objects. Caches are automatically cleared when a tiddler is modified or deleted\n* `globalCache` is a hashmap by cache name of cache objects that are cleared whenever any tiddler change occurs\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nvar USER_NAME_TITLE = \"$:/status/UserName\";\n\n/*\nGet the value of a text reference. Text references can have any of these forms:\n\t<tiddlertitle>\n\t<tiddlertitle>!!<fieldname>\n\t!!<fieldname> - specifies a field of the current tiddlers\n\t<tiddlertitle>##<index>\n*/\nexports.getTextReference = function(textRef,defaultText,currTiddlerTitle) {\n\tvar tr = $tw.utils.parseTextReference(textRef),\n\t\ttitle = tr.title || currTiddlerTitle;\n\tif(tr.field) {\n\t\tvar tiddler = this.getTiddler(title);\n\t\tif(tr.field === \"title\") { // Special case so we can return the title of a non-existent tiddler\n\t\t\treturn title;\n\t\t} else if(tiddler && $tw.utils.hop(tiddler.fields,tr.field)) {\n\t\t\treturn tiddler.getFieldString(tr.field);\n\t\t} else {\n\t\t\treturn defaultText;\n\t\t}\n\t} else if(tr.index) {\n\t\treturn this.extractTiddlerDataItem(title,tr.index,defaultText);\n\t} else {\n\t\treturn this.getTiddlerText(title,defaultText);\n\t}\n};\n\nexports.setTextReference = function(textRef,value,currTiddlerTitle) {\n\tvar tr = $tw.utils.parseTextReference(textRef),\n\t\ttitle,tiddler,fields;\n\t// Check if it is a reference to a tiddler\n\tif(tr.title && !tr.field) {\n\t\ttiddler = this.getTiddler(tr.title);\n\t\tthis.addTiddler(new $tw.Tiddler(tiddler,{title: tr.title,text: value},this.getModificationFields()));\n\t// Else check for a field reference\n\t} else if(tr.field) {\n\t\ttitle = tr.title || currTiddlerTitle;\n\t\ttiddler = this.getTiddler(title);\n\t\tif(tiddler) {\n\t\t\tfields = {};\n\t\t\tfields[tr.field] = value;\n\t\t\tthis.addTiddler(new $tw.Tiddler(tiddler,fields,this.getModificationFields()));\n\t\t}\n\t}\n};\n\nexports.deleteTextReference = function(textRef,currTiddlerTitle) {\n\tvar tr = $tw.utils.parseTextReference(textRef),\n\t\ttitle,tiddler,fields;\n\t// Check if it is a reference to a tiddler\n\tif(tr.title && !tr.field) {\n\t\tthis.deleteTiddler(tr.title);\n\t// Else check for a field reference\n\t} else if(tr.field) {\n\t\ttitle = tr.title || currTiddlerTitle;\n\t\ttiddler = this.getTiddler(title);\n\t\tif(tiddler && $tw.utils.hop(tiddler.fields,tr.field)) {\n\t\t\tfields = {};\n\t\t\tfields[tr.field] = undefined;\n\t\t\tthis.addTiddler(new $tw.Tiddler(tiddler,fields,this.getModificationFields()));\n\t\t}\n\t}\n};\n\nexports.addEventListener = function(type,listener) {\n\tthis.eventListeners = this.eventListeners || {};\n\tthis.eventListeners[type] = this.eventListeners[type] || [];\n\tthis.eventListeners[type].push(listener);\t\n};\n\nexports.removeEventListener = function(type,listener) {\n\tvar listeners = this.eventListeners[type];\n\tif(listeners) {\n\t\tvar p = listeners.indexOf(listener);\n\t\tif(p !== -1) {\n\t\t\tlisteners.splice(p,1);\n\t\t}\n\t}\n};\n\nexports.dispatchEvent = function(type /*, args */) {\n\tvar args = Array.prototype.slice.call(arguments,1),\n\t\tlisteners = this.eventListeners[type];\n\tif(listeners) {\n\t\tfor(var p=0; p<listeners.length; p++) {\n\t\t\tvar listener = listeners[p];\n\t\t\tlistener.apply(listener,args);\n\t\t}\n\t}\n};\n\n/*\nCauses a tiddler to be marked as changed, incrementing the change count, and triggers event handlers.\nThis method should be called after the changes it describes have been made to the wiki.tiddlers[] array.\n\ttitle: Title of tiddler\n\tisDeleted: defaults to false (meaning the tiddler has been created or modified),\n\t\ttrue if the tiddler has been created\n*/\nexports.enqueueTiddlerEvent = function(title,isDeleted) {\n\t// Record the touch in the list of changed tiddlers\n\tthis.changedTiddlers = this.changedTiddlers || {};\n\tthis.changedTiddlers[title] = this.changedTiddlers[title] || {};\n\tthis.changedTiddlers[title][isDeleted ? \"deleted\" : \"modified\"] = true;\n\t// Increment the change count\n\tthis.changeCount = this.changeCount || {};\n\tif($tw.utils.hop(this.changeCount,title)) {\n\t\tthis.changeCount[title]++;\n\t} else {\n\t\tthis.changeCount[title] = 1;\n\t}\n\t// Trigger events\n\tthis.eventListeners = this.eventListeners || [];\n\tif(!this.eventsTriggered) {\n\t\tvar self = this;\n\t\t$tw.utils.nextTick(function() {\n\t\t\tvar changes = self.changedTiddlers;\n\t\t\tself.changedTiddlers = {};\n\t\t\tself.eventsTriggered = false;\n\t\t\tself.dispatchEvent(\"change\",changes);\n\t\t});\n\t\tthis.eventsTriggered = true;\n\t}\n};\n\nexports.getChangeCount = function(title) {\n\tthis.changeCount = this.changeCount || {};\n\tif($tw.utils.hop(this.changeCount,title)) {\n\t\treturn this.changeCount[title];\n\t} else {\n\t\treturn 0;\n\t}\n};\n\nexports.deleteTiddler = function(title) {\n\tdelete this.tiddlers[title];\n\tthis.clearCache(title);\n\tthis.clearGlobalCache();\n\tthis.enqueueTiddlerEvent(title,true);\n};\n\nexports.tiddlerExists = function(title) {\n\treturn !!this.tiddlers[title];\n};\n\n/*\nGenerate an unused title from the specified base\n*/\nexports.generateNewTitle = function(baseTitle,options) {\n\toptions = options || {};\n\tvar c = 0,\n\t title = baseTitle;\n\twhile(this.tiddlerExists(title) || this.isShadowTiddler(title)) {\n\t\ttitle = baseTitle + \n\t\t\t(options.prefix || \" \") + \n\t\t\t(++c);\n\t};\n\treturn title;\n};\n\nexports.isSystemTiddler = function(title) {\n\treturn title.indexOf(\"$:/\") === 0;\n};\n\nexports.isTemporaryTiddler = function(title) {\n\treturn title.indexOf(\"$:/temp/\") === 0;\n};\n\n/*\nDetermines if a tiddler is a shadow tiddler, regardless of whether it has been overridden by a real tiddler\n*/\nexports.isShadowTiddler = function(title) {\n\treturn $tw.utils.hop(this.shadowTiddlers,title);\n};\n\nexports.isImageTiddler = function(title) {\n\tvar tiddler = this.getTiddler(title);\n\tif(tiddler) {\t\t\n\t\tvar contentTypeInfo = $tw.config.contentTypeInfo[tiddler.fields.type || \"text/vnd.tiddlywiki\"];\n\t\treturn !!contentTypeInfo && contentTypeInfo.flags.indexOf(\"image\") !== -1;\n\t} else {\n\t\treturn null;\n\t}\n};\n\nexports.addTiddler = function(tiddler) {\n\t// Check if we're passed a fields hashmap instead of a tiddler\n\tif(!(tiddler instanceof $tw.Tiddler)) {\n\t\ttiddler = new $tw.Tiddler(tiddler);\n\t}\n\t// Get the title\n\tvar title = tiddler.fields.title;\n\t// Save the tiddler\n\tif(title) {\n\t\tthis.tiddlers[title] = tiddler;\n\t\tthis.clearCache(title);\n\t\tthis.clearGlobalCache();\n\t\tthis.enqueueTiddlerEvent(title);\n\t}\n};\n\n/*\nLike addTiddler() except it will silently reject any plugin tiddlers that are older than the currently loaded version. Returns true if the tiddler was imported\n*/\nexports.importTiddler = function(tiddler) {\n\tvar existingTiddler = this.getTiddler(tiddler.fields.title);\n\t// Check if we're dealing with a plugin\n\tif(tiddler && tiddler.hasField(\"plugin-type\") && tiddler.hasField(\"version\") && existingTiddler && existingTiddler.hasField(\"plugin-type\") && existingTiddler.hasField(\"version\")) {\n\t\t// Reject the incoming plugin if it is older\n\t\tif($tw.utils.checkVersions(existingTiddler.fields.version,tiddler.fields.version)) {\n\t\t\treturn false;\n\t\t}\n\t}\n\t// Fall through to adding the tiddler\n\tthis.addTiddler(tiddler);\n\treturn true;\n};\n\n/*\nReturn a hashmap of the fields that should be set when a tiddler is created\n*/\nexports.getCreationFields = function() {\n\tvar fields = {\n\t\t\tcreated: new Date()\n\t\t},\n\t\tcreator = this.getTiddlerText(USER_NAME_TITLE);\n\tif(creator) {\n\t\tfields.creator = creator;\n\t}\n\treturn fields;\n};\n\n/*\nReturn a hashmap of the fields that should be set when a tiddler is modified\n*/\nexports.getModificationFields = function() {\n\tvar fields = {},\n\t\tmodifier = this.getTiddlerText(USER_NAME_TITLE);\n\tfields.modified = new Date();\n\tif(modifier) {\n\t\tfields.modifier = modifier;\n\t}\n\treturn fields;\n};\n\n/*\nReturn a sorted array of tiddler titles. Options include:\nsortField: field to sort by\nexcludeTag: tag to exclude\nincludeSystem: whether to include system tiddlers (defaults to false)\n*/\nexports.getTiddlers = function(options) {\n\toptions = options || {};\n\tvar self = this,\n\t\tsortField = options.sortField || \"title\",\n\t\ttiddlers = [], t, titles = [];\n\tfor(t in this.tiddlers) {\n\t\tif($tw.utils.hop(this.tiddlers,t)) {\n\t\t\tif(options.includeSystem || !this.isSystemTiddler(t)) {\n\t\t\t\tif(!options.excludeTag || !this.tiddlers[t].hasTag(options.excludeTag)) {\n\t\t\t\t\ttiddlers.push(this.tiddlers[t]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\ttiddlers.sort(function(a,b) {\n\t\tvar aa = a.fields[sortField].toLowerCase() || \"\",\n\t\t\tbb = b.fields[sortField].toLowerCase() || \"\";\n\t\tif(aa < bb) {\n\t\t\treturn -1;\n\t\t} else {\n\t\t\tif(aa > bb) {\n\t\t\t\treturn 1;\n\t\t\t} else {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t}\n\t});\n\tfor(t=0; t<tiddlers.length; t++) {\n\t\ttitles.push(tiddlers[t].fields.title);\n\t}\n\treturn titles;\n};\n\nexports.countTiddlers = function(excludeTag) {\n\tvar tiddlers = this.getTiddlers({excludeTag: excludeTag});\n\treturn $tw.utils.count(tiddlers);\n};\n\n/*\nSort an array of tiddler titles by a specified field\n\ttitles: array of titles (sorted in place)\n\tsortField: name of field to sort by\n\tisDescending: true if the sort should be descending\n\tisCaseSensitive: true if the sort should consider upper and lower case letters to be different\n*/\nexports.sortTiddlers = function(titles,sortField,isDescending,isCaseSensitive,isNumeric) {\n\tvar self = this;\n\ttitles.sort(function(a,b) {\n\t\tif(sortField !== \"title\") {\n\t\t\ta = self.getTiddler(a).fields[sortField] || \"\";\n\t\t\tb = self.getTiddler(b).fields[sortField] || \"\";\n\t\t}\n\t\tif(!isNumeric || isNaN(a) || isNaN(b)) {\n\t\t\tif(!isCaseSensitive) {\n\t\t\t\tif(typeof a === \"string\") {\n\t\t\t\t\ta = a.toLowerCase();\n\t\t\t\t}\n\t\t\t\tif(typeof b === \"string\") {\n\t\t\t\t\tb = b.toLowerCase();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\ta-= 0;\n\t\t\tb-= 0;\n\t\t}\n\t\tif(a < b) {\n\t\t\treturn isDescending ? +1 : -1;\n\t\t} else {\n\t\t\tif(a > b) {\n\t\t\t\treturn isDescending ? -1 : +1;\n\t\t\t} else {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t}\n\t});\n};\n\n/*\nFor every tiddler invoke a callback(title,tiddler) with `this` set to the wiki object. Options include:\nsortField: field to sort by\nexcludeTag: tag to exclude\nincludeSystem: whether to include system tiddlers (defaults to false)\n*/\nexports.forEachTiddler = function(/* [options,]callback */) {\n\tvar arg = 0,\n\t\toptions = arguments.length >= 2 ? arguments[arg++] : {},\n\t\tcallback = arguments[arg++],\n\t\ttitles = this.getTiddlers(options),\n\t\tt, tiddler;\n\tfor(t=0; t<titles.length; t++) {\n\t\ttiddler = this.tiddlers[titles[t]];\n\t\tif(tiddler) {\n\t\t\tcallback.call(this,tiddler.fields.title,tiddler);\n\t\t}\n\t}\n};\n\n/*\nReturn an array of tiddler titles that are directly linked from the specified tiddler\n*/\nexports.getTiddlerLinks = function(title) {\n\tvar self = this;\n\t// We'll cache the links so they only get computed if the tiddler changes\n\treturn this.getCacheForTiddler(title,\"links\",function() {\n\t\t// Parse the tiddler\n\t\tvar parser = self.parseTiddler(title);\n\t\t// Count up the links\n\t\tvar links = [],\n\t\t\tcheckParseTree = function(parseTree) {\n\t\t\t\tfor(var t=0; t<parseTree.length; t++) {\n\t\t\t\t\tvar parseTreeNode = parseTree[t];\n\t\t\t\t\tif(parseTreeNode.type === \"link\" && parseTreeNode.attributes.to && parseTreeNode.attributes.to.type === \"string\") {\n\t\t\t\t\t\tvar value = parseTreeNode.attributes.to.value;\n\t\t\t\t\t\tif(links.indexOf(value) === -1) {\n\t\t\t\t\t\t\tlinks.push(value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif(parseTreeNode.children) {\n\t\t\t\t\t\tcheckParseTree(parseTreeNode.children);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\tif(parser) {\n\t\t\tcheckParseTree(parser.tree);\n\t\t}\n\t\treturn links;\n\t});\n};\n\n/*\nReturn an array of tiddler titles that link to the specified tiddler\n*/\nexports.getTiddlerBacklinks = function(targetTitle) {\n\tvar self = this,\n\t\tbacklinks = [];\n\tthis.forEachTiddler(function(title,tiddler) {\n\t\tvar links = self.getTiddlerLinks(title);\n\t\tif(links.indexOf(targetTitle) !== -1) {\n\t\t\tbacklinks.push(title);\n\t\t}\n\t});\n\treturn backlinks;\n};\n\n/*\nReturn a hashmap of tiddler titles that are referenced but not defined. Each value is the number of times the missing tiddler is referenced\n*/\nexports.getMissingTitles = function() {\n\tvar self = this,\n\t\tmissing = [];\n// We should cache the missing tiddler list, even if we recreate it every time any tiddler is modified\n\tthis.forEachTiddler(function(title,tiddler) {\n\t\tvar links = self.getTiddlerLinks(title);\n\t\t$tw.utils.each(links,function(link) {\n\t\t\tif((!self.tiddlerExists(link) && !self.isShadowTiddler(link)) && missing.indexOf(link) === -1) {\n\t\t\t\tmissing.push(link);\n\t\t\t}\n\t\t});\n\t});\n\treturn missing;\n};\n\nexports.getOrphanTitles = function() {\n\tvar self = this,\n\t\torphans = this.getTiddlers();\n\tthis.forEachTiddler(function(title,tiddler) {\n\t\tvar links = self.getTiddlerLinks(title);\n\t\t$tw.utils.each(links,function(link) {\n\t\t\tvar p = orphans.indexOf(link);\n\t\t\tif(p !== -1) {\n\t\t\t\torphans.splice(p,1);\n\t\t\t}\n\t\t});\n\t});\n\treturn orphans; // Todo\n};\n\nexports.getSystemTitles = function() {\n\tvar titles = [];\n\tfor(var title in this.tiddlers) {\n\t\tif(this.isSystemTiddler(title)) {\n\t\t\ttitles.push(title);\n\t\t}\n\t}\n\ttitles.sort();\n\treturn titles;\n};\n\nexports.getShadowTitles = function() {\n\tvar titles = [];\n\tfor(var title in this.shadowTiddlers) {\n\t\ttitles.push(title);\n\t}\n\ttitles.sort();\n\treturn titles;\n};\n\n/*\nRetrieves a list of the tiddler titles that are tagged with a given tag\n*/\nexports.getTiddlersWithTag = function(tag) {\n\tvar self = this;\n\treturn this.getGlobalCache(\"taglist-\" + tag,function() {\n\t\tvar tagmap = self.getTagMap();\n\t\treturn self.sortByList(tagmap[tag],tag);\n\t});\n};\n\n/*\nGet a hashmap by tag of arrays of tiddler titles\n*/\nexports.getTagMap = function() {\n\tvar self = this;\n\treturn this.getGlobalCache(\"tagmap\",function() {\n\t\tvar tags = {};\n\t\t// Collect up all the tags\n\t\tfor(var title in self.tiddlers) {\n\t\t\tvar tiddler = self.tiddlers[title];\n\t\t\tif(tiddler.fields.tags) {\n\t\t\t\tfor(var index=0; index<tiddler.fields.tags.length; index++) {\n\t\t\t\t\tvar tag = tiddler.fields.tags[index];\n\t\t\t\t\tif(tags[tag]) {\n\t\t\t\t\t\ttags[tag].push(title)\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttags[tag] = [title];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn tags;\n\t});\n};\n\n/*\nLookup a given tiddler and return a list of all the tiddlers that include it in their list\n*/\nexports.findListingsOfTiddler = function(targetTitle) {\n\t// Get the list associated with the tag\n\tvar titles = [];\n\tfor(var title in this.tiddlers) {\n\t\tvar tiddler = this.tiddlers[title];\n\t\tif($tw.utils.isArray(tiddler.fields.list) && tiddler.fields.list.indexOf(targetTitle) !== -1) {\n\t\t\ttitles.push(title);\n\t\t}\n\t}\n\treturn titles;\n};\n\n/*\nSorts an array of tiddler titles according to an ordered list\n*/\nexports.sortByList = function(array,listTitle) {\n\tvar list = this.getTiddlerList(listTitle);\n\tif(!array || array.length === 0) {\n\t\treturn [];\n\t} else if(list) {\n\t\tvar titles = [], t, title;\n\t\t// First place any entries that are present in the list\n\t\tfor(t=0; t<list.length; t++) {\n\t\t\ttitle = list[t];\n\t\t\tif(array.indexOf(title) !== -1) {\n\t\t\t\ttitles.push(title);\n\t\t\t}\n\t\t}\n\t\t// Then place any remaining entries\n\t\tfor(t=0; t<array.length; t++) {\n\t\t\ttitle = array[t];\n\t\t\tif(list.indexOf(title) === -1) {\n\t\t\t\ttitles.push(title);\n\t\t\t}\n\t\t}\n\t\treturn titles;\n\t} else {\n\t\treturn array;\n\t}\n};\n\n/*\nRetrieve a tiddler as a JSON string of the fields\n*/\nexports.getTiddlerAsJson = function(title) {\n\tvar tiddler = this.getTiddler(title);\n\tif(tiddler) {\n\t\tvar fields = {};\n\t\t$tw.utils.each(tiddler.fields,function(value,name) {\n\t\t\tfields[name] = tiddler.getFieldString(name);\n\t\t});\n\t\treturn JSON.stringify(fields);\n\t} else {\n\t\treturn JSON.stringify({title: title});\n\t}\n};\n\n/*\nGet a tiddlers content as a JavaScript object. How this is done depends on the type of the tiddler:\n\napplication/json: the tiddler JSON is parsed into an object\napplication/x-tiddler-dictionary: the tiddler is parsed as sequence of name:value pairs\n\nOther types currently just return null.\n*/\nexports.getTiddlerData = function(title,defaultData) {\n\tvar tiddler = this.getTiddler(title),\n\t\tdata;\n\tif(tiddler && tiddler.fields.text) {\n\t\tswitch(tiddler.fields.type) {\n\t\t\tcase \"application/json\":\n\t\t\t\t// JSON tiddler\n\t\t\t\ttry {\n\t\t\t\t\tdata = JSON.parse(tiddler.fields.text);\n\t\t\t\t} catch(ex) {\n\t\t\t\t\treturn defaultData;\n\t\t\t\t}\n\t\t\t\treturn data;\n\t\t\tcase \"application/x-tiddler-dictionary\":\n\t\t\t\treturn $tw.utils.parseFields(tiddler.fields.text);\n\t\t}\n\t}\n\treturn defaultData;\n};\n\n/*\nExtract an indexed field from within a data tiddler\n*/\nexports.extractTiddlerDataItem = function(title,index,defaultText) {\n\tvar data = this.getTiddlerData(title,{}),\n\t\ttext;\n\tif(data && $tw.utils.hop(data,index)) {\n\t\ttext = data[index];\n\t}\n\tif(typeof text === \"string\" || typeof text === \"number\") {\n\t\treturn text.toString();\n\t} else {\n\t\treturn defaultText;\n\t}\n};\n\n/*\nSet a tiddlers content to a JavaScript object. Currently this is done by setting the tiddler's type to \"application/json\" and setting the text to the JSON text of the data.\ntitle: title of tiddler\ndata: object that can be serialised to JSON\nfields: optional hashmap of additional tiddler fields to be set\n*/\nexports.setTiddlerData = function(title,data,fields) {\n\tvar existingTiddler = this.getTiddler(title),\n\t\tnewFields = {\n\t\t\ttitle: title\n\t};\n\tif(existingTiddler && existingTiddler.fields.type === \"application/x-tiddler-dictionary\") {\n\t\tnewFields.text = $tw.utils.makeTiddlerDictionary(data);\n\t} else {\n\t\tnewFields.type = \"application/json\";\n\t\tnewFields.text = JSON.stringify(data,null,$tw.config.preferences.jsonSpaces);\n\t}\n\tthis.addTiddler(new $tw.Tiddler(existingTiddler,fields,newFields,this.getModificationFields()));\n};\n\n/*\nReturn the content of a tiddler as an array containing each line\n*/\nexports.getTiddlerList = function(title,field,index) {\n\tif(index) {\n\t\treturn $tw.utils.parseStringArray(this.extractTiddlerDataItem(title,index,\"\"));\n\t}\n\tfield = field || \"list\";\n\tvar tiddler = this.getTiddler(title);\n\tif(tiddler) {\n\t\treturn ($tw.utils.parseStringArray(tiddler.fields[field]) || []).slice(0);\n\t}\n\treturn [];\n};\n\n// Return a named global cache object. Global cache objects are cleared whenever a tiddler change occurs\nexports.getGlobalCache = function(cacheName,initializer) {\n\tthis.globalCache = this.globalCache || {};\n\tif($tw.utils.hop(this.globalCache,cacheName)) {\n\t\treturn this.globalCache[cacheName];\n\t} else {\n\t\tthis.globalCache[cacheName] = initializer();\n\t\treturn this.globalCache[cacheName];\n\t}\n};\n\nexports.clearGlobalCache = function() {\n\tthis.globalCache = {};\n}\n\n// Return the named cache object for a tiddler. If the cache doesn't exist then the initializer function is invoked to create it\nexports.getCacheForTiddler = function(title,cacheName,initializer) {\n\n// Temporarily disable caching so that tweakParseTreeNode() works\nreturn initializer();\n\n\tthis.caches = this.caches || {};\n\tvar caches = this.caches[title];\n\tif(caches && caches[cacheName]) {\n\t\treturn caches[cacheName];\n\t} else {\n\t\tif(!caches) {\n\t\t\tcaches = {};\n\t\t\tthis.caches[title] = caches;\n\t\t}\n\t\tcaches[cacheName] = initializer();\n\t\treturn caches[cacheName];\n\t}\n};\n\n// Clear all caches associated with a particular tiddler\nexports.clearCache = function(title) {\n\tthis.caches = this.caches || {};\n\tif($tw.utils.hop(this.caches,title)) {\n\t\tdelete this.caches[title];\n\t}\n};\n\nexports.initParsers = function(moduleType) {\n\t// Install the parser modules\n\t$tw.Wiki.parsers = {};\n\tvar self = this;\n\t$tw.modules.forEachModuleOfType(\"parser\",function(title,module) {\n\t\tfor(var f in module) {\n\t\t\tif($tw.utils.hop(module,f)) {\n\t\t\t\t$tw.Wiki.parsers[f] = module[f]; // Store the parser class\n\t\t\t}\n\t\t}\n\t});\n};\n\n/*\nParse a block of text of a specified MIME type\n\ttype: content type of text to be parsed\n\ttext: text\n\toptions: see below\nOptions include:\n\tparseAsInline: if true, the text of the tiddler will be parsed as an inline run\n*/\nexports.old_parseText = function(type,text,options) {\n\toptions = options || {};\n\t// Select a parser\n\tvar Parser = $tw.Wiki.parsers[type];\n\tif(!Parser && $tw.config.fileExtensionInfo[type]) {\n\t\tParser = $tw.Wiki.parsers[$tw.config.fileExtensionInfo[type].type];\n\t}\n\tif(!Parser) {\n\t\tParser = $tw.Wiki.parsers[options.defaultType || \"text/vnd.tiddlywiki\"];\n\t}\n\tif(!Parser) {\n\t\treturn null;\n\t}\n\t// Return the parser instance\n\treturn new Parser(type,text,{\n\t\tparseAsInline: options.parseAsInline,\n\t\twiki: this\n\t});\n};\n\n/*\nParse a tiddler according to its MIME type\n*/\nexports.old_parseTiddler = function(title,options) {\n\toptions = options || {};\n\tvar cacheType = options.parseAsInline ? \"newInlineParseTree\" : \"newBlockParseTree\",\n\t\ttiddler = this.getTiddler(title),\n\t\tself = this;\n\treturn tiddler ? this.getCacheForTiddler(title,cacheType,function() {\n\t\t\treturn self.old_parseText(tiddler.fields.type,tiddler.fields.text,options);\n\t\t}) : null;\n};\n\n// We need to tweak parse trees generated by the existing parser because of the change from {type:\"element\",tag:\"$tiddler\",...} to {type:\"tiddler\",...}\nvar tweakParseTreeNode = function(node) {\n\tif(node.type === \"element\" && node.tag.charAt(0) === \"$\") {\n\t\tnode.type = node.tag.substr(1);\n\t\tdelete node.tag;\n\t}\n\ttweakParseTreeNodes(node.children);\n};\n\nvar tweakParseTreeNodes = function(nodeList) {\n\t$tw.utils.each(nodeList,tweakParseTreeNode);\n};\n\nvar tweakMacroDefinition = function(nodeList) {\n\tif(nodeList && nodeList[0] && nodeList[0].type === \"macrodef\") {\n\t\tnodeList[0].type = \"set\";\n\t\tnodeList[0].attributes = {\n\t\t\tname: {type: \"string\", value: nodeList[0].name},\n\t\t\tvalue: {type: \"string\", value: nodeList[0].text}\n\t\t};\n\t\tnodeList[0].children = nodeList.slice(1);\n\t\tnodeList.splice(1,nodeList.length-1);\n\t\ttweakMacroDefinition(nodeList[0].children);\n\t}\n};\n\nvar tweakParser = function(parser) {\n\t// Move any macro definitions to contain the body tree\n\ttweakMacroDefinition(parser.tree);\n\t// Tweak widgets\n\ttweakParseTreeNodes(parser.tree);\n};\n\nexports.parseText = function(type,text,options) {\n\tvar parser = this.old_parseText(type,text,options);\n\tif(parser) {\n\t\ttweakParser(parser)\n\t};\n\treturn parser;\n};\n\nexports.parseTiddler = function(title,options) {\n\tvar parser = this.old_parseTiddler(title,options);\n\tif(parser) {\n\t\ttweakParser(parser)\n\t};\n\treturn parser;\n};\n\nexports.parseTextReference = function(title,field,index,options) {\n\tif(field === \"text\" || (!field && !index)) {\n\t\t// Force the tiddler to be lazily loaded\n\t\tthis.getTiddlerText(title);\n\t\t// Parse it\n\t\treturn this.parseTiddler(title,options);\n\t} else {\n\t\tvar text;\n\t\tif(field) {\n\t\t\tif(field === \"title\") {\n\t\t\t\ttext = title;\n\t\t\t} else {\n\t\t\t\tvar tiddler = this.getTiddler(title);\n\t\t\t\tif(!tiddler || !tiddler.hasField(field)) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\ttext = tiddler.fields[field];\n\t\t\t}\n\t\t\treturn this.parseText(\"text/vnd.tiddlywiki\",text.toString(),options);\n\t\t} else if(index) {\n\t\t\ttext = this.extractTiddlerDataItem(title,index,\"\");\n\t\t\tif(text === undefined) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn this.parseText(\"text/vnd.tiddlywiki\",text,options);\n\t\t}\n\t}\n};\n\n/*\nMake a widget tree for a parse tree\nparser: parser object\noptions: see below\nOptions include:\ndocument: optional document to use\nvariables: hashmap of variables to set\nparentWidget: optional parent widget for the root node\n*/\nexports.makeWidget = function(parser,options) {\n\toptions = options || {};\n\tvar widgetNode = {\n\t\t\ttype: \"widget\",\n\t\t\tchildren: []\n\t\t},\n\t\tcurrWidgetNode = widgetNode;\n\t// Create set variable widgets for each variable\n\t$tw.utils.each(options.variables,function(value,name) {\n\t\tvar setVariableWidget = {\n\t\t\ttype: \"set\",\n\t\t\tattributes: {\n\t\t\t\tname: {type: \"string\", value: name},\n\t\t\t\tvalue: {type: \"string\", value: value}\n\t\t\t},\n\t\t\tchildren: []\n\t\t};\n\t\tcurrWidgetNode.children = [setVariableWidget];\n\t\tcurrWidgetNode = setVariableWidget;\n\t});\n\t// Add in the supplied parse tree nodes\n\tcurrWidgetNode.children = parser ? parser.tree : [];\n\t// Create the widget\n\treturn new widget.widget(widgetNode,{\n\t\twiki: this,\n\t\tdocument: options.document || $tw.fakeDocument,\n\t\tparentWidget: options.parentWidget\n\t});\n};\n\n/*\nParse text in a specified format and render it into another format\n\toutputType: content type for the output\n\ttextType: content type of the input text\n\ttext: input text\n\toptions: see below\nOptions include:\nvariables: hashmap of variables to set\nparentWidget: optional parent widget for the root node\n*/\nexports.renderText = function(outputType,textType,text,options) {\n\toptions = options || {};\n\tvar parser = this.parseText(textType,text,options),\n\t\twidgetNode = this.makeWidget(parser,options);\n\tvar container = $tw.fakeDocument.createElement(\"div\");\n\twidgetNode.render(container,null);\n\treturn outputType === \"text/html\" ? container.innerHTML : container.textContent;\n};\n\n/*\nParse text from a tiddler and render it into another format\n\toutputType: content type for the output\n\ttitle: title of the tiddler to be rendered\n\toptions: see below\nOptions include:\nvariables: hashmap of variables to set\nparentWidget: optional parent widget for the root node\n*/\nexports.renderTiddler = function(outputType,title,options) {\n\toptions = options || {};\n\tvar parser = this.parseTiddler(title,options),\n\t\twidgetNode = this.makeWidget(parser,options);\n\tvar container = $tw.fakeDocument.createElement(\"div\");\n\twidgetNode.render(container,null);\n\treturn outputType === \"text/html\" ? container.innerHTML : (outputType === \"text/plain-formatted\" ? container.formattedTextContent : container.textContent);\n};\n\n/*\nReturn an array of tiddler titles that match a search string\n\ttext: The text string to search for\n\toptions: see below\nOptions available:\n\ttitles: Hashmap or array of tiddler titles to limit search\n\texclude: An array of tiddler titles to exclude from the search\n\tinvert: If true returns tiddlers that do not contain the specified string\n\tcaseSensitive: If true forces a case sensitive search\n\tliteral: If true, searches for literal string, rather than separate search terms\n*/\nexports.search = function(text,options) {\n\toptions = options || {};\n\tvar self = this,t;\n\t// Convert the search string into a regexp for each term\n\tvar terms, searchTermsRegExps,\n\t\tflags = options.caseSensitive ? \"\" : \"i\";\n\tif(options.literal) {\n\t\tif(text.length === 0) {\n\t\t\tsearchTermsRegExps = null;\n\t\t} else {\n\t\t\tsearchTermsRegExps = [new RegExp(\"(\" + $tw.utils.escapeRegExp(text) + \")\",flags)];\n\t\t}\n\t} else {\n\t\tterms = text.split(/ +/);\n\t\tif(terms.length === 1 && terms[0] === \"\") {\n\t\t\tsearchTermsRegExps = null;\n\t\t} else {\n\t\t\tsearchTermsRegExps = [];\n\t\t\tfor(t=0; t<terms.length; t++) {\n\t\t\t\tsearchTermsRegExps.push(new RegExp(\"(\" + $tw.utils.escapeRegExp(terms[t]) + \")\",flags));\n\t\t\t}\n\t\t}\n\t}\n\t// Function to check a given tiddler for the search term\n\tvar searchTiddler = function(title) {\n\t\tif(!searchTermsRegExps) {\n\t\t\treturn true;\n\t\t}\n\t\tvar tiddler = self.getTiddler(title);\n\t\tif(!tiddler) {\n\t\t\ttiddler = new $tw.Tiddler({title: title, text: \"\", type: \"text/vnd.tiddlywiki\"});\n\t\t}\n\t\tvar contentTypeInfo = $tw.config.contentTypeInfo[tiddler.fields.type] || $tw.config.contentTypeInfo[\"text/vnd.tiddlywiki\"],\n\t\t\tmatch;\n\t\tfor(var t=0; t<searchTermsRegExps.length; t++) {\n\t\t\t// Search title, tags and body\n\t\t\tmatch = false;\n\t\t\tif(contentTypeInfo.encoding === \"utf8\") {\n\t\t\t\tmatch = match || searchTermsRegExps[t].test(tiddler.fields.text);\n\t\t\t}\n\t\t\tvar tags = tiddler.fields.tags ? tiddler.fields.tags.join(\"\\0\") : \"\";\n\t\t\tmatch = match || searchTermsRegExps[t].test(tags) || searchTermsRegExps[t].test(tiddler.fields.title);\n\t\t\tif(!match) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t};\n\t// Loop through all the tiddlers doing the search\n\tvar results = [];\n\tif($tw.utils.isArray(options.titles)) {\n\t\tfor(t=0; t<options.titles.length; t++) {\n\t\t\tif(!!searchTiddler(options.titles[t]) === !options.invert) {\n\t\t\t\tresults.push(options.titles[t]);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tvar source = options.titles || this.tiddlers;\n\t\tfor(t in source) {\n\t\t\tif(!!searchTiddler(t) === !options.invert) {\n\t\t\t\tresults.push(t);\n\t\t\t}\n\t\t}\n\t}\n\t// Remove any of the results we have to exclude\n\tif(options.exclude) {\n\t\tfor(t=0; t<options.exclude.length; t++) {\n\t\t\tvar p = results.indexOf(options.exclude[t]);\n\t\t\tif(p !== -1) {\n\t\t\t\tresults.splice(p,1);\n\t\t\t}\n\t\t}\n\t}\n\treturn results;\n};\n\n/*\nTrigger a load for a tiddler if it is skinny. Returns the text, or undefined if the tiddler is missing, null if the tiddler is being lazily loaded.\n*/\nexports.getTiddlerText = function(title,defaultText) {\n\tvar tiddler = this.getTiddler(title);\n\t// Return undefined if the tiddler isn't found\n\tif(!tiddler) {\n\t\treturn defaultText;\n\t}\n\tif(tiddler.fields.text !== undefined) {\n\t\t// Just return the text if we've got it\n\t\treturn tiddler.fields.text;\n\t} else {\n\t\t// Tell any listeners about the need to lazily load this tiddler\n\t\tthis.dispatchEvent(\"lazyLoad\",title);\n\t\t// Indicate that the text is being loaded\n\t\treturn null;\n\t}\n};\n\n/*\nRead an array of browser File objects, invoking callback(tiddlerFieldsArray) once they're all read\n*/\nexports.readFiles = function(files,callback) {\n\tvar result = [],\n\t\toutstanding = files.length;\n\tfor(var f=0; f<files.length; f++) {\n\t\tthis.readFile(files[f],function(tiddlerFieldsArray) {\n\t\t\tresult.push.apply(result,tiddlerFieldsArray);\n\t\t\tif(--outstanding === 0) {\n\t\t\t\tcallback(result);\n\t\t\t}\n\t\t});\n\t};\n\treturn files.length;\n};\n\n/*\nRead a browser File object, invoking callback(tiddlerFieldsArray) with an array of tiddler fields objects\n*/\nexports.readFile = function(file,callback) {\n\t// Get the type, falling back to the filename extension\n\tvar self = this,\n\t\ttype = file.type;\n\tif(type === \"\" || !type) {\n\t\tvar dotPos = file.name.lastIndexOf(\".\");\n\t\tif(dotPos !== -1) {\n\t\t\tvar fileExtensionInfo = $tw.config.fileExtensionInfo[file.name.substr(dotPos)];\n\t\t\tif(fileExtensionInfo) {\n\t\t\t\ttype = fileExtensionInfo.type;\n\t\t\t}\n\t\t}\n\t}\n\t// Figure out if we're reading a binary file\n\tvar contentTypeInfo = $tw.config.contentTypeInfo[type],\n\t\tisBinary = contentTypeInfo ? contentTypeInfo.encoding === \"base64\" : false;\n\t// Create the FileReader\n\tvar reader = new FileReader();\n\t// Onload\n\treader.onload = function(event) {\n\t\t// Deserialise the file contents\n\t\tvar text = event.target.result,\n\t\t\ttiddlerFields = {title: file.name || \"Untitled\", type: type};\n\t\t// Are we binary?\n\t\tif(isBinary) {\n\t\t\t// The base64 section starts after the first comma in the data URI\n\t\t\tvar commaPos = text.indexOf(\",\");\n\t\t\tif(commaPos !== -1) {\n\t\t\t\ttiddlerFields.text = text.substr(commaPos+1);\n\t\t\t\tcallback([tiddlerFields]);\n\t\t\t}\n\t\t} else {\n\t\t\t// Check whether this is an encrypted TiddlyWiki file\n\t\t\tvar encryptedJson = $tw.utils.extractEncryptedStoreArea(text);\n\t\t\tif(encryptedJson) {\n\t\t\t\t// If so, attempt to decrypt it with the current password\n\t\t\t\t$tw.utils.decryptStoreAreaInteractive(encryptedJson,function(tiddlers) {\n\t\t\t\t\tcallback(tiddlers);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t// Otherwise, just try to deserialise any tiddlers in the file\n\t\t\t\tcallback(self.deserializeTiddlers(type,text,tiddlerFields));\n\t\t\t}\n\t\t}\n\t};\n\t// Kick off the read\n\tif(isBinary) {\n\t\treader.readAsDataURL(file);\n\t} else {\n\t\treader.readAsText(file);\n\t}\n};\n\n})();\n",
"title": "$:/core/modules/wiki.js",
"type": "application/javascript",
"module-type": "wikimethod"
},
"$:/palettes/Blanca": {
"title": "$:/palettes/Blanca",
"name": "Blanca",
"description": "A clean white palette to let you focus",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #ffffff\nblockquote-bar: <<colour muted-foreground>>\ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndownload-background: #66cccc\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: \nexternal-link-background-visited: \nexternal-link-background: \nexternal-link-foreground-hover: \nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333333\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #999999\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #ffffff\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #7897f3\nsidebar-controls-foreground-hover: #000000\nsidebar-controls-foreground: #ccc\nsidebar-foreground-shadow: rgba(255,255,255, 0.8)\nsidebar-foreground: #acacac\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #c0c0c0\nsidebar-tab-background-selected: #ffffff\nsidebar-tab-background: <<colour tab-background>>\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: <<colour tab-divider>>\nsidebar-tab-foreground-selected: \nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #444444\nsidebar-tiddler-link-foreground: #7897f3\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: #fffffffff\ntab-background: #eeeeee\ntab-border-selected: #cccccc\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #ffeedd\ntag-foreground: #000\ntiddler-background: <<colour background>>\ntiddler-border: #eee\ntiddler-controls-foreground-hover: #888888\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #f8f8f8\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #f8f8f8\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #ff9900\ntoolbar-new-button:\ntoolbar-options-button:\ntoolbar-save-button:\ntoolbar-info-button:\ntoolbar-edit-button:\ntoolbar-close-button:\ntoolbar-delete-button:\ntoolbar-cancel-button:\ntoolbar-done-button:\nuntagged-background: #999999\nvery-muted-foreground: #888888\n"
},
"$:/palettes/Blue": {
"title": "$:/palettes/Blue",
"name": "Blue",
"description": "A blue theme",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #fff\nblockquote-bar: <<colour muted-foreground>>\ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndownload-background: #34c734\ndownload-foreground: <<colour foreground>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: \nexternal-link-background-visited: \nexternal-link-background: \nexternal-link-foreground-hover: \nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333353\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #999999\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #ddddff\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #5778d8\nsidebar-controls-foreground-hover: #000000\nsidebar-controls-foreground: #ffffff\nsidebar-foreground-shadow: rgba(255,255,255, 0.8)\nsidebar-foreground: #acacac\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #c0c0c0\nsidebar-tab-background-selected: <<colour page-background>>\nsidebar-tab-background: <<colour tab-background>>\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: <<colour tab-divider>>\nsidebar-tab-foreground-selected: \nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #444444\nsidebar-tiddler-link-foreground: #5959c0\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: <<colour background>>\ntab-background: #ccccdd\ntab-border-selected: #ccccdd\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #eeeeff\ntag-foreground: #000\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #666666\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #ffffff\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #ffffff\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #5959c0\ntoolbar-new-button: #5eb95e\ntoolbar-options-button: rgb(128, 88, 165)\ntoolbar-save-button: #0e90d2\ntoolbar-info-button: #0e90d2\ntoolbar-edit-button: rgb(243, 123, 29)\ntoolbar-close-button: #dd514c\ntoolbar-delete-button: #dd514c\ntoolbar-cancel-button: rgb(243, 123, 29)\ntoolbar-done-button: #5eb95e\nuntagged-background: #999999\nvery-muted-foreground: #888888\n"
},
"$:/palettes/Contrast": {
"title": "$:/palettes/Contrast",
"name": "Contrast",
"description": "High contrast and unambiguous",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #ffffff\nblockquote-bar: <<colour muted-foreground>>\ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndownload-background: #34c734\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: \nexternal-link-background-visited: \nexternal-link-background: \nexternal-link-foreground-hover: \nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333333\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #999999\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #000000\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #5778d8\nsidebar-controls-foreground-hover: #000000\nsidebar-controls-foreground: #ffffff\nsidebar-foreground-shadow: rgba(255,0,0, 0.5)\nsidebar-foreground: #ffffff\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #c0c0c0\nsidebar-tab-background-selected: #ececec\nsidebar-tab-background: <<colour tab-background>>\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: <<colour tab-divider>>\nsidebar-tab-foreground-selected: \nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #444444\nsidebar-tiddler-link-foreground: #999999\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: #ffffff\ntab-background: #d8d8d8\ntab-border-selected: #d8d8d8\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #d5ad34\ntag-foreground: #ffffff\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #888888\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #f8f8f8\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #f8f8f8\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #182955\ntoolbar-new-button:\ntoolbar-options-button:\ntoolbar-save-button:\ntoolbar-info-button:\ntoolbar-edit-button:\ntoolbar-close-button:\ntoolbar-delete-button:\ntoolbar-cancel-button:\ntoolbar-done-button:\nuntagged-background: #999999\nvery-muted-foreground: #888888\n"
},
"$:/palettes/Rocker": {
"title": "$:/palettes/Rocker",
"name": "Rocker",
"description": "A dark theme",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #ffffff\nblockquote-bar: <<colour muted-foreground>>\ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndownload-background: #34c734\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: \nexternal-link-background-visited: \nexternal-link-background: \nexternal-link-foreground-hover: \nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333333\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #999999\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #000\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #cc0000\nsidebar-controls-foreground-hover: #000000\nsidebar-controls-foreground: #ffffff\nsidebar-foreground-shadow: rgba(255,255,255, 0.0)\nsidebar-foreground: #acacac\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #c0c0c0\nsidebar-tab-background-selected: #000\nsidebar-tab-background: <<colour tab-background>>\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: <<colour tab-divider>>\nsidebar-tab-foreground-selected: \nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #ffbb99\nsidebar-tiddler-link-foreground: #cc0000\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: #ffffff\ntab-background: #d8d8d8\ntab-border-selected: #d8d8d8\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #ffbb99\ntag-foreground: #000\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #888888\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #f8f8f8\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #f8f8f8\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #cc0000\ntoolbar-new-button:\ntoolbar-options-button:\ntoolbar-save-button:\ntoolbar-info-button:\ntoolbar-edit-button:\ntoolbar-close-button:\ntoolbar-delete-button:\ntoolbar-cancel-button:\ntoolbar-done-button:\nuntagged-background: #999999\nvery-muted-foreground: #888888\n"
},
"$:/palettes/Vanilla": {
"title": "$:/palettes/Vanilla",
"name": "Vanilla",
"description": "Pale and unobtrusive",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #ffffff\nblockquote-bar: <<colour muted-foreground>>\ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndownload-background: #34c734\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: \nexternal-link-background-visited: \nexternal-link-background: \nexternal-link-foreground-hover: \nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333333\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #999999\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #ececec\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #5778d8\nsidebar-controls-foreground-hover: #000000\nsidebar-controls-foreground: #ffffff\nsidebar-foreground-shadow: rgba(255,255,255, 0.8)\nsidebar-foreground: #acacac\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #c0c0c0\nsidebar-tab-background-selected: #ececec\nsidebar-tab-background: <<colour tab-background>>\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: #e4e4e4\nsidebar-tab-foreground-selected: \nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #444444\nsidebar-tiddler-link-foreground: #999999\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: #ffffff\ntab-background: #d8d8d8\ntab-border-selected: #d8d8d8\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #d5ad34\ntag-foreground: #ffffff\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #888888\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #f8f8f8\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #f8f8f8\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #182955\ntoolbar-new-button:\ntoolbar-options-button:\ntoolbar-save-button:\ntoolbar-info-button:\ntoolbar-edit-button:\ntoolbar-close-button:\ntoolbar-delete-button:\ntoolbar-cancel-button:\ntoolbar-done-button:\nuntagged-background: #999999\nvery-muted-foreground: #888888\n"
},
"$:/core/templates/MOTW.html": {
"title": "$:/core/templates/MOTW.html",
"text": "\\rules only filteredtranscludeinline transcludeinline entity\n<!-- The following comment is called a MOTW comment and is necessary for the TiddlyIE Internet Explorer extension -->\n<!-- saved from url=(0021)http://tiddlywiki.com --> "
},
"$:/core/templates/alltiddlers.content": {
"title": "$:/core/templates/alltiddlers.content",
"text": "{{{ [!is[system]sort[title]] ||$:/core/templates/static-tiddler}}}"
},
"$:/core/templates/alltiddlers.template.html": {
"title": "$:/core/templates/alltiddlers.template.html",
"type": "text/vnd.tiddlywiki-html",
"text": "\\define tw-wikilink-template() #$uri_encoded$\n\\rules only filteredtranscludeinline transcludeinline\n<!doctype html>\n<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />\n<meta name=\"generator\" content=\"TiddlyWiki\" />\n<meta name=\"tiddlywiki-version\" content=\"{{$:/core/templates/version}}\" />\n<meta name=\"format-detection\" content=\"telephone=no\">\n<link id=\"faviconLink\" rel=\"shortcut icon\" href=\"favicon.ico\">\n<title>{{$:/core/wiki/title}}</title>\n<div id=\"styleArea\">\n{{$:/boot/boot.css||$:/core/templates/css-tiddler}}\n</div>\n<style type=\"text/css\">\n{{$:/core/ui/PageStylesheet||$:/core/templates/wikified-tiddler}}\n</style>\n</head>\n<body class=\"tw-body\">\n{{$:/StaticBanner||$:/core/templates/html-tiddler}}\n<section class=\"story-river\">\n{{$:/core/templates/alltiddlers.content||$:/core/templates/html-tiddler}}\n</section>\n</body>\n</html>\n"
},
"$:/core/templates/css-tiddler": {
"title": "$:/core/templates/css-tiddler",
"text": "<!--\n\nThis template is used for saving CSS tiddlers as a style tag with data attributes representing the tiddler fields.\n\n-->`<style`<$fields template=' data-tiddler-$name$=\"$encoded_value$\"'></$fields>` type=\"text/css\">`<$view field=\"text\" format=\"text\" />`</style>`"
},
"$:/core/templates/html-div-tiddler": {
"title": "$:/core/templates/html-div-tiddler",
"text": "<!--\n\nThis template is used for saving tiddlers as an HTML DIV tag with attributes representing the tiddler fields.\n\n-->`<div`<$fields template=' $name$=\"$encoded_value$\"'></$fields>`>\n<pre>`<$view field=\"text\" format=\"htmlencoded\" />`</pre>\n</div>`\n"
},
"$:/core/templates/html-tiddler": {
"title": "$:/core/templates/html-tiddler",
"text": "<!--\n\nThis template is used for saving tiddlers as raw HTML\n\n--><$view field=\"text\" format=\"htmlwikified\" />"
},
"$:/core/templates/javascript-tiddler": {
"title": "$:/core/templates/javascript-tiddler",
"text": "<!--\n\nThis template is used for saving JavaScript tiddlers as a script tag with data attributes representing the tiddler fields.\n\n-->`<script`<$fields template=' data-tiddler-$name$=\"$encoded_value$\"'></$fields>` type=\"text/javascript\">`<$view field=\"text\" format=\"text\" />`</script>`"
},
"$:/core/templates/module-tiddler": {
"title": "$:/core/templates/module-tiddler",
"text": "<!--\n\nThis template is used for saving JavaScript tiddlers as a script tag with data attributes representing the tiddler fields. The body of the tiddler is wrapped in a call to the `$tw.modules.define` function in order to define the body of the tiddler as a module\n\n-->`<script`<$fields template=' data-tiddler-$name$=\"$encoded_value$\"'></$fields>` type=\"text/javascript\" data-module=\"yes\">$tw.modules.define(\"`<$view field=\"title\" format=\"jsencoded\" />`\",\"`<$view field=\"module-type\" format=\"jsencoded\" />`\",function(module,exports,require) {`<$view field=\"text\" format=\"text\" />`});\n</script>`"
},
"$:/core/templates/plain-text-tiddler": {
"title": "$:/core/templates/plain-text-tiddler",
"text": "<$view field=\"text\" format=\"text\" />"
},
"$:/core/save/all": {
"title": "$:/core/save/all",
"text": "\\define saveTiddlerFilter()\n[is[tiddler]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] +[sort[title]]\n\\end\n{{$:/core/templates/tiddlywiki5.html}}\n"
},
"$:/core/save/empty": {
"title": "$:/core/save/empty",
"text": "\\define saveTiddlerFilter()\n[is[system]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] +[sort[title]]\n\\end\n{{$:/core/templates/tiddlywiki5.html}}\n"
},
"$:/core/save/lazy-images": {
"title": "$:/core/save/lazy-images",
"text": "\\define saveTiddlerFilter()\n[is[tiddler]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] -[!is[system]is[image]] +[sort[title]] \n\\end\n{{$:/core/templates/tiddlywiki5.html}}\n"
},
"$:/core/templates/split-recipe": {
"title": "$:/core/templates/split-recipe",
"text": "<$list filter=\"[!is[system]]\">\ntiddler: <$view field=\"title\" format=\"urlencoded\"/>.tid\n</$list>\n"
},
"$:/core/templates/static-tiddler": {
"title": "$:/core/templates/static-tiddler",
"text": "<a name=<<currentTiddler>>>\n<$transclude tiddler=\"$:/core/ui/ViewTemplate\"/>\n</a>"
},
"$:/core/templates/static.area": {
"title": "$:/core/templates/static.area",
"text": "<$reveal type=\"nomatch\" state=\"$:/isEncrypted\" text=\"yes\">\n{{$:/core/templates/static.content||$:/core/templates/html-tiddler}}\n</$reveal>\n<$reveal type=\"match\" state=\"$:/isEncrypted\" text=\"yes\">\nThis file contains an encrypted ~TiddlyWiki. Enable ~JavaScript and enter the decryption password when prompted.\n</$reveal>\n"
},
"$:/core/templates/static.content": {
"title": "$:/core/templates/static.content",
"type": "text/vnd.tiddlywiki",
"text": "<!-- For Google, and people without JavaScript-->\nThis [[TiddlyWiki|http://tiddlywiki.com]] contains the following tiddlers:\n\n<ul>\n<$list filter=<<saveTiddlerFilter>>>\n<li><$view field=\"title\" format=\"text\"></$view></li>\n</$list>\n</ul>\n"
},
"$:/core/templates/static.template.css": {
"title": "$:/core/templates/static.template.css",
"text": "{{$:/boot/boot.css||$:/core/templates/plain-text-tiddler}}\n\n{{$:/core/ui/PageStylesheet||$:/core/templates/wikified-tiddler}}\n"
},
"$:/core/templates/static.template.html": {
"title": "$:/core/templates/static.template.html",
"type": "text/vnd.tiddlywiki-html",
"text": "\\define tw-wikilink-template() static/$uri_doubleencoded$.html\n\\rules only filteredtranscludeinline transcludeinline\n<!doctype html>\n<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />\n<meta name=\"generator\" content=\"TiddlyWiki\" />\n<meta name=\"tiddlywiki-version\" content=\"{{$:/core/templates/version}}\" />\n<meta name=\"format-detection\" content=\"telephone=no\">\n<link id=\"faviconLink\" rel=\"shortcut icon\" href=\"favicon.ico\">\n<title>{{$:/core/wiki/title}}</title>\n<div id=\"styleArea\">\n{{$:/boot/boot.css||$:/core/templates/css-tiddler}}\n</div>\n<style type=\"text/css\">\n{{$:/core/ui/PageStylesheet||$:/core/templates/wikified-tiddler}}\n</style>\n</head>\n<body class=\"tw-body\">\n{{$:/StaticBanner||$:/core/templates/html-tiddler}}\n{{$:/core/ui/PageMacros||$:/core/templates/html-tiddler}}\n</body>\n</html>\n"
},
"$:/core/templates/static.tiddler.html": {
"title": "$:/core/templates/static.tiddler.html",
"text": "\\define tw-wikilink-template() $uri_doubleencoded$.html\n`<!doctype html>\n<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />\n<meta name=\"generator\" content=\"TiddlyWiki\" />\n<meta name=\"tiddlywiki-version\" content=\"`{{$:/core/templates/version}}`\" />\n<meta name=\"format-detection\" content=\"telephone=no\">\n<link id=\"faviconLink\" rel=\"shortcut icon\" href=\"favicon.ico\">\n<link rel=\"stylesheet\" href=\"static.css\">\n<title>`{{$:/core/wiki/title}}`</title>\n</head>\n<body class=\"tw-body\">\n`{{$:/StaticBanner||$:/core/templates/html-tiddler}}`\n<section class=\"story-river\">\n`<$view tiddler=\"$:/core/ui/ViewTemplate\" format=\"htmlwikified\"/>`\n</section>\n</body>\n</html>\n`"
},
"$:/core/templates/store.area.template.html": {
"title": "$:/core/templates/store.area.template.html",
"text": "<$reveal type=\"nomatch\" state=\"$:/isEncrypted\" text=\"yes\">\n`<div id=\"storeArea\" style=\"display:none;\">`\n<$list filter=<<saveTiddlerFilter>> template=\"$:/core/templates/html-div-tiddler\"/>\n`</div>`\n</$reveal>\n<$reveal type=\"match\" state=\"$:/isEncrypted\" text=\"yes\">\n`<!--~~ Encrypted tiddlers ~~-->`\n`<pre id=\"encryptedStoreArea\" type=\"text/plain\" style=\"display:none;\">`\n<$encrypt filter=<<saveTiddlerFilter>>/>\n`</pre>`\n</$reveal>"
},
"$:/core/templates/tid-tiddler": {
"title": "$:/core/templates/tid-tiddler",
"text": "<!--\n\nThis template is used for saving tiddlers in TiddlyWeb *.tid format\n\n--><$fields exclude='text bag' template='$name$: $value$\n'></$fields>`\n`<$view field=\"text\" format=\"text\" />"
},
"$:/core/templates/tiddler-metadata": {
"title": "$:/core/templates/tiddler-metadata",
"text": "<!--\n\nThis template is used for saving tiddler metadata *.meta files\n\n--><$fields exclude='text bag' template='$name$: $value$\n'></$fields>"
},
"$:/core/templates/tiddlywiki5.html": {
"title": "$:/core/templates/tiddlywiki5.html",
"text": "\\rules only filteredtranscludeinline transcludeinline\n<!doctype html>\n{{$:/core/templates/MOTW.html}}<html>\n<head>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" />\t\t<!-- Force IE standards mode for Intranet and HTA - should be the first meta -->\n<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />\n<meta name=\"application-name\" content=\"TiddlyWiki\" />\n<meta name=\"generator\" content=\"TiddlyWiki\" />\n<meta name=\"tiddlywiki-version\" content=\"{{$:/core/templates/version}}\" />\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n<meta name=\"apple-mobile-web-app-capable\" content=\"yes\" />\n<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black-translucent\" />\n<meta name=\"format-detection\" content=\"telephone=no\" />\n<meta name=\"copyright\" content=\"{{$:/core/copyright.txt}}\" />\n<link id=\"faviconLink\" rel=\"shortcut icon\" href=\"favicon.ico\">\n<title>{{$:/core/wiki/title}}</title>\n<!--~~ This is a Tiddlywiki file. The points of interest in the file are marked with this pattern ~~-->\n\n<!--~~ Raw markup ~~-->\n{{{ [tag[$:/core/wiki/rawmarkup]] ||$:/core/templates/plain-text-tiddler}}}\n</head>\n<body class=\"tw-body\">\n<!--~~ Static styles ~~-->\n<div id=\"styleArea\">\n{{$:/boot/boot.css||$:/core/templates/css-tiddler}}\n</div>\n<!--~~ Static content for Google and browsers without JavaScript ~~-->\n<noscript>\n<div id=\"splashArea\">\n{{$:/core/templates/static.area}}\n</div>\n</noscript>\n<!--~~ Ordinary tiddlers ~~-->\n{{$:/core/templates/store.area.template.html}}\n<!--~~ Library modules ~~-->\n<div id=\"libraryModules\" style=\"display:none;\">\n{{{ [is[system]type[application/javascript]library[yes]] ||$:/core/templates/javascript-tiddler}}}\n</div>\n<!--~~ Boot kernel prologue ~~-->\n<div id=\"bootKernelPrefix\" style=\"display:none;\">\n{{ $:/boot/bootprefix.js ||$:/core/templates/javascript-tiddler}}\n</div>\n<!--~~ Boot kernel ~~-->\n<div id=\"bootKernel\" style=\"display:none;\">\n{{ $:/boot/boot.js ||$:/core/templates/javascript-tiddler}}\n</div>\n</body>\n</html>\n"
},
"$:/core/templates/version": {
"title": "$:/core/templates/version",
"text": "<<version>>"
},
"$:/core/templates/wikified-tiddler": {
"title": "$:/core/templates/wikified-tiddler",
"text": "<$transclude />"
},
"$:/core/ui/AdvancedSearch/Filter": {
"title": "$:/core/ui/AdvancedSearch/Filter",
"tags": "$:/tags/AdvancedSearch",
"caption": "{{$:/language/Search/Filter/Caption}}",
"text": "\\define lingo-base() $:/language/Search/\n<$linkcatcher to=\"$:/temp/advancedsearch\">\n\n<<lingo Filter/Hint>>\n\n<div class=\"tw-search\"><$edit-text tiddler=\"$:/temp/advancedsearch\" type=\"search\" tag=\"input\"/><$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\"> <$link to=\"\" class=\"btn-invisible\">{{$:/core/images/close-button}}</$link></$reveal></div>\n\n</$linkcatcher>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n\n<div class=\"tw-search-results\">\n\n<<lingo Advanced/Matches>>\n\n<$list filter={{$:/temp/advancedsearch}} template=\"$:/core/ui/ListItemTemplate\"/>\n\n</div>\n\n</$reveal>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"match\" text=\"\">\n\n</$reveal>\n"
},
"$:/core/ui/AdvancedSearch/Shadows": {
"title": "$:/core/ui/AdvancedSearch/Shadows",
"tags": "$:/tags/AdvancedSearch",
"caption": "{{$:/language/Search/Shadows/Caption}}",
"text": "\\define lingo-base() $:/language/Search/\n<$linkcatcher to=\"$:/temp/advancedsearch\">\n\n<<lingo Shadows/Hint>>\n\n<div class=\"tw-search\"><$edit-text tiddler=\"$:/temp/advancedsearch\" type=\"search\" tag=\"input\"/><$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\"> <$link to=\"\" class=\"btn-invisible\">{{$:/core/images/close-button}}</$link></$reveal></div>\n\n</$linkcatcher>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n\n<div class=\"tw-search-results\">\n\n<<lingo Advanced/Matches>>\n\n<$list filter=\"[is[shadow]search{$:/temp/advancedsearch}sort[title]limit[250]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n\n</div>\n\n</$reveal>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"match\" text=\"\">\n\n</$reveal>\n"
},
"$:/core/ui/AdvancedSearch/System": {
"title": "$:/core/ui/AdvancedSearch/System",
"tags": "$:/tags/AdvancedSearch",
"caption": "{{$:/language/Search/System/Caption}}",
"text": "\\define lingo-base() $:/language/Search/\n<$linkcatcher to=\"$:/temp/advancedsearch\">\n\n<<lingo System/Hint>>\n\n<div class=\"tw-search\"><$edit-text tiddler=\"$:/temp/advancedsearch\" type=\"search\" tag=\"input\"/><$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\"> <$link to=\"\" class=\"btn-invisible\">{{$:/core/images/close-button}}</$link></$reveal></div>\n\n</$linkcatcher>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n\n<div class=\"tw-search-results\">\n\n<<lingo Advanced/Matches>>\n\n<$list filter=\"[is[system]search{$:/temp/advancedsearch}sort[title]limit[250]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n\n</div>\n\n</$reveal>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"match\" text=\"\">\n\n</$reveal>\n"
},
"$:/AdvancedSearch": {
"title": "$:/AdvancedSearch",
"text": "<div class=\"tw-advanced-search\">\n<<tabs \"[is[shadow]!has[draft.of]tag[$:/tags/AdvancedSearch]] [!is[shadow]!has[draft.of]tag[$:/tags/AdvancedSearch]] +[tag[$:/tags/AdvancedSearch]]\" \"$:/core/ui/AdvancedSearch/System\">>\n</div>\n"
},
"$:/core/ui/AlertTemplate": {
"title": "$:/core/ui/AlertTemplate",
"text": "<div class=\"tw-alert\">\n<div class=\"tw-alert-toolbar\">\n<$button message=\"tw-delete-tiddler\" class=\"btn-invisible\">\n{{$:/core/images/delete-button}}</$button>\n</div>\n<div class=\"tw-alert-subtitle\">\n<$view field=\"component\"/> - <$view field=\"modified\" format=\"date\" template=\"0hh:0mm:0ss DD MM YYYY\"/> <$reveal type=\"nomatch\" state=\"!!count\" text=\"\"><span class=\"tw-alert-highlight\">(count: <$view field=\"count\"/>)</span></$reveal>\n</div>\n<div class=\"tw-alert-body\">\n\n<$transclude/>\n\n</div>\n</div>\n"
},
"$:/core/ui/ControlPanel/Advanced/LoadedModules": {
"title": "$:/core/ui/ControlPanel/Advanced/LoadedModules",
"tags": "$:/tags/ControlPanel/Advanced",
"caption": "{{$:/language/ControlPanel/Advanced/LoadedModules/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Advanced/\n<<lingo LoadedModules/Hint>>\n\n{{$:/snippets/modules}}\n"
},
"$:/core/ui/ControlPanel/Advanced/TiddlerFields": {
"title": "$:/core/ui/ControlPanel/Advanced/TiddlerFields",
"tags": "$:/tags/ControlPanel/Advanced",
"caption": "{{$:/language/ControlPanel/Advanced/TiddlerFields/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Advanced/\n\n<<lingo TiddlerFields/Hint>>\n\n{{$:/snippets/allfields}}"
},
"$:/core/ui/ControlPanel/Advanced": {
"title": "$:/core/ui/ControlPanel/Advanced",
"tags": "$:/tags/ControlPanel",
"caption": "{{$:/language/ControlPanel/Advanced/Caption}}",
"text": "{{$:/language/ControlPanel/Advanced/Hint}}\n\n<div class=\"tw-control-panel\"><<tabs \"[is[shadow]!has[draft.of]tag[$:/tags/ControlPanel/Advanced]] [!is[shadow]!has[draft.of]tag[$:/tags/ControlPanel/Advanced]] +[tag[$:/tags/ControlPanel/Advanced]]\" \"$:/core/ui/ControlPanel/Advanced/TiddlerFields\">></div>\n"
},
"$:/core/ui/ControlPanel/Appearance/Palette": {
"title": "$:/core/ui/ControlPanel/Appearance/Palette",
"tags": "$:/tags/ControlPanel/Appearance",
"caption": "{{$:/language/ControlPanel/Appearance/Palette/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Appearance/Palette/\n\n{{$:/snippets/paletteswitcher}}\n\n<$reveal type=\"nomatch\" state=\"$:/state/ShowPaletteEditor\" text=\"yes\">\n\n<$button set=\"$:/state/ShowPaletteEditor\" setTo=\"yes\"><<lingo ShowEditor/Caption>></$button>\n\n</$reveal>\n\n<$reveal type=\"match\" state=\"$:/state/ShowPaletteEditor\" text=\"yes\">\n\n<$button set=\"$:/state/ShowPaletteEditor\" setTo=\"no\"><<lingo HideEditor/Caption>></$button>\n{{$:/snippets/paletteeditor}}\n\n</$reveal>\n\n"
},
"$:/core/ui/ControlPanel/Appearance/StoryView": {
"title": "$:/core/ui/ControlPanel/Appearance/StoryView",
"tags": "$:/tags/ControlPanel/Appearance",
"caption": "{{$:/language/ControlPanel/Appearance/StoryView/Caption}}",
"text": "{{$:/snippets/viewswitcher}}\n"
},
"$:/core/ui/ControlPanel/Appearance/Theme": {
"title": "$:/core/ui/ControlPanel/Appearance/Theme",
"tags": "$:/tags/ControlPanel/Appearance",
"caption": "{{$:/language/ControlPanel/Appearance/Theme/Caption}}",
"text": "{{$:/snippets/themeswitcher}}\n"
},
"$:/core/ui/ControlPanel/Appearance": {
"title": "$:/core/ui/ControlPanel/Appearance",
"tags": "$:/tags/ControlPanel",
"caption": "{{$:/language/ControlPanel/Appearance/Caption}}",
"text": "{{$:/language/ControlPanel/Appearance/Hint}}\n\n<div class=\"tw-control-panel\"><<tabs \"[is[shadow]!has[draft.of]tag[$:/tags/ControlPanel/Appearance]] [!is[shadow]!has[draft.of]tag[$:/tags/ControlPanel/Appearance]] +[tag[$:/tags/ControlPanel/Appearance]]\" \"$:/core/ui/ControlPanel/Appearance/Theme\">></div>\n"
},
"$:/core/ui/ControlPanel/Basics": {
"title": "$:/core/ui/ControlPanel/Basics",
"tags": "$:/tags/ControlPanel",
"caption": "{{$:/language/ControlPanel/Basics/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Basics/\n|<<lingo Version/Prompt>> |''<<version>>'' |\n|<$link to=\"$:/SiteTitle\"><<lingo Title/Prompt>></$link> |<$edit-text tiddler=\"$:/SiteTitle\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/SiteSubtitle\"><<lingo Subtitle/Prompt>></$link> |<$edit-text tiddler=\"$:/SiteSubtitle\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/status/UserName\"><<lingo Username/Prompt>></$link> |<$edit-text tiddler=\"$:/status/UserName\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/config/AnimationDuration\"><<lingo AnimDuration/Prompt>></$link> |<$edit-text tiddler=\"$:/config/AnimationDuration\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/DefaultTiddlers\"><<lingo DefaultTiddlers/Prompt>></$link> |<<lingo DefaultTiddlers/TopHint>><br> <$edit-text tag=\"textarea\" tiddler=\"$:/DefaultTiddlers\"/><br>//<<lingo DefaultTiddlers/BottomHint>>// |\n|<<lingo Language/Prompt>> |{{$:/snippets/minilanguageswitcher}} |\n|<<lingo Tiddlers/Prompt>> |''<$count filter=\"[!is[system]]\"/>'' |\n|<<lingo Tags/Prompt>> |''<$count filter=\"[tags[]]\"/>'' |\n|<<lingo SystemTiddlers/Prompt>> |''<$count filter=\"[is[system]]\"/>'' |\n|<<lingo ShadowTiddlers/Prompt>> |''<$count filter=\"[is[shadow]]\"/>'' |\n|<<lingo OverriddenShadowTiddlers/Prompt>> |''<$count filter=\"[!is[system]is[shadow]]\"/>'' |\n"
},
"$:/core/ui/ControlPanel/Plugins": {
"title": "$:/core/ui/ControlPanel/Plugins",
"tags": "$:/tags/ControlPanel",
"caption": "{{$:/language/ControlPanel/Plugins/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Plugins/\n<table><tbody><tr><th><<lingo Fields/Title>></th><th><<lingo Fields/Description>></th><th><<lingo Fields/Version>></th></tr><$list filter=\"[!has[draft.of]has[plugin-type]sort[title]]\"><tr><td><$link to={{!!title}}><$view field=\"title\"/></$link></td><td><$view field=\"description\"/></td><td><$view field=\"version\"/></td></tr></$list>\n</tbody>\n</table>\n"
},
"$:/core/ui/ControlPanel/Saving": {
"title": "$:/core/ui/ControlPanel/Saving",
"tags": "$:/tags/ControlPanel",
"caption": "{{$:/language/ControlPanel/Saving/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Saving/\n\\define backupURL()\nhttp://$(userName)$.tiddlyspot.com/backup/\n\\end\n\\define backupLink()\n<$reveal type=\"nomatch\" state=\"$:/UploadName\" text=\"\">\n<$set name=\"userName\" value={{$:/UploadName}}>\n<a href=<<backupURL>>><$macrocall $name=\"backupURL\" $type=\"text/plain\" $output=\"text/plain\"/></a>\n</$set>\n</$reveal>\n\\end\n! <<lingo Saving/Heading>>\n\n|<<lingo AutoSave>> |{{$:/snippets/autosavestatus}} |\n\n! <<lingo TiddlySpot/Heading>>\n\n|<<lingo TiddlySpot/UserName>> |<$edit-text tiddler=\"$:/UploadName\" default=\"\" tag=\"input\"/> |\n|<<lingo TiddlySpot/Password>> |<$password name=\"upload\"/> |\n|<<lingo TiddlySpot/Backups>> |<<backupLink>> |\n\n!! <<lingo TiddlySpot/Advanced/Heading>>\n\n|<<lingo TiddlySpot/ServerURL>> |<$edit-text tiddler=\"$:/UploadURL\" default=\"\" tag=\"input\"/> |\n|<<lingo TiddlySpot/Filename>> |<$edit-text tiddler=\"$:/UploadFilename\" default=\"index.html\" tag=\"input\"/> |\n|<<lingo TiddlySpot/UploadDir>> |<$edit-text tiddler=\"$:/UploadDir\" default=\".\" tag=\"input\"/> |\n|<<lingo TiddlySpot/BackupDir>> |<$edit-text tiddler=\"$:/UploadBackupDir\" default=\".\" tag=\"input\"/> |\n\n<<lingo TiddlySpot/Hint>>\n\n"
},
"$:/core/ui/ControlPanel/Tools": {
"title": "$:/core/ui/ControlPanel/Tools",
"tags": "$:/tags/ControlPanel",
"caption": "{{$:/language/ControlPanel/Tools/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Tools/\n! <<lingo Import/Heading>>\n\n<$browse/>\n\n<<lingo Import/Hint>>\n\n! <<lingo Export/Heading>>\n\n<$button message=\"tw-download-file\" param=\"$:/core/templates/alltiddlers.template.html\" class=\"btn-big-green\"><<lingo Export/AllAsStaticHTML/Caption>> {{$:/core/images/save-button}}</$button>\n\n! <<lingo Encryption/Heading>>\n\n{{$:/snippets/encryptionstatus}}\n"
},
"$:/ControlPanel": {
"title": "$:/ControlPanel",
"text": "<div class=\"tw-control-panel\"><<tabs \"[is[shadow]!has[draft.of]tag[$:/tags/ControlPanel]] [!is[shadow]!has[draft.of]tag[$:/tags/ControlPanel]] +[tag[$:/tags/ControlPanel]]\" \"$:/core/ui/ControlPanel/Basics\">></div>\n"
},
"$:/core/ui/EditTemplate/body": {
"title": "$:/core/ui/EditTemplate/body",
"tags": "$:/tags/EditTemplate",
"text": "\\define lingo-base() $:/language/EditTemplate/\n<$reveal state=\"$:/ShowEditPreview\" type=\"match\" text=\"yes\">\n\n<em class=\"tw-edit\"><<lingo Body/Hint>></em> <$button type=\"set\" set=\"$:/ShowEditPreview\" setTo=\"no\"><<lingo Body/Preview/Button/Hide>></$button>\n\n<div class=\"tw-tiddler-preview\">\n<div class=\"tw-tiddler-preview-preview\">\n\n<$transclude />\n\n</div>\n\n<div class=\"tw-tiddler-preview-edit\">\n<$edit field=\"text\" class=\"tw-edit-texteditor\" placeholder={{$:/language/EditTemplate/Body/Placeholder}}/>\n\n</div>\n\n</div>\n\n</$reveal>\n\n<$reveal state=\"$:/ShowEditPreview\" type=\"nomatch\" text=\"yes\">\n\n<em class=\"tw-edit\"><<lingo Body/Hint>></em> <$button type=\"set\" set=\"$:/ShowEditPreview\" setTo=\"yes\"><<lingo Body/Preview/Button/Show>></$button>\n<$edit field=\"text\" class=\"tw-edit-texteditor\" placeholder={{$:/language/EditTemplate/Body/Placeholder}}/>\n\n</$reveal>\n"
},
"$:/core/ui/EditTemplate/controls": {
"title": "$:/core/ui/EditTemplate/controls",
"tags": "$:/tags/EditTemplate",
"text": "<span class=\"tw-tiddler-controls titlebar\"> <$list filter=\"[is[shadow]!has[draft.of]tag[$:/tags/EditToolbar]] [!is[shadow]!has[draft.of]tag[$:/tags/EditToolbar]] +[tag[$:/tags/EditToolbar]]\" variable=\"listItem\"><$transclude tiddler=<<listItem>>/></$list> </span>\n"
},
"$:/core/ui/EditTemplate/fields": {
"title": "$:/core/ui/EditTemplate/fields",
"tags": "$:/tags/EditTemplate",
"text": "\\define lingo-base() $:/language/EditTemplate/\n<$fieldmangler><div class=\"tw-edit-fields\">\n<table class=\"tw-edit-fields\"><tbody><$list filter=\"[is[current]fields[]] -title -tags -text -creator -created -modified -modifier -type -[[draft.title]] -[[draft.of]]\" variable=\"currentField\"><tr class=\"tw-edit-field\"><td class=\"tw-edit-field-name\"><<currentField>>:</td><td class=\"tw-edit-field-value\"><$edit-text tiddler=<<currentTiddler>> field=<<currentField>> placeholder={{$:/language/EditTemplate/Fields/Add/Value/Placeholder}}/></td><td class=\"tw-edit-field-remove\"><$button message=\"tw-remove-field\" param=<<currentField>> class=\"btn-invisible\">{{$:/core/images/delete-button}}</$button></td>\n</tr>\n</$list>\n</tbody>\n</table>\n</div>\n\n<div class=\"tw-edit-field-add\"><em class=\"tw-edit\"><<lingo Fields/Add/Prompt>></em> <span class=\"tw-edit-field-add-name\"><$edit-text tiddler=\"$:/temp/NewFieldName\" tag=\"input\" default=\"\" placeholder={{$:/language/EditTemplate/Fields/Add/Name/Placeholder}} class=\"tw-edit-texteditor\"/></span> <span class=\"tw-edit-field-add-button\"><$button message=\"tw-add-field\" param={{$:/temp/NewFieldName}} set=\"$:/temp/NewFieldName\" setTo=\"\" class=\"\"><<lingo Fields/Add/Button>></$button></span></div>\n\n</$fieldmangler>\n"
},
"$:/core/ui/EditTemplate/tags": {
"title": "$:/core/ui/EditTemplate/tags",
"tags": "$:/tags/EditTemplate",
"text": "\\define lingo-base() $:/language/EditTemplate/\n\\define tag-styles()\nbackground-color:$(backgroundColor)$;\n\\end\n<div class=\"tw-edit-tags\"><$fieldmangler><$list filter=\"[is[current]tags[]sort[title]]\" storyview=\"pop\"><$set name=\"backgroundColor\" value={{!!color}}><span style=<<tag-styles>> class=\"tw-tag-label\"><$view field=\"title\" format=\"text\" /><$button message=\"tw-remove-tag\" param={{!!title}} class=\"btn-invisible tw-remove-tag-button\">×</$button></span></$set>\n</$list>\n\n<div class=\"tw-edit-add-tag\"><span class=\"tw-add-tag-name\"><$edit-text tiddler=\"$:/temp/NewTagName\" tag=\"input\" default=\"\" placeholder={{$:/language/EditTemplate/Tags/Add/Placeholder}} focusPopup=<<qualify \"$:/state/tagsAutoComplete\">> class=\"tw-edit-texteditor\"/></span> <$button popup=<<qualify \"$:/state/tagsAutoComplete\">> class=\"btn-invisible btn-dropdown\">{{$:/core/images/down-arrow}}</$button> <span class=\"tw-add-tag-button\"><$button message=\"tw-add-tag\" param={{$:/temp/NewTagName}} set=\"$:/temp/NewTagName\" setTo=\"\" class=\"\"><<lingo Tags/Add/Button>></$button></span></div>\n\n<div class=\"tw-block-dropdown-wrapper\">\n\n<$reveal state=<<qualify \"$:/state/tagsAutoComplete\">> type=\"nomatch\" text=\"\" default=\"\">\n\n<div class=\"tw-block-dropdown\">\n\n<$linkcatcher set=\"$:/temp/NewTagName\" setTo=\"\" message=\"tw-add-tag\">\n<$list filter=\"[!is[shadow]tags[]search{$:/temp/NewTagName}sort[title]]\">\n<$link><$set name=\"backgroundColor\" value={{!!color}}><span style=<<tag-styles>> class=\"tw-tag-label\"><$view field=\"title\" format=\"text\"/></span></$set></$link>\n</$list>\n</$linkcatcher>\n\n</div>\n\n</$reveal>\n</div>\n</$fieldmangler>\n</div>"
},
"$:/core/ui/EditTemplate/title": {
"title": "$:/core/ui/EditTemplate/title",
"tags": "$:/tags/EditTemplate",
"text": "<$view field=\"title\"/>\n\n<$edit-text field=\"draft.title\" class=\"titlebar tw-edit-texteditor\"/>\n"
},
"$:/core/ui/EditTemplate/type": {
"title": "$:/core/ui/EditTemplate/type",
"tags": "$:/tags/EditTemplate",
"text": "\\define lingo-base() $:/language/EditTemplate/\n<p><$fieldmangler><em class=\"tw-edit\"><<lingo Type/Prompt>></em> <$edit-text field=\"type\" tag=\"input\" default=\"\" placeholder={{$:/language/EditTemplate/Type/Placeholder}} focusPopup=<<qualify \"$:/state/typeDropdown\">> class=\"tw-edit-typeeditor\"/> <$button popup=<<qualify \"$:/state/typeDropdown\">> class=\"btn-invisible btn-dropdown\">{{$:/core/images/down-arrow}}</$button> <$button message=\"tw-remove-field\" param=\"type\" class=\"btn-invisible btn-icon\">{{$:/core/images/delete-button}}</$button></$fieldmangler></p>\n\n<div class=\"tw-block-dropdown-wrapper\">\n<$reveal state=<<qualify \"$:/state/typeDropdown\">> type=\"nomatch\" text=\"\" default=\"\">\n<div class=\"tw-block-dropdown tw-edit-type-dropdown\">\n<$linkcatcher to=\"!!type\">\n<$list filter=\"[is[shadow]prefix[$:/language/Docs/Types/]] [!is[shadow]prefix[$:/language/Docs/Types/]] +[sort[description]]\"><$link to={{!!name}}><$view field=\"description\"/> (<$view field=\"name\"/>)</$link>\n</$list>\n</$linkcatcher>\n</div>\n</$reveal>\n</div>"
},
"$:/core/ui/EditTemplate": {
"title": "$:/core/ui/EditTemplate",
"text": "\\define frame-classes()\ntw-tiddler-frame tw-tiddler-edit-frame $(missingTiddlerClass)$ $(shadowTiddlerClass)$ $(systemTiddlerClass)$\n\\end\n<div class=<<frame-classes>>>\n<$set name=\"storyTiddler\" value=<<currentTiddler>>>\n<$keyboard key=\"ctrl+enter\" message=\"tw-save-tiddler\">\n<$list filter=\"[is[shadow]!has[draft.of]tag[$:/tags/EditTemplate]] [!is[shadow]!has[draft.of]tag[$:/tags/EditTemplate]] +[tag[$:/tags/EditTemplate]]\" variable=\"listItem\">\n<$transclude tiddler=<<listItem>>/>\n</$list>\n</$keyboard>\n</$set>\n</div>\n"
},
"$:/core/ui/EditToolbar/cancel": {
"title": "$:/core/ui/EditToolbar/cancel",
"tags": "$:/tags/EditToolbar",
"text": "<$button message=\"tw-cancel-tiddler\" class=\"btn-invisible\">{{$:/core/images/cancel-button}}</$button>"
},
"$:/core/ui/EditToolbar/delete": {
"title": "$:/core/ui/EditToolbar/delete",
"tags": "$:/tags/EditToolbar",
"text": "<$button message=\"tw-delete-tiddler\" class=\"btn-invisible\">{{$:/core/images/delete-button}}</$button>"
},
"$:/core/ui/EditToolbar/save": {
"title": "$:/core/ui/EditToolbar/save",
"tags": "$:/tags/EditToolbar",
"text": "<$button message=\"tw-save-tiddler\" class=\"btn-invisible\">{{$:/core/images/done-button}}</$button>"
},
"$:/core/ui/ListItemTemplate": {
"title": "$:/core/ui/ListItemTemplate",
"text": "<div class=\"tw-menu-list-item\"><$link to={{!!title}}><$view field=\"title\"/></$link>\n</div>"
},
"$:/core/ui/MissingTemplate": {
"title": "$:/core/ui/MissingTemplate",
"text": "<div class=\"tw-tiddler-missing\"><$button popup=<<qualify \"$:/state/missingpopup\">> class=\"btn-invisible tw-missing-tiddler-label\"><$view field=\"title\" format=\"text\" /></$button>\n<$reveal state=<<qualify \"$:/state/missingpopup\">> type=\"popup\" position=\"below\" animate=\"yes\"><div class=\"tw-drop-down\">\n<$transclude tiddler=\"$:/core/ui/ListItemTemplate\"/>\n<hr>\n<$list filter=\"[is[current]backlinks[]sort[title]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n</div></$reveal></div>\n"
},
"$:/core/ui/MoreSideBar/All": {
"title": "$:/core/ui/MoreSideBar/All",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/All/Caption}}",
"text": "<$list filter=\"[!is[system]sort[title]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n"
},
"$:/core/ui/MoreSideBar/Drafts": {
"title": "$:/core/ui/MoreSideBar/Drafts",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/Drafts/Caption}}",
"text": "<$list filter=\"[has[draft.of]sort[title]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n"
},
"$:/core/ui/MoreSideBar/Missing": {
"title": "$:/core/ui/MoreSideBar/Missing",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/Missing/Caption}}",
"text": "<$list filter=\"[is[missing]sort[title]]\" template=\"$:/core/ui/MissingTemplate\"/>\n"
},
"$:/core/ui/MoreSideBar/Orphans": {
"title": "$:/core/ui/MoreSideBar/Orphans",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/Orphans/Caption}}",
"text": "<$list filter=\"[is[orphan]sort[title]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n"
},
"$:/core/ui/MoreSideBar/Recent": {
"title": "$:/core/ui/MoreSideBar/Recent",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/Recent/Caption}}",
"text": "{{$:/snippets/recentchanges}}\n"
},
"$:/core/ui/MoreSideBar/Shadows": {
"title": "$:/core/ui/MoreSideBar/Shadows",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/Shadows/Caption}}",
"text": "<$list filter=\"[is[shadow]sort[title]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n"
},
"$:/core/ui/MoreSideBar/System": {
"title": "$:/core/ui/MoreSideBar/System",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/System/Caption}}",
"text": "<$list filter=\"[is[system]sort[title]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n"
},
"$:/core/ui/MoreSideBar/Tags": {
"title": "$:/core/ui/MoreSideBar/Tags",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/Tags/Caption}}",
"text": "\\define lingo-base() $:/language/SideBar/Tags/\n<$button to=\"$:/TagManager\"><<lingo TagManager/Caption>></$button>\n\n<$list filter=\"[tags[]sort[title]]\">\n\n<$transclude tiddler=\"$:/core/ui/TagTemplate\"/> <small class=\"tw-menu-list-count\"><$count filter=\"[is[current]tagging[]]\"/></small>\n\n</$list>\n\n----\n\n{{$:/core/ui/UntaggedTemplate}} <small class=\"tw-menu-list-count\"><$count filter=\"[untagged[]!is[system]] -[tags[]]\"/></small>\n"
},
"$:/core/ui/MoreSideBar/Types": {
"title": "$:/core/ui/MoreSideBar/Types",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/Types/Caption}}",
"text": "<$list filter=\"[!is[system]has[type]each[type]sort[type]]\">\n<div class=\"tw-menu-list-item\">\n<$view field=\"type\"/>\n<$list filter=\"[type{!!type}!is[system]sort[title]]\">\n<div class=\"tw-menu-list-subitem\">\n<$link to={{!!title}}><$view field=\"title\"/></$link>\n</div>\n</$list>\n</div>\n</$list>\n"
},
"$:/core/ui/PageControls/control-panel": {
"title": "$:/core/ui/PageControls/control-panel",
"tags": "$:/tags/PageControls",
"text": "<$button to=\"$:/ControlPanel\" class=\"btn-invisible\">{{$:/core/images/options-button}}</$button>"
},
"$:/core/ui/PageControls/new-tiddler": {
"title": "$:/core/ui/PageControls/new-tiddler",
"tags": "$:/tags/PageControls",
"text": "<$button message=\"tw-new-tiddler\" class=\"btn-invisible\">{{$:/core/images/new-button}}</$button>"
},
"$:/core/ui/PageControls/save-wiki": {
"title": "$:/core/ui/PageControls/save-wiki",
"tags": "$:/tags/PageControls",
"text": "<$button message=\"tw-save-wiki\" class=\"btn-invisible\">{{$:/core/images/save-button}}</$button>"
},
"$:/core/ui/PageMacros": {
"title": "$:/core/ui/PageMacros",
"text": "\\define colour(name)\n<$transclude tiddler={{$:/palette}} index=\"$name$\"/>\n\\end\n\\define color(name)\n<<colour $name$>>\n\\end\n\\define tabs(tabsList,default,state:\"$:/state/tab\")\n<div class=\"tw-tab-buttons\"><$list filter=\"$tabsList$\" variable=\"currentTab\"><$button set=<<qualify \"$state$\">> setTo=<<currentTab>> default=\"$default$\" selectedClass=\"tw-tab-selected\"><$transclude tiddler=<<currentTab>> field=\"caption\"><$macrocall $name=\"currentTab\" $type=\"text/plain\" $output=\"text/plain\"/></$transclude> </$button>\n</$list>\n</div>\n<div class=\"tw-tab-divider\"/>\n<div class=\"tw-tab-content\">\n\n<$list filter=\"$tabsList$\" variable=\"currentTab\">\n<$reveal type=\"match\" state=<<qualify \"$state$\">> text=<<currentTab>> default=\"$default$\">\n\n<$transclude tiddler=<<currentTab>>/>\n\n</$reveal>\n</$list>\n</div>\n\\end\n\\define wikitext-example(src)\n```\n$src$\n```\n\nRenders as:\n\n$src$\n\nIn HTML:\n\n$$$text/vnd.tiddlywiki>text/html\n$src$\n$$$\n\n\\end\n\\define lingo-base()\n$:/lingo/\n\\end\n\\define lingo(title)\n{{$(lingo-base)$$title$}}\n\\end\n{{$:/core/ui/PageTemplate}}\n"
},
"$:/core/ui/PageStylesheet": {
"title": "$:/core/ui/PageStylesheet",
"text": "\\define colour(name)\n<$transclude tiddler={{$:/palette}} index=\"$name$\"/>\n\\end\n\\define color(name)\n<<colour $name$>>\n\\end\n\\define border-radius(radius)\n```\n -webkit-border-radius: $radius$;\n -moz-border-radius: $radius$;\n border-radius: $radius$;\n```\n\\end\n\\define box-shadow(shadow)\n```\n -webkit-box-shadow: $shadow$;\n -moz-box-shadow: $shadow$;\n box-shadow: $shadow$;\n```\n\\end\n\\define filter(filter)\n```\n -webkit-filter: $filter$;\n -moz-filter: $filter$;\n filter: $filter$;\n```\n\\end\n\\define transition(transition)\n```\n -webkit-transition: $transition$;\n -moz-transition: $transition$;\n transition: $transition$;\n```\n\\end\n\\define transform-origin(origin)\n```\n -webkit-transform-origin: $origin$;\n -moz-transform-origin: $origin$;\n transform-origin: $origin$;\n```\n\\end\n\\define background-linear-gradient(gradient)\n```\nbackground-image: linear-gradient($gradient$);\nbackground-image: -o-linear-gradient($gradient$);\nbackground-image: -moz-linear-gradient($gradient$);\nbackground-image: -webkit-linear-gradient($gradient$);\nbackground-image: -ms-linear-gradient($gradient$);\n```\n\\end\n\\define datauri(title)\n<$macrocall $name=\"makedatauri\" type={{$title$!!type}} text={{$title$}}/>\n\\end\n\n<$list filter=\"[is[shadow]tag[$:/tags/stylesheet]] [!is[shadow]tag[$:/tags/stylesheet]]\">\n<$transclude/>\n</$list>\n"
},
"$:/core/ui/PageTemplate/sidebar": {
"title": "$:/core/ui/PageTemplate/sidebar",
"tags": "$:/tags/PageTemplate",
"text": "<header class=\"sidebar-header\">\n\n<div class=\"titlebar\">{{$:/SiteTitle}}</div>\n<div class=\"tw-subtitle\">{{$:/SiteSubtitle}}</div>\n\n<div class=\"tw-page-controls\">\n\n<$list filter=\"[is[shadow]!has[draft.of]tag[$:/tags/PageControls]] [!is[shadow]!has[draft.of]tag[$:/tags/PageControls]] +[tag[$:/tags/PageControls]]\" variable=\"listItem\"><$transclude tiddler=<<listItem>>/></$list>\n\n</div>\n\n{{$:/core/ui/SideBarLists}}\n\n</header>\n"
},
"$:/core/ui/PageTemplate/story": {
"title": "$:/core/ui/PageTemplate/story",
"tags": "$:/tags/PageTemplate",
"text": "<section class=\"story-river\">\n\n<!-- Alerts -->\n<div class=\"tw-alerts\">\n\n<$list filter=\"[is[shadow]!has[draft.of]tag[$:/tags/Alert]] [!is[shadow]!has[draft.of]tag[$:/tags/Alert]] +[sort[modified]]\" template=\"$:/core/ui/AlertTemplate\" storyview=\"pop\"/>\n\n</div>\n\n<!-- The main story -->\n<$list filter=\"[list[$:/StoryList]]\" history=\"$:/HistoryList\" template=\"$:/core/ui/ViewTemplate\" editTemplate=\"$:/core/ui/EditTemplate\" storyview={{$:/view}} />\n\n<!-- End of story river -->\n</section>\n"
},
"$:/core/ui/PageTemplate": {
"title": "$:/core/ui/PageTemplate",
"text": "<$navigator story=\"$:/StoryList\" history=\"$:/HistoryList\">\n\n<$dropzone>\n\n<$list filter=\"[is[shadow]!has[draft.of]tag[$:/tags/PageTemplate]] [!is[shadow]!has[draft.of]tag[$:/tags/PageTemplate]] +[tag[$:/tags/PageTemplate]]\" variable=\"listItem\">\n\n<$transclude tiddler=<<listItem>>/>\n\n</$list>\n\n</$dropzone>\n\n</$navigator>\n\n"
},
"$:/core/ui/SideBar/More": {
"title": "$:/core/ui/SideBar/More",
"tags": "$:/tags/SideBar",
"caption": "{{$:/language/SideBar/More/Caption}}",
"text": "<div class=\"tw-more-sidebar\">\n<<tabs \"[is[shadow]!has[draft.of]tag[$:/tags/MoreSideBar]] [!is[shadow]!has[draft.of]tag[$:/tags/MoreSideBar]] +[tag[$:/tags/MoreSideBar]]\" \"$:/core/ui/MoreSideBar/Tags\" \"$:/state/tab/moresidebar\">>\n</div>\n"
},
"$:/core/ui/SideBar/Open": {
"title": "$:/core/ui/SideBar/Open",
"tags": "$:/tags/SideBar",
"caption": "{{$:/language/SideBar/Open/Caption}}",
"text": "\\define lingo-base() $:/language/CloseAll/\n<$list filter=\"[list[$:/StoryList]]\" history=\"$:/HistoryList\" storyview=\"pop\">\n\n<$button message=\"tw-close-tiddler\" class=\"btn-invisible btn-mini\">×</$button> <$link to={{!!title}}><$view field=\"title\"/></$link>\n\n</$list>\n\n<$button message=\"tw-close-all-tiddlers\" class=\"btn-invisible btn-mini\"><<lingo Button>></$button>\n"
},
"$:/core/ui/SideBar/Recent": {
"title": "$:/core/ui/SideBar/Recent",
"tags": "$:/tags/SideBar",
"caption": "{{$:/language/SideBar/Recent/Caption}}",
"text": "{{$:/snippets/recentchanges}}\n"
},
"$:/core/ui/SideBar/Tools": {
"title": "$:/core/ui/SideBar/Tools",
"tags": "$:/tags/SideBar",
"caption": "{{$:/language/SideBar/Tools/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/\n<<lingo Tools/Import/Prompt>> <$browse/>\n\n---\n\n{{$:/snippets/encryptionstatus}}\n\n---\n\n<<lingo Basics/Version/Prompt>> <<version>>\n\n---\n\n{{$:/snippets/viewswitcher}}\n\n---\n\n{{$:/snippets/minithemeswitcher}}\n\n---\n\n{{$:/snippets/languageswitcher}}\n"
},
"$:/core/ui/SideBarLists": {
"title": "$:/core/ui/SideBarLists",
"text": "<div class=\"tw-sidebar-lists\">\n\n<div class=\"tw-search\"><$edit-text tiddler=\"$:/temp/search\" type=\"search\" tag=\"input\"/> <$reveal state=\"$:/temp/search\" type=\"nomatch\" text=\"\"><$linkcatcher to=\"$:/temp/search\"><$link to=\"\" class=\"btn-invisible\">{{$:/core/images/close-button}}</$link></$linkcatcher></$reveal><$reveal state=\"$:/temp/search\" type=\"match\" text=\"\"> <$link to=\"$:/AdvancedSearch\" class=\"btn-invisible\">…</$link></$reveal></div>\n\n<$reveal state=\"$:/temp/search\" type=\"nomatch\" text=\"\">\n\n<div class=\"tw-search-results\">\n\n{{$:/language/Search/Matches}}\n\n<$list filter=\"[!is[system]search{$:/temp/search}sort[title]limit[250]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n\n</div>\n\n</$reveal>\n\n<$reveal state=\"$:/temp/search\" type=\"match\" text=\"\">\n\n<<tabs \"[is[shadow]!has[draft.of]tag[$:/tags/SideBar]] [!is[shadow]!has[draft.of]tag[$:/tags/SideBar]] +[tag[$:/tags/SideBar]]\" \"$:/core/ui/SideBar/Open\" \"$:/state/tab/sidebar\">>\n\n</$reveal>\n</div>\n"
},
"$:/TagManager": {
"title": "$:/TagManager",
"text": "<table>\n<tbody>\n<tr>\n<th>Tag</th>\n<th>Count</th>\n<th>Colour</th>\n</tr>\n<$list filter=\"[tags[]sort[title]]\">\n<tr>\n<td><$transclude tiddler=\"$:/core/ui/TagTemplate\"/></td>\n<td><$count filter=\"[is[current]tagging[]]\"/></td>\n<td><$edit-text field=\"color\" tag=\"input\" type=\"color\"/></td>\n</tr>\n</$list>\n</tbody>\n</table>\n"
},
"$:/core/ui/TagTemplate": {
"title": "$:/core/ui/TagTemplate",
"text": "\\define tag-styles()\nbackground-color:$(backgroundColor)$;\n\\end\n<span class=\"tw-tag-list-item\">\n<$set name=\"backgroundColor\" value={{!!color}}>\n<$button popup=<<qualify \"$:/state/tagpopup\">> class=\"btn-invisible tw-tag-label\" style=<<tag-styles>>>\n<$transclude tiddler={{!!icon}}/> <$view field=\"title\" format=\"text\" />\n</$button>\n</$set>\n<$reveal state=<<qualify \"$:/state/tagpopup\">> type=\"popup\" position=\"below\" animate=\"yes\"><div class=\"tw-drop-down\"><$transclude tiddler=\"$:/core/ui/ListItemTemplate\"/>\n<hr>\n<$list filter=\"[is[current]tagging[]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n</div>\n</$reveal>\n</span>\n"
},
"$:/core/ui/TiddlerFieldTemplate": {
"title": "$:/core/ui/TiddlerFieldTemplate",
"text": "<tr class=\"tw-view-field\"><td class=\"tw-view-field-name\"><<listItem>></td><td class=\"tw-view-field-value\"><$view field=<<listItem>>/></td></tr>"
},
"$:/core/ui/TiddlerFields": {
"title": "$:/core/ui/TiddlerFields",
"text": "<table class=\"tw-view-field-table\"><tbody><$list filter=\"[is[current]fields[]sort[title]] -text\" template=\"$:/core/ui/TiddlerFieldTemplate\" variable=\"listItem\"/>\n</tbody>\n</table>\n"
},
"$:/core/ui/TiddlerInfo/Fields": {
"title": "$:/core/ui/TiddlerInfo/Fields",
"tags": "$:/tags/TiddlerInfo",
"caption": "{{$:/language/TiddlerInfo/Fields/Caption}}",
"text": "<$transclude tiddler=\"$:/core/ui/TiddlerFields\"/>\n"
},
"$:/core/ui/TiddlerInfo/List": {
"title": "$:/core/ui/TiddlerInfo/List",
"tags": "$:/tags/TiddlerInfo",
"caption": "{{$:/language/TiddlerInfo/List/Caption}}",
"text": "\\define lingo-base() $:/language/TiddlerInfo/\n<$list filter=\"[list{!!title}]\" emptyMessage=<<lingo List/Empty>> template=\"$:/core/ui/ListItemTemplate\"/>\n"
},
"$:/core/ui/TiddlerInfo/Listed": {
"title": "$:/core/ui/TiddlerInfo/Listed",
"tags": "$:/tags/TiddlerInfo",
"caption": "{{$:/language/TiddlerInfo/Listed/Caption}}",
"text": "\\define lingo-base() $:/language/TiddlerInfo/\n<$list filter=\"[is[current]listed[]!is[system]]\" emptyMessage=<<lingo Listed/Empty>> template=\"$:/core/ui/ListItemTemplate\"/>\n"
},
"$:/core/ui/TiddlerInfo/References": {
"title": "$:/core/ui/TiddlerInfo/References",
"tags": "$:/tags/TiddlerInfo",
"caption": "{{$:/language/TiddlerInfo/References/Caption}}",
"text": "\\define lingo-base() $:/language/TiddlerInfo/\n<$list filter=\"[is[current]backlinks[]sort[title]]\" emptyMessage=<<lingo References/Empty>> template=\"$:/core/ui/ListItemTemplate\">\n</$list>\n"
},
"$:/core/ui/TiddlerInfo/Tagging": {
"title": "$:/core/ui/TiddlerInfo/Tagging",
"tags": "$:/tags/TiddlerInfo",
"caption": "{{$:/language/TiddlerInfo/Tagging/Caption}}",
"text": "\\define lingo-base() $:/language/TiddlerInfo/\n<$list filter=\"[is[current]tagging[]]\" emptyMessage=<<lingo Tagging/Empty>> template=\"$:/core/ui/ListItemTemplate\"/>\n"
},
"$:/core/ui/TiddlerInfo": {
"title": "$:/core/ui/TiddlerInfo",
"text": "<<tabs \"[is[shadow]!has[draft.of]tag[$:/tags/TiddlerInfo]] [!is[shadow]!has[draft.of]tag[$:/tags/TiddlerInfo]] +[tag[$:/tags/TiddlerInfo]]\" \"$:/core/ui/TiddlerInfo/References\">>\n"
},
"$:/core/ui/UntaggedTemplate": {
"title": "$:/core/ui/UntaggedTemplate",
"text": "\\define lingo-base() $:/language/SideBar/\n<$button popup=<<qualify \"$:/state/tagpopup\">> class=\"btn-invisible tw-untagged-label tw-tag-label\"><<lingo Tags/Untagged/Caption>></$button>\n<$reveal state=<<qualify \"$:/state/tagpopup\">> type=\"popup\" position=\"below\"><div class=\"tw-drop-down\">\n<$list filter=\"[untagged[]!is[system]] -[tags[]] +[sort[title]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n</div></$reveal>\n"
},
"$:/core/ui/ViewTemplate/body": {
"title": "$:/core/ui/ViewTemplate/body",
"tags": "$:/tags/ViewTemplate",
"text": "<div class=\"body\">\n\n<$transclude />\n\n</div>"
},
"$:/core/ui/ViewTemplate/subtitle": {
"title": "$:/core/ui/ViewTemplate/subtitle",
"tags": "$:/tags/ViewTemplate",
"text": "<div class=\"tw-subtitle\"><$link to={{!!modifier}}><$view field=\"modifier\"/></$link> <$view field=\"modified\" format=\"relativedate\"/></div>\n"
},
"$:/core/ui/ViewTemplate/tags": {
"title": "$:/core/ui/ViewTemplate/tags",
"tags": "$:/tags/ViewTemplate",
"text": "<div class=\"tw-tags-wrapper\"><$list filter=\"[is[current]tags[]sort[title]]\" template=\"$:/core/ui/TagTemplate\" storyview=\"pop\"/></div>\n"
},
"$:/core/ui/ViewTemplate/title": {
"title": "$:/core/ui/ViewTemplate/title",
"tags": "$:/tags/ViewTemplate",
"text": "\\define title-styles()\nfill:$(foregroundColor)$;\n\\end\n<div class=\"tw-tiddler-title\"><div class=\"titlebar\"><span class=\"tw-tiddler-controls\"><$list filter=\"[is[shadow]!has[draft.of]tag[$:/tags/ViewToolbar]] [!is[shadow]!has[draft.of]tag[$:/tags/ViewToolbar]] +[tag[$:/tags/ViewToolbar]]\" variable=\"listItem\"><$transclude tiddler=<<listItem>>/></$list>\n\n</span><$set name=\"foregroundColor\" value={{!!color}}><span style=<<title-styles>>><$transclude tiddler={{!!icon}}/></span></$set> <span class=\"title\"><$view field=\"title\"/></span></div>\n\n<$reveal type=\"nomatch\" text=\"\" default=\"\" state=<<tiddlerInfoState>> class=\"tw-tiddler-info tw-popup\" animate=\"yes\" retain=\"yes\">\n\n<$transclude tiddler=\"$:/core/ui/TiddlerInfo\"/>\n\n</$reveal></div>"
},
"$:/core/ui/ViewTemplate": {
"title": "$:/core/ui/ViewTemplate",
"text": "\\define frame-classes()\ntw-tiddler-frame $(missingTiddlerClass)$ $(shadowTiddlerClass)$ $(systemTiddlerClass)$\n\\end\n<$set name=\"storyTiddler\" value=<<currentTiddler>>><$set name=\"tiddlerInfoState\" value=<<qualify \"$:/state/tiddlerInfo\">>><$tiddler tiddler=<<currentTiddler>>><div class=<<frame-classes>>><$list filter=\"[is[shadow]!has[draft.of]tag[$:/tags/ViewTemplate]] [!is[shadow]!has[draft.of]tag[$:/tags/ViewTemplate]] +[tag[$:/tags/ViewTemplate]]\" variable=\"listItem\"><$transclude tiddler=<<listItem>>/></$list>\n</div>\n</$tiddler></$set></$set>\n"
},
"$:/core/ui/ViewToolbar/close": {
"title": "$:/core/ui/ViewToolbar/close",
"tags": "$:/tags/ViewToolbar",
"text": "<$button message=\"tw-close-tiddler\" class=\"btn-invisible\">{{$:/core/images/close-button}}</$button>"
},
"$:/core/ui/ViewToolbar/edit": {
"title": "$:/core/ui/ViewToolbar/edit",
"tags": "$:/tags/ViewToolbar",
"text": "<$button message=\"tw-edit-tiddler\" class=\"btn-invisible\">{{$:/core/images/edit-button}}</$button>"
},
"$:/core/ui/ViewToolbar/info": {
"title": "$:/core/ui/ViewToolbar/info",
"tags": "$:/tags/ViewToolbar",
"text": "<$button popup=<<tiddlerInfoState>> class=\"btn-invisible\" selectedClass=\"tw-selected\">{{$:/core/images/info-button}}</$button>"
},
"$:/DefaultTiddlers": {
"title": "$:/DefaultTiddlers",
"text": "GettingStarted\n[!is[system]sort[modified]limit[25]]"
},
"$:/temp/advancedsearch": {
"title": "$:/temp/advancedsearch",
"text": ""
},
"$:/snippets/allfields": {
"title": "$:/snippets/allfields",
"text": "\\define renderfield(title)\n<tr class=\"tw-view-field\"><td class=\"tw-view-field-name\">''$title$'':</td><td class=\"tw-view-field-value\">//{{$:/language/Docs/Fields/$title$}}//</td></tr>\n\\end\n<table class=\"tw-view-field-table\"><tbody><$list filter=\"[fields[]sort[title]]\" variable=\"listItem\"><$macrocall $name=\"renderfield\" title=<<listItem>>/></$list>\n</tbody></table>\n"
},
"$:/snippets/autosavestatus": {
"title": "$:/snippets/autosavestatus",
"text": "\\define lingo-base() $:/language/ControlPanel/Saving/\n<$reveal type=\"match\" state=\"$:/config/AutoSave\" text=\"yes\">\n<<lingo AutoSave/Enabled/Prompt>>\n<$linkcatcher to=\"$:/config/AutoSave\"><$button to=\"no\"><<lingo AutoSave/Enabled/Button>>\n</$button></$linkcatcher>\n</$reveal>\n<$reveal type=\"nomatch\" state=\"$:/config/AutoSave\" text=\"yes\">\n<<lingo AutoSave/Disabled/Prompt>>\n<$linkcatcher to=\"$:/config/AutoSave\"><$button to=\"yes\"><<lingo AutoSave/Disabled/Button>></$button></$linkcatcher>\n</$reveal>"
},
"$:/config/AnimationDuration": {
"title": "$:/config/AnimationDuration",
"text": "400"
},
"$:/config/AutoSave": {
"title": "$:/config/AutoSave",
"text": "yes"
},
"$:/config/BitmapEditor/Colour": {
"title": "$:/config/BitmapEditor/Colour",
"text": "#ff0"
},
"$:/config/BitmapEditor/LineWidth": {
"title": "$:/config/BitmapEditor/LineWidth",
"text": "3"
},
"$:/config/SyncFilter": {
"title": "$:/config/SyncFilter",
"text": "[is[tiddler]] -[[$:/HistoryList]] -[[$:/StoryList]] -[[$:/isEncrypted]] -[prefix[$:/status]] -[prefix[$:/state]] -[prefix[$:/temp]]"
},
"$:/snippets/currpalettepreview": {
"title": "$:/snippets/currpalettepreview",
"text": "\\define swatchStyle()\nbackground-color: $(swatchColour)$;\n\\end\n\\define swatch(colour)\n<$set name=\"swatchColour\" value={{##$colour$}}>\n<div class=\"tw-swatch\" style=<<swatchStyle>>/>\n</$set>\n\\end\n<div class=\"tw-swatches-horiz\">\n<<swatch foreground>>\n<<swatch background>>\n<<swatch muted-foreground>>\n<<swatch primary>>\n<<swatch page-background>>\n<<swatch tab-background>>\n<<swatch tiddler-info-background>>\n</div>\n"
},
"$:/snippets/download-wiki-button": {
"title": "$:/snippets/download-wiki-button",
"text": "\\define lingo-base() $:/language/ControlPanel/Tools/Download/\n<$button message=\"tw-download-file\" param=\"$:/core/save/all\" class=\"btn-big-green\"><<lingo Full/Caption>> {{$:/core/images/save-button}}</$button>"
},
"$:/snippets/encryptionstatus": {
"title": "$:/snippets/encryptionstatus",
"text": "\\define lingo-base() $:/language/ControlPanel/Tools/Encryption/\n<$reveal type=\"match\" state=\"$:/isEncrypted\" text=\"yes\">\n<<lingo Enabled/Prompt>>\n<$button message=\"tw-clear-password\" class=\"btn btn-danger\"><<lingo ClearPassword/Button>></$button>\n<$button message=\"tw-set-password\" class=\"btn btn-warning\"><<lingo ChangePassword/Button>></$button>\n</$reveal>\n<$reveal type=\"nomatch\" state=\"$:/isEncrypted\" text=\"yes\">\n<<lingo Disabled/Prompt>>\n<$button message=\"tw-set-password\" class=\"btn btn-warning\"><<lingo SetPassword/Button>></$button>\n</$reveal>"
},
"$:/snippets/languageswitcher": {
"title": "$:/snippets/languageswitcher",
"text": "{{$:/language/ControlPanel/Basics/Language/Prompt}} <$view tiddler={{$:/language}} field=\"description\" format=\"text\"><$view tiddler={{$:/language}} field=\"name\" format=\"text\"><$view tiddler={{$:/language}} field=\"title\" format=\"text\"/></$view></$view>\n\n<$linkcatcher to=\"$:/language\">\n<$list filter=\"[[$:/languages/en-GB]] [plugin-type[language]sort[title]]\"><div><$reveal state=\"$:/language\" type=\"match\" text={{!!title}}>•</$reveal><$reveal state=\"$:/language\" type=\"nomatch\" text={{!!title}}> </$reveal> <$link to={{!!title}}><$view field=\"description\" format=\"text\"><$view field=\"name\" format=\"text\"><$view field=\"title\" format=\"text\"/></$view></$view></$link></div>\n</$list>\n</$linkcatcher>"
},
"$:/snippets/minilanguageswitcher": {
"title": "$:/snippets/minilanguageswitcher",
"text": "<$linkcatcher to=\"$:/language\">\n<$list filter=\"[[$:/languages/en-GB]] [plugin-type[language]sort[title]]\"><div><$reveal state=\"$:/language\" type=\"match\" text={{!!title}}>•</$reveal><$reveal state=\"$:/language\" type=\"nomatch\" text={{!!title}}> </$reveal> <$link to={{!!title}}><$view field=\"description\" format=\"text\"><$view field=\"name\" format=\"text\"><$view field=\"title\" format=\"text\"/></$view></$view></$link></div>\n</$list>\n</$linkcatcher>"
},
"$:/snippets/minithemeswitcher": {
"title": "$:/snippets/minithemeswitcher",
"text": "\\define lingo-base() $:/language/ControlPanel/Appearance/Theme/\n<<lingo Prompt>> <$view tiddler={{$:/theme}} field=\"name\"/>\n\n<$linkcatcher to=\"$:/theme\">\n<$list filter=\"[plugin-type[theme]sort[title]]\"><div><$reveal state=\"$:/theme\" type=\"match\" text={{!!title}}>•</$reveal><$reveal state=\"$:/theme\" type=\"nomatch\" text={{!!title}}> </$reveal> <$link to={{!!title}}><$view field=\"name\" format=\"text\"/></$link></div>\n</$list>\n</$linkcatcher>"
},
"$:/snippets/modules": {
"title": "$:/snippets/modules",
"text": "\\define describeModuleType(type)\n{{$:/language/Docs/ModuleTypes/$type$}}\n\\end\n<$list filter=\"[moduletypes[]]\">\n\n!! <$macrocall $name=\"currentTiddler\" $type=\"text/plain\" $output=\"text/plain\"/>\n\n<$macrocall $name=\"describeModuleType\" type=<<currentTiddler>>/>\n\n<ul><$list filter=\"[is[current]modules[]]\"><li><$link><<currentTiddler>></$link>\n</li>\n</$list>\n</ul>\n</$list>\n"
},
"$:/palette": {
"title": "$:/palette",
"text": "$:/palettes/Vanilla"
},
"$:/snippets/paletteeditor": {
"title": "$:/snippets/paletteeditor",
"text": "\\define lingo-base() $:/language/ControlPanel/Appearance/Palette/Editor/\n<$set name=\"currentTiddler\" value={{$:/palette}}>\n\n<<lingo Prompt>> <$link to={{$:/palette}}><$macrocall $name=\"currentTiddler\" $output=\"text/plain\"/></$link>\n\n<$list filter=\"[is[current]is[shadow]is[tiddler]]\" variable=\"listItem\">\n<<lingo Prompt/Modified>>\n<$button message=\"tw-delete-tiddler\" param={{$:/palette}}><<lingo Reset/Caption>></$button>\n</$list>\n\n<$list filter=\"[is[current]is[shadow]!is[tiddler]]\" variable=\"listItem\">\n<<lingo Clone/Prompt>>\n</$list>\n\n<$button message=\"tw-new-tiddler\" param={{$:/palette}}><<lingo Clone/Caption>></$button>\n\n<table><tbody><$list filter=\"[is[current]indexes[]]\" variable=\"colourName\"><tr><td><$macrocall $name=\"colourName\" $output=\"text/plain\"/></td>\n<td><$edit-text index=<<colourName>> tag=\"input\"/></td>\n<td><$edit-text index=<<colourName>> type=\"color\" tag=\"input\"/></td>\n</tr>\n</$list>\n</tbody>\n</table>\n</$set>\n"
},
"$:/snippets/palettepreview": {
"title": "$:/snippets/palettepreview",
"text": "<$set name=\"currentTiddler\" value={{$:/palette}}>\n<$transclude tiddler=\"$:/snippets/currpalettepreview\"/>\n</$set>\n"
},
"$:/snippets/paletteswitcher": {
"title": "$:/snippets/paletteswitcher",
"text": "\\define lingo-base() $:/language/ControlPanel/Appearance/Palette/\n<<lingo Prompt>> <$view tiddler={{$:/palette}} field=\"name\"/>\n\n<$linkcatcher to=\"$:/palette\">\n<div class=\"tw-chooser\"><$list filter=\"[is[shadow]tag[$:/tags/Palette]] [!is[shadow]tag[$:/tags/Palette]] +[sort[description]]\"><div class=\"tw-chooser-item\"><$link to={{!!title}}><div><$reveal state=\"$:/palette\" type=\"match\" text={{!!title}}>•</$reveal><$reveal state=\"$:/palette\" type=\"nomatch\" text={{!!title}}> </$reveal> ''<$view field=\"name\" format=\"text\"/>'' - <$view field=\"description\" format=\"text\"/></div><$transclude tiddler=\"$:/snippets/currpalettepreview\"/></$link></div>\n</$list>\n</div>\n</$linkcatcher>"
},
"$:/snippets/recentchanges": {
"title": "$:/snippets/recentchanges",
"text": "<$list filter=\"[!is[system]has[modified]!sort[modified]limit[100]eachday[modified]]\">\n<div class=\"tw-menu-list-item\">\n<$view field=\"modified\" format=\"date\" template={{$:/language/RecentChanges/DateFormat}}/>\n<$list filter=\"[sameday{!!modified}!is[system]!sort[modified]]\">\n<div class=\"tw-menu-list-subitem\">\n<$link to={{!!title}}>\n<$view field=\"title\"/>\n</$link>\n</div>\n</$list>\n</div>\n</$list>\n"
},
"$:/temp/search": {
"title": "$:/temp/search",
"text": ""
},
"$:/tags/ControlPanel": {
"title": "$:/tags/ControlPanel",
"list": "$:/core/ui/ControlPanel/Basics $:/core/ui/ControlPanel/Appearance $:/core/ui/ControlPanel/Saving $:/core/ui/ControlPanel/Plugins $:/core/ui/ControlPanel/Tools $:/core/ui/ControlPanel/Internals",
"text": ""
},
"$:/tags/EditTemplate": {
"title": "$:/tags/EditTemplate",
"list": "[[$:/core/ui/EditTemplate/controls]] [[$:/core/ui/EditTemplate/title]] [[$:/core/ui/EditTemplate/tags]] [[$:/core/ui/EditTemplate/body]] [[$:/core/ui/EditTemplate/type]] [[$:/core/ui/EditTemplate/fields]]",
"text": ""
},
"$:/tags/EditToolbar": {
"title": "$:/tags/EditToolbar",
"list": "[[$:/core/ui/EditToolbar/delete]] [[$:/core/ui/EditToolbar/cancel]] [[$:/core/ui/EditToolbar/save]]",
"text": ""
},
"$:/tags/MoreSideBar": {
"title": "$:/tags/MoreSideBar",
"list": "[[$:/core/ui/MoreSideBar/All]] [[$:/core/ui/MoreSideBar/Recent]] [[$:/core/ui/MoreSideBar/Tags]] [[$:/core/ui/MoreSideBar/Missing]] [[$:/core/ui/MoreSideBar/Drafts]] [[$:/core/ui/MoreSideBar/Orphans]] [[$:/core/ui/MoreSideBar/Types]] [[$:/core/ui/MoreSideBar/System]] [[$:/core/ui/MoreSideBar/Shadows]]",
"text": ""
},
"$:/tags/PageControls": {
"title": "$:/tags/PageControls",
"list": "[[$:/core/ui/PageControls/new-tiddler]] [[$:/core/ui/PageControls/control-panel]] [[$:/core/ui/PageControls/save-wiki]]",
"text": ""
},
"$:/tags/PageTemplate": {
"title": "$:/tags/PageTemplate",
"list": "[[$:/core/ui/PageTemplate/sidebar]] [[$:/core/ui/PageTemplate/story]]",
"text": ""
},
"$:/tags/SideBar": {
"title": "$:/tags/SideBar",
"list": "[[$:/core/ui/SideBar/Open]] [[$:/core/ui/SideBar/Recent]] [[$:/core/ui/SideBar/Tools]] [[$:/core/ui/SideBar/More]]",
"text": ""
},
"$:/tags/TiddlerInfo": {
"title": "$:/tags/TiddlerInfo",
"list": "[[$:/core/ui/TiddlerInfo/References]] [[$:/core/ui/TiddlerInfo/Tagging]] [[$:/core/ui/TiddlerInfo/List]] [[$:/core/ui/TiddlerInfo/Listed]] [[$:/core/ui/TiddlerInfo/Fields]]",
"text": ""
},
"$:/tags/ViewTemplate": {
"title": "$:/tags/ViewTemplate",
"list": "[[$:/core/ui/ViewTemplate/title]] [[$:/core/ui/ViewTemplate/subtitle]] [[$:/core/ui/ViewTemplate/tags]] [[$:/core/ui/ViewTemplate/body]]",
"text": ""
},
"$:/tags/ViewToolbar": {
"title": "$:/tags/ViewToolbar",
"list": "[[$:/core/ui/ViewToolbar/info]] [[$:/core/ui/ViewToolbar/edit]] [[$:/core/ui/ViewToolbar/close]]",
"text": ""
},
"$:/snippets/themeswitcher": {
"title": "$:/snippets/themeswitcher",
"text": "\\define lingo-base() $:/language/ControlPanel/Appearance/Theme/\n<<lingo Prompt>> <$view tiddler={{$:/theme}} field=\"name\"/>\n\n<$linkcatcher to=\"$:/theme\">\n<$list filter=\"[plugin-type[theme]sort[title]]\"><div><$reveal state=\"$:/theme\" type=\"match\" text={{!!title}}>•</$reveal><$reveal state=\"$:/theme\" type=\"nomatch\" text={{!!title}}> </$reveal> <$link to={{!!title}}>''<$view field=\"name\" format=\"text\"/>'' <$view field=\"description\" format=\"text\"/></$link></div>\n</$list>\n</$linkcatcher>"
},
"$:/core/wiki/title": {
"title": "$:/core/wiki/title",
"type": "text/vnd.tiddlywiki",
"text": "{{$:/SiteTitle}} --- {{$:/SiteSubtitle}}"
},
"$:/view": {
"title": "$:/view",
"text": "classic"
},
"$:/snippets/viewswitcher": {
"title": "$:/snippets/viewswitcher",
"text": "\\define lingo-base() $:/language/ControlPanel/Appearance/StoryView/\n<<lingo Prompt>> {{$:/view}}\n\n<$linkcatcher to=\"$:/view\"><$list filter=\"classic zoomin pop\"><div><$reveal state=\"$:/view\" type=\"match\" text={{!!title}}>•</$reveal><$reveal state=\"$:/view\" type=\"nomatch\" text={{!!title}}> </$reveal> <$link to={{!!title}}><$view field=\"title\"/></$link>\n</div>\n</$list>\n</$linkcatcher>\n"
}
}
}
/*\
title: $:/core/modules/filters/split.js
type: application/javascript
module-type: filteroperator
Filter operator for splitting each current list element
into several new elements.
\*/
(function(){
/*jslint node: true, browser: true */
/*global $tw: false */
"use strict";
/*
Export our filter function
*/
exports.split = function(source,operator,options) {
var results = [],
fieldname = (operator.suffix || operator.operator).toLowerCase();
// Function to check an individual title
function checkTiddler(title) {
var tiddler = options.wiki.getTiddler(title);
if(tiddler) {
var splitted,
text = tiddler.getFieldString(fieldname);
if(operator.regexp) {
splitted = text.split(operator.regexp);
} else {
splitted = text.split(operator.operand);
}
if(splitted) {
$tw.utils.pushTop(results,splitted);
}
}
}
// Iterate through the source tiddlers
if($tw.utils.isArray(source)) {
$tw.utils.each(source,function(title) {
checkTiddler(title);
});
} else {
$tw.utils.each(source,function(element,title) {
checkTiddler(title);
});
}
return results;
};
})();
\define lingo-base() $:/language/SideBar/Tags/
<$button to="$:/TagManager"><<lingo TagManager/Caption>></$button>
<$list filter="[tags[]sort[title]]">
<$transclude tiddler="$:/core/ui/TagTemplate"/> <small class="tw-menu-list-count"><$count filter="[is[current]tagging[]]"/></small>
</$list>
----
{{$:/core/ui/UntaggedTemplate}} <small class="tw-menu-list-count"><$count filter="[untagged[]!is[system]] -[tags[]]"/></small>
<$button message="tw-new-tiddler" class="btn-invisible">{{$:/core/images/new-button}}</$button>
\define colour(name)
<$transclude tiddler={{$:/palette}} index="$name$"/>
\end
\define color(name)
<<colour $name$>>
\end
\define tabs(tabsList,default,state:"$:/state/tab")
<div class="tw-tab-buttons"><$list filter="$tabsList$" variable="currentTab"><$button set=<<qualify "$state$">> setTo=<<currentTab>> default="$default$" selectedClass="tw-tab-selected"><$transclude tiddler=<<currentTab>> field="caption"><$macrocall $name="currentTab" $type="text/plain" $output="text/plain"/></$transclude> </$button>
</$list>
</div>
<div class="tw-tab-divider"/>
<div class="tw-tab-content">
<$list filter="$tabsList$" variable="currentTab">
<$reveal type="match" state=<<qualify "$state$">> text=<<currentTab>> default="$default$">
<$transclude tiddler=<<currentTab>>/>
</$reveal>
</$list>
</div>
\end
\define wikitext-example(src)
```
$src$
```
Renders as:
$src$
In HTML:
$$$text/vnd.tiddlywiki>text/html
$src$
$$$
\end
\define lingo-base()
$:/lingo/
\end
\define lingo(title)
{{$(lingo-base)$$title$}}
\end
\define ref(label)
<$button popup="$:/state/$label$" class="btn-invisible tw-slider"><sup style="color:green">$label$</sup></$button>
\end
\define definition(label,text)
<$reveal type="popup" state="$:/state/$label$" animate="yes">
<div class="tw-drop-down">
<p>
$text$
</p>
</div>
</$reveal>
\end
\define popnote(label,text)
<<ref "$label$">>
<<definition "$label$" "$text$">>
\end
\define footnote(label,text)
<<definition "$label$" "$text$">>
<sub><span style="color:green">$label$ : </span> $text$</sub>
\end
\define slider(caption,state,text)
<$button popup="$state$" class="mon-bouton">$caption$ <span title="Montrer"><$reveal type="match" text="" default="" state="$state$">▼</$reveal></span><span title="Cacher"><$reveal type="nomatch" text="" default="" state="$state$">▲</$reveal></span></$button>
<$reveal type="nomatch" state="$state$" text="">
$text$
</$reveal>
\end
{{$:/core/ui/PageTemplate}}
<div class="tw-sidebar-lists">
{{$:/_ui/SearchBox}}
<$reveal state="$:/temp/search" type="match" text="">
<<tabs "[is[shadow]!has[draft.of]tag[$:/tags/SideBar]] [!is[shadow]!has[draft.of]tag[$:/tags/SideBar]] +[tag[$:/tags/SideBar]]" "$:/core/ui/SideBar/Open" "$:/state/tab/sidebar">>
</$reveal>
</div>
\define frame-classes()
tw-tiddler-frame $(missingTiddlerClass)$ $(shadowTiddlerClass)$ $(systemTiddlerClass)$
\end
<$set name="storyTiddler" value=<<currentTiddler>>><$set name="tiddlerInfoState" value=<<qualify "$:/state/tiddlerInfo">>><$set name="tiddlerInfoState2" value=<<qualify "$:/state/tiddlerInfo2">>><$tiddler tiddler=<<currentTiddler>>><div class=<<frame-classes>>><$list filter="[is[shadow]!has[draft.of]tag[$:/tags/ViewTemplate]] [!is[shadow]!has[draft.of]tag[$:/tags/ViewTemplate]] +[tag[$:/tags/ViewTemplate]]" variable="listItem"><$transclude tiddler=<<listItem>>/></$list>
</div>
</$tiddler></$set></$set>
<div class="body">
<$transclude />
</div>
<div class="tw-subtitle"><$link to={{!!modifier}}><$view field="modifier"/></$link> <$view field="modified" format="relativedate"/></div>
[[.]]
[[HelloWorld]]
[[Définitions]]
[
{
"title": "Draft of '$:/_footerCatégories'"
},
{
"title": "$:/_footerCatégories"
},
{
"title": "$:/AdvancedSearch",
"fromPageRect": {
"top": 203,
"left": 936,
"width": 14,
"right": 950,
"bottom": 219,
"height": 16
}
},
{
"title": "$:/_ui/TiddlerInfo/bottom",
"fromPageRect": {
"top": 294.890625,
"left": 85,
"width": 155,
"right": 240,
"bottom": 310.890625,
"height": 16
}
},
{
"title": "Draft of '$:/_ui/TiddlerInfo/bottom'"
},
{
"title": "$:/core/ui/ViewTemplate",
"fromPageRect": {
"top": 433.890625,
"left": 852,
"width": 163,
"right": 1015,
"bottom": 449.890625,
"height": 16
}
},
{
"title": "Draft of '$:/core/ui/ViewTemplate'"
},
{
"title": "$:/core/ui/ViewTemplate"
},
{
"title": "$:/_ui/TiddlerInfo/bottom"
},
{
"title": "Draft of '$:/_footerCatégories'"
},
{
"title": "$:/_footerCatégories"
},
{
"title": "Draft of '$:/_footerCatégories'"
},
{
"title": "$:/_footerCatégories"
},
{
"title": "$:/_tab/notes",
"fromPageRect": {
"top": 499.890625,
"left": 852,
"width": 83,
"right": 935,
"bottom": 515.890625,
"height": 16
}
},
{
"title": "Draft of '$:/_tab/notes'"
},
{
"title": "$:/_tab/notes"
},
{
"title": "Draft of '$:/_tab/notes'"
},
{
"title": "$:/_tab/notes"
},
{
"title": "Draft of '$:/_tab/notes'"
},
{
"title": "$:/_tab/notes"
},
{
"title": "Draft of '$:/_tab/notes'"
},
{
"title": "$:/_tab/notes"
},
{
"title": ".",
"fromPageRect": {
"top": 84,
"left": 770,
"width": 495,
"right": 1265,
"bottom": 122,
"height": 38
}
},
{
"title": "$:/_images/non-fluid-width-button",
"fromPageRect": {
"top": 411.890625,
"left": 852,
"width": 212,
"right": 1064,
"bottom": 427.890625,
"height": 16
}
},
{
"title": "$:/_images/right-arrow-button",
"fromPageRect": {
"top": 451.890625,
"left": 852,
"width": 188,
"right": 1040,
"bottom": 467.890625,
"height": 16
}
},
{
"title": "$:/_images/fluid-width-button",
"fromPageRect": {
"top": 351.890625,
"left": 852,
"width": 183,
"right": 1035,
"bottom": 367.890625,
"height": 16
}
},
{
"title": "$:/_stylesheet/topmenu",
"fromPageRect": {
"top": 313.890625,
"left": 852,
"width": 148,
"right": 1000,
"bottom": 329.890625,
"height": 16
}
},
{
"title": "Draft of '$:/_stylesheet/topmenu'"
},
{
"title": "$:/_stylesheet/topmenu"
},
{
"title": "$:/_stylesheet/leftmenu",
"fromPageRect": {
"top": 293.890625,
"left": 852,
"width": 147,
"right": 999,
"bottom": 309.890625,
"height": 16
}
},
{
"title": "Draft of '$:/_stylesheet/leftmenu'"
},
{
"title": "$:/_stylesheet/leftmenu"
},
{
"title": "$:/_top-toggle-left-sidebar-button",
"fromPageRect": {
"top": 673.890625,
"left": 852,
"width": 209,
"right": 1061,
"bottom": 689.890625,
"height": 16
}
},
{
"title": "Draft of '$:/_top-toggle-left-sidebar-button'"
},
{
"title": "$:/_top-toggle-left-sidebar-button"
},
{
"title": "$:/_ui/Toggle-fluid-width-button",
"fromPageRect": {
"top": 609.890625,
"left": 852,
"width": 197,
"right": 1049,
"bottom": 625.890625,
"height": 16
}
},
{
"title": "$:/_ui/topmenu",
"fromPageRect": {
"top": 629.890625,
"left": 852,
"width": 95,
"right": 947,
"bottom": 645.890625,
"height": 16
}
},
{
"title": "Draft of '$:/_ui/topmenu'"
},
{
"title": "$:/_ui/topmenu"
},
{
"title": ".",
"fromPageRect": {
"top": 84,
"left": 770,
"width": 495,
"right": 1265,
"bottom": 122,
"height": 38
}
},
{
"title": "Canguilhem",
"fromPageRect": {
"top": 438.890625,
"left": 858,
"width": 139,
"right": 997,
"bottom": 454.890625,
"height": 16
}
},
{
"title": "Dennett",
"fromPageRect": {
"top": 538.890625,
"left": 858,
"width": 98,
"right": 956,
"bottom": 554.890625,
"height": 16
}
},
{
"title": "$:/_footerCatégories",
"fromPageRect": {
"top": 257.890625,
"left": 852,
"width": 130,
"right": 982,
"bottom": 273.890625,
"height": 16
}
},
{
"title": "$:/_ui/ViewTemplate/body/auteur",
"fromPageRect": {
"top": 530.890625,
"left": 852,
"width": 210,
"right": 1062,
"bottom": 546.890625,
"height": 16
}
},
{
"title": "Draft of '$:/_ui/ViewTemplate/body/auteur'"
},
{
"title": "$:/_ui/ViewTemplate/body/auteur"
},
{
"title": "Draft of '$:/_ui/ViewTemplate/body/auteur'"
},
{
"title": "$:/_ui/ViewTemplate/body/auteur"
},
{
"title": "Draft of '$:/_ui/ViewTemplate/body/auteur'"
},
{
"title": "$:/_ui/ViewTemplate/body/auteur"
},
{
"title": "Bedau",
"fromPageRect": {
"top": 377.890625,
"left": 858,
"width": 82,
"right": 940,
"bottom": 393.890625,
"height": 16
}
},
{
"title": "$:/_tab/notes",
"fromPageRect": {
"top": 499.890625,
"left": 852,
"width": 83,
"right": 935,
"bottom": 515.890625,
"height": 16
}
},
{
"title": "Draft of '$:/_tab/notes'"
},
{
"title": "$:/_tab/notes"
},
{
"title": "Draft of '$:/_tab/notes'"
},
{
"title": "$:/_tab/notes"
},
{
"title": "Draft of '$:/_tab/notes'"
},
{
"title": "$:/_tab/notes"
},
{
"title": "$:/ControlPanel"
},
{
"title": "Bedau",
"fromPageRect": {
"top": 377.890625,
"left": 858,
"width": 82,
"right": 940,
"bottom": 393.890625,
"height": 16
}
},
{
"title": "$:/ControlPanel"
},
{
"title": "Ayala",
"fromPageRect": {
"top": 337.890625,
"left": 863,
"width": 115,
"right": 978,
"bottom": 354.890625,
"height": 17
}
},
{
"title": "Boorse",
"fromPageRect": {
"top": 318.890625,
"left": 863,
"width": 137,
"right": 1000,
"bottom": 335.890625,
"height": 17
}
},
{
"title": "Borges",
"fromPageRect": {
"top": 338.890625,
"left": 863,
"width": 122,
"right": 985,
"bottom": 355.890625,
"height": 17
}
},
{
"title": "Buller",
"fromPageRect": {
"top": 398.890625,
"left": 863,
"width": 89,
"right": 952,
"bottom": 415.890625,
"height": 17
}
},
{
"title": "Braithwaite",
"fromPageRect": {
"top": 358.890625,
"left": 863,
"width": 110,
"right": 973,
"bottom": 375.890625,
"height": 17
}
},
{
"title": "Braithwaite, R.B. (1946): “Teleological Explanation”",
"fromPageRect": {
"top": 110.59375,
"left": 85,
"width": 346,
"right": 431,
"bottom": 127.59375,
"height": 17
}
},
{
"title": "$:/_tab/dimensions",
"fromPageRect": {
"top": 533.890625,
"left": 858,
"width": 132,
"right": 990,
"bottom": 550.890625,
"height": 17
}
},
{
"title": "Draft of '$:/_tab/dimensions'"
},
{
"title": "$:/_tab/dimensions"
},
{
"title": "Draft of '$:/_tab/dimensions'"
},
{
"title": "$:/_tab/dimensions"
},
{
"title": "Ayala (1970): “Teleological Explanations in Evolutionary Biology”",
"fromPageRect": {
"top": 597.671875,
"left": 85,
"width": 441,
"right": 526,
"bottom": 614.671875,
"height": 17
}
},
{
"title": "$:/_tab/citations",
"fromPageRect": {
"top": 69.890625,
"left": 858,
"width": 111,
"right": 969,
"bottom": 86.890625,
"height": 17
}
},
{
"title": "Draft of '$:/_tab/citations'"
},
{
"title": "$:/_tab/citations"
},
{
"title": "Draft of '$:/_tab/citations'"
},
{
"title": "$:/_tab/citations"
},
{
"title": "Ayala, 1970: 12-13",
"fromPageRect": {
"top": 569.296875,
"left": 536,
"width": 47,
"right": 583,
"bottom": 583.296875,
"height": 14
}
},
{
"title": "$:/ControlPanel"
},
{
"title": "Croyance",
"fromPageRect": {
"top": 460.890625,
"left": 863,
"width": 66,
"right": 929,
"bottom": 477.890625,
"height": 17
}
},
{
"title": "EpistemicIndependence",
"fromPageRect": {
"top": 520.890625,
"left": 863,
"width": 167,
"right": 1030,
"bottom": 537.890625,
"height": 17
}
},
{
"title": "Draft of 'EpistemicIndependence'"
},
{
"title": "EpistemicIndependence"
},
{
"title": "$:/_ui/ViewTemplate/body/concept",
"fromPageRect": {
"top": 326.890625,
"left": 858,
"width": 245,
"right": 1103,
"bottom": 343.890625,
"height": 17
}
},
{
"title": "Draft of '$:/_ui/ViewTemplate/body/concept'"
},
{
"title": "$:/_ui/ViewTemplate/body/concept"
},
{
"title": "Atomisme",
"fromPageRect": {
"top": 440.890625,
"left": 863,
"width": 71,
"right": 934,
"bottom": 457.890625,
"height": 17
}
},
{
"title": "Genre naturel (cluster kind realism)",
"fromPageRect": {
"top": 620.890625,
"left": 863,
"width": 250,
"right": 1113,
"bottom": 637.890625,
"height": 17
}
},
{
"title": "Draft of 'Genre naturel (cluster kind realism)'"
},
{
"title": "Genre naturel (cluster kind realism)"
},
{
"title": "Genre naturel (espèces biologiques)",
"fromPageRect": {
"top": 640.890625,
"left": 863,
"width": 247,
"right": 1110,
"bottom": 657.890625,
"height": 17
}
},
{
"title": "Genre naturel (essentialisme biologique)",
"fromPageRect": {
"top": 660.890625,
"left": 863,
"width": 279,
"right": 1142,
"bottom": 677.890625,
"height": 17
}
},
{
"title": "Gradualisme",
"fromPageRect": {
"top": 641.890625,
"left": 863,
"width": 91,
"right": 954,
"bottom": 658.890625,
"height": 17
}
},
{
"title": "Gestalt",
"fromPageRect": {
"top": 621.890625,
"left": 863,
"width": 50,
"right": 913,
"bottom": 638.890625,
"height": 17
}
},
{
"title": "Idéalisme",
"fromPageRect": {
"top": 681.890625,
"left": 863,
"width": 68,
"right": 931,
"bottom": 698.890625,
"height": 17
}
},
{
"title": "Biologie",
"fromPageRect": {
"top": 301.890625,
"left": 863,
"width": 54,
"right": 917,
"bottom": 318.890625,
"height": 17
}
},
{
"title": "(Contre-exemple) Le tuyau de gaz toxique qui fuit",
"fromPageRect": {
"top": 380.890625,
"left": 863,
"width": 330,
"right": 1193,
"bottom": 397.890625,
"height": 17
}
},
{
"title": "Draft of '(Contre-exemple) Le tuyau de gaz toxique qui fuit'"
},
{
"title": "Wright, L. (1973): “Functions”",
"fromPageRect": {
"top": 528,
"left": 770,
"width": 202,
"right": 972,
"bottom": 545,
"height": 17
}
},
{
"title": "Draft of 'Wright, L. (1973): “Functions”'"
},
{
"title": "Wright, L. (1973): “Functions”"
},
{
"title": "Wright, L. (1973): 161",
"fromPageRect": {
"top": 539.15625,
"left": 545,
"width": 38,
"right": 583,
"bottom": 553.15625,
"height": 14
}
},
{
"title": "Draft of 'Wright, L. (1973): 161'"
},
{
"title": "Wright, L. (1973): 161"
},
{
"title": "Draft of 'Wright, L. (1973): 161'"
},
{
"title": "Wright, L. (1973): 161 - définition"
},
{
"title": "$:/_ui/ViewTemplate/body/citation",
"fromPageRect": {
"top": 412.890625,
"left": 858,
"width": 241,
"right": 1099,
"bottom": 429.890625,
"height": 17
}
},
{
"title": "Draft of '$:/_ui/ViewTemplate/body/citation'"
},
{
"title": "$:/_ui/ViewTemplate/body/citation"
},
{
"title": "Wright, L. (1973): 161 - définition",
"fromPageRect": {
"top": 297.890625,
"left": 782,
"width": 217,
"right": 999,
"bottom": 314.890625,
"height": 17
}
},
{
"title": "$:/_ui/ViewTemplate/body/citation",
"fromPageRect": {
"top": 465.890625,
"left": 858,
"width": 241,
"right": 1099,
"bottom": 482.890625,
"height": 17
}
},
{
"title": "Draft of '$:/_ui/ViewTemplate/body/citation'"
},
{
"title": "$:/_ui/ViewTemplate/body/citation"
},
{
"title": "Objectivité",
"fromPageRect": {
"top": 484,
"left": 858,
"width": 278,
"right": 1136,
"bottom": 504,
"height": 20
}
},
{
"title": "Draft of 'Objectivité'"
},
{
"title": "Objectivité"
},
{
"title": "Wright, 1973: dimensions",
"fromPageRect": {
"top": 564,
"left": 858,
"width": 352,
"right": 1210,
"bottom": 584,
"height": 20
}
},
{
"title": "Draft of 'Wright, 1973: dimensions'"
},
{
"title": "Wright, 1973: dimensions"
},
{
"title": "Draft of 'Wright, 1973: dimensions'"
},
{
"title": "Wright, 1973: dimensions"
},
{
"title": "Draft of 'Wright, 1973: dimensions'"
},
{
"title": "Wright, 1973: dimensions"
},
{
"title": "Draft of 'Wright, 1973: dimensions'"
},
{
"title": "Wright, 1973: dimensions"
},
{
"title": "Approche étiologique: trois objections",
"fromPageRect": {
"top": 390,
"left": 858,
"width": 288,
"right": 1146,
"bottom": 410,
"height": 20
}
},
{
"title": "Draft of 'Approche étiologique: trois objections'"
},
{
"title": "Approche étiologique: trois objections"
},
{
"title": "Achinstein, P. (1977): “Function Statements”",
"fromPageRect": {
"top": 300.890625,
"left": 863,
"width": 297,
"right": 1160,
"bottom": 317.890625,
"height": 17
}
},
{
"title": "Bedau (1992): “Where's the Good in Teleology?”",
"fromPageRect": {
"top": 380.890625,
"left": 863,
"width": 327,
"right": 1190,
"bottom": 397.890625,
"height": 17
}
},
{
"title": "Brandon (1996): Concepts and Methods in Evolutionary Biology",
"fromPageRect": {
"top": 460.890625,
"left": 863,
"width": 429,
"right": 1292,
"bottom": 477.890625,
"height": 17
}
},
{
"title": "Cummins, R. (1975): “Functional Analysis”",
"fromPageRect": {
"top": 520.890625,
"left": 863,
"width": 287,
"right": 1150,
"bottom": 537.890625,
"height": 17
}
},
{
"title": "Canfield, J. (1964): “Teleological Explanation in Biology”",
"fromPageRect": {
"top": 500.890625,
"left": 863,
"width": 378,
"right": 1241,
"bottom": 517.890625,
"height": 17
}
},
{
"title": "Buller, D. (1998): “Etiological Theories of Function”",
"fromPageRect": {
"top": 480.890625,
"left": 863,
"width": 346,
"right": 1209,
"bottom": 497.890625,
"height": 17
}
},
{
"title": "Brandon (1996): Concepts and Methods in Evolutionary Biology",
"fromPageRect": {
"top": 460.890625,
"left": 863,
"width": 429,
"right": 1292,
"bottom": 477.890625,
"height": 17
}
},
{
"title": "LoremIpsum",
"fromPageRect": {
"top": 268,
"left": 770,
"width": 90,
"right": 860,
"bottom": 285,
"height": 17
}
},
{
"title": "$:/AdvancedSearch",
"fromPageRect": {
"top": 204,
"left": 934,
"width": 14,
"right": 948,
"bottom": 221,
"height": 17
}
},
{
"title": "$:/_tab/résumé",
"fromPageRect": {
"top": 273.890625,
"left": 85,
"width": 106,
"right": 191,
"bottom": 290.890625,
"height": 17
}
},
{
"title": "Draft of '$:/_tab/résumé'"
},
{
"title": "$:/_tab/résumé"
},
{
"title": "Draft of 'Cummins, R. (1975): “Functional Analysis”'"
},
{
"title": "Cummins, R. (1975): “Functional Analysis”"
},
{
"title": "Draft of 'Cummins, R. (1975): “Functional Analysis”'"
},
{
"title": "Cummins, R. (1975): “Functional Analysis”"
},
{
"title": "Draft of 'Cummins, R. (1975): “Functional Analysis”'"
},
{
"title": "Cummins, R. (1975): “Functional Analysis”"
},
{
"title": "Draft of 'Cummins, R. (1975): “Functional Analysis”'"
},
{
"title": "Cummins, R. (1975): “Functional Analysis”"
},
{
"title": "Draft of 'Cummins, R. (1975): “Functional Analysis”'"
},
{
"title": "Cummins, R. (1975): “Functional Analysis”"
},
{
"title": "Draft of 'Cummins, R. (1975): “Functional Analysis”'"
},
{
"title": "Cummins, R. (1975): “Functional Analysis”"
},
{
"title": "Draft of 'Cummins, R. (1975): “Functional Analysis”'"
},
{
"title": "Cummins, R. (1975): “Functional Analysis”"
},
{
"title": "Beckner, 1969: Justification du langage téléologique",
"fromPageRect": {
"top": 440.890625,
"left": 863,
"width": 351,
"right": 1214,
"bottom": 457.890625,
"height": 17
}
},
{
"title": "Beckner, M. (1969): “Function and Teleology”",
"fromPageRect": {
"top": 148,
"left": 155,
"width": 243,
"right": 398,
"bottom": 162,
"height": 14
}
},
{
"title": "Draft of 'Beckner, M. (1969): “Function and Teleology”'"
},
{
"title": "Beckner, M. (1969): “Function and Teleology”"
},
{
"title": "Boucles de ceinturon",
"fromPageRect": {
"top": 520.890625,
"left": 863,
"width": 144,
"right": 1007,
"bottom": 537.890625,
"height": 17
}
},
{
"title": "Draft of 'Boucles de ceinturon'"
},
{
"title": "Boucles de ceinturon"
},
{
"title": "Draft of 'Boucles de ceinturon'"
},
{
"title": "(Exemple) Boucles de ceinturon"
},
{
"title": "Ailes",
"fromPageRect": {
"top": 420.890625,
"left": 863,
"width": 35,
"right": 898,
"bottom": 437.890625,
"height": 17
}
},
{
"title": "Draft of 'Ailes'"
},
{
"title": "(Exemple) Ailes"
},
{
"title": "Exemples",
"fromPageRect": {
"top": 268,
"left": 770,
"width": 67,
"right": 837,
"bottom": 285,
"height": 17
}
},
{
"title": "Chlorophylle",
"fromPageRect": {
"top": 414.109375,
"left": 85,
"width": 137,
"right": 222,
"bottom": 440.109375,
"height": 26
}
},
{
"title": "Draft of 'Chlorophylle'"
},
{
"title": "Chlorophylle"
},
{
"title": "(Exemple) Ailes",
"fromPageRect": {
"top": 172.421875,
"left": 85,
"width": 160,
"right": 245,
"bottom": 198.421875,
"height": 26
}
},
{
"title": "Draft of '(Exemple) Ailes'"
},
{
"title": "Ailes"
},
{
"title": "(Exemple) Boucles de ceinturon",
"fromPageRect": {
"top": 172.421875,
"left": 85,
"width": 327,
"right": 412,
"bottom": 198.421875,
"height": 26
}
},
{
"title": "Draft of '(Exemple) Boucles de ceinturon'"
},
{
"title": "Boucles de ceinturon"
},
{
"title": "Home",
"fromPageRect": {
"top": 268,
"left": 770,
"width": 43,
"right": 813,
"bottom": 285,
"height": 17
}
},
{
"title": "Conceptions",
"fromPageRect": {
"top": 299,
"left": 771,
"width": 278,
"right": 1049,
"bottom": 319,
"height": 20
}
},
{
"title": "Draft of 'Conceptions'"
},
{
"title": "Conceptions"
},
{
"title": "VersionFaible",
"fromPageRect": {
"top": 268,
"left": 770,
"width": 96,
"right": 866,
"bottom": 285,
"height": 17
}
},
{
"title": "MaDéfinition",
"fromPageRect": {
"top": 268,
"left": 770,
"width": 89,
"right": 859,
"bottom": 285,
"height": 17
}
},
{
"title": "Draft of 'MaDéfinition'"
},
{
"title": "MaDéfinition"
},
{
"title": "Lalande, 1926: \"Objectif\"",
"fromPageRect": {
"top": 535,
"left": 771,
"width": 465,
"right": 1236,
"bottom": 555,
"height": 20
}
},
{
"title": "Lecourt, 1999: “Objectivité”",
"fromPageRect": {
"top": 555,
"left": 771,
"width": 465,
"right": 1236,
"bottom": 575,
"height": 20
}
},
{
"title": "Littré (1872-1877): “Objectif”",
"fromPageRect": {
"top": 575,
"left": 771,
"width": 465,
"right": 1236,
"bottom": 595,
"height": 20
}
},
{
"title": "Boucles de ceinturon",
"fromPageRect": {
"top": 520.890625,
"left": 863,
"width": 144,
"right": 1007,
"bottom": 537.890625,
"height": 17
}
},
{
"title": "Braithwaite, 1946: dimensions",
"fromPageRect": {
"top": 540.890625,
"left": 863,
"width": 204,
"right": 1067,
"bottom": 557.890625,
"height": 17
}
},
{
"title": "Catégories: le continu et le discontinu",
"fromPageRect": {
"top": 560.890625,
"left": 863,
"width": 255,
"right": 1118,
"bottom": 577.890625,
"height": 17
}
},
{
"title": "Home",
"fromPageRect": {
"top": 268,
"left": 770,
"width": 43,
"right": 813,
"bottom": 285,
"height": 17
}
},
{
"title": "$:/AdvancedSearch",
"fromPageRect": {
"top": 204,
"left": 934,
"width": 14,
"right": 948,
"bottom": 221,
"height": 17
}
},
{
"title": "TreeDirectoryTest",
"fromPageRect": {
"top": 669.890625,
"left": 85,
"width": 128,
"right": 213,
"bottom": 686.890625,
"height": 17
}
},
{
"title": "Draft of 'TreeDirectoryTest'"
},
{
"title": "TreeDirectoryTest"
},
{
"title": "Draft of 'TreeDirectoryTest'"
},
{
"title": "TreeDirectoryTest"
},
{
"title": "$:/_leftmenu",
"fromPageRect": {
"top": 263.890625,
"left": 85,
"width": 88,
"right": 173,
"bottom": 280.890625,
"height": 17
}
},
{
"title": "$:/_ui/topmenu",
"fromPageRect": {
"top": 431.890625,
"left": 85,
"width": 106,
"right": 191,
"bottom": 448.890625,
"height": 17
}
},
{
"title": "$:/_ui/topmenu",
"fromPageRect": {
"top": 523.890625,
"left": 85,
"width": 106,
"right": 191,
"bottom": 540.890625,
"height": 17
}
},
{
"title": "Draft of '$:/_ui/topmenu'"
},
{
"title": "$:/_ui/topmenu"
},
{
"title": "$:/_leftmenu",
"fromPageRect": {
"top": 369.890625,
"left": 85,
"width": 88,
"right": 173,
"bottom": 386.890625,
"height": 17
}
},
{
"title": "Draft of '$:/_leftmenu'"
},
{
"title": "$:/_leftmenu"
},
{
"title": "$:/_stylesheet/leftmenu",
"fromPageRect": {
"top": 361.890625,
"left": 85,
"width": 164,
"right": 249,
"bottom": 378.890625,
"height": 17
}
},
{
"title": "Draft of '$:/_stylesheet/leftmenu'"
},
{
"title": "$:/_stylesheet/leftmenu"
},
{
"title": "$:/_stylesheet/topmenu",
"fromPageRect": {
"top": 409.890625,
"left": 85,
"width": 163,
"right": 248,
"bottom": 426.890625,
"height": 17
}
},
{
"title": "Draft of '$:/_stylesheet/topmenu'"
},
{
"title": "$:/_stylesheet/topmenu"
},
{
"title": "$:/AdvancedSearch",
"fromPageRect": {
"top": 204,
"left": 934,
"width": 14,
"right": 948,
"bottom": 221,
"height": 17
}
},
{
"title": "$:/_ui/topmenu",
"fromPageRect": {
"top": 467.890625,
"left": 85,
"width": 106,
"right": 191,
"bottom": 484.890625,
"height": 17
}
},
{
"title": "Draft of '$:/_ui/topmenu'"
},
{
"title": "$:/_ui/topmenu"
},
{
"title": "$:/_leftmenu",
"fromPageRect": {
"top": 369.890625,
"left": 335,
"width": 88,
"right": 423,
"bottom": 386.890625,
"height": 17
}
},
{
"title": "Draft of '$:/_leftmenu'"
},
{
"title": "$:/_leftmenu"
},
{
"title": "$:/AdvancedSearch",
"fromPageRect": {
"top": 282,
"left": 1184,
"width": 14,
"right": 1198,
"bottom": 299,
"height": 17
}
},
{
"title": "$:/_ui/topmenu",
"fromPageRect": {
"top": 573.890625,
"left": 335,
"width": 106,
"right": 441,
"bottom": 590.890625,
"height": 17
}
},
{
"title": "$:/_leftmenu",
"fromPageRect": {
"top": 313.890625,
"left": 335,
"width": 88,
"right": 423,
"bottom": 330.890625,
"height": 17
}
},
{
"title": "Draft of '$:/_ui/topmenu'"
},
{
"title": "$:/_ui/topmenu"
},
{
"title": "$:/_stylesheet/leftmenu",
"fromPageRect": {
"top": 389.890625,
"left": 335,
"width": 164,
"right": 499,
"bottom": 406.890625,
"height": 17
}
},
{
"title": "$:/_leftmenu",
"fromPageRect": {
"top": 369.890625,
"left": 335,
"width": 88,
"right": 423,
"bottom": 386.890625,
"height": 17
}
},
{
"title": "Draft of '$:/_leftmenu'"
},
{
"title": "$:/_leftmenu"
},
{
"title": "Draft of '$:/_leftmenu'"
},
{
"title": "$:/_leftmenu"
},
{
"title": "$:/AdvancedSearch",
"fromPageRect": {
"top": 282,
"left": 1184,
"width": 14,
"right": 1198,
"bottom": 299,
"height": 17
}
},
{
"title": "$:/_leftmenu",
"fromPageRect": {
"top": 260.890625,
"left": 335,
"width": 88,
"right": 423,
"bottom": 277.890625,
"height": 17
}
},
{
"title": "$:/_top-toggle-left-sidebar-button",
"fromPageRect": {
"top": 331.890625,
"left": 335,
"width": 229,
"right": 564,
"bottom": 348.890625,
"height": 17
}
},
{
"title": "$:/_leftmenu",
"fromPageRect": {
"top": 369.890625,
"left": 335,
"width": 88,
"right": 423,
"bottom": 386.890625,
"height": 17
}
},
{
"title": "$:/_ui/topmenu",
"fromPageRect": {
"top": 421.890625,
"left": 335,
"width": 106,
"right": 441,
"bottom": 438.890625,
"height": 17
}
},
{
"title": "Draft of '$:/_ui/topmenu'"
},
{
"title": "$:/_ui/topmenu"
},
{
"title": "$:/_button/Close-others-button",
"fromPageRect": {
"top": 355.890625,
"left": 1108,
"width": 213,
"right": 1321,
"bottom": 372.890625,
"height": 17
}
},
{
"title": "$:/AdvancedSearch",
"fromPageRect": {
"top": 204,
"left": 934,
"width": 14,
"right": 948,
"bottom": 221,
"height": 17
}
},
{
"title": "$:/_ui/topmenu",
"fromPageRect": {
"top": 573.890625,
"left": 85,
"width": 106,
"right": 191,
"bottom": 590.890625,
"height": 17
}
},
{
"title": "$:/_leftmenu",
"fromPageRect": {
"top": 260.890625,
"left": 85,
"width": 88,
"right": 173,
"bottom": 277.890625,
"height": 17
}
},
{
"title": "Draft of '$:/_leftmenu'"
},
{
"title": "$:/_leftmenu"
},
{
"title": "$:/AdvancedSearch",
"fromPageRect": {
"top": 282,
"left": 1184,
"width": 14,
"right": 1198,
"bottom": 299,
"height": 17
}
},
{
"title": "$:/_leftmenu",
"fromPageRect": {
"top": 263.890625,
"left": 335,
"width": 88,
"right": 423,
"bottom": 280.890625,
"height": 17
}
},
{
"title": "Draft of '$:/_leftmenu'"
},
{
"title": "$:/_leftmenu"
},
{
"title": "Draft of '$:/_leftmenu'"
},
{
"title": "$:/_leftmenu"
},
{
"title": "$:/_top-toggle-left-sidebar-button",
"fromPageRect": {
"top": 239.890625,
"left": 335,
"width": 229,
"right": 564,
"bottom": 256.890625,
"height": 17
}
},
{
"title": "$:/_stylesheet/leftmenu",
"fromPageRect": {
"top": 389.890625,
"left": 85,
"width": 164,
"right": 249,
"bottom": 406.890625,
"height": 17
}
},
{
"title": "Draft of '$:/_stylesheet/leftmenu'"
},
{
"title": "$:/_stylesheet/leftmenu"
},
{
"title": "Draft of '$:/_stylesheet/leftmenu'"
},
{
"title": "$:/_stylesheet/leftmenu"
},
{
"title": "$:/_ui/topmenu",
"fromPageRect": {
"top": 576.890625,
"left": 85,
"width": 106,
"right": 191,
"bottom": 593.890625,
"height": 17
}
},
{
"title": "Draft of '$:/_ui/topmenu'"
},
{
"title": "$:/_ui/topmenu"
},
{
"title": "Draft of '$:/_top-toggle-left-sidebar-button'"
},
{
"title": "$:/_top-toggle-left-sidebar-button"
},
{
"title": "Draft of '$:/_ui/topmenu'"
},
{
"title": "$:/AdvancedSearch",
"fromPageRect": {
"top": 204,
"left": 934,
"width": 14,
"right": 948,
"bottom": 221,
"height": 17
}
},
{
"title": "$:/_stylesheet/topmenu",
"fromPageRect": {
"top": 353.890625,
"left": 85,
"width": 163,
"right": 248,
"bottom": 370.890625,
"height": 17
}
},
{
"title": "Draft of '$:/_stylesheet/topmenu'"
},
{
"title": "$:/_stylesheet/topmenu"
},
{
"title": "$:/_ui/topmenu"
},
{
"title": "Draft of '$:/_top-toggle-left-sidebar-button'"
},
{
"title": "$:/_top-toggle-left-sidebar-button"
},
{
"title": "Draft of 'New Tiddler'"
},
{
"title": "$:/_ui/SearchBox",
"fromPageRect": {
"top": 535.890625,
"left": 858,
"width": 116,
"right": 974,
"bottom": 552.890625,
"height": 17
}
},
{
"title": "Draft of '$:/_ui/SearchBox'"
},
{
"title": "$:/_ui/SearchBox"
},
{
"title": "$:/_ui/SearchBox",
"fromPageRect": {
"top": 535.890625,
"left": 858,
"width": 116,
"right": 974,
"bottom": 552.890625,
"height": 17
}
},
{
"title": "Draft of '$:/_ui/SearchBox'"
},
{
"title": "$:/_ui/SearchBox"
},
{
"title": "Draft of '$:/_ui/SearchBox'"
},
{
"title": "$:/_ui/SearchBox"
},
{
"title": "New Tiddler"
},
{
"title": "Draft of 'New Tiddler'"
},
{
"title": "New Tiddler"
},
{
"title": "Draft of 'New Tiddler 1'"
},
{
"title": "New Tiddler 1"
},
{
"title": "$:/_ui/SearchBox",
"fromPageRect": {
"top": 588.890625,
"left": 858,
"width": 116,
"right": 974,
"bottom": 605.890625,
"height": 17
}
},
{
"title": "Draft of '$:/_ui/SearchBox'"
},
{
"title": "$:/_ui/SearchBox"
},
{
"title": "Draft of 'New Tiddler 2'"
},
{
"title": "New Tiddler 2"
},
{
"title": "Draft of 'New Tiddler 2'"
},
{
"title": "New Tiddler 2"
},
{
"title": "Draft of 'New Tiddler 2'"
},
{
"title": "New Tiddler 2"
},
{
"title": "Draft of 'New Tiddler 2'"
},
{
"title": "New Tiddler 2"
},
{
"title": "Draft of 'New Tiddler 2'"
},
{
"title": "$:/_ui/SearchBox",
"fromPageRect": {
"top": 545.890625,
"left": 858,
"width": 116,
"right": 974,
"bottom": 562.890625,
"height": 17
}
},
{
"title": "Draft of '$:/_ui/SearchBox'"
},
{
"title": "$:/_ui/SearchBox"
},
{
"title": "Draft of 'New Tiddler 2'"
},
{
"title": "Draft of 'New Tiddler 3'"
},
{
"title": "New Tiddler 3"
},
{
"title": "Draft of 'New Tiddler 3'"
},
{
"title": "New Tiddler 3"
},
{
"title": "Draft of 'New Tiddler 3'"
},
{
"title": "New Tiddler 3"
},
{
"title": "Draft of 'New Tiddler 3'"
},
{
"title": "New Tiddler 3"
},
{
"title": "Draft of 'New Tiddler 3'"
},
{
"title": "Draft of 'New Tiddler 2'"
},
{
"title": "New Tiddler 2"
},
{
"title": "Draft of 'New Tiddler 2'"
},
{
"title": "New Tiddler 2"
},
{
"title": "Draft of 'New Tiddler 2'"
},
{
"title": "New Tiddler 2"
},
{
"title": "Draft of 'New Tiddler 2'"
},
{
"title": "New Tiddler 2"
},
{
"title": "Draft of 'New Tiddler 2'"
},
{
"title": "New Tiddler 2"
},
{
"title": "Draft of 'New Tiddler 2'"
},
{
"title": "New Tiddler 2"
},
{
"title": "Draft of 'New Tiddler 2'"
},
{
"title": "$:/_ui/SearchBox",
"fromPageRect": {
"top": 588.890625,
"left": 858,
"width": 116,
"right": 974,
"bottom": 605.890625,
"height": 17
}
},
{
"title": "Draft of '$:/_ui/SearchBox'"
},
{
"title": "New Tiddler 2"
},
{
"title": "Draft of 'New Tiddler 2'"
},
{
"title": "$:/_ui/SearchBox"
},
{
"title": "Draft of '$:/_ui/SearchBox'"
},
{
"title": "$:/_ui/SearchBox"
},
{
"title": "Draft of '$:/_ui/SearchBox'"
},
{
"title": "$:/_ui/SearchBox"
},
{
"title": "Draft of '$:/_ui/SearchBox'"
},
{
"title": "$:/_ui/SearchBox"
},
{
"title": "Draft of '$:/_ui/SearchBox'"
},
{
"title": "$:/_ui/SearchBox"
},
{
"title": "Draft of '$:/_ui/SearchBox'"
},
{
"title": "$:/_ui/SearchBox"
},
{
"title": "$:/_ui/SearchBox",
"fromPageRect": {
"top": 588.890625,
"left": 858,
"width": 116,
"right": 974,
"bottom": 605.890625,
"height": 17
}
},
{
"title": "Draft of '$:/_ui/SearchBox'"
},
{
"title": "$:/_ui/SearchBox"
},
{
"title": "Draft of '$:/_ui/SearchBox'"
},
{
"title": "$:/_ui/SearchBox"
},
{
"title": "Draft of '$:/_ui/SearchBox'"
},
{
"title": "$:/_ui/SearchBox"
},
{
"title": "Draft of '$:/_ui/SearchBox'"
},
{
"title": "$:/_ui/SearchBox"
},
{
"title": "Draft of '$:/_ui/SearchBox'"
},
{
"title": "$:/_ui/SearchBox"
},
{
"title": "Draft of '$:/_ui/SearchBox'"
},
{
"title": "$:/_ui/SearchBox"
},
{
"title": "Draft of '$:/_ui/SearchBox'"
},
{
"title": "$:/_ui/SearchBox"
},
{
"title": "Draft of '$:/_ui/SearchBox'"
},
{
"title": "$:/_ui/SearchBox"
},
{
"title": "Draft of '$:/_ui/SearchBox'"
},
{
"title": "$:/_ui/SearchBox"
},
{
"title": "Draft of '$:/_ui/SearchBox'"
},
{
"title": "(Contre-exemple) La couleur des oignons",
"fromPageRect": {
"top": 565,
"left": 770,
"width": 281,
"right": 1051,
"bottom": 582,
"height": 17
}
},
{
"title": "Draft of '(Contre-exemple) La couleur des oignons'"
},
{
"title": "(Contre-exemple) La couleur des oignons"
},
{
"title": "Draft of '(Contre-exemple) La couleur des oignons'"
},
{
"title": "(Contre-exemple) La couleur des oignons"
},
{
"title": "Draft of '(Contre-exemple) La couleur des oignons'"
},
{
"title": "(Contre-exemple) La couleur des oignons"
},
{
"title": "$:/_ui/SearchBox"
},
{
"title": "Draft of '$:/_ui/SearchBox'"
},
{
"title": "$:/_ui/SearchBox"
},
{
"title": "Draft of '$:/_ui/SearchBox'"
},
{
"title": "$:/_ui/SearchBox"
},
{
"title": "Draft of '$:/_ui/SearchBox'"
},
{
"title": "$:/_ui/SearchBox"
},
{
"title": "Draft of 'New Tiddler 2'"
},
{
"title": "SearchBoxTest"
},
{
"title": "Artefact",
"fromPageRect": {
"top": 278,
"left": 770,
"width": 57,
"right": 827,
"bottom": 295,
"height": 17
}
},
{
"title": "Connaissance",
"fromPageRect": {
"top": 404,
"left": 770,
"width": 95,
"right": 865,
"bottom": 421,
"height": 17
}
},
{
"title": "Draft of 'SearchBoxTest'"
},
{
"title": "Draft of 'New Tiddler 2'"
},
{
"title": "New Tiddler 2"
},
{
"title": "Draft of 'New Tiddler 2'"
},
{
"title": "New Tiddler 2"
},
{
"title": "Draft of 'New Tiddler 2'"
},
{
"title": "New Tiddler 2"
},
{
"title": "Draft of 'New Tiddler 2'"
},
{
"title": "New Tiddler 2"
},
{
"title": "Draft of 'New Tiddler 2'"
},
{
"title": "Altérité",
"fromPageRect": {
"top": 426,
"left": 858,
"width": 278,
"right": 1136,
"bottom": 446,
"height": 20
}
},
{
"title": "SearchBoxTest"
},
{
"title": "ObjectivitéÉpistémique",
"fromPageRect": {
"top": 212.890625,
"left": 85,
"width": 159,
"right": 244,
"bottom": 229.890625,
"height": 17
}
},
{
"title": "Draft of 'SearchBoxTest'"
},
{
"title": "SearchBoxTest"
},
{
"title": "Draft of 'SearchBoxTest'"
},
{
"title": "SearchBoxTest"
},
{
"title": "Draft of 'SearchBoxTest'"
},
{
"title": "SearchBoxTest"
},
{
"title": "Draft of 'SearchBoxTest'"
},
{
"title": "SearchBoxTest"
},
{
"title": "Draft of 'SearchBoxTest'"
},
{
"title": "Draft of 'New Tiddler 2'"
},
{
"title": "Draft of 'New Tiddler 3'"
},
{
"title": "New Tiddler 3"
},
{
"title": "Draft of 'New Tiddler 3'"
},
{
"title": "New Tiddler 3"
},
{
"title": "Draft of 'New Tiddler 3'"
},
{
"title": "New Tiddler 3"
},
{
"title": "Draft of 'New Tiddler 3'"
},
{
"title": "New Tiddler 3"
},
{
"title": "Draft of 'New Tiddler 3'"
},
{
"title": "New Tiddler 2"
},
{
"title": "Draft of 'New Tiddler 2'"
},
{
"title": "New Tiddler 2"
},
{
"title": "Draft of 'New Tiddler 2'"
},
{
"title": "New Tiddler 2"
},
{
"title": "Draft of 'New Tiddler 2'"
},
{
"title": "New Tiddler 2"
},
{
"title": "Draft of 'New Tiddler 2'"
},
{
"title": "New Tiddler 2"
},
{
"title": "Draft of 'New Tiddler 2'"
},
{
"title": "New Tiddler 2"
},
{
"title": "Draft of 'New Tiddler 2'"
},
{
"title": "New Tiddler 2"
},
{
"title": "Draft of 'New Tiddler 2'"
},
{
"title": "SearchBoxTest"
},
{
"title": "Draft of 'SearchBoxTest'"
},
{
"title": "SearchBoxTest"
},
{
"title": "Draft of 'SearchBoxTest'"
},
{
"title": "SearchBoxTest"
},
{
"title": "Draft of 'SearchBoxTest'"
},
{
"title": "$:/_ui/SearchBox",
"fromPageRect": {
"top": 111.890625,
"left": 858,
"width": 116,
"right": 974,
"bottom": 128.890625,
"height": 17
}
},
{
"title": "Draft of '$:/_ui/SearchBox'"
},
{
"title": "$:/_ui/SearchBox"
},
{
"title": "SearchBoxTest"
},
{
"title": "Foucault, 1963: 51",
"fromPageRect": {
"top": 311,
"left": 770,
"width": 121,
"right": 891,
"bottom": 328,
"height": 17
}
},
{
"title": "Draft of '$:/_ui/SearchBox'"
},
{
"title": "$:/_ui/SearchBox"
},
{
"title": "Draft of 'SearchBoxTest'"
},
{
"title": "SearchBoxTest"
},
{
"title": "Draft of 'SearchBoxTest'"
},
{
"title": "SearchBoxTest"
},
{
"title": "Draft of '$:/_ui/SearchBox'"
},
{
"title": "$:/_ui/SearchBox"
},
{
"title": "Draft of '$:/_ui/SearchBox'"
},
{
"title": "$:/_ui/SearchBox"
},
{
"title": "Draft of '$:/_ui/SearchBox'"
},
{
"title": "$:/AdvancedSearch",
"fromPageRect": {
"top": 204,
"left": 934,
"width": 14,
"right": 948,
"bottom": 221,
"height": 17
}
},
{
"title": "$:/core/ui/MoreSideBar/Tags",
"fromPageRect": {
"top": 507.890625,
"left": 85,
"width": 204,
"right": 289,
"bottom": 524.890625,
"height": 17
}
},
{
"title": "Draft of '$:/core/ui/MoreSideBar/Tags'"
},
{
"title": "$:/core/ui/MoreSideBar/Tags"
},
{
"title": "$:/core/ui/MoreSideBar/Types",
"fromPageRect": {
"top": 369.890625,
"left": 85,
"width": 213,
"right": 298,
"bottom": 386.890625,
"height": 17
}
},
{
"title": "Draft of '$:/core/ui/MoreSideBar/Types'"
},
{
"title": "$:/_ui/SearchBox"
},
{
"title": "$:/core/ui/MoreSideBar/Types"
},
{
"title": "$:/core/ui/MoreSideBar/Types",
"fromPageRect": {
"top": 369.890625,
"left": 85,
"width": 213,
"right": 298,
"bottom": 386.890625,
"height": 17
}
},
{
"title": "$:/snippets/recentchanges",
"fromPageRect": {
"top": 409.890625,
"left": 85,
"width": 184,
"right": 269,
"bottom": 426.890625,
"height": 17
}
},
{
"title": "Draft of '$:/_ui/SearchBox'"
},
{
"title": "$:/_ui/SearchBox"
},
{
"title": "Draft of '$:/_ui/SearchBox'"
},
{
"title": "$:/_ui/SearchBox"
},
{
"title": "Draft of '$:/_ui/SearchBox'"
},
{
"title": "$:/_ui/SearchBox"
},
{
"title": "Draft of '$:/_ui/SearchBox'"
},
{
"title": "$:/_ui/SearchBox"
},
{
"title": "Draft of '$:/_ui/SearchBox'"
},
{
"title": "$:/_ui/SearchBox"
},
{
"title": "Draft of '$:/_ui/SearchBox'"
},
{
"title": "$:/_ui/SearchBox"
},
{
"title": "Draft of '$:/_ui/SearchBox'"
},
{
"title": "$:/_ui/SearchBox"
},
{
"title": "Draft of '$:/_ui/SearchBox'"
},
{
"title": "$:/_ui/SearchBox"
},
{
"title": "Draft of '$:/_ui/SearchBox'"
},
{
"title": "$:/_ui/SearchBox"
},
{
"title": "$:/_ui/SearchBox",
"fromPageRect": {
"top": 376.890625,
"left": 858,
"width": 116,
"right": 974,
"bottom": 393.890625,
"height": 17
}
},
{
"title": "Draft of '$:/_ui/SearchBox'"
},
{
"title": "$:/_ui/SearchBox"
},
{
"title": "Draft of '$:/_ui/SearchBox'"
},
{
"title": "$:/_ui/SearchBox"
},
{
"title": "Draft of '$:/_ui/SearchBox'"
},
{
"title": "$:/_ui/SearchBox"
},
{
"title": "SearchboxTest",
"fromPageRect": {
"top": 522,
"left": 771,
"width": 278,
"right": 1049,
"bottom": 542,
"height": 20
}
},
{
"title": "Draft of 'SearchboxTest'"
},
{
"title": "SearchBoxTest",
"fromPageRect": {
"top": 241.890625,
"left": 777,
"width": 102,
"right": 879,
"bottom": 258.890625,
"height": 17
}
},
{
"title": "Draft of 'SearchBoxTest'"
},
{
"title": "SearchBoxTest"
},
{
"title": "Draft of 'SearchBoxTest'"
},
{
"title": "SearchBoxTest"
},
{
"title": "Draft of 'SearchBoxTest'"
},
{
"title": "SearchBoxTest"
},
{
"title": "Draft of 'SearchBoxTest'"
},
{
"title": "Draft of '$:/_ui/SearchBox'"
},
{
"title": "$:/_ui/SearchBox"
},
{
"title": "Draft of '$:/_ui/SearchBox'"
},
{
"title": "$:/_ui/SearchBox"
},
{
"title": "SearchBoxTest"
},
{
"title": "Draft of 'SearchBoxTest'"
},
{
"title": "SearchBoxTest"
},
{
"title": "Draft of 'SearchBoxTest'"
},
{
"title": "SearchBoxTest"
},
{
"title": "Draft of 'SearchBoxTest'"
},
{
"title": "SearchBoxTest"
},
{
"title": "Draft of 'SearchBoxTest'"
},
{
"title": "SearchBoxTest"
},
{
"title": "Draft of 'SearchBoxTest'"
},
{
"title": "SearchBoxTest"
},
{
"title": "Draft of 'SearchBoxTest'"
},
{
"title": "SearchBoxTest"
},
{
"title": "Draft of 'SearchBoxTest'"
},
{
"title": "SearchBoxTest"
},
{
"title": "Draft of 'SearchBoxTest'"
},
{
"title": "SearchBoxTest"
},
{
"title": "Draft of 'SearchBoxTest'"
},
{
"title": "SearchBoxTest"
},
{
"title": "Draft of 'SearchBoxTest'"
},
{
"title": "SearchBoxTest"
},
{
"title": "Draft of 'SearchBoxTest'"
},
{
"title": "SearchBoxTest"
},
{
"title": "Draft of 'SearchBoxTest'"
},
{
"title": "SearchBoxTest"
},
{
"title": "Draft of 'SearchBoxTest'"
},
{
"title": "SearchBoxTest"
},
{
"title": "Draft of 'SearchBoxTest'"
},
{
"title": "SearchBoxTest"
},
{
"title": "Draft of 'SearchBoxTest'"
},
{
"title": "SearchBoxTest"
},
{
"title": "Draft of 'SearchBoxTest'"
},
{
"title": "SearchBoxTest"
},
{
"title": "Draft of 'SearchBoxTest'"
},
{
"title": "SearchBoxTest"
},
{
"title": "Draft of 'SearchBoxTest'"
},
{
"title": "SearchBoxTest"
},
{
"title": "Draft of 'SearchBoxTest'"
},
{
"title": "Draft of '$:/_ui/SearchBox'"
},
{
"title": "$:/_ui/SearchBox"
},
{
"title": "SearchBoxTest"
},
{
"title": "$:/ControlPanel"
},
{
"title": "Draft of '.'"
},
{
"title": "."
},
{
"title": "Draft of '.'"
},
{
"title": "."
},
{
"title": "Draft of '.'"
},
{
"title": "."
},
{
"title": "$:/_ui/SearchBox",
"fromPageRect": {
"top": 535.890625,
"left": 858,
"width": 116,
"right": 974,
"bottom": 552.890625,
"height": 17
}
},
{
"title": "Draft of '$:/_ui/SearchBox'"
},
{
"title": "$:/_ui/SearchBox"
},
{
"title": "Draft of '$:/_ui/SearchBox'"
},
{
"title": "$:/_ui/SearchBox"
},
{
"title": "Draft of '$:/_ui/SearchBox'"
},
{
"title": "$:/_ui/SearchBox"
},
{
"title": "MySubHistoryList",
"fromPageRect": {
"top": 231,
"left": 85,
"width": 126,
"right": 211,
"bottom": 248,
"height": 17
}
},
{
"title": "HelloWorld",
"fromPageRect": {
"top": 301,
"left": 770,
"width": 86,
"right": 856,
"bottom": 318,
"height": 17
}
},
{
"title": "Draft of 'HelloWorld'"
},
{
"title": "HelloWorld"
},
{
"title": "$:/_HelloWorldFrançais",
"fromPageRect": {
"top": 477.890625,
"left": 858,
"width": 171,
"right": 1029,
"bottom": 494.890625,
"height": 17
}
},
{
"title": "Draft of '$:/_ui/SearchBox'"
},
{
"title": "$:/_ui/SearchBox"
},
{
"title": "Draft of '$:/_ui/SearchBox'"
},
{
"title": "$:/_ui/SearchBox"
},
{
"title": "ExempleTiddler",
"fromPageRect": {
"top": 404,
"left": 770,
"width": 112,
"right": 882,
"bottom": 421,
"height": 17
}
},
{
"title": "Draft of '$:/_ui/SearchBox'"
},
{
"title": "$:/_ui/SearchBox"
},
{
"title": "Draft of '$:/_ui/SearchBox'"
},
{
"title": "$:/_ui/SearchBox"
},
{
"title": "Draft of '$:/_ui/SearchBox'"
},
{
"title": "$:/_ui/SearchBox"
},
{
"title": "Draft of '$:/_ui/SearchBox'"
},
{
"title": "$:/_ui/SearchBox"
},
{
"title": "Draft of '$:/_ui/SearchBox'"
},
{
"title": "$:/_ui/SearchBox"
},
{
"title": "Draft of '$:/_ui/SearchBox'"
},
{
"title": "$:/_ui/SearchBox"
},
{
"title": "$:/_HelloWorldEnglish",
"fromPageRect": {
"top": 355,
"left": 771,
"width": 278,
"right": 1049,
"bottom": 375,
"height": 20
}
},
{
"title": "Draft of '$:/_HelloWorldEnglish'"
},
{
"title": "$:/_HelloWorldEnglish"
},
{
"title": "$:/ControlPanel"
},
{
"title": "$:/plugins/tiddlywiki/googleanalytics"
},
{
"title": "$:/ControlPanel"
},
{
"title": "Draft of 'Définitions'"
},
{
"title": "Définitions"
},
{
"title": "$:/ControlPanel"
},
{
"title": "$:/ControlPanel"
},
{
"title": "$:/ControlPanel"
},
{
"title": "Conceptions",
"fromPageRect": {
"top": 318,
"left": 771,
"width": 278,
"right": 1049,
"bottom": 338,
"height": 20
}
},
{
"title": "Draft of 'Conceptions'"
},
{
"title": "Conceptions"
},
{
"title": "Draft of 'Conceptions'"
},
{
"title": "Conceptions"
},
{
"title": "$:/_CSS/Custom tables",
"fromPageRect": {
"top": 296.890625,
"left": 858,
"width": 155,
"right": 1013,
"bottom": 312.890625,
"height": 16
}
},
{
"title": "$:/ControlPanel"
}
]
{
"tiddlers": {
"$:/language/ControlPanel/Advanced/Caption": {
"title": "$:/language/ControlPanel/Advanced/Caption",
"text": "Avancé"
},
"$:/language/ControlPanel/Advanced/Hint": {
"title": "$:/language/ControlPanel/Advanced/Hint",
"text": "Informations internes sur ce ~TiddlyWiki"
},
"$:/language/ControlPanel/Advanced/LoadedModules/Caption": {
"title": "$:/language/ControlPanel/Advanced/LoadedModules/Caption",
"text": "Modules chargés"
},
"$:/language/ControlPanel/Advanced/LoadedModules/Hint": {
"title": "$:/language/ControlPanel/Advanced/LoadedModules/Hint",
"text": "Liste des modules chargés, avec leurs tiddlers sources. Les italiques indiquent que les tiddlers sources n'existent pas, le plus souvent parce que le module a été créé lors du processus d'amorçage."
},
"$:/language/ControlPanel/Advanced/TiddlerFields/Caption": {
"title": "$:/language/ControlPanel/Advanced/TiddlerFields/Caption",
"text": "Champs"
},
"$:/language/ControlPanel/Advanced/TiddlerFields/Hint": {
"title": "$:/language/ControlPanel/Advanced/TiddlerFields/Hint",
"text": "Voici la totalité des [[champs|TiddlerFields]] utilisés dans ce wiki (y compris les tiddlers système, mais non compris les tiddlers //shadow//)."
},
"$:/language/ControlPanel/Appearance/Caption": {
"title": "$:/language/ControlPanel/Appearance/Caption",
"text": "Apparence"
},
"$:/language/ControlPanel/Appearance/Hint": {
"title": "$:/language/ControlPanel/Appearance/Hint",
"text": "Personnalisation de l'apparence de votre ~TiddlyWiki."
},
"$:/language/ControlPanel/Appearance/Palette/Caption": {
"title": "$:/language/ControlPanel/Appearance/Palette/Caption",
"text": "Palette"
},
"$:/language/ControlPanel/Appearance/Palette/Editor/Clone/Caption": {
"title": "$:/language/ControlPanel/Appearance/Palette/Editor/Clone/Caption",
"text": "Cloner"
},
"$:/language/ControlPanel/Appearance/Palette/Editor/Clone/Prompt": {
"title": "$:/language/ControlPanel/Appearance/Palette/Editor/Clone/Prompt",
"text": "Il est recommandé de cloner cette palette « shadow » avant de l'éditer"
},
"$:/language/ControlPanel/Appearance/Palette/Editor/Prompt/Modified": {
"title": "$:/language/ControlPanel/Appearance/Palette/Editor/Prompt/Modified",
"text": "Cette palette « shadow » a été modifiée"
},
"$:/language/ControlPanel/Appearance/Palette/Editor/Prompt": {
"title": "$:/language/ControlPanel/Appearance/Palette/Editor/Prompt",
"text": "Édition de"
},
"$:/language/ControlPanel/Appearance/Palette/Editor/Reset/Caption": {
"title": "$:/language/ControlPanel/Appearance/Palette/Editor/Reset/Caption",
"text": "Réinitialiser"
},
"$:/language/ControlPanel/Appearance/Palette/ShowEditor/Caption": {
"title": "$:/language/ControlPanel/Appearance/Palette/ShowEditor/Caption",
"text": "Afficher l'éditeur"
},
"$:/language/ControlPanel/Appearance/Palette/HideEditor/Caption": {
"title": "$:/language/ControlPanel/Appearance/Palette/HideEditor/Caption",
"text": "Masquer l'éditeur"
},
"$:/language/ControlPanel/Appearance/Palette/Prompt": {
"title": "$:/language/ControlPanel/Appearance/Palette/Prompt",
"text": "Palette en cours :"
},
"$:/language/ControlPanel/Appearance/StoryView/Caption": {
"title": "$:/language/ControlPanel/Appearance/StoryView/Caption",
"text": "Vue sur le déroulé"
},
"$:/language/ControlPanel/Appearance/StoryView/Prompt": {
"title": "$:/language/ControlPanel/Appearance/StoryView/Prompt",
"text": "Vue courante :"
},
"$:/language/ControlPanel/Appearance/Theme/Caption": {
"title": "$:/language/ControlPanel/Appearance/Theme/Caption",
"text": "Thème"
},
"$:/language/ControlPanel/Appearance/Theme/Prompt": {
"title": "$:/language/ControlPanel/Appearance/Theme/Prompt",
"text": "Thème courant :"
},
"$:/language/ControlPanel/Basics/AnimDuration/Prompt": {
"title": "$:/language/ControlPanel/Basics/AnimDuration/Prompt",
"text": "Durée de l'animation"
},
"$:/language/ControlPanel/Basics/Caption": {
"title": "$:/language/ControlPanel/Basics/Caption",
"text": "Fondamentaux"
},
"$:/language/ControlPanel/Basics/DefaultTiddlers/BottomHint": {
"title": "$:/language/ControlPanel/Basics/DefaultTiddlers/BottomHint",
"text": "Utilisez les [[crochets doubles]] pour les titres contenant des espaces. Vous pouvez aussi décider de <$button set=\"$:/DefaultTiddlers\" setTo=\"[list[$:/StoryList]]\">Conserver le déroulé actuel</$button>"
},
"$:/language/ControlPanel/Basics/DefaultTiddlers/Prompt": {
"title": "$:/language/ControlPanel/Basics/DefaultTiddlers/Prompt",
"text": "Tiddlers par défaut"
},
"$:/language/ControlPanel/Basics/DefaultTiddlers/TopHint": {
"title": "$:/language/ControlPanel/Basics/DefaultTiddlers/TopHint",
"text": "Liste des tiddlers qui seront affichés au démarrage :"
},
"$:/language/ControlPanel/Basics/Language/Prompt": {
"title": "$:/language/ControlPanel/Basics/Language/Prompt",
"text": "Bonjour ! Langue active :"
},
"$:/language/ControlPanel/Basics/OverriddenShadowTiddlers/Prompt": {
"title": "$:/language/ControlPanel/Basics/OverriddenShadowTiddlers/Prompt",
"text": "Nombre de tiddlers //shadow// remplacés"
},
"$:/language/ControlPanel/Basics/ShadowTiddlers/Prompt": {
"title": "$:/language/ControlPanel/Basics/ShadowTiddlers/Prompt",
"text": "Nombre de tiddlers //shadow//"
},
"$:/language/ControlPanel/Basics/Subtitle/Prompt": {
"title": "$:/language/ControlPanel/Basics/Subtitle/Prompt",
"text": "Sous-titre"
},
"$:/language/ControlPanel/Basics/SystemTiddlers/Prompt": {
"title": "$:/language/ControlPanel/Basics/SystemTiddlers/Prompt",
"text": "Nombre de tiddlers système"
},
"$:/language/ControlPanel/Basics/Tags/Prompt": {
"title": "$:/language/ControlPanel/Basics/Tags/Prompt",
"text": "Nombre de tags"
},
"$:/language/ControlPanel/Basics/Tiddlers/Prompt": {
"title": "$:/language/ControlPanel/Basics/Tiddlers/Prompt",
"text": "Nombre de tiddlers"
},
"$:/language/ControlPanel/Basics/Title/Prompt": {
"title": "$:/language/ControlPanel/Basics/Title/Prompt",
"text": "Titre de ce ~TiddlyWiki"
},
"$:/language/ControlPanel/Basics/Username/Prompt": {
"title": "$:/language/ControlPanel/Basics/Username/Prompt",
"text": "Signer les modifications avec ce nom d'utilisateur"
},
"$:/language/ControlPanel/Basics/Version/Prompt": {
"title": "$:/language/ControlPanel/Basics/Version/Prompt",
"text": "Numéro de version :"
},
"$:/language/ControlPanel/Plugins/Caption": {
"title": "$:/language/ControlPanel/Plugins/Caption",
"text": "Plugins"
},
"$:/language/ControlPanel/Plugins/Fields/Description": {
"title": "$:/language/ControlPanel/Plugins/Fields/Description",
"text": "Description"
},
"$:/language/ControlPanel/Plugins/Fields/Title": {
"title": "$:/language/ControlPanel/Plugins/Fields/Title",
"text": "Titre"
},
"$:/language/ControlPanel/Plugins/Fields/Version": {
"title": "$:/language/ControlPanel/Plugins/Fields/Version",
"text": "Version"
},
"$:/language/ControlPanel/Saving/AutoSave/Disabled/Button": {
"title": "$:/language/ControlPanel/Saving/AutoSave/Disabled/Button",
"text": "Activer"
},
"$:/language/ControlPanel/Saving/AutoSave/Disabled/Prompt": {
"title": "$:/language/ControlPanel/Saving/AutoSave/Disabled/Prompt",
"text": "La sauvegarde automatique est désactivée"
},
"$:/language/ControlPanel/Saving/AutoSave/Enabled/Button": {
"title": "$:/language/ControlPanel/Saving/AutoSave/Enabled/Button",
"text": "Désactiver"
},
"$:/language/ControlPanel/Saving/AutoSave/Enabled/Prompt": {
"title": "$:/language/ControlPanel/Saving/AutoSave/Enabled/Prompt",
"text": "La sauvegarde automatique est activée"
},
"$:/language/ControlPanel/Saving/AutoSave": {
"title": "$:/language/ControlPanel/Saving/AutoSave",
"text": "Sauvegarde automatique"
},
"$:/language/ControlPanel/Saving/Caption": {
"title": "$:/language/ControlPanel/Saving/Caption",
"text": "Sauvegarde"
},
"$:/language/ControlPanel/Saving/Heading": {
"title": "$:/language/ControlPanel/Saving/Heading",
"text": "Sauvegarde"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Advanced/Heading": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Advanced/Heading",
"text": "Paramètres avancés"
},
"$:/language/ControlPanel/Saving/TiddlySpot/BackupDir": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/BackupDir",
"text": "Dossier des //sauvegardes//"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Backups": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Backups",
"text": "Sauvegardes"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Filename": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Filename",
"text": "Nom du fichier enregistré"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Heading": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Heading",
"text": "~TiddlySpot"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Hint": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Hint",
"text": "//L'URL par défaut est `http://<wikiname>.tiddlyspot.com/store.cgi`. Elle peut être remplacée par une adresse serveur personnalisée.//"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Password": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Password",
"text": "Mot de passe"
},
"$:/language/ControlPanel/Saving/TiddlySpot/ServerURL": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/ServerURL",
"text": "URL du serveur"
},
"$:/language/ControlPanel/Saving/TiddlySpot/UploadDir": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/UploadDir",
"text": "Dossier des dépôts"
},
"$:/language/ControlPanel/Saving/TiddlySpot/UserName": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/UserName",
"text": "Nom utilisé pour ce Wiki"
},
"$:/language/ControlPanel/Tools/Caption": {
"title": "$:/language/ControlPanel/Tools/Caption",
"text": "Outils"
},
"$:/language/ControlPanel/Tools/Download/Full/Caption": {
"title": "$:/language/ControlPanel/Tools/Download/Full/Caption",
"text": "Télécharger le wiki complet"
},
"$:/language/ControlPanel/Tools/Encryption/ChangePassword/Button": {
"title": "$:/language/ControlPanel/Tools/Encryption/ChangePassword/Button",
"text": "changer le mot de passe"
},
"$:/language/ControlPanel/Tools/Encryption/ClearPassword/Button": {
"title": "$:/language/ControlPanel/Tools/Encryption/ClearPassword/Button",
"text": "effacer le mot de passe"
},
"$:/language/ControlPanel/Tools/Encryption/Disabled/Prompt": {
"title": "$:/language/ControlPanel/Tools/Encryption/Disabled/Prompt",
"text": "Ce wiki n'est pas chiffré"
},
"$:/language/ControlPanel/Tools/Encryption/Enabled/Prompt": {
"title": "$:/language/ControlPanel/Tools/Encryption/Enabled/Prompt",
"text": "Ce wiki est chiffré"
},
"$:/language/ControlPanel/Tools/Encryption/Heading": {
"title": "$:/language/ControlPanel/Tools/Encryption/Heading",
"text": "Chiffrement"
},
"$:/language/ControlPanel/Tools/Encryption/SetPassword/Button": {
"title": "$:/language/ControlPanel/Tools/Encryption/SetPassword/Button",
"text": "Choisir un mot de passe"
},
"$:/language/ControlPanel/Tools/Export/AllAsStaticHTML/Caption": {
"title": "$:/language/ControlPanel/Tools/Export/AllAsStaticHTML/Caption",
"text": "Regrouper tous les tiddlers dans un même fichier HTML statique"
},
"$:/language/ControlPanel/Tools/Export/Heading": {
"title": "$:/language/ControlPanel/Tools/Export/Heading",
"text": "Exporter"
},
"$:/language/ControlPanel/Tools/Import/Heading": {
"title": "$:/language/ControlPanel/Tools/Import/Heading",
"text": "Importer"
},
"$:/language/ControlPanel/Tools/Import/Hint": {
"title": "$:/language/ControlPanel/Tools/Import/Hint",
"text": "Parcourez les fichiers de votre ordinateur pour importer leur contenu (les tiddlers individuels contenus dans les fichiers TiddlyWiki HTML sont importés séparément). Vous pouvez aussi glisser-déposer les fichiers directement sur la fenêtre du navigateur."
},
"$:/language/ControlPanel/Tools/Import/Prompt": {
"title": "$:/language/ControlPanel/Tools/Import/Prompt",
"text": "Importer :"
},
"$:/language/Docs/Fields/bag": {
"title": "$:/language/Docs/Fields/bag",
"text": "Le nom du « bag » ~TiddlyWeb d'où vient un tiddler"
},
"$:/language/Docs/Fields/caption": {
"title": "$:/language/Docs/Fields/caption",
"text": "Texte à afficher sur un onglet ou un bouton"
},
"$:/language/Docs/Fields/color": {
"title": "$:/language/Docs/Fields/color",
"text": "Couleur CSS associée à un tiddler"
},
"$:/language/Docs/Fields/component": {
"title": "$:/language/Docs/Fields/component",
"text": "Nom du composant responsable d'un [[tiddler d'alerte|AlertMechanism]]"
},
"$:/language/Docs/Fields/current-tiddler": {
"title": "$:/language/Docs/Fields/current-tiddler",
"text": "Utilisé pour cacher le premier tiddler dans une [[liste d'historique|HistoryMechanism]]"
},
"$:/language/Docs/Fields/created": {
"title": "$:/language/Docs/Fields/created",
"text": "Date à laquelle le tiddler a été créé"
},
"$:/language/Docs/Fields/creator": {
"title": "$:/language/Docs/Fields/creator",
"text": "Nom de la personne ayant créé le tiddler"
},
"$:/language/Docs/Fields/dependents": {
"title": "$:/language/Docs/Fields/dependents",
"text": "Pour un tiddler de plugin, liste des titres des plugins dont il dépend"
},
"$:/language/Docs/Fields/description": {
"title": "$:/language/Docs/Fields/description",
"text": "Texte de description d'un plugin, ou d'un dialogue modal"
},
"$:/language/Docs/Fields/draft.of": {
"title": "$:/language/Docs/Fields/draft.of",
"text": "Pour les tiddlers en cours d'édition, contient le titre du tiddler dont c'est le brouillon"
},
"$:/language/Docs/Fields/draft.title": {
"title": "$:/language/Docs/Fields/draft.title",
"text": "Pour les tiddlers en cours d'édition, contient le nouveau titre proposépour le tiddler"
},
"$:/language/Docs/Fields/footer": {
"title": "$:/language/Docs/Fields/footer",
"text": "Texte de bas de page d'un wizard"
},
"$:/language/Docs/Fields/hack-to-give-us-something-to-compare-against": {
"title": "$:/language/Docs/Fields/hack-to-give-us-something-to-compare-against",
"text": "Champ de stockage temporaire utilisé dans [[$:/core/templates/static.content]]"
},
"$:/language/Docs/Fields/icon": {
"title": "$:/language/Docs/Fields/icon",
"text": "Titre du tiddler contenant l'icone associé à un tiddler"
},
"$:/language/Docs/Fields/library": {
"title": "$:/language/Docs/Fields/library",
"text": "Une valeur à « yes » indique qu'un tiddler doit être sauvegardé en tant que bibliothèque Javascript"
},
"$:/language/Docs/Fields/list": {
"title": "$:/language/Docs/Fields/list",
"text": "Liste ordonnée de titres de tiddlers associés à un tiddler"
},
"$:/language/Docs/Fields/modified": {
"title": "$:/language/Docs/Fields/modified",
"text": "Date et heure auxquelles le tiddler a été modifié pour la dernière fois"
},
"$:/language/Docs/Fields/modifier": {
"title": "$:/language/Docs/Fields/modifier",
"text": "Titre de tiddler associé à la personne qui a modifié un tiddler pour la dernière fois"
},
"$:/language/Docs/Fields/name": {
"title": "$:/language/Docs/Fields/name",
"text": "Nom d'un tiddler de type plugin en version lisible pour un humain"
},
"$:/language/Docs/Fields/plugin-priority": {
"title": "$:/language/Docs/Fields/plugin-priority",
"text": "Pour un tiddler de plugin, valeur numérique indiquant la priorité"
},
"$:/language/Docs/Fields/plugin-type": {
"title": "$:/language/Docs/Fields/plugin-type",
"text": "Pour les tiddlers de plugin, indique le type du plugin."
},
"$:/language/Docs/Fields/revision": {
"title": "$:/language/Docs/Fields/revision",
"text": "Révision d'un tiddler conservée sur le serveur"
},
"$:/language/Docs/Fields/released": {
"title": "$:/language/Docs/Fields/released",
"text": "Date associée à une version de TiddlyWiki"
},
"$:/language/Docs/Fields/source": {
"title": "$:/language/Docs/Fields/source",
"text": "URL source associée à un tiddler"
},
"$:/language/Docs/Fields/subtitle": {
"title": "$:/language/Docs/Fields/subtitle",
"text": "Sous-titre d'un wizard"
},
"$:/language/Docs/Fields/tags": {
"title": "$:/language/Docs/Fields/tags",
"text": "Liste de tags associée à un tiddler"
},
"$:/language/Docs/Fields/text": {
"title": "$:/language/Docs/Fields/text",
"text": "Corps du texte d'un tiddler"
},
"$:/language/Docs/Fields/title": {
"title": "$:/language/Docs/Fields/title",
"text": "Nom unique d'un tiddler"
},
"$:/language/Docs/Fields/type": {
"title": "$:/language/Docs/Fields/type",
"text": "Type de contenu d'un tiddler"
},
"$:/language/Docs/Fields/version": {
"title": "$:/language/Docs/Fields/version",
"text": "Indications de version pour un plugin"
},
"$:/language/Docs/ModuleTypes/animation": {
"title": "$:/language/Docs/ModuleTypes/animation",
"text": "Animations pouvant être utilisées par le RevealWidget."
},
"$:/language/Docs/ModuleTypes/browser-startup": {
"title": "$:/language/Docs/ModuleTypes/browser-startup",
"text": "Fonctions de démarrage exécutées dans le navigateur uniquement."
},
"$:/language/Docs/ModuleTypes/command": {
"title": "$:/language/Docs/ModuleTypes/command",
"text": "Commandes qui peuvent être exécutées en mode Node.js."
},
"$:/language/Docs/ModuleTypes/config": {
"title": "$:/language/Docs/ModuleTypes/config",
"text": "Données à inclure dans `$tw.config`."
},
"$:/language/Docs/ModuleTypes/filteroperator": {
"title": "$:/language/Docs/ModuleTypes/filteroperator",
"text": "Méthodes d'opérateurs pour les filtres."
},
"$:/language/Docs/ModuleTypes/global": {
"title": "$:/language/Docs/ModuleTypes/global",
"text": "Données globales à inclure dans `$tw`."
},
"$:/language/Docs/ModuleTypes/isfilteroperator": {
"title": "$:/language/Docs/ModuleTypes/isfilteroperator",
"text": "Opérandes pour l'opérateur de filtre « is »."
},
"$:/language/Docs/ModuleTypes/macro": {
"title": "$:/language/Docs/ModuleTypes/macro",
"text": "Définitions de macros ~JavaScript."
},
"$:/language/Docs/ModuleTypes/parser": {
"title": "$:/language/Docs/ModuleTypes/parser",
"text": "Parseurs pour divers types de contenu. "
},
"$:/language/Docs/ModuleTypes/saver": {
"title": "$:/language/Docs/ModuleTypes/saver",
"text": "Les tiddlers de sauvegarde contiennent les différentes méthodes pour enregistrer des fichiers à partir du navigateur."
},
"$:/language/Docs/ModuleTypes/startup": {
"title": "$:/language/Docs/ModuleTypes/startup",
"text": "Fonctions de démarrage."
},
"$:/language/Docs/ModuleTypes/storyview": {
"title": "$:/language/Docs/ModuleTypes/storyview",
"text": "Différents points de vue sur le déroulé, qui personnalisent l'animation et le comportement des widgets de liste."
},
"$:/language/Docs/ModuleTypes/tiddlerdeserializer": {
"title": "$:/language/Docs/ModuleTypes/tiddlerdeserializer",
"text": "Convertit différents types de contenu en tiddlers."
},
"$:/language/Docs/ModuleTypes/tiddlerfield": {
"title": "$:/language/Docs/ModuleTypes/tiddlerfield",
"text": "Définit le comportement des champs de tiddler."
},
"$:/language/Docs/ModuleTypes/tiddlermethod": {
"title": "$:/language/Docs/ModuleTypes/tiddlermethod",
"text": "Ajoute des méthodes au prototype `$tw.Tiddler`."
},
"$:/language/Docs/ModuleTypes/utils": {
"title": "$:/language/Docs/ModuleTypes/utils",
"text": "Ajoute des méthodes dans `$tw.utils`."
},
"$:/language/Docs/ModuleTypes/utils-node": {
"title": "$:/language/Docs/ModuleTypes/utils-node",
"text": "Ajoute des méthodes spécifiques à Node.js dans `$tw.utils`."
},
"$:/language/Docs/ModuleTypes/widget": {
"title": "$:/language/Docs/ModuleTypes/widget",
"text": "Les widgets encapsulent les méthodes de rendu et de rafraichissement du DOM."
},
"$:/language/Docs/ModuleTypes/wikimethod": {
"title": "$:/language/Docs/ModuleTypes/wikimethod",
"text": "Ajoute des méthodes à `$tw.Wiki`."
},
"$:/language/Docs/ModuleTypes/wikirule": {
"title": "$:/language/Docs/ModuleTypes/wikirule",
"text": "Règles d'analyse pour le parseur WikiText principal."
},
"$:/language/EditTemplate/Body/Hint": {
"title": "$:/language/EditTemplate/Body/Hint",
"text": "Utilisez WikiText pour formater ou ajouter des images et des fonctions dynamiques"
},
"$:/language/EditTemplate/Body/Placeholder": {
"title": "$:/language/EditTemplate/Body/Placeholder",
"text": "Entrez le texte"
},
"$:/language/EditTemplate/Body/Preview/Button/Hide": {
"title": "$:/language/EditTemplate/Body/Preview/Button/Hide",
"text": "Cacher la prévisualisation"
},
"$:/language/EditTemplate/Body/Preview/Button/Show": {
"title": "$:/language/EditTemplate/Body/Preview/Button/Show",
"text": "Afficher la prévisualisation"
},
"$:/language/EditTemplate/Fields/Add/Button": {
"title": "$:/language/EditTemplate/Fields/Add/Button",
"text": "ajouter"
},
"$:/language/EditTemplate/Fields/Add/Name/Placeholder": {
"title": "$:/language/EditTemplate/Fields/Add/Name/Placeholder",
"text": "nom du champ"
},
"$:/language/EditTemplate/Fields/Add/Prompt": {
"title": "$:/language/EditTemplate/Fields/Add/Prompt",
"text": "Ajouter un nouveau champ :"
},
"$:/language/EditTemplate/Fields/Add/Value/Placeholder": {
"title": "$:/language/EditTemplate/Fields/Add/Value/Placeholder",
"text": "valeur du champ"
},
"$:/language/EditTemplate/Tags/Add/Button": {
"title": "$:/language/EditTemplate/Tags/Add/Button",
"text": "ajouter"
},
"$:/language/EditTemplate/Tags/Add/Placeholder": {
"title": "$:/language/EditTemplate/Tags/Add/Placeholder",
"text": "nom du tag"
},
"$:/language/EditTemplate/Type/Placeholder": {
"title": "$:/language/EditTemplate/Type/Placeholder",
"text": "type du contenu"
},
"$:/language/EditTemplate/Type/Prompt": {
"title": "$:/language/EditTemplate/Type/Prompt",
"text": "Type :"
},
"GettingStarted": {
"title": "GettingStarted",
"text": "Bienvenue sur TiddlyWiki, un carnet de notes non linéaire pour le Web.\n\nCommencez par vérifier que vos modifications peuvent être sauvegardées\ncorrectement — reportez-vous aux instructions détaillées sur http://tiddlywiki.com/.\n\nEnsuite, essayez de :\n\n* Créer de nouveaux tiddlers à l'aide du bouton « plus » de la barre latérale\n* Visiter le [[panneau de contrôle|$:/ControlPanel]] à l'aide du bouton « engrenage » de la barre latérale, afin de personnaliser votre wiki\n** Ne plus voir ce message en changeant les tiddlers affichés par défaut depuis l'onglet //Fondamentaux//\n* Sauvegarder vos modifications à l'aide du bouton « Télécharger » de la barre latérale\n* En savoir plus sur [[WikiText|http://tiddlywiki.com/static/WikiText.html]]\n"
},
"$:/language/Help/default": {
"title": "$:/language/Help/default",
"text": "\\define commandTitle()\n$:/language/Help/$(command)$\n\\end\n```\nusage: tiddlywiki [<dossierwiki>] [--<commande> [<arguments>...]...]\n```\n\nListe des commandes disponibles :\n\n<ul>\n<$list filter=\"[commands[]sort[title]]\" variable=\"command\">\n<li><$link to=<<commandTitle>>><$macrocall $name=\"command\" $type=\"text/plain\" $output=\"text/plain\"/></$link> : <$transclude tiddler=<<commandTitle>> field=\"description\"/></li>\n</$list>\n</ul>\n\nPour obtenir de l'aide sur une commande précise :\n\n```\ntiddlywiki --help <command>\n```\n"
},
"$:/language/Help/help": {
"title": "$:/language/Help/help",
"description": "Affiche de l'aide sur les commandes TiddlyWiki",
"text": "Affiche un texte d'aide sur une commande particulière :\n\n```\n--help [<commande>]\n```\n\nSi aucun nom de commande n'est fourni, affiche la liste de toutes les commandes disponibles.\n"
},
"$:/language/Help/init": {
"title": "$:/language/Help/init",
"description": "Initialise un nouveau dossier wiki",
"text": "Initialise un [[dossier wiki (WikiFolder)|TiddlyWikiFolders]] vide en copiant l'une des éditions présentes dans le répertoire //editions//.\n\n```\n--init <édition> [<édition> ...]\n```\n\nPar exemple :\n\n```\ntiddlywiki ./MonDossierWiki --init empty\n```\n\nNote :\n\n* Le répertoire correspondant au dossier wiki est créé si nécessaire\n* L'édition par défaut est ''empty''\n* La commande //init// échoue si le dossier wiki n'est pas vide\n* La commande //init// supprime les éventuelles définitions `includeWikis` du fichier `tiddlywiki.info` de l'édition spécifiée\n* Lorsque plusieurs éditions sont spécifiées, chaque édition écrase les fichiers qu'elle a en commun avec les précédentes (par conséquent, le fichier `tiddlywiki.info` proviendra de la dernière édition spécifiée)\n* `--help editions` renvoie une liste des éditions disponibles\n"
},
"$:/language/Help/load": {
"title": "$:/language/Help/load",
"description": "Charge des tiddlers à partir d'un fichier",
"text": "Charge des tiddlers à partir de fichiers ~TiddlyWikiClassic 2.x.x (`.html`), `.tiddler`, `.tid`, `.json` ou d'autres types de fichiers.\n\n```\n--load <chemindufichier>\n```\n\nPour charger des tiddlers à partir d'un fichier ~TiddlyWiki chiffré, vous devrez commencer par spécifier le mot de passe à l'aide de la [[commande password|PasswordCommand]]. Par exemple :\n\n```\ntiddlywiki ./MonWiki --password pa55w0rd --load mon_wiki_secret.html\n```\n"
},
"$:/language/Help/notfound": {
"title": "$:/language/Help/notfound",
"text": "Il n'existe pas d'aide sur le sujet."
},
"$:/language/Help/password": {
"title": "$:/language/Help/password",
"description": "Fournit un mot de passe pour les prochaines opérations de chiffrement",
"text": "Fournit un mot de passe pour les prochaines opérations de chiffrement.\n\n```\n--password <motdepasse>\n```\n\n"
},
"$:/language/Help/rendertiddler": {
"title": "$:/language/Help/rendertiddler",
"description": "Enregistre un tiddler avec un rendu correspondant à un type de contenu spécifié",
"text": "Enregistre un tiddler sous le nom de fichier indiqué, avec un rendu correspondant au type de contenu (ContentType) spécifié — par défaut `text/html` :\n\n```\n--rendertiddler <titre> <nomdefichier> [<type>]\n```\n"
},
"$:/language/Help/rendertiddlers": {
"title": "$:/language/Help/rendertiddlers",
"description": "Enregistre un ensemble de tiddlers sélectionnés par un filtre, avec un rendu correspondant à un type de contenu (ContentType) spécifié",
"text": "Enregistre un ensemble de tiddlers (sélectionnés par un filtre) dans le répertoire indiqué et avec l'extension indiquée — par défaut `.html`. Le choix du rendu est fonction du type de contenu (ContentType) spécifié — par défaut `text/html` :\n\n```\n--rendertiddlers <filtre> <modèle> <chemindurépertoire> [<type>] [<extension>]\n```\n\nPar exemple :\n\n```\n--rendertiddlers [!is[system]] $:/core/templates/static.tiddler.html ./static text/plain\n```\n"
},
"$:/language/Help/savetiddler": {
"title": "$:/language/Help/savetiddler",
"description": "Enregistre un tiddler dans un fichier sous sa forme brute",
"text": "Enregistre un tiddler texte ou binaire dans le fichier spécifié, sous sa forme brute. \n\n```\n--savetiddler <titre> <nomdefichier>\n```\n"
},
"$:/language/Help/server": {
"title": "$:/language/Help/server",
"description": "Fournit une interface serveur HTTP à TiddlyWiki",
"text": "Le serveur embarqué dans TiddlyWiki5 est très simple. Bien qu'il soit compatible avec TiddlyWeb, il n'a pas la robustesse requise pour une utilisation intensive sur l'Internet.\n\nÀ la racine de l'url, il sert le tiddler spécifié avec le rendu indiqué. Au-delà, il sert des tiddlers encodés en JSON, et reconnaît les principales opérations HTTP pour `GET`, `PUT` et `DELETE`.\n\n```\n--server <port> <tiddlerracine> <typedurendu> <typeduservice> <nomdutilisateur> <motdepasse> <machine>\n```\n\nLes arguments sont :\n\n* ''port'' - numéro de port sur lequel servir le contenu (défaut : \"8080\")\n* ''tiddlerracine'' - le titre du tiddler à afficher à la racine de l'URL (défaut : \"$:/core/save/all\") \n* ''typedurendu'' - le type avec lequel le contenu du tiddler racine doit être rendu (`text/plain` par défaut)\n* ''typeduservice'' - le type avec lequel le contenu du tiddler racine doit être servi (`text/html` par défaut)\n* ''nomdutilisateur'' - le nom d'utilisateur qui servira par défaut à signer les modifications\n* ''motdepasse'' - mot de passe optionnel permettant une authentification basique\n* ''machine'' - nom de machine optionnel d'où le contenu doit être servi (\"127.0.0.1\" par défaut, autrement dit \"localhost\")\n\nSi le mot de passe est spécifié en argument, le navigateur demandera à l'utilisateur d'entrer le nom d'utilisateur et le mot de passe. On notera que le mot de passe est transmis en clair, et que cette implémentation ne convient donc pas pour un usage général.\n\nPar exemple :\n\n```\n--server 8080 $:/core/save/all text/plain text/html MonNomUtilisateur m0tdepa55e\n```\n\nSi vous souhaitez faire tourner plusieurs serveurs TiddlyWiki en même temps sur la même machine, vous devrez leur assigner à chacun un port différent.\n"
},
"$:/language/Help/verbose": {
"title": "$:/language/Help/verbose",
"description": "Bascule en mode verbeux",
"text": "Bascule les informations en mode verbeux, pratique pour le débogage.\n\n```\n--verbose\n```\n"
},
"$:/language/Help/version": {
"title": "$:/language/Help/version",
"description": "Affiche le numéro de version de TiddlyWiki",
"text": "Affiche le numéro de version de TiddlyWiki.\n\n```\n--version\n```\n"
},
"$:/language/RecentChanges/DateFormat": {
"title": "$:/language/RecentChanges/DateFormat",
"text": "DD MMM YYYY"
},
"$:/language/CloseAll/Button": {
"title": "$:/language/CloseAll/Button",
"text": "Tout fermer"
},
"$:/language/Modals/Download": {
"title": "$:/language/Modals/Download",
"type": "text/vnd.tiddlywiki",
"subtitle": "Télécharger vos modifications",
"footer": "<$button message=\"tw-close-tiddler\" class=\"btn btn-primary\">Fermer</$button>",
"help": "http://tiddlywiki.com/static/DownloadingChanges.html",
"text": "Votre navigateur ne supporte que l'enregistrement manuel.\n\nPour enregistrer les modifications de votre wiki, faites un clic droit sur le lien de téléchargement ci-dessous et choisissez \"Enregistrer...\" ou \"Télécharger...\", puis choisissez le répertoire et le nom de fichier.\n\n//Il est possible d'accélérer un peu les choses en cliquant sur le lien en pressant la touche contrôle (Windows) ou la touche option/alt (Mac OS X). On ne vous demandera pas un nom de fichier ou de répertoire, mais votre navigateur proposera probablement un nom difficile à identifier — il vous faudra sans doute le renommer pour ajouter une extension .html avant qu'il soit réellement utilisable.//\n\nSur les smartphones qui n'autorisent pas le téléchargement de fichiers, vous pouvez ajouter le lien à vos favoris/signets, puis synchroniser vos signets avec un ordinateur de bureau, d'où le wiki pourra être enregistré normalement.\n"
},
"$:/language/Modals/SaveInstructions": {
"title": "$:/language/Modals/SaveInstructions",
"type": "text/vnd.tiddlywiki",
"subtitle": "Enregistrez votre travail",
"footer": "<$button message=\"tw-close-tiddler\" class=\"btn btn-primary\">Fermer</$button>",
"help": "http://tiddlywiki.com/static/SavingChanges.html",
"text": "Les modifications effectuées dans ce wiki doivent être sauvegardées sous forme de fichier ~TiddlyWiki HTML.\n\n!!! Navigateurs de bureau\n\n# Sélectionnez ''Enregistrer sous'' depuis le menu ''Fichier''\n# Choisissez un nom de fichier et un dossier\n#* Certains navigateurs demandent aussi de spécifier explicitement le format d'enregistrement, à savoir ''Page Web, HTML uniquement'' ou quelque chose d'approchant\n# Fermez cet onglet\n\n!!! Navigateurs sur smartphone\n\n# Créez un favori/signet pour cette page\n#* Si vous utilisez iCloud ou Google Sync, le signet sera automatiquement synchronisé avec le navigateur de votre ordinateur de bureau, d'où vous pourrez l'ouvrir et enregistrer le fichier comme indiqué ci-dessus\n# Fermez cet onglet\n\n//Si vous ouvrez à nouveau le signet dans Safari pour mobile, vous verrez ce message une nouvelle fois. Si vous voulez continuer et utiliser le fichier, cliquez simplement sur le bouton ''Fermer'' ci-dessous//\n"
},
"$:/language/Notifications/Save/Done": {
"title": "$:/language/Notifications/Save/Done",
"text": "Wiki enregistré"
},
"$:/language/Notifications/Save/Starting": {
"title": "$:/language/Notifications/Save/Starting",
"text": "Enregistrement du wiki en cours"
},
"$:/language/Search/Advanced/Matches": {
"title": "$:/language/Search/Advanced/Matches",
"text": "//<small><$count filter={{$:/temp/advancedsearch}}/> correspondances</small>//"
},
"$:/language/Search/Filter/Caption": {
"title": "$:/language/Search/Filter/Caption",
"text": "Filtres"
},
"$:/language/Search/Filter/Hint": {
"title": "$:/language/Search/Filter/Hint",
"text": "Recherche via une combinaison de [[filtres|http://tiddlywiki.com/static/TiddlerFilters.html]]"
},
"$:/language/Search/Matches": {
"title": "$:/language/Search/Matches",
"text": "//<small><$count filter=\"[!is[system]search{$:/temp/search}]\"/> correspondances</small>//"
},
"$:/language/Search/Shadows/Caption": {
"title": "$:/language/Search/Shadows/Caption",
"text": "Shadows"
},
"$:/language/Search/Shadows/Hint": {
"title": "$:/language/Search/Shadows/Hint",
"text": "Recherche parmi les tiddlers //shadow//"
},
"$:/language/Search/System/Caption": {
"title": "$:/language/Search/System/Caption",
"text": "Système"
},
"$:/language/Search/System/Hint": {
"title": "$:/language/Search/System/Hint",
"text": "Recherche parmi les tiddlers //système//"
},
"$:/language/SideBar/All/Caption": {
"title": "$:/language/SideBar/All/Caption",
"text": "Tout"
},
"$:/language/SideBar/Drafts/Caption": {
"title": "$:/language/SideBar/Drafts/Caption",
"text": "Brouillons"
},
"$:/language/SideBar/Missing/Caption": {
"title": "$:/language/SideBar/Missing/Caption",
"text": "Manquants"
},
"$:/language/SideBar/More/Caption": {
"title": "$:/language/SideBar/More/Caption",
"text": "Plus"
},
"$:/language/SideBar/Open/Caption": {
"title": "$:/language/SideBar/Open/Caption",
"text": "Ouverts"
},
"$:/language/SideBar/Orphans/Caption": {
"title": "$:/language/SideBar/Orphans/Caption",
"text": "Orphelins"
},
"$:/language/SideBar/Recent/Caption": {
"title": "$:/language/SideBar/Recent/Caption",
"text": "Récents"
},
"$:/language/SideBar/Shadows/Caption": {
"title": "$:/language/SideBar/Shadows/Caption",
"text": "Shadows"
},
"$:/language/SideBar/System/Caption": {
"title": "$:/language/SideBar/System/Caption",
"text": "Système"
},
"$:/language/SideBar/Tags/Caption": {
"title": "$:/language/SideBar/Tags/Caption",
"text": "Tags"
},
"$:/language/SideBar/Tags/Untagged/Caption": {
"title": "$:/language/SideBar/Tags/Untagged/Caption",
"text": "sans étiquette"
},
"$:/language/SideBar/Tools/Caption": {
"title": "$:/language/SideBar/Tools/Caption",
"text": "Outils"
},
"$:/language/SideBar/Types/Caption": {
"title": "$:/language/SideBar/Types/Caption",
"text": "Types"
},
"$:/SiteSubtitle": {
"title": "$:/SiteSubtitle",
"text": "un carnet de notes non linéaire pour le Web"
},
"$:/SiteTitle": {
"title": "$:/SiteTitle",
"text": "Mon ~TiddlyWiki"
},
"$:/language/TiddlerInfo/Fields/Caption": {
"title": "$:/language/TiddlerInfo/Fields/Caption",
"text": "Champs"
},
"$:/language/TiddlerInfo/List/Caption": {
"title": "$:/language/TiddlerInfo/List/Caption",
"text": "Liste"
},
"$:/language/TiddlerInfo/List/Empty": {
"title": "$:/language/TiddlerInfo/List/Empty",
"text": "Ce tiddler ne contient pas de champ //list//"
},
"$:/language/TiddlerInfo/Listed/Caption": {
"title": "$:/language/TiddlerInfo/Listed/Caption",
"text": "Listé"
},
"$:/language/TiddlerInfo/Listed/Empty": {
"title": "$:/language/TiddlerInfo/Listed/Empty",
"text": "Ce tiddler ne figure pas dans la liste d'un autre tiddler"
},
"$:/language/TiddlerInfo/References/Caption": {
"title": "$:/language/TiddlerInfo/References/Caption",
"text": "Références"
},
"$:/language/TiddlerInfo/References/Empty": {
"title": "$:/language/TiddlerInfo/References/Empty",
"text": "Aucun tiddler ne pointe vers celui-ci"
},
"$:/language/TiddlerInfo/Tagging/Caption": {
"title": "$:/language/TiddlerInfo/Tagging/Caption",
"text": "Étiquetage"
},
"$:/language/TiddlerInfo/Tagging/Empty": {
"title": "$:/language/TiddlerInfo/Tagging/Empty",
"text": "Le titre de ce tiddler ne sert de tag à aucun tiddler"
},
"$:/language/Docs/Types/application/json": {
"title": "$:/language/Docs/Types/application/json",
"description": "Données au format JSON",
"name": "application/json",
"text": ""
},
"$:/language/Docs/Types/application/x-tiddler-dictionary": {
"title": "$:/language/Docs/Types/application/x-tiddler-dictionary",
"description": "Dictionnaire de données",
"name": "application/x-tiddler-dictionary",
"text": ""
},
"$:/language/Docs/Types/image/gif": {
"title": "$:/language/Docs/Types/image/gif",
"description": "Image au format GIF",
"name": "image/gif",
"text": ""
},
"$:/language/Docs/Types/image/jpeg": {
"title": "$:/language/Docs/Types/image/jpeg",
"description": "Image au format JPEG",
"name": "image/jpeg",
"text": ""
},
"$:/language/Docs/Types/image/png": {
"title": "$:/language/Docs/Types/image/png",
"description": "Image au format PNG",
"name": "image/png",
"text": ""
},
"$:/language/Docs/Types/image/svg+xml": {
"title": "$:/language/Docs/Types/image/svg+xml",
"description": "Image au format SVG",
"name": "image/svg+xml",
"text": ""
},
"$:/language/Docs/Types/image/x-icon": {
"title": "$:/language/Docs/Types/image/x-icon",
"description": "Fichier icone au format ICO",
"name": "image/x-icon",
"text": ""
},
"$:/language/Docs/Types/text/css": {
"title": "$:/language/Docs/Types/text/css",
"description": "Feuille de style CSS statique",
"name": "text/css",
"text": ""
},
"$:/language/Docs/Types/text/plain": {
"title": "$:/language/Docs/Types/text/plain",
"description": "Format texte",
"name": "text/plain",
"text": ""
},
"$:/language/Docs/Types/text/vnd.tiddlywiki": {
"title": "$:/language/Docs/Types/text/vnd.tiddlywiki",
"description": "Wikitext pour TiddlyWiki version 5",
"name": "text/vnd.tiddlywiki",
"text": ""
},
"$:/language/Docs/Types/text/x-tiddlywiki": {
"title": "$:/language/Docs/Types/text/x-tiddlywiki",
"description": "Wikitext pour TiddlyWiki Classic",
"name": "text/x-tiddlywiki",
"text": ""
}
}
}
{
"tiddlers": {
"$:/plugins/tiddlywiki/fullscreen/init.js": {
"text": "/*\\\ntitle: $:/plugins/tiddlywiki/fullscreen/init.js\ntype: application/javascript\nmodule-type: browser-startup\n\nMessage handler for full screen mode\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false, Element: false */\n\"use strict\";\n\nvar d = document,\n\tdb = d.body,\n\t_requestFullscreen = db.webkitRequestFullscreen !== undefined ? \"webkitRequestFullscreen\" :\n\t\t\t\t\t\tdb.mozRequestFullScreen !== undefined ? \"mozRequestFullScreen\" :\n\t\t\t\t\t\tdb.msRequestFullscreen !== undefined ? \"msRequestFullscreen\" :\n\t\t\t\t\t\tdb.requestFullscreen !== undefined ? \"requestFullscreen\" : \"\",\n\t_exitFullscreen = d.webkitExitFullscreen !== undefined ? \"webkitExitFullscreen\" :\n\t\t\t\t\t\t\td.mozCancelFullScreen !== undefined ? \"mozCancelFullScreen\" :\n\t\t\t\t\t\t\td.msExitFullscreen !== undefined ? \"msExitFullscreen\" :\n\t\t\t\t\t\t\td.exitFullscreen !== undefined ? \"exitFullscreen\" : \"\",\n\t_fullscreenElement = d.webkitFullscreenElement !== undefined ? \"webkitFullscreenElement\" :\n\t\t\t\t\t\t\td.mozFullScreenElement !== undefined ? \"mozFullScreenElement\" :\n\t\t\t\t\t\t\td.msFullscreenElement !== undefined ? \"msFullscreenElement\" :\n\t\t\t\t\t\t\td.fullscreenElement !== undefined ? \"fullscreenElement\" : \"\";\n\nvar toggleFullscreen = function() {\n\tif(document[_fullscreenElement]) {\n\t\tdocument[_exitFullscreen]();\n\t} else {\n\t\tdocument.documentElement[_requestFullscreen](Element.ALLOW_KEYBOARD_INPUT);\n\t}\n};\n\nexports.startup = function() {\n\t// Install the full screen handler\n\tif(_requestFullscreen) {\n\t\t$tw.rootWidget.addEventListener(\"tw-full-screen\",function(event) {\n\t\t\ttoggleFullscreen();\n\t\t});\n\t}\n};\n\n})();\n",
"title": "$:/plugins/tiddlywiki/fullscreen/init.js",
"type": "application/javascript",
"module-type": "browser-startup"
}
}
}
{
"tiddlers": {
"$:/plugins/tiddlywiki/googleanalytics/googleanalytics.js": {
"text": "/*\\\ntitle: $:/plugins/tiddlywiki/googleanalytics/googleanalytics.js\ntype: application/javascript\nmodule-type: startup\n\nRuns Google Analytics with the account number in the tiddler `$:/GoogleAnalyticsAccount` and the domain name in `$:/GoogleAnalyticsDomain`\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar GOOGLE_ANALYTICS_ACCOUNT = \"$:/GoogleAnalyticsAccount\",\n\tGOOGLE_ANALYTICS_DOMAIN = \"$:/GoogleAnalyticsDomain\";\n\nexports.startup = function() {\n\tif($tw.browser) {\n\t\twindow._gaq = window._gaq || [];\n\t\t_gaq.push([\"_setAccount\", $tw.wiki.getTiddlerText(GOOGLE_ANALYTICS_ACCOUNT)]);\n\t\t_gaq.push([\"_setDomainName\", $tw.wiki.getTiddlerText(GOOGLE_ANALYTICS_DOMAIN)]);\n\t\t_gaq.push([\"_trackPageview\"]);\n\t\tvar ga = document.createElement(\"script\");\n\t\tga.type = \"text/javascript\";\n\t\tga.async = true;\n\t\tga.src = (\"https:\" == document.location.protocol ? \"https://ssl\" : \"http://www\") + \".google-analytics.com/ga.js\";\n\t\tdocument.body.appendChild(ga);\n\t}\n};\n\n})();\n",
"title": "$:/plugins/tiddlywiki/googleanalytics/googleanalytics.js",
"type": "application/javascript",
"module-type": "startup"
}
}
}
le débat théorique et les implications pratiques
[[Téléologie et fonctions biologiques|.]]
$:/core/ui/ControlPanel/Appearance/Palette
$:/core/ui/AdvancedSearch/Shadows
$:/core/ui/ControlPanel/Saving
$:/core/ui/ControlPanel/Appearance/Theme
$:/core/ui/TiddlerInfo/List
$:/core/ui/TiddlerInfo/Listed
$:/core/ui/ControlPanel/Appearance
$:/_ui/SideBar/Menu/Créer
$:/core/ui/MoreSideBar/System
$:/themes/tiddlywiki/starlight
{
"tiddlers": {
"$:/themes/tiddlywiki/centralised/styles.tid": {
"title": "$:/themes/tiddlywiki/centralised/styles.tid",
"tags": "[[$:/tags/stylesheet]]",
"text": "\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline\n\n@media (min-width: 770px) {\n\n\thtml .tw-page-container {\n\t\ttext-align: center;\n\t}\n\n\thtml .story-river {\n\t\tposition: relative;\n\t\twidth: 770px;\n\t\tpadding: 42px;\n\t\tmargin: 0 auto;\n\t\ttext-align: left;\n\t}\n\n\thtml .sidebar-header {\n\t\ttext-align: left;\n\t\tleft: 50%;\n\t\tright: 0;\n\t\tpadding-left: 413px;\n\t}\n}\n"
}
}
}
{
"tiddlers": {
"$:/themes/tiddlywiki/readonly/styles.tid": {
"title": "$:/themes/tiddlywiki/readonly/styles.tid",
"tags": "[[$:/tags/stylesheet]]",
"text": "\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline\n\nsvg.tw-image-new-button, svg.tw-image-options-button, svg.tw-image-save-button, svg.tw-image-edit-button, svg.tw-image-delete-button, svg.tw-image-cancel-button, svg.tw-image-done-button {\n\tdisplay: none;\t\n}\n"
}
}
}
{
"tiddlers": {
"$:/themes/tiddlywiki/snowwhite/base": {
"title": "$:/themes/tiddlywiki/snowwhite/base",
"tags": "[[$:/tags/stylesheet]]",
"text": "\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline\n\n.sidebar-header {\n\ttext-shadow: 0 1px 0 <<colour sidebar-foreground-shadow>>;\n}\n\n.tw-page-controls svg {\n\t<<transition \"fill 150ms ease-in-out\">>\n}\n\n.tw-tiddler-info {\n\t<<box-shadow \"inset 1px 2px 3px rgba(0,0,0,0.1)\">>\n}\n\n@media screen {\n\t.tw-tiddler-frame {\n\t\t<<box-shadow \"5px 5px 5px rgba(0, 0, 0, 0.1)\">>\n\t}\n}\n\n@media (max-width: 770px) {\n\t.tw-tiddler-frame {\n\t\t<<box-shadow none>>\n\t}\n}\n\n.tw-tiddler-controls button svg {\n\t<<transition \"fill 150ms ease-in-out\">>\n}\n\n.tw-tiddler-controls button.tw-selected svg {\n\t<<filter \"drop-shadow(0px -1px 2px rgba(0,0,0,0.25))\">>\n}\n\n.tw-tiddler-frame input.tw-edit-texteditor {\n\t<<box-shadow \"inset 0 1px 8px rgba(0, 0, 0, 0.15)\">>\n}\n\n.tw-edit-tags {\n\t<<box-shadow \"inset 0 1px 8px rgba(0, 0, 0, 0.15)\">>\n}\n\n.tw-tiddler-frame .tw-edit-tags input.tw-edit-texteditor {\n\t<<box-shadow \"none\">>\n\tborder: none;\n\toutline: none;\n}\n\ncanvas.tw-edit-bitmapeditor {\n\t<<box-shadow \"2px 2px 5px rgba(0, 0, 0, 0.5)\">>\n}\n\n.tw-drop-down {\n\t<<border-radius 4px>>\n\t<<box-shadow \"2px 2px 10px rgba(0, 0, 0, 0.5)\">>\n}\n\n.tw-block-dropdown {\n\t<<border-radius 4px>>\n\t<<box-shadow \"2px 2px 10px rgba(0, 0, 0, 0.5)\">>\n}\n\n.tw-modal-displayed {\n\t-webkit-filter: blur(4px);\n}\n\n.modal {\n\t<<border-radius 6px>>\n\t<<box-shadow \"0 3px 7px rgba(0,0,0,0.3)\">>\n}\n\n.modal-footer {\n\t<<border-radius \"0 0 6px 6px\">>\n\t<<box-shadow \"inset 0 1px 0 #fff\">>;\n}\n\n\n.tw-alert {\n\t<<border-radius 6px>>\n\t<<box-shadow \"0 3px 7px rgba(0,0,0,0.6)\">>\n}\n\n.tw-notification {\n\t<<border-radius 6px>>\n\t<<box-shadow \"0 3px 7px rgba(0,0,0,0.3)\">>\n\ttext-shadow: 0 1px 0 rgba(255,255,255, 0.8);\n}\n\n.tw-sidebar-lists .tw-tab-divider {\n\t<<background-linear-gradient \"left, rgb(216,216,216) 0%, rgb(236,236,236) 250px\">>\n}\n\n.tw-more-sidebar .tw-tab-buttons button {\n\t<<background-linear-gradient \"left, rgb(236,236,236) 0%, rgb(224,224,224) 100%\">>\n}\n\n.tw-more-sidebar .tw-tab-buttons button.tw-tab-selected {\n\t<<background-linear-gradient \"left, rgb(236,236,236) 0%, rgb(248,248,248) 100%\">>\n}\n\n.tw-message-box img {\n\t<<box-shadow \"1px 1px 3px rgba(0,0,0,0.5)\">>\n}\n"
}
}
}
{
"tiddlers": {
"$:/themes/tiddlywiki/starlight/arvo.woff": {
"text": "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",
"type": "application/font-woff",
"title": "$:/themes/tiddlywiki/starlight/arvo.woff"
},
"$:/themes/tiddlywiki/starlight/ltbg.jpg": {
"text": "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PSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pgo8IURPQ1RZUEUgcGxpc3QgUFVCTElDICItLy9BcHBsZS8vRFREIFBMSVNUIDEuMC8vRU4iICJodHRwOi8vd3d3LmFwcGxlLmNvbS9EVERzL1Byb3BlcnR5TGlzdC0xLjAuZHRkIj4KPHBsaXN0IHZlcnNpb249IjEuMCI+CjxkaWN0PgoJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTUhvcml6b250YWxSZXM8L2tleT4KCTxkaWN0PgoJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5jcmVhdG9yPC9rZXk+CgkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc+CgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCTxhcnJheT4KCQkJPGRpY3Q+CgkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNSG9yaXpvbnRhbFJlczwva2V5PgoJCQkJPHJlYWw+NzI8L3JlYWw+CgkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuc3RhdGVGbGFnPC9rZXk+CgkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQk8L2RpY3Q+CgkJPC9hcnJheT4KCTwvZGljdD4KCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1PcmllbnRhdGlvbjwva2V5PgoJPGRpY3Q+CgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk+CgkJPGFycmF5PgoJCQk8ZGljdD4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1PcmllbnRhdGlvbjwva2V5PgoJCQkJPGludGVnZXI+MTwvaW50ZWdlcj4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CgkJCTwvZGljdD4KCQk8L2FycmF5PgoJPC9kaWN0PgoJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTVNjYWxpbmc8L2tleT4KCTxkaWN0PgoJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5jcmVhdG9yPC9rZXk+CgkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc+CgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCTxhcnJheT4KCQkJPGRpY3Q+CgkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNU2NhbGluZzwva2V5PgoJCQkJPHJlYWw+MTwvcmVhbD4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CgkJCTwvZGljdD4KCQk8L2FycmF5PgoJPC9kaWN0PgoJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTVZlcnRpY2FsUmVzPC9rZXk+Cgk8ZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCTxzdHJpbmc+Y29tLmFwcGxlLmpvYnRpY2tldDwvc3RyaW5nPgoJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQk8YXJyYXk+CgkJCTxkaWN0PgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTVZlcnRpY2FsUmVzPC9rZXk+CgkJCQk8cmVhbD43MjwvcmVhbD4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CgkJCTwvZGljdD4KCQk8L2FycmF5PgoJPC9kaWN0PgoJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTVZlcnRpY2FsU2NhbGluZzwva2V5PgoJPGRpY3Q+CgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk+CgkJPGFycmF5PgoJCQk8ZGljdD4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1WZXJ0aWNhbFNjYWxpbmc8L2tleT4KCQkJCTxyZWFsPjE8L3JlYWw+CgkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuc3RhdGVGbGFnPC9rZXk+CgkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQk8L2RpY3Q+CgkJPC9hcnJheT4KCTwvZGljdD4KCTxrZXk+Y29tLmFwcGxlLnByaW50LnN1YlRpY2tldC5wYXBlcl9pbmZvX3RpY2tldDwva2V5PgoJPGRpY3Q+CgkJPGtleT5QTVBQRFBhcGVyQ29kZU5hbWU8L2tleT4KCQk8ZGljdD4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc+CgkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQkJPGFycmF5PgoJCQkJPGRpY3Q+CgkJCQkJPGtleT5QTVBQRFBhcGVyQ29kZU5hbWU8L2tleT4KCQkJCQk8c3RyaW5nPkxldHRlcjwvc3RyaW5nPgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQkJPC9kaWN0PgoJCQk8L2FycmF5PgoJCTwvZGljdD4KCQk8a2V5PlBNVGlvZ2FQYXBlck5hbWU8L2tleT4KCQk8ZGljdD4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc+CgkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQkJPGFycmF5PgoJCQkJPGRpY3Q+CgkJCQkJPGtleT5QTVRpb2dhUGFwZXJOYW1lPC9rZXk+CgkJCQkJPHN0cmluZz5uYS1sZXR0ZXI8L3N0cmluZz4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuc3RhdGVGbGFnPC9rZXk+CgkJCQkJPGludGVnZXI+MDwvaW50ZWdlcj4KCQkJCTwvZGljdD4KCQkJPC9hcnJheT4KCQk8L2RpY3Q+CgkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTUFkanVzdGVkUGFnZVJlY3Q8L2tleT4KCQk8ZGljdD4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc+CgkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQkJPGFycmF5PgoJCQkJPGRpY3Q+CgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTUFkanVzdGVkUGFnZVJlY3Q8L2tleT4KCQkJCQk8YXJyYXk+CgkJCQkJCTxyZWFsPjAuMDwvcmVhbD4KCQkJCQkJPHJlYWw+MC4wPC9yZWFsPgoJCQkJCQk8cmVhbD43MzQ8L3JlYWw+CgkJCQkJCTxyZWFsPjU3NjwvcmVhbD4KCQkJCQk8L2FycmF5PgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQkJPC9kaWN0PgoJCQk8L2FycmF5PgoJCTwvZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNQWRqdXN0ZWRQYXBlclJlY3Q8L2tleT4KCQk8ZGljdD4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc+CgkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQkJPGFycmF5PgoJCQkJPGRpY3Q+CgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTUFkanVzdGVkUGFwZXJSZWN0PC9rZXk+CgkJCQkJPGFycmF5PgoJCQkJCQk8cmVhbD4tMTg8L3JlYWw+CgkJCQkJCTxyZWFsPi0xODwvcmVhbD4KCQkJCQkJPHJlYWw+Nzc0PC9yZWFsPgoJCQkJCQk8cmVhbD41OTQ8L3JlYWw+CgkJCQkJPC9hcnJheT4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuc3RhdGVGbGFnPC9rZXk+CgkJCQkJPGludGVnZXI+MDwvaW50ZWdlcj4KCQkJCTwvZGljdD4KCQkJPC9hcnJheT4KCQk8L2RpY3Q+CgkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvLlBNUGFwZXJOYW1lPC9rZXk+CgkJPGRpY3Q+CgkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5jcmVhdG9yPC9rZXk+CgkJCTxzdHJpbmc+Y29tLmFwcGxlLmpvYnRpY2tldDwvc3RyaW5nPgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk+CgkJCTxhcnJheT4KCQkJCTxkaWN0PgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhcGVySW5mby5QTVBhcGVyTmFtZTwva2V5PgoJCQkJCTxzdHJpbmc+bmEtbGV0dGVyPC9zdHJpbmc+CgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CgkJCQk8L2RpY3Q+CgkJCTwvYXJyYXk+CgkJPC9kaWN0PgoJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhcGVySW5mby5QTVVuYWRqdXN0ZWRQYWdlUmVjdDwva2V5PgoJCTxkaWN0PgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCQk8YXJyYXk+CgkJCQk8ZGljdD4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYXBlckluZm8uUE1VbmFkanVzdGVkUGFnZVJlY3Q8L2tleT4KCQkJCQk8YXJyYXk+CgkJCQkJCTxyZWFsPjAuMDwvcmVhbD4KCQkJCQkJPHJlYWw+MC4wPC9yZWFsPgoJCQkJCQk8cmVhbD43MzQ8L3JlYWw+CgkJCQkJCTxyZWFsPjU3NjwvcmVhbD4KCQkJCQk8L2FycmF5PgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQkJPC9kaWN0PgoJCQk8L2FycmF5PgoJCTwvZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYXBlckluZm8uUE1VbmFkanVzdGVkUGFwZXJSZWN0PC9rZXk+CgkJPGRpY3Q+CgkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5jcmVhdG9yPC9rZXk+CgkJCTxzdHJpbmc+Y29tLmFwcGxlLmpvYnRpY2tldDwvc3RyaW5nPgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk+CgkJCTxhcnJheT4KCQkJCTxkaWN0PgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhcGVySW5mby5QTVVuYWRqdXN0ZWRQYXBlclJlY3Q8L2tleT4KCQkJCQk8YXJyYXk+CgkJCQkJCTxyZWFsPi0xODwvcmVhbD4KCQkJCQkJPHJlYWw+LTE4PC9yZWFsPgoJCQkJCQk8cmVhbD43NzQ8L3JlYWw+CgkJCQkJCTxyZWFsPjU5NDwvcmVhbD4KCQkJCQk8L2FycmF5PgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQkJPC9kaWN0PgoJCQk8L2FycmF5PgoJCTwvZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYXBlckluZm8ucHBkLlBNUGFwZXJOYW1lPC9rZXk+CgkJPGRpY3Q+CgkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5jcmVhdG9yPC9rZXk+CgkJCTxzdHJpbmc+Y29tLmFwcGxlLmpvYnRpY2tldDwvc3RyaW5nPgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk+CgkJCTxhcnJheT4KCQkJCTxkaWN0PgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhcGVySW5mby5wcGQuUE1QYXBlck5hbWU8L2tleT4KCQkJCQk8c3RyaW5nPlVTIExldHRlcjwvc3RyaW5nPgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQkJPC9kaWN0PgoJCQk8L2FycmF5PgoJCTwvZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuQVBJVmVyc2lvbjwva2V5PgoJCTxzdHJpbmc+MDAuMjA8L3N0cmluZz4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQudHlwZTwva2V5PgoJCTxzdHJpbmc+Y29tLmFwcGxlLnByaW50LlBhcGVySW5mb1RpY2tldDwvc3RyaW5nPgoJPC9kaWN0PgoJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LkFQSVZlcnNpb248L2tleT4KCTxzdHJpbmc+MDAuMjA8L3N0cmluZz4KCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC50eXBlPC9rZXk+Cgk8c3RyaW5nPmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0VGlja2V0PC9zdHJpbmc+CjwvZGljdD4KPC9wbGlzdD4KOEJJTQPtAAAAAAAQAEgCTgABAAEASAJOAAEAAThCSU0EJgAAAAAADgAAAAAAAAAAAAA/gAAAOEJJTQQNAAAAAAAEAAAAHjhCSU0EGQAAAAAABAAAAB44QklNA/MAAAAAAAkAAAAAAAAAAAEAOEJJTQQKAAAAAAABAAA4QklNJxAAAAAAAAoAAQAAAAAAAAABOEJJTQP1AAAAAABIAC9mZgABAGxmZgAGAAAAAAABAC9mZgABAKGZmgAGAAAAAAABADIAAAABAFoAAAAGAAAAAAABADUAAAABAC0AAAAGAAAAAAABOEJJTQP4AAAAAABwAAD/////////////////////////////A+gAAAAA/////////////////////////////wPoAAAAAP////////////////////////////8D6AAAAAD/////////////////////////////A+gAADhCSU0ECAAAAAAAEAAAAAEAAAJAAAACQAAAAAA4QklNBB4AAAAAAAQAAAAAOEJJTQQaAAAAAANHAAAABgAAAAAAAAAAAAABVAAAAVQAAAAJAFAAaQBjAHQAdQByAGUAIAAyAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAFUAAABVAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAABAAAAABAAAAAAAAbnVsbAAAAAIAAAAGYm91bmRzT2JqYwAAAAEAAAAAAABSY3QxAAAABAAAAABUb3AgbG9uZwAAAAAAAAAATGVmdGxvbmcAAAAAAAAAAEJ0b21sb25nAAABVAAAAABSZ2h0bG9uZwAAAVQAAAAGc2xpY2VzVmxMcwAAAAFPYmpjAAAAAQAAAAAABXNsaWNlAAAAEgAAAAdzbGljZUlEbG9uZwAAAAAAAAAHZ3JvdXBJRGxvbmcAAAAAAAAABm9yaWdpbmVudW0AAAAMRVNsaWNlT3JpZ2luAAAADWF1dG9HZW5lcmF0ZWQAAAAAVHlwZWVudW0AAAAKRVNsaWNlVHlwZQAAAABJbWcgAAAABmJvdW5kc09iamMAAAABAAAAAAAAUmN0MQAAAAQAAAAAVG9wIGxvbmcAAAAAAAAAAExlZnRsb25nAAAAAAAAAABCdG9tbG9uZwAAAVQAAAAAUmdodGxvbmcAAAFUAAAAA3VybFRFWFQAAAABAAAAAAAAbnVsbFRFWFQAAAABAAAAAAAATXNnZVRFWFQAAAABAAAAAAAGYWx0VGFnVEVYVAAAAAEAAAAAAA5jZWxsVGV4dElzSFRNTGJvb2wBAAAACGNlbGxUZXh0VEVYVAAAAAEAAAAAAAlob3J6QWxpZ25lbnVtAAAAD0VTbGljZUhvcnpBbGlnbgAAAAdkZWZhdWx0AAAACXZlcnRBbGlnbmVudW0AAAAPRVNsaWNlVmVydEFsaWduAAAAB2RlZmF1bHQAAAALYmdDb2xvclR5cGVlbnVtAAAAEUVTbGljZUJHQ29sb3JUeXBlAAAAAE5vbmUAAAAJdG9wT3V0c2V0bG9uZwAAAAAAAAAKbGVmdE91dHNldGxvbmcAAAAAAAAADGJvdHRvbU91dHNldGxvbmcAAAAAAAAAC3JpZ2h0T3V0c2V0bG9uZwAAAAAAOEJJTQQoAAAAAAAMAAAAAT/wAAAAAAAAOEJJTQQUAAAAAAAEAAAAAThCSU0EDAAAAAAFkQAAAAEAAACgAAAAoAAAAeAAASwAAAAFdQAYAAH/2P/gABBKRklGAAECAABIAEgAAP/tAAxBZG9iZV9DTQAB/+4ADkFkb2JlAGSAAAAAAf/bAIQADAgICAkIDAkJDBELCgsRFQ8MDA8VGBMTFRMTGBEMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAENCwsNDg0QDg4QFA4ODhQUDg4ODhQRDAwMDAwREQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM/8AAEQgAoACgAwEiAAIRAQMRAf/dAAQACv/EAT8AAAEFAQEBAQEBAAAAAAAAAAMAAQIEBQYHCAkKCwEAAQUBAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAABBAEDAgQCBQcGCAUDDDMBAAIRAwQhEjEFQVFhEyJxgTIGFJGhsUIjJBVSwWIzNHKC0UMHJZJT8OHxY3M1FqKygyZEk1RkRcKjdDYX0lXiZfKzhMPTdePzRieUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm9jdHV2d3h5ent8fX5/cRAAICAQIEBAMEBQYHBwYFNQEAAhEDITESBEFRYXEiEwUygZEUobFCI8FS0fAzJGLhcoKSQ1MVY3M08SUGFqKygwcmNcLSRJNUoxdkRVU2dGXi8rOEw9N14/NGlKSFtJXE1OT0pbXF1eX1VmZ2hpamtsbW5vYnN0dXZ3eHl6e3x//aAAwDAQACEQMRAD8A9E/iknTcf7ElL6ptEikkpdN3n8if/UJvgkpX5Eu/PwSH3J5SUsCknTfgkpXZKNPJLyhLukpSdN5JJKUlqlCSSlaJJJapKUEvwSS178JKf//Q9EP+oS+KUJf79UlL8/NMkB4pSkpXmkfBIQkkpfRMUuEklKSSSSUr8EvPsnTJKUkOEuT59kklK/Kl/rCXeUh/qfikpRgfkS/j4pDhL8ZSUpL8iXxTx8klP//R9ES7pFL/AF1SUrsnTJJKVp/sSPeUkklKHj4pflS7JJKX5CZLWfFOkpZL8iXdL/WElK0+9Lt8E/nzKZJSvwS+Pglolr80lKmRqkfhCf8A3pHhJS3dJLT70vypKf/S9EnskkPJL5JKV/rCSWvzT9klLJQkEklKj8EteE6b5pKUkP8Acl+BSme0pKUEkuySSlFLyCSXx7JKVqklolM88JKUlEpxPgmSUr/ekl/rKSSn/9P0T8ieE3xS/L4pKV2SKXyT+CSlkteySX5ElK+WifhNql5pKV+CU/NIJJKX/wBZTfgkl+RJSuEkpSEpKUlHikl+KSlFL5JacDhLRJSpKX4JJa9+ElP/1PRUySX8UlKn/el8E+nCUfckpZJJL8iSl0oTJfNJSjzKSXdIeCSlcpa/66JfFLvEpKV8fuS15SlIT8+6SlJJJJKVql8EtfFOElLJJfDVJJT/AP/V9E0/uSSKWqSlSUgPAp/4pueUlK+GhT/BNKSSlaJcJJHySUpL4Ja8JCUlK/GEkuySSlfFJJL4JKVyl8fv5SMpa/FJSvjolp4Jymn70lK/HySGqXdKZCSn/9b0RPGv96bt4J4SUseE+qbzSPmkpUpQklpKSl/wlN+VL/X4JJKUdU6WvwTJKV+RLskfH/al4pKUlz2SSn7klK/KlOqR/wBQkkpXkkkl/r9ySl/gmSSSU//X9ESSSKSlJJeaSSlJJR5JT/qElKlLSRCXdIJKV4d0uEv4pafNJStUoSSSUrhP8R8kySSlwmCSUJKXn70uAm51S0+P5UlKKU6p03+pSU//0PRPh9yXwS+KSSlf6hJIpTKSlRwn1mEyX+vmkpX8Uo/3pJJKV2ST+CaJSUpLVLlL8qSlafekl8EklKSS1SSUr4JfDul2lKElK++Eu6SWqSn/2QA4QklNBCEAAAAAAFUAAAABAQAAAA8AQQBkAG8AYgBlACAAUABoAG8AdABvAHMAaABvAHAAAAATAEEAZABvAGIAZQAgAFAAaABvAHQAbwBzAGgAbwBwACAAQwBTADMAAAABADhCSU0EBgAAAAAABwAGAAEAAQEA/+EPLmh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8APD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNC4xLWMwMzYgNDYuMjc2NzIwLCBNb24gRmViIDE5IDIwMDcgMjI6MTM6NDMgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhhcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtbG5zOnhhcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iIHhhcDpDcmVhdGVEYXRlPSIyMDEwLTA4LTMwVDIzOjQ5OjE0LTA1OjAwIiB4YXA6TW9kaWZ5RGF0ZT0iMjAxMC0wOC0zMFQyMzo0OToxNC0wNTowMCIgeGFwOk1ldGFkYXRhRGF0ZT0iMjAxMC0wOC0zMFQyMzo0OToxNC0wNTowMCIgeGFwOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1MzIE1hY2ludG9zaCIgZGM6Zm9ybWF0PSJpbWFnZS9qcGVnIiBwaG90b3Nob3A6Q29sb3JNb2RlPSIzIiBwaG90b3Nob3A6SUNDUHJvZmlsZT0iaU1hYyIgcGhvdG9zaG9wOkhpc3Rvcnk9IiIgeGFwTU06SW5zdGFuY2VJRD0idXVpZDpFQjAwQjU5NDA4QjVERjExODdBNTlCQzExMkI0QjA2RSIgeGFwTU06RG9jdW1lbnRJRD0idXVpZDpFQTAwQjU5NDA4QjVERjExODdBNTlCQzExMkI0QjA2RSIgdGlmZjpPcmllbnRhdGlvbj0iMSIgdGlmZjpYUmVzb2x1dGlvbj0iNzIwMDkwLzEwMDAwIiB0aWZmOllSZXNvbHV0aW9uPSI3MjAwOTAvMTAwMDAiIHRpZmY6UmVzb2x1dGlvblVuaXQ9IjIiIHRpZmY6TmF0aXZlRGlnZXN0PSIyNTYsMjU3LDI1OCwyNTksMjYyLDI3NCwyNzcsMjg0LDUzMCw1MzEsMjgyLDI4MywyOTYsMzAxLDMxOCwzMTksNTI5LDUzMiwzMDYsMjcwLDI3MSwyNzIsMzA1LDMxNSwzMzQzMjs3RUY4RDFBOTcwMjlCOUNFOTAwNkUzRDcxRjgwNDdFNSIgZXhpZjpQaXhlbFhEaW1lbnNpb249IjM0MCIgZXhpZjpQaXhlbFlEaW1lbnNpb249IjM0MCIgZXhpZjpDb2xvclNwYWNlPSItMSIgZXhpZjpOYXRpdmVEaWdlc3Q9IjM2ODY0LDQwOTYwLDQwOTYxLDM3MTIxLDM3MTIyLDQwOTYyLDQwOTYzLDM3NTEwLDQwOTY0LDM2ODY3LDM2ODY4LDMzNDM0LDMzNDM3LDM0ODUwLDM0ODUyLDM0ODU1LDM0ODU2LDM3Mzc3LDM3Mzc4LDM3Mzc5LDM3MzgwLDM3MzgxLDM3MzgyLDM3MzgzLDM3Mzg0LDM3Mzg1LDM3Mzg2LDM3Mzk2LDQxNDgzLDQxNDg0LDQxNDg2LDQxNDg3LDQxNDg4LDQxNDkyLDQxNDkzLDQxNDk1LDQxNzI4LDQxNzI5LDQxNzMwLDQxOTg1LDQxOTg2LDQxOTg3LDQxOTg4LDQxOTg5LDQxOTkwLDQxOTkxLDQxOTkyLDQxOTkzLDQxOTk0LDQxOTk1LDQxOTk2LDQyMDE2LDAsMiw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwyMCwyMiwyMywyNCwyNSwyNiwyNywyOCwzMDtGRTM2RkQ0MzU0NEI0ODUyODY3OEVERkZGOTk0MkMwRiI+IDx4YXBNTTpEZXJpdmVkRnJvbSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3hwYWNrZXQgZW5kPSJ3Ij8+/+IPJElDQ19QUk9GSUxFAAEBAAAPFGFwcGwCAAAAbW50clJHQiBYWVogB9oAAQAEAA8AMwADYWNzcEFQUEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPbWAAEAAAAA0y1hcHBsWM2pk1LRLUWykThyCK1QdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOclhZWgAAASwAAAAUZ1hZWgAAAUAAAAAUYlhZWgAAAVQAAAAUd3RwdAAAAWgAAAAUY2hhZAAAAXwAAAAsclRSQwAAAagAAAAOZ1RSQwAAAbgAAAAOYlRSQwAAAcgAAAAOdmNndAAAAdgAAAYSbmRpbgAAB+wAAAY+ZGVzYwAADiwAAABfZHNjbQAADowAAAA8bW1vZAAADsgAAAAoY3BydAAADvAAAAAkWFlaIAAAAAAAAHeaAABAmQAAAxlYWVogAAAAAAAAWO0AAKuMAAAXrVhZWiAAAAAAAAAmTgAAE/UAALheWFlaIAAAAAAAAPNSAAEAAAABFs9zZjMyAAAAAAABDEIAAAXe///zJgAAB5IAAP2R///7ov///aMAAAPcAADAbGN1cnYAAAAAAAAAAQHNAABjdXJ2AAAAAAAAAAEBzQAAY3VydgAAAAAAAAABAc0AAHZjZ3QAAAAAAAAAAAADAQAAAgAAAUUCyAQ5BZsHIQi8ClsL+w2ZDzsQ6hKXFEYWAhe5GVYa4xxxHfkfdSDyImcj0iU1JpAn5ikyKnkrvi0BLkEvgTC9MfkzNTRrNaE21DgHOTg6ZjuTPLw95D8MQDNBV0J5Q5pEuEXWRvJIDEklSjpL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",
"type": "image/jpeg",
"title": "$:/themes/tiddlywiki/starlight/ltbg.jpg"
},
"$:/themes/tiddlywiki/starlight/styles.tid": {
"title": "$:/themes/tiddlywiki/starlight/styles.tid",
"tags": "[[$:/tags/stylesheet]]",
"text": "\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline\n\n/*\nPlaceholder for a more thorough refinement of Snow White\n*/\n\n@font-face {\n font-family: \"Arvo\";\n font-style: normal;\n font-weight: 400;\n src: local(\"Arvo\"), url(<<datauri \"$:/themes/tiddlywiki/starlight/arvo.woff\">>) format(\"woff\");\n}\n\nhtml body {\n\tfont-family: \"Arvo\", \"Times\";\n background: url(<<datauri \"$:/themes/tiddlywiki/starlight/ltbg.jpg\">>);\n}\n\n.tw-page-controls svg {\n <<filter \"drop-shadow(1px 1px 2px rgba(255,255,255,0.9))\">>\n}\n"
},
"$:/themes/tiddlywiki/starlight/themetweaks": {
"title": "$:/themes/tiddlywiki/starlight/themetweaks",
"tags": "$:/tags/ControlPanel/Appearance",
"caption": "Star Tweaks",
"text": "Demo of a control panel tab dynamically loaded with a theme.\n"
}
}
}
{
"tiddlers": {
"$:/themes/tiddlywiki/vanilla/themetweaks": {
"title": "$:/themes/tiddlywiki/vanilla/themetweaks",
"tags": "$:/tags/ControlPanel/Appearance",
"caption": "Theme Tweaks",
"text": "You can tweak certain aspects of the ''Vanilla'' theme.\n\n//Take care to preserve any backticks (`) in the settings//\n\n! Settings\n\n* Font family: <$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/settings\" index=\"fontfamily\" default=\"\" tag=\"input\"/>\n\n! Sizes\n\n* Font size: <$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics\" index=\"fontsize\" default=\"\" tag=\"input\"/>\n* Line height: <$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics\" index=\"lineheight\" default=\"\" tag=\"input\"/>\n* Story left position //(the distance between the left of the screen and the left margin of the story river or tiddler area)//: <$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics\" index=\"storyleft\" default=\"\" tag=\"input\"/>\n* Story top position //(the distance between the top of the screen ad the top margin of the story river or tiddler area)//: <$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics\" index=\"storytop\" default=\"\" tag=\"input\"/>\n* Story right //(the distance between the left side of the screen and the left margin of the sidebar area)//: <$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics\" index=\"storyright\" default=\"\" tag=\"input\"/>\n* Story width //(the width of the story river or tiddler area)//: <$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics\" index=\"storywidth\" default=\"\" tag=\"input\"/>\n* Tiddler width //(the width of individual tiddlers -- used for zoomin storyview)//: <$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics\" index=\"tiddlerwidth\" default=\"\" tag=\"input\"/>\n\n"
},
"$:/themes/tiddlywiki/vanilla/base": {
"title": "$:/themes/tiddlywiki/vanilla/base",
"tags": "[[$:/tags/stylesheet]]",
"text": "\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline\n/*\n** Start with the normalize CSS reset, and then belay some of its effects\n*/\n\n{{$:/themes/tiddlywiki/vanilla/reset}}\n\n*, input[type=\"search\"] {\n\tbox-sizing: border-box;\n\t-moz-box-sizing: border-box;\n\t-webkit-box-sizing: border-box;\n}\n\n/*\n** Basic element styles\n*/\n\nhtml {\n\tfont-family: {{$:/themes/tiddlywiki/vanilla/settings##fontfamily}};\n}\n\nbody.tw-body {\n\tfont-size: {{$:/themes/tiddlywiki/vanilla/metrics##fontsize}};\n\tline-height: {{$:/themes/tiddlywiki/vanilla/metrics##lineheight}};\n\tcolor: <<colour foreground>>;\n\tbackground-color: <<colour page-background>>;\n\tword-wrap: break-word;\n}\n\nh1, h2, h3, h4, h5, h6 {\n\tline-height: 1em;\n\tfont-weight: 300;\n}\n\npre {\n\tdisplay: block;\n\tpadding: 14px;\n\tmargin: 0 0 14px;\n\tword-break: normal;\n\tword-wrap: break-word;\n\twhite-space: pre;\n\twhite-space: pre-wrap;\n\tbackground-color: <<colour pre-background>>;\n\tborder: 1px solid <<colour pre-border>>;\n\tpadding: 0 3px 2px;\n\t<<border-radius 3px>>\n}\n\ncode {\n\tcolor: <<colour code-foreground>>;\n\tbackground-color: <<colour code-background>>;\n\tborder: 1px solid <<colour code-border>>;\n white-space: pre-wrap;\n\tpadding: 0 3px 2px;\n\t<<border-radius 3px>>\n}\n\nblockquote {\n\tborder-left: 5px solid <<colour blockquote-bar>>;\n\tmargin-left: 25px;\n\tpadding-left: 10px;\n}\n\ndl dt {\n\tfont-weight: bold;\n\tmargin-top: 6px;\n}\n\n/*\nMarkdown likes putting code elements inside pre elements\n*/\npre > code {\n\tpadding: 0;\n\tborder: none;\n\tbackground-color: inherit;\n\tcolor: inherit;\n}\n\ntable {\n\tborder: 1px solid <<colour table-border>>;\n\twidth: auto;\n\tmax-width: 100%;\n\tcaption-side: bottom;\n}\n\ntable th, table td {\n\tpadding: 0 7px 0 7px;\n\tborder-top: 1px solid <<colour table-border>>;\n\tborder-left: 1px solid <<colour table-border>>;\n}\n\ntable thead tr td, table th {\n\tbackground-color: <<colour table-header-background>>;\n\tfont-weight: bold;\n}\n\ntable tfoot tr td {\n\tbackground-color: <<colour table-footer-background>>;\n}\n\n.tw-tiddler-frame img, .tw-tiddler-frame svg, .tw-tiddler-frame canvas, .tw-tiddler-frame embed {\n\tmax-width: 100%;\n}\n\n.tw-tiddler-frame embed {\n\twidth: 100%;\n\theight: 600px;\n}\n\n/*\n** Links\n*/\n\na.tw-tiddlylink {\n\ttext-decoration: none;\n\tfont-weight: normal;\n\tcolor: <<colour tiddler-link-foreground>>;\n\t-webkit-user-select: inherit; /* Otherwise the draggable attribute makes links impossible to select */\n}\n\n.tw-sidebar-lists a.tw-tiddlylink {\n\tcolor: <<colour sidebar-tiddler-link-foreground>>;\n}\n\n.tw-sidebar-lists a.tw-tiddlylink:hover {\n\tcolor: <<colour sidebar-tiddler-link-foreground-hover>>;\n}\n\na.tw-tiddlylink:hover {\n\ttext-decoration: underline;\n}\n\na.tw-tiddlylink-resolves {\n}\n\na.tw-tiddlylink-shadow {\n\tfont-weight: bold;\n}\n\na.tw-tiddlylink-shadow.tw-tiddlylink-resolves {\n\tfont-weight: normal;\n}\n\na.tw-tiddlylink-missing {\n\tfont-style: italic;\n}\n\na.tw-tiddlylink-external {\n\ttext-decoration: underline;\n\tcolor: <<colour external-link-foreground>>;\n\tbackground-color: <<colour external-link-background>>;\n}\n\na.tw-tiddlylink-external:visited {\n\tcolor: <<colour external-link-foreground-visited>>;\n\tbackground-color: <<colour external-link-background-visited>>;\n}\n\na.tw-tiddlylink-external:hover {\n\tcolor: <<colour external-link-foreground-hover>>;\n\tbackground-color: <<colour external-link-background-hover>>;\n}\n\n/*\n** Drag and drop styles\n*/\n\n.tw-tiddler-dragger {\n\tposition: relative;\n\tz-index: -10000;\n}\n\n.tw-tiddler-dragger-inner {\n\tposition: absolute;\n\tdisplay: inline-block;\n\tpadding: 8px 20px;\n\tfont-size: 16.9px;\n\tfont-weight: bold;\n\tline-height: 20px;\n\tcolor: <<colour dragger-foreground>>;\n\ttext-shadow: 0 1px 0 rgba(0, 0, 0, 1);\n\twhite-space: nowrap;\n\tvertical-align: baseline;\n\tbackground-color: <<colour dragger-background>>;\n\t<<border-radius 20px>>\n}\n\n.tw-tiddler-dragger-cover {\n\tposition: absolute;\n\tbackground-color: <<colour page-background>>;\n}\n\n.tw-dropzone {\n\tposition: relative;\n}\n\n.tw-dropzone.tw-dragover:before {\n\tz-index: 10000;\n\tdisplay: block;\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\tright: 0;\n\tbackground: <<colour dropzone-background>>;\n\ttext-align: center;\n\tcontent: \"Drop here\";\n}\n\n/*\n** Buttons\n*/\n\n.btn-invisible {\n\tpadding: 0;\n\tmargin: 0;\n\tbackground: none;\n\tborder: none;\n}\n\n.btn-icon svg {\n\theight: 1em;\n\twidth: 1em;\n\tfill: <<colour muted-foreground>>;\n}\n\n.btn-big-green {\n\tpadding: 8px;\n\tmargin: 4px 8px 4px 8px;\n\tbackground: <<colour download-background>>;\n\tcolor: <<colour download-foreground>>;\n\tfill: <<colour download-foreground>>;\n\tborder: none;\n\tfont-size: 1.2em;\n\tline-height: 1.4em;\n}\n\n.btn-mini {\n\tcolor: <<colour sidebar-muted-foreground>>;\n}\n\n.btn-mini:hover {\n\tcolor: <<colour sidebar-muted-foreground-hover>>;\n}\n\n.tw-image-button {\n\theight: 1em;\n}\n\n/*\n** Tags and missing tiddlers\n*/\n\n.tw-tag-list-item {\n\tposition: relative;\n\tdisplay: inline-block;\n\tmargin-right: 7px;\n}\n\n.tw-tags-wrapper {\n\tmargin: 4px 0 14px 0;\n}\n\n.tw-missing-tiddler-label {\n\tfont-style: italic;\n\tfont-weight: normal;\n\tdisplay: inline-block;\n\tfont-size: 11.844px;\n\tline-height: 14px;\n\twhite-space: nowrap;\n\tvertical-align: baseline;\n}\n\n.tw-tag-label {\n\tdisplay: inline-block;\n\tpadding: 2px 9px;\n\tfont-size: 0.9em;\n\tfont-weight: 300;\n\tline-height: 1.2em;\n\tcolor: <<colour tag-foreground>>;\n\twhite-space: nowrap;\n\tvertical-align: baseline;\n\tbackground-color: <<colour tag-background>>;\n\t<<border-radius 8px>>\n}\n\n.tw-untagged-label {\n\tbackground-color: <<colour untagged-background>>;\n}\n\n.tw-tag-label svg {\n\theight: 1em;\n\twidth: 1em;\n\tfill: <<colour tag-foreground>>;\n}\n\n/*\n** Page layout\n*/\n\n.sidebar-header {\n\tcolor: <<colour sidebar-foreground>>;\n}\n\n.sidebar-header .title a.tw-tiddlylink-resolves {\n\tfont-weight: 300;\n}\n\n.sidebar-header .tw-sidebar-lists p {\n\tmargin-top: 3px;\n\tmargin-bottom: 3px;\n}\n\n.sidebar-header .tw-missing-tiddler-label {\n\tcolor: <<colour sidebar-foreground>>;\n}\n\n.tw-search a svg {\n\theight: 0.75em;\n}\n\n.tw-search-results {\n\tpadding-top: 14px;\n}\n\n.tw-page-controls {\n\tmargin-top: 14px;\n}\n\n.tw-page-controls a.tw-tiddlylink:hover {\n\ttext-decoration: none;\n}\n\n.tw-page-controls svg {\n\theight: 1.75em;\n\tmin-width: 1px;\n\tpadding-right: 0.5em;\n\tfill: <<colour sidebar-controls-foreground>>;\n}\n\n.tw-page-controls button:hover svg, .tw-page-controls a:hover svg {\n\tfill: <<colour sidebar-controls-foreground-hover>>;\n}\n\n.tw-menu-list-item {\n\twhite-space: nowrap;\n}\n\n.tw-menu-list-count {\n\tfont-weight: bold;\n}\n\n.tw-open-tiddler-list {\n\t<<transform-origin \"0% 0%\">>\n}\n\n.tw-menu-list-subitem {\n\tpadding-left: 7px;\n}\n\n.story-river {\n\tposition: relative;\n}\n\n.tw-story-spacer {\n\tposition: absolute;\n\tmin-height: 100%;\n}\n\n@media (max-width: {{$:/themes/tiddlywiki/vanilla/metrics##storywidth}}) {\n\t.sidebar-header {\n\t\tpadding: 14px;\n\t}\n\n\t.story-river {\n\t\tposition: relative;\n\t\tpadding: 0;\n\t}\n}\n\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics##storywidth}}) {\n\t.sidebar-header {\n\t\tposition: fixed;\n\t\ttop: {{$:/themes/tiddlywiki/vanilla/metrics##storytop}};\n\t\tleft: {{$:/themes/tiddlywiki/vanilla/metrics##storyright}};\n\t\tbottom: 0;\n\t\tright: 0;\n\t\toverflow-y: auto;\n\t\toverflow-x: auto;\n\t\t-webkit-overflow-scrolling: touch;\n\t\tmargin: 0 0 0 -42px;\n\t\tpadding: 70px 0 28px 42px;\n\t}\n\n\t.story-river {\n\t\tposition: relative;\n\t\tleft: {{$:/themes/tiddlywiki/vanilla/metrics##storyleft}};\n\t\ttop: {{$:/themes/tiddlywiki/vanilla/metrics##storytop}};\n\t\twidth: {{$:/themes/tiddlywiki/vanilla/metrics##storywidth}};\n\t\tpadding: 56px 42px 42px 42px;\n\t}\n}\n\n@media print {\n\t.sidebar-header {\n\t\tdisplay: none;\n\t}\n\n\t.story-river {\n\t\tmargin-left: 14px;\n\t}\n}\n\n/*\n** Tiddler styles\n*/\n\n.tw-tiddler-frame {\n\tmargin-bottom: 28px;\n\tbackground-color: <<colour tiddler-background>>;\n\tborder: 1px solid <<colour tiddler-border>>;\n}\n\n.tw-tiddler-info {\n\tpadding: 14px 42px 14px 42px;\n\tbackground-color: <<colour tiddler-info-background>>;\n\tborder-top: 1px solid <<colour tiddler-info-border>>;\n\tborder-bottom: 1px solid <<colour tiddler-info-border>>;\n}\n\n.tw-tiddler-info .tw-tab-buttons button.tw-tab-selected {\n\tbackground-color: <<colour tiddler-info-tab-background>>;\n\tborder-bottom: 1px solid <<colour tiddler-info-tab-background>>;\n}\n\n.tw-view-field-table {\n\twidth: 100%;\n}\n\n.tw-view-field-name {\n\twidth: 1%; /* Makes this column be as narrow as possible */\n\ttext-align: right;\n\tfont-style: italic;\n}\n\n.tw-view-field-value {\n}\n\n@media (max-width: 770px) {\n\t.tw-tiddler-frame {\n\t\tpadding: 14px 14px 14px 14px;\n\t}\n\n\t.tw-tiddler-info {\n\t\tmargin: 0 -14px 0 -14px;\n\t}\n}\n\n@media (min-width: 770px) {\n\t.tw-tiddler-frame {\n\t\tpadding: 28px 42px 42px 42px;\n\t\twidth: {{$:/themes/tiddlywiki/vanilla/metrics##tiddlerwidth}};\n\t}\n\n\t.tw-tiddler-info {\n\t\tmargin: 0 -42px 0 -42px;\n\t}\n}\n\n.titlebar {\n\tfont-weight: 300;\n\tfont-size: 2.35em;\n\tline-height: 1.2em;\n\tcolor: <<colour tiddler-title-foreground>>;\n}\n\n.titlebar img {\n\theight: 1em;\n}\n\n.tw-subtitle {\n\tfont-size: 0.9em;\n\tcolor: <<colour tiddler-subtitle-foreground>>;\n\tfont-weight: 300;\n}\n\n.tw-tiddler-missing .title {\n font-style: italic;\n font-weight: normal;\n}\n\n.tw-tiddler-frame .tw-tiddler-controls {\n\tfloat: right;\n}\n\n.tw-tiddler-controls button {\n\tmargin: 0 0 0 5px;\n\tvertical-align: baseline;\n}\n\n.tw-tiddler-controls button svg {\n\theight: 0.75em;\n\tfill: <<colour tiddler-controls-foreground>>;\n}\n\n.tw-tiddler-controls button.tw-selected svg {\n\tfill: <<colour tiddler-controls-foreground-selected>>;\n}\n\n.tw-tiddler-controls button.btn-invisible:hover svg {\n\tfill: <<colour tiddler-controls-foreground-hover>>;\n}\n\n@media print {\n\t.tw-tiddler-controls {\n\t\tdisplay: none;\n\t}\n}\n\n.tw-tiddler-help { /* Help prompts within tiddler template */\n\tcolor: <<colour muted-foreground>>;\n\tmargin-top: 14px;\n}\n\n.tw-tiddler-help a.tw-tiddlylink {\n\tcolor: <<colour very-muted-foreground>>;\n}\n\n.tw-tiddler-frame input.tw-edit-texteditor, .tw-tiddler-frame textarea.tw-edit-texteditor {\n\twidth: 100%;\n\tpadding: 3px 3px 3px 3px;\n\tborder: 1px solid <<colour tiddler-editor-border>>;\n\tline-height: 1.3em;\n\t-webkit-appearance: none;\n\tmargin: 4px 0 4px 0;\n}\n\n.tw-tiddler-frame input.tw-edit-texteditor {\n\tbackground-color: <<colour tiddler-editor-background>>;\n}\n\ncanvas.tw-edit-bitmapeditor {\n\tborder: 6px solid <<colour tiddler-editor-border-image>>;\n\tcursor: crosshair;\n\t-moz-user-select: none;\n\t-webkit-user-select: none;\n\t-ms-user-select: none;\n\tmargin-top: 6px;\n\tmargin-bottom: 6px;\n}\n\n.tw-edit-bitmapeditor-width {\n\tdisplay: block;\n}\n\n.tw-edit-bitmapeditor-height {\n\tdisplay: block;\n}\n\n/*\n** Toolbar buttons\n*/\n\n.tw-page-controls svg.tw-image-new-button {\n fill: <<colour toolbar-new-button>>;\n}\n\n.tw-page-controls svg.tw-image-options-button {\n fill: <<colour toolbar-options-button>>;\n}\n\n.tw-page-controls svg.tw-image-save-button {\n fill: <<colour toolbar-save-button>>;\n}\n\n.tw-tiddler-controls button svg.tw-image-info-button {\n fill: <<colour toolbar-info-button>>;\n}\n\n.tw-tiddler-controls button svg.tw-image-edit-button {\n fill: <<colour toolbar-edit-button>>;\n}\n\n.tw-tiddler-controls button svg.tw-image-close-button {\n fill: <<colour toolbar-close-button>>;\n}\n\n.tw-tiddler-controls button svg.tw-image-delete-button {\n fill: <<colour toolbar-delete-button>>;\n}\n\n.tw-tiddler-controls button svg.tw-image-cancel-button {\n fill: <<colour toolbar-cancel-button>>;\n}\n\n.tw-tiddler-controls button svg.tw-image-done-button {\n fill: <<colour toolbar-done-button>>;\n}\n\n/*\n** Tiddler edit mode\n*/\n\n.tw-tiddler-edit-frame em.tw-edit {\n\tcolor: <<colour muted-foreground>>;\n\tfont-style: normal;\n}\n\n.tw-edit-type-dropdown a.tw-tiddlylink-missing {\n\tfont-style: normal;\n}\n\n.tw-edit-tags {\n\tborder: 1px solid <<colour tiddler-editor-border>>;\n\tpadding: 4px 8px 4px 8px;\n}\n\n.tw-edit-add-tag {\n\tdisplay: inline-block;\n}\n\n.tw-edit-add-tag .tw-add-tag-name input {\n\twidth: 50%;\n}\n\n.tw-edit-tags .tw-tag-label {\n\tdisplay: inline-block;\n}\n\n.tw-edit-tags-list {\n\tmargin: 14px 0 14px 0;\n}\n\n.tw-tag-editor-label {\n\tdisplay: inline-block;\n\tmargin-right: 7px;\n}\n\n.tw-remove-tag-button {\n\tpadding-left: 4px;\n}\n\n.tw-tiddler-preview {\n\toverflow: auto;\n}\n\n.tw-tiddler-preview-preview {\n\tfloat: right;\n\twidth: 48%;\n\tborder: 1px solid <<colour tiddler-editor-border>>;\n\tmargin: 4px 3px 3px 3px;\n\tpadding: 3px 3px 3px 3px;\n}\n\n.tw-tiddler-preview-edit {\n\twidth: 48%;\n}\n\n.tw-edit-fields {\n\twidth: 100%;\n}\n\n\n.tw-edit-fields table, .tw-edit-fields tr, .tw-edit-fields td {\n\tborder: none;\n\tpadding: 4px;\n}\n\n.tw-edit-fields > tbody > .tw-edit-field:nth-child(odd) {\n\tbackground-color: <<colour tiddler-editor-fields-odd>>;\n}\n\n.tw-edit-fields > tbody > .tw-edit-field:nth-child(even) {\n\tbackground-color: <<colour tiddler-editor-fields-even>>;\n}\n\n.tw-edit-field-name {\n\ttext-align: right;\n}\n\n.tw-edit-field-value input {\n\twidth: 100%;\n}\n\n.tw-edit-field-remove {\n}\n\n.tw-edit-field-remove svg {\n\theight: 1em;\n\twidth: 1em;\n\tfill: <<colour muted-foreground>>;\n\tvertical-align: middle;\n}\n\n.tw-edit-field-add-name {\n\tdisplay: inline-block;\n\twidth: 15%;\n}\n\n.tw-edit-field-add-button {\n\tdisplay: inline-block;\n\twidth: 10%;\n}\n\n/*\n** Dropdowns\n*/\n\n.btn-dropdown svg {\n\theight: 1em;\n\twidth: 1em;\n\tfill: <<colour muted-foreground>>;\n}\n\n.tw-drop-down {\n\tmin-width: 280px;\n\tborder: 1px solid <<colour dropdown-border>>;\n\tbackground-color: <<colour dropdown-background>>;\n\tpadding: 7px 0 7px 0;\n\tmargin: 4px 0 0 0;\n\twhite-space: nowrap;\n}\n\n.tw-drop-down p {\n\tpadding: 0 14px 0 14px;\n}\n\n.tw-drop-down a {\n\tdisplay: block;\n\tpadding: 0 14px 0 14px;\n}\n\n.tw-drop-down a:hover {\n\tcolor: <<colour tiddler-link-background>>;\n\tbackground-color: <<colour tiddler-link-foreground>>;\n\ttext-decoration: none;\n}\n\n.tw-drop-down .tw-tab-buttons button {\n\tbackground-color: <<colour dropdown-tab-background>>;\n}\n\n.tw-drop-down .tw-tab-buttons button.tw-tab-selected {\n\tbackground-color: <<colour dropdown-tab-background-selected>>;\n\tborder-bottom: 1px solid <<colour dropdown-tab-background-selected>>;\n}\n\n.tw-drop-down .tw-tab-contents a {\n\tpadding: 0 0.5em 0 0.5em;\n}\n\n.tw-block-dropdown-wrapper {\n\tposition: relative;\n}\n\n.tw-block-dropdown {\n\tposition: absolute;\n\tmin-width: 280px;\n\tborder: 1px solid <<colour dropdown-border>>;\n\tbackground-color: <<colour dropdown-background>>;\n\tpadding: 0 0 0 0;\n\tmargin: 4px 0 0 0;\n\twhite-space: nowrap;\n\tz-index: 1000;\n}\n\n.tw-block-dropdown a {\n\tdisplay: block;\n\tpadding: 4px 14px 4px 14px;\n}\n\n.tw-block-dropdown a:hover {\n\tcolor: <<colour tiddler-link-background>>;\n\tbackground-color: <<colour tiddler-link-foreground>>;\n\ttext-decoration: none;\n}\n\n/*\n** Modals\n*/\n\n.modal-backdrop {\n\tposition: fixed;\n\ttop: 0;\n\tright: 0;\n\tbottom: 0;\n\tleft: 0;\n\tz-index: 1000;\n\tbackground-color: <<colour modal-backdrop>>;\n}\n\n.modal {\n\tz-index: 1100;\n\tbackground-color: <<colour modal-background>>;\n\tborder: 1px solid <<colour modal-border>>;\n}\n\n@media (max-width: 55em) {\n\t.modal {\n\t\tposition: fixed;\n\t\ttop: 1em;\n\t\tleft: 1em;\n\t\tright: 1em;\n\t}\n\n\t.modal-body {\n\t\toverflow-y: auto;\n\t\tmax-height: 400px;\n\t}\n}\n\n@media (min-width: 55em) {\n\t.modal {\n\t\tposition: fixed;\n\t\ttop: 50%;\n\t\tleft: 50%;\n\t\twidth: 560px;\n\t\tmargin: -180px 0 0 -280px;\n\t}\n}\n\n.modal-header {\n\tpadding: 9px 15px;\n\tborder-bottom: 1px solid <<colour modal-header-border>>;\n}\n\n.modal-header h3 {\n\tmargin: 0;\n\tline-height: 30px;\n}\n\n.modal-body {\n\tpadding: 15px;\n}\n\n.modal-footer {\n\tpadding: 14px 15px 15px;\n\tmargin-bottom: 0;\n\ttext-align: right;\n\tbackground-color: <<colour modal-footer-background>>;\n\tborder-top: 1px solid <<colour modal-footer-border>>;\n}\n\n/*\n** Notifications\n*/\n\n.tw-notification {\n\tposition: fixed;\n\ttop: 14px;\n\tright: 14px;\n\tz-index: 1000;\n\tmax-width: 280px;\n\tpadding: 0 14px 0 14px;\n\tbackground-color: <<colour notification-background>>;\n\tborder: 1px solid <<colour notification-border>>;\n}\n\n/*\n** Tabs\n*/\n\n.tw-tab-set {\n}\n\n.tw-tab-buttons {\n\tfont-size: 0.85em;\n\tline-height: 100%;\n\tpadding-top: 1em;\n\tmargin-bottom: -1px;\n}\n\n.tw-tab-buttons button.tw-tab-selected {\n\tcolor: <<colour tab-foreground-selected>>;\n\tbackground-color: <<colour tab-background-selected>>;\n\tborder-left: 1px solid <<colour tab-border-selected>>;\n\tborder-top: 1px solid <<colour tab-border-selected>>;\n\tborder-right: 1px solid <<colour tab-border-selected>>;\n}\n\n.tw-tab-buttons button {\n\tcolor: <<colour tab-foreground>>;\n\tmargin-left: 2px;\n\tmargin-right: 2px;\n\tfont-weight: 300;\n\tborder: none;\n\tbackground: inherit;\n\tbackground-color: <<colour tab-background>>;\n\tborder-left: 1px solid <<colour tab-border>>;\n\tborder-top: 1px solid <<colour tab-border>>;\n\tborder-right: 1px solid <<colour tab-border>>;\n}\n\n.tw-tab-divider {\n\tborder-top: 1px solid <<colour tab-divider>>;\n}\n\n.tw-tab-content {\n\tpadding-top: 14px;\n}\n\n.tw-sidebar-lists .tw-tab-buttons button.tw-tab-selected {\n\tbackground-color: <<colour sidebar-tab-background-selected>>;\n\tcolor: <<colour sidebar-tab-foreground-selected>>;\n\tborder-left: 1px solid <<colour sidebar-tab-border-selected>>;\n\tborder-top: 1px solid <<colour sidebar-tab-border-selected>>;\n\tborder-right: 1px solid <<colour sidebar-tab-border-selected>>;\n}\n\n.tw-sidebar-lists .tw-tab-buttons button {\n\tbackground-color: <<colour sidebar-tab-background>>;\n\tcolor: <<colour sidebar-tab-foreground>>;\n\tborder-left: 1px solid <<colour sidebar-tab-border>>;\n\tborder-top: 1px solid <<colour sidebar-tab-border>>;\n\tborder-right: 1px solid <<colour sidebar-tab-border>>;\n}\n\n.tw-sidebar-lists .tw-tab-divider {\n\tborder-top: 1px solid <<colour sidebar-tab-divider>>;\n}\n\n.tw-more-sidebar {\n\twhite-space: nowrap;\n}\n\n@media (min-width: 770px) {\n\t.tw-more-sidebar {\n\t\tmargin-left: -14px;\n\t}\n}\n\n.tw-more-sidebar .tw-tab-buttons {\n\tdisplay: inline-block;\n\tvertical-align: top;\n\ttext-align: right;\n\tpadding-top: 0;\n\tpadding-left: 0;\n}\n\n.tw-more-sidebar .tw-tab-buttons button {\n\tdisplay: block;\n\twidth: 100%;\n\ttext-align: right;\n}\n\n.tw-sidebar-lists .tw-more-sidebar .tw-tab-divider {\n\tdisplay: none;\n}\n\n.tw-more-sidebar .tw-tab-content {\n\tdisplay: inline-block;\n\tvertical-align: top;\n\tpadding-top: 0;\n\tpadding-left: 14px;\n}\n\n.tw-more-sidebar .tw-tab-buttons button {\n\tbackground-color: <<colour sidebar-tab-background>>;\n\tborder-top: none;\n\tborder-left: none;\n\tborder-bottom: none;\n\tborder-right: 1px solid #ccc;\n}\n\n.tw-more-sidebar .tw-tab-buttons button.tw-tab-selected {\n\tbackground-color: <<colour sidebar-tab-background-selected>>;\n\tborder: none;\n}\n\n/*\n** Alerts\n*/\n\n.tw-alerts {\n\tposition: fixed;\n\ttop: 0;\n\tleft: 0;\n\tmax-width: 500px;\n\tz-index: 20000;\n}\n\n.tw-alert {\n\tposition: relative;\n\tmargin: 28px;\n\tpadding: 14px 14px 14px 14px;\n\tborder: 2px solid <<colour alert-border>>;\n\tbackground-color: <<colour alert-background>>;\n}\n\n.tw-alert-toolbar {\n\tposition: absolute;\n\ttop: 14px;\n\tright: 14px;\n}\n\n.tw-alert-toolbar svg {\n\tfill: <<colour alert-muted-foreground>>;\n}\n\n.tw-alert-subtitle {\n\tcolor: <<colour alert-muted-foreground>>;\n\tfont-weight: bold;\n}\n\n.tw-alert-highlight {\n\tcolor: <<colour alert-highlight>>;\t\n}\n\n.tw-static-alert {\n\tposition: relative;\n}\n\n.tw-static-alert-inner {\n\tpadding: 0 2px 2px 42px;\n\tcolor: <<colour static-alert-foreground>>;\n\tposition: absolute;\n}\n\n/*\n** Grids\n*/\n\n.tw-grid-frame td {\n\twidth: 1em;\n\theight: 1em;\n}\n\n/*\n** Control panel\n*/\n\n.tw-control-panel td {\n\tpadding: 4px;\n}\n\n.tw-control-panel table, .tw-control-panel table input, .tw-control-panel table textarea {\n\twidth: 100%;\n}\n\n/*\n** Message boxes\n*/\n\n.tw-message-box {\n\tborder: 1px solid <<colour message-border>>;\n\tbackground: <<colour message-background>>;\n\tpadding: 0px 21px 0px 21px;\n\tmargin: 0 -21px 0 -21px;\n\tfont-size: 12px;\n\tline-height: 18px;\n\tcolor: <<colour message-foreground>>;\n}\n\n.tw-message-box img {\n\tfloat: right;\n\twidth: 150px;\n\tmargin: 0px 0px 12px 12px;\n}\n\n/*\n** Chooser\n*/\n\n.tw-chooser {\n\tborder: 1px solid <<colour table-border>>;\n}\n\n.tw-chooser-item {\n\tborder: 8px;\n}\n\n.tw-chooser-item a.tw-tiddlylink {\n\tdisplay: block;\n\ttext-decotoration: none;\n\tcolor: <<colour tiddler-link-foreground>>;\n\tbackground-color: <<colour tiddler-link-background>>;\n\tmargin: 4px;\n}\n\n.tw-chooser-item a.tw-tiddlylink:hover {\n\ttext-decoration: none;\n\tcolor: <<colour tiddler-link-background>>;\n\tbackground-color: <<colour tiddler-link-foreground>>;\n}\n\n/*\n** Palette swatches\n*/\n\n.tw-swatches-horiz {\n}\n\n.tw-swatches-horiz .tw-swatch {\n\tdisplay: inline-block;\n}\n\n.tw-swatch {\n\twidth: 2em;\n\theight: 2em;\n\tmargin: 4px;\n\tborder: 1px solid #000;\n}\n"
},
"$:/themes/tiddlywiki/vanilla/metrics": {
"title": "$:/themes/tiddlywiki/vanilla/metrics",
"type": "application/x-tiddler-dictionary",
"text": "fontsize: `14px`\nlineheight: `20px`\nstoryleft: `0px`\nstorytop: `0px`\nstoryright: `770px`\nstorywidth: `770px`\ntiddlerwidth: `686px`\n"
},
"$:/themes/tiddlywiki/vanilla/reset": {
"title": "$:/themes/tiddlywiki/vanilla/reset",
"type": "text/plain",
"text": "/*! normalize.css v2.1.0 | MIT License | git.io/normalize */\n\n/* ==========================================================================\n HTML5 display definitions\n ========================================================================== */\n\n/**\n * Correct `block` display not defined in IE 8/9.\n */\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nnav,\nsection,\nsummary {\n display: block;\n}\n\n/**\n * Correct `inline-block` display not defined in IE 8/9.\n */\n\naudio,\ncanvas,\nvideo {\n display: inline-block;\n}\n\n/**\n * Prevent modern browsers from displaying `audio` without controls.\n * Remove excess height in iOS 5 devices.\n */\n\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n\n/**\n * Address styling not present in IE 8/9.\n */\n\n[hidden] {\n display: none;\n}\n\n/* ==========================================================================\n Base\n ========================================================================== */\n\n/**\n * 1. Set default font family to sans-serif.\n * 2. Prevent iOS text size adjust after orientation change, without disabling\n * user zoom.\n */\n\nhtml {\n font-family: sans-serif; /* 1 */\n -webkit-text-size-adjust: 100%; /* 2 */\n -ms-text-size-adjust: 100%; /* 2 */\n}\n\n/**\n * Remove default margin.\n */\n\nbody {\n margin: 0;\n}\n\n/* ==========================================================================\n Links\n ========================================================================== */\n\n/**\n * Address `outline` inconsistency between Chrome and other browsers.\n */\n\na:focus {\n outline: thin dotted;\n}\n\n/**\n * Improve readability when focused and also mouse hovered in all browsers.\n */\n\na:active,\na:hover {\n outline: 0;\n}\n\n/* ==========================================================================\n Typography\n ========================================================================== */\n\n/**\n * Address variable `h1` font-size and margin within `section` and `article`\n * contexts in Firefox 4+, Safari 5, and Chrome.\n */\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n/**\n * Address styling not present in IE 8/9, Safari 5, and Chrome.\n */\n\nabbr[title] {\n border-bottom: 1px dotted;\n}\n\n/**\n * Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome.\n */\n\nb,\nstrong {\n font-weight: bold;\n}\n\n/**\n * Address styling not present in Safari 5 and Chrome.\n */\n\ndfn {\n font-style: italic;\n}\n\n/**\n * Address differences between Firefox and other browsers.\n */\n\nhr {\n -moz-box-sizing: content-box;\n box-sizing: content-box;\n height: 0;\n}\n\n/**\n * Address styling not present in IE 8/9.\n */\n\nmark {\n background: #ff0;\n color: #000;\n}\n\n/**\n * Correct font family set oddly in Safari 5 and Chrome.\n */\n\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, serif;\n font-size: 1em;\n}\n\n/**\n * Improve readability of pre-formatted text in all browsers.\n */\n\npre {\n white-space: pre-wrap;\n}\n\n/**\n * Set consistent quote types.\n */\n\nq {\n quotes: \"\\201C\" \"\\201D\" \"\\2018\" \"\\2019\";\n}\n\n/**\n * Address inconsistent and variable font size in all browsers.\n */\n\nsmall {\n font-size: 80%;\n}\n\n/**\n * Prevent `sub` and `sup` affecting `line-height` in all browsers.\n */\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsup {\n top: -0.5em;\n}\n\nsub {\n bottom: -0.25em;\n}\n\n/* ==========================================================================\n Embedded content\n ========================================================================== */\n\n/**\n * Remove border when inside `a` element in IE 8/9.\n */\n\nimg {\n border: 0;\n}\n\n/**\n * Correct overflow displayed oddly in IE 9.\n */\n\nsvg:not(:root) {\n overflow: hidden;\n}\n\n/* ==========================================================================\n Figures\n ========================================================================== */\n\n/**\n * Address margin not present in IE 8/9 and Safari 5.\n */\n\nfigure {\n margin: 0;\n}\n\n/* ==========================================================================\n Forms\n ========================================================================== */\n\n/**\n * Define consistent border, margin, and padding.\n */\n\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\n\n/**\n * 1. Correct `color` not being inherited in IE 8/9.\n * 2. Remove padding so people aren't caught out if they zero out fieldsets.\n */\n\nlegend {\n border: 0; /* 1 */\n padding: 0; /* 2 */\n}\n\n/**\n * 1. Correct font family not being inherited in all browsers.\n * 2. Correct font size not being inherited in all browsers.\n * 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome.\n */\n\nbutton,\ninput,\nselect,\ntextarea {\n font-family: inherit; /* 1 */\n font-size: 100%; /* 2 */\n margin: 0; /* 3 */\n}\n\n/**\n * Address Firefox 4+ setting `line-height` on `input` using `!important` in\n * the UA stylesheet.\n */\n\nbutton,\ninput {\n line-height: normal;\n}\n\n/**\n * Address inconsistent `text-transform` inheritance for `button` and `select`.\n * All other form control elements do not inherit `text-transform` values.\n * Correct `button` style inheritance in Chrome, Safari 5+, and IE 8+.\n * Correct `select` style inheritance in Firefox 4+ and Opera.\n */\n\nbutton,\nselect {\n text-transform: none;\n}\n\n/**\n * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\n * and `video` controls.\n * 2. Correct inability to style clickable `input` types in iOS.\n * 3. Improve usability and consistency of cursor style between image-type\n * `input` and others.\n */\n\nbutton,\nhtml input[type=\"button\"], /* 1 */\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button; /* 2 */\n cursor: pointer; /* 3 */\n}\n\n/**\n * Re-set default cursor for disabled elements.\n */\n\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\n\n/**\n * 1. Address box sizing set to `content-box` in IE 8/9.\n * 2. Remove excess padding in IE 8/9.\n */\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box; /* 1 */\n padding: 0; /* 2 */\n}\n\n/**\n * 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome.\n * 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome\n * (include `-moz` to future-proof).\n */\n\ninput[type=\"search\"] {\n -webkit-appearance: textfield; /* 1 */\n -moz-box-sizing: content-box;\n -webkit-box-sizing: content-box; /* 2 */\n box-sizing: content-box;\n}\n\n/**\n * Remove inner padding and search cancel button in Safari 5 and Chrome\n * on OS X.\n */\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n/**\n * Remove inner padding and border in Firefox 4+.\n */\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\n\n/**\n * 1. Remove default vertical scrollbar in IE 8/9.\n * 2. Improve readability and alignment in all browsers.\n */\n\ntextarea {\n overflow: auto; /* 1 */\n vertical-align: top; /* 2 */\n}\n\n/* ==========================================================================\n Tables\n ========================================================================== */\n\n/**\n * Remove most spacing between table cells.\n */\n\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\n"
},
"$:/themes/tiddlywiki/vanilla/settings": {
"title": "$:/themes/tiddlywiki/vanilla/settings",
"type": "application/x-tiddler-dictionary",
"text": "fontfamily: `\"Helvetica Neue\", Helvetica, Arial, \"Lucida Grande\", sans-serif`\n"
}
}
}
@@text-align:justify;
<div class="deuxcolonnes">
Contre l'assimilation par [[Ruse]] des fonctions à des adaptations, Nagel cite l'exemple des gènes qui produisent la couleur jaune de certains oignons. Il semble que cette couleur n'ait aucune valeur adaptative; pourtant, les gènes en question ont bien la fonction correspondante. L'objection n'est pas fatale, mais elle suggère que "making adaptedness the criterion of a trait being a function, is not always congruous with biological practice."
</div>
@@
Contre l'assimilation par [[Ruse]] des fonctions à des adaptations, [[Nagel|Nagel, E. (1977): “Functional Explanations in Biology”]] argumente que cela fait dépendre la fonction de l'environnement. Il prend l'exemple des ours polaires, dont l'épaisse fourrure a pour fonction de les protéger du froid, et a donc une valeur adaptative. Mais en cas de réchauffement climatique ou de migration, la fourrure perd sa valeur adaptative, mais elle ne perd pas sa fonction.
!!Description
L’excès de cholestérol forme des plaques d’athérome sur la paroi interne des artères (athérosclérose). Ces plaques entraînent l’occlusion des artères non seulement par leur seule présence mais aussi et surtout par les conséquences de cette présence (recouvrement par d’autres molécules et cellules, durcissement, formation de caillots).
Les deux conditions de la définition de Wright étant satisfaites, on devrait pouvoir dire que les dépôts de cholestérol ont pour fonction de boucher les artères, ce qui n’est pas le cas.
!!Solution
La même que pour le [[(Contre-exemple) Le tuyau de gaz toxique qui fuit]], hormis l’interprétation en termes de types puisque le fait de boucher les artères est bel et bien une conséquence typique de l’excès de cholestérol.
Conformément à la définition de Canfield, on devrait pouvoir dire que la fonction du nez est de servir de support pour les lunettes. Or, cette attribution est absurde.
!!Description
Imaginons qu’une fuite dans un tuyau de gaz toxique provoque la mort de ceux qui essaient de la réparer. La fuite est une conséquence de l’existence d’un trou dans le tuyau, et elle explique pourquoi le trou continue à être présent.
Selon la [[définition de Wright|Wright, 1973: définition]], il faudrait dire que la fonction du trou est de laisser s’échapper le gaz toxique. Pourtant, cette attribution fonctionnelle est contre-intuitive. On ne peut pas dire que le trou soit là pour laisser s’échapper le gaz, à moins qu’il n’ait été percé intentionnellement dans ce but.
!!Auteurs
Ce contre-exemple a été formulé par Christopher Boorse ([[1976|Boorse, C. (1976): “Wright on Functions“]], p. 72) et repris par d’autres (Kitcher, [[1993|Kitcher, P. (1993): “Function and Design”]], p. 264).
Bedau ([[1991|Bedau (1991): “Can Biological Teleology be Naturalized?”]], p. 648) propose un exemple analogue avec un objet naturel non vivant : un bâton dans un cours d’eau.
!!Solutions et réponses
Il y a au moins trois manières de lever ces contre-exemples.
#La première, consiste à limiter les attributions fonctionnelles aux items qui sont le fruit d’une ''histoire sélective''.
#:C’est la solution qu’adoptent les partisans d’une solution basée sur la sélection naturelle.
#La seconde consiste à rappeler que chez Wright l’explication de la présence d’un item doit être interprétée à la lumière du ''type'' auquel cet item appartient.
#:Cette solution est notamment avancée par H.M. Zellner (2001, p. 506) : “At least in the actual world there is no reason why the fact that the gas typically asphyxiated scientists would cause the presence of the gas in individual instances. The gas is present in a given case because it asphyxiated this scientist, not because the presence of the gas typically asphyxiates scientists.”
#:@@color:red;Cette solution ne semble cependant pas être applicable à des contre-exemples comme celui du [[cholestérol|(Contre-exemple) Le cholestérol a pour fonction de boucher les artères]].@@
#La troisième consiste à limiter la définition étiologique aux conséquences d’un item dont on peut dire qu’elles sont ''bénéfiques ou avantageuses''
#: ce qui n’est évidemment pas le cas des exemples précédents, à moins de considérer que la fuite de gaz est un acte de malveillance qui, d’une manière ou d’une autre, bénéficie à celui qui l’a intentionnellement perpétré.
#:Cette troisième solution est privilégiée par les partisans d’une approche valorative des fonctions, comme celle de [[Bedau (1992)|Bedau (1992): “Where's the Good in Teleology?”]].
<image-left>
<span title="Canard de Vaucanson (source: Wikipedia)"><a href="https://fr.wikipedia.org/wiki/Canard_dig%C3%A9rateur" target="_blanck">{{$:/_images/Canard de Vaucanson.png}}</a></span>
</image-left>
<br><br>
@@text-align:center;
!''{{$:/SiteTitle}}''
!!{{$:/SiteSubtitle}}
carnet de notes de<br>Alberto Molina
@@
<br>
<$list filter="[is[current]tagging[]sort[title]] [list{!!title}]" itemClass="tw-menu-list-item" emptyMessage=""/>
Type the text for the tiddler '_E(1)'
The main customization I made on this ~TiddlyWiki is the way contents are displayed. For each kind of tiddler contents (authors, books, papers, quotes, notes, etc.), there is a different ViewTemplate based on the value of the field "catégorie". These templates allow me to structurate their contents and to show additional information.
For example, tiddlers for authors show a list of their publications. And tiddlers for books and papers have tabs for the abstract and for the abstract of chapters or sections of the text.
Moreover, at the bottom of each tiddler, there are counters for the number of notes, quotes, etc., related with the tiddler. And next to the counters, the button [▼] opens a window with tabs showing more relevant information.
This ~TiddlyWiki is a work in progress. If you have questions, please go to http://groups.google.com/group/TiddlyWiki.
Una de las modificaciones principales de este ~TiddlyWiki respecto de la versión original tiene que ver con la visualización de contenidos. Cada tipo de contenido (autores, libros, articulos, citas, apuntes, etc.) cuenta con una plantilla de visualización<<ref "nota">> diferente basada en el valor del campo "catégorie" del tiddler correspondiente. Estas plantillas permiten estructurar la información visible del tiddler y la completan con información adicional.
Por ejemplo, los tiddlers dedicados a autores muestran una lista de sus publicaciones. Y los tiddlers dedicados a libros o artículos tienen pestañas para el resumen general y para cada uno de sus capítulos o secciones.
Además, abajo a la derecha de cada tiddler aparece el número de notas referidas a ese tiddler, el número de citas, etc., así como un botón [▼] que despliega una serie de nuevas pestañas con información pertinente.
Este ~TiddlyWiki seguirá evolucionando, tanto en su contenido como en su forma. Si tienen alguna pregunta, acudan al foro http://groups.google.com/group/TiddlyWiki.
---
<<footnote "nota" "~ViewTemplate">>
Les fonctions sont intimement liées à certains types de fins, et les items auxquels on attribue des fonctions sont des moyens de ces fins.
What, then, makes something an end with which a function can be associated? […] Doing y—or that y si done—is an end with which x’s function can be associated if (but not only if) one or more of the following conditions is satisfied:
:(1) x was designed (produced, etc.) to be or to serve as a means of doing y
:(2) x is used as a means of doing y
:(3) y is in fact done by means of x and either (1) or (2) or y’s being done confers a good.
An examination of difficulties in three standard accounts of functions leads to the suggestion that sentences of the form "the function of x is to do y" are used to make a variety of different claims, all of which involve a means-end relationship and the idea of design, or use, or benefit. The analysis proposed enables us to see what is right and also wrong with accounts that analyze the meaning of function statements in terms of good consequences, goals, and etiological explanation. It also enables us to show that function sentences can be used in providing various types of explanations, including, in certain cases, noncausal explanations of the presence of the item with the function.
«Let me begin by suggesting that ''the essential feature of a functional relationship is that of a [[means-end relation|Moyens-Fin]]''. For a structure x to have a function y is, essentially, for x to do y in a system S and for y to lead to the fact that the system is able to output a value O. The output value O will either be a goal-state of S or causally contribute to S's attaining a goal-state.»
Ce qui intéresse l’auteur est l’attribution fonctionnelle. Jusqu’ici, la manière intuitive de justifier cette attribution, sur la base d’exemples et de contre-exemples, n’est pas satisfaisante.
Il propose d’analyser les fonctions en termes de [[Relation moyens–fin]] dans le cadre d’un système //Goal-Directed//.
Les ailes de poulet ne servent plus à voler. Elles ont perdu leur fonction.
Les ailes de pingouin servent à nager.
\define find_original()
<$list filter="[field:alias/$(the_alias)$/(i)sort[title]limit[1]]"><$link>{{$(the_alias)$||unwikified}}</$link></$list>
\end
<$set name="the_alias" value={{!!title}}><<find_original>></$set>
[[Neander (1991)|Neander, K. (1991): "Functions as Selected Effects"]] cite trois objections standard à la conception étiologique:
#''Elle est historiquement fausse'': lorsque [[Harvey]] a découvert la fonction du coeur, en 1616, il ne connaissait pas la [[théorie darwinienne|Darwinisme]] et ne pouvait donc pas penser que la circulation du sang était la raison pour laquelle les coeurs avaient été favorisés par la sélection naturelle. (Wright, 1976:97; Boorse, 1976:74; Nagel, 1977:284)
#''Elle est analytiquement arrogante'': définir les fonctions en termes de sélection naturelle semble impliquer qu'il est logiquement impossible que les processus et structures organiques aient acquis leurs fonctions par la volonté d'un créateur divin. (Wright, 1976:96-97; Boorse, 1976:74; [[Bigelow & Pargetter, 1987:188|Bigelow & Pargetter (1987): “Functions“]])
#''Elle est contreintuitive'': dire qu'un organisme qui n'a pas d'histoire n'a pas de fonctions est fortement contreintuitif, car on peut penser à un accident cosmique créant un nouvel organisme (Boorse, 1976: 74) ou que le monde à été créé il y a seulement cinq minutes ([[Bigelow & Pargetter, 1987: 188|Bigelow & Pargetter (1987): “Functions“]]). Dans ces deux situations, nous serions sans doute capables d'attribuer des fonctions à des organismes complexes malgré leur manque d'une histoire et le caractère accidentel de leur genèse.
!Author
''"An object is an artifact if and only if it has an author."''
<<<
* concrete particular object (Eiffel Tower)
* type
* instance of a type
* abstract object
<<<
''"The instances of a type artifact are artifacts in a narrow sense, that is, concrete physical particulars."''
!Dependence Condition (Hilpinen 1992, 65):
''(DEP) The existence and some of the properties of an artifact depend on an author's intention to make an object of certain kind.''
<<<
"The success of an author's productive activity depends on the degree of fit or agreement between the intended and the actual character of the object. The actual character of an artifact is of course always much richer than the intended character: the artifact fits an author's intentions if and only if the former includes the latter."
"According to condition (DEP), a person is an author of an artifact only if the existence and the character of the artifact depend on that person's productive intentions."
"An object that has been made for a purpose F may be termed ‘an F-object’. The properties of an F-object can be divided into two classes: (i) those relevant to the functioning of the object as an F-object, and (ii) the properties irrelevant to the purpose F. The former properties may be termed the significant properties of the object (or its F-significant properties); they may also be called the “good-making properties” of the object."
<<<
!!Functional components
Many artifacts are characterized by means of their intended function and use, and some parts of complex artifacts are artifacts (we might call them “sub-artifacts”) which have been designed to serve a certain function in a given principal artifact. Simons and Dement (1996, 264) have called such parts the functional components of an artifact. The functional components of an artifact need not coincide with what Simons and Dement have called its assembly components, that is, the parts from which the artifact has been assembled. For example, the braking system can be regarded as a functional component of a car, but it is not an assembly component; it consists of several assembly components located in different parts of the car (op. cit., 263).
!Evaluation of artifacts
An author's productive activity may be evaluated on the basis of the relationships among the intended character of an artifact, its actual character, and a purpose F (Hilpinen 1995, 140):
''(E1) The degree of fit or agreement between the intended character and the actual character of an object,''
''(E2) The degree of fit between the intended character of an object and the purpose F, in other words, the suitability of an object of the intended kind for the purpose F,''
and
''(E3) The degree of fit between the actual character of an object and the purpose F, that is, the suitability of an artifact for F.''
<<<
(E1) determines whether an artifact is a successful embodiment of the author's intentions, (E2) determines whether the character that the author intends to give to an artifact is suitable for the purpose F, and (E3) tells whether the author has succeeded in making an object that is in fact suitable for the purpose F. The study of artifacts (qua artifacts) is intrinsically evaluative, since viewing an object as an artifact means viewing it in the light of intentions and purposes.
The purpose F on which the evaluation of an artifact and its design are based need not be the purpose that the author had in mind; it can be any purpose for which the artifact might be used. The direction of evaluation may be reversed so that the maker or owner of an artifact tries to find new uses for it.
<<<
It seems plausible to regard an object as a proper artifact only if its maker's productive activity has some degree of success, for example, satisfies some sortal predicate included in his productive intention. This condition may be termed the Success Condition:
''(SUC) An object is an artifact made by an author only if it satisfies some sortal description included in the author's productive intention.''
>If an agent's activity fails in every respect, the agent does not accomplish anything, but produces only “scrap”. (Cf. Hilpinen 1993, 160; Bloom 1996, 10; Thomasson 2003, 598-99.) Even if the object does not fit the author's productive intention, but he accepts it as a satisfactory realization of his intention, it may be regarded as a proper artifact. This is expressed by the following Acceptance Condition:
''(ACC) An object is an artifact made by an author only if the author accepts it as satisfying some sortal description included in his productive intention.''
>If an artifact has several authors, the Acceptance Condition should hold for at least one of them. According to the Acceptance Condition, an object is an artifact only if its maker regards it as such, that is, accepts it as a product of his intentional activity.
{{!!title||$:/_ViewTemplate/body/article}}
{{.article||ViewTemplateIndex}}
The ultimate source of explanation in biology is the principle of natural selection. Natural selection means differential reproduction of genes and gene combinations. It is a mechanistic process which accounts for the existence in living organisms of end-directed structures and processes. It is argued that teleological explanations in biology are not only acceptable but indeed indispensable. There are at least three categories of biological phenomena where teleological explanations are appropriate.
« A feature of a system will be teleological in the sense of internal teleology if the feature has ''utility for the system in which it exists'' and if such utility ''explains the presence of the feature'' in the systems. Utility in living organisms is defined in reference to ''survival or reproduction''. A structure or process of an organism is teleological if it contributes to the reproductive efficiency of the organism itself, and if such contribution accounts for the existence of the stucture or process. Man-made tools or mechanisms are teleological with external teleology if they have utility, i.e., if they have been designed to serve a specified purpose, which therefore explains their existence and properties. If the criterion of utility cannot be applied, a system is not teleological. »
#Crear un tiddler con el contenido de la pestaña. Por ejemplo [[$:/aa/core/ui/TiddlerInfo/Web]]
#Ponerle la etiqueta [[$:/tags/TiddlerInfo]] (cualquier tiddler con esa etiqueta aparecerá como pestaña en {{$:/core/images/info-button}}).
#Añadirle el campo `caption` con el nombre que queramos que aparezca.
#Para cambiar el orden de aparición de las pestañas, hay que editar el campo `list`de [[$:/tags/TiddlerInfo]]
!Dimensions
!! [[Temporelle|DimensionTemporelle]] : {{*T(0)||tag}}
Aucune restriction temporelle.
!! [[Valorative|DimensionValorative]] : {{*V(0)||tag}}
Aucune référence à une quelconque valeur.
!! [[Systémique|DimensionSystémique]] : {{*S(1)||tag}}
Sa définition l’indique explicitement. <<slider "…" "systémique" "{{Beckner, 1969: 151'||cit}}">>
!! [[Contextuelle|DimensionContextuelle]]: {{*C(0)||tag}}
Dans sa définition <<slider "p. 156" "156" "{{Beckner, 1969: 156||cit}}">> Beckner fait référence à l’environnement du système contenant, mais il ne semble pas que la fonction d’un item soit relative à une variation de l’environnement.
!Variables
!![[Portée|Portée (variable)]] : {{_type||tag}}
<<slider "Voir citation." "portée" "{{Beckner, 1969: 153||cit}}">>
!![[Nature|Nature (variable)]] : {{_disposition||tag}}~
L’auteur définit les fonctions en termes d’activités et pas de capacités, mais sa définition est apparemment compatible avec une interprétation plus large, d’autant plus que la fonction d’un item est relative au type auquel il appartient.
!![[Caractère|Caractère (variable)]] : {{_relative||tag}}
L’attribution fonctionnelle est relative à un schème conceptuel.
!![[Explication|Explication (variable)]] : {{_E(0)||tag}}
L’auteur ne parle pas d’explications téléologiques mais de descriptions. Et sa justification du langage téléologique n’implique là non plus aucune vertu explicative aux ascriptions téléologiques et fonctionnelles mais une vertu descriptive en termes de généralité et de complément d’information.
!![[Artefacts|Artefacts (variable)]] : {{_A(1)||tag}}
L’auteur l’indique explicitement, page 160: "Note that this analysis applies to machines and other artifacts; there is no need to regard the ascription of functions to them as in any way derivative or parasitic."
#"The function of the heart is to pump blood." (Call this a functional ascription.)
#"The goal of the rat is to reach food at the end of the maze." (Goal-ascription.)
#"Jones intends to retire early by working hard." (Intention-ascription.)
Functional ascriptions describe ''the role played by a part or process in the activities of a larger or more inclusive system''. Standard examples are the ascription of roles to the organs, tissues, cellular parts, biochemical processes, and so on, in the growth, regulation, maintenance, and reproduction of organisms. Functions are also ascribed to the parts of artifacts, especially such objects as machines, pieces of furniture, and so forth. In these cases we antecedently identify a system //S// and activity //Ф// such that the whole of //S// can be said to do //Ф//; and functions are then assigned to the parts //P// of //S// or to the activities //Ф'// of //P//, only if //Ф'// or //P// do contribute to the //Ф//ing of //S//. ''In general, function is always function //in a whole// system.''
We ascribe goals to persons whenever we ascribe intentions; indeed, anything describable as an intention is also describable as a goal. But not all goals are intentions—or so people commonly argue. [...]
These examples may seem dubious. I think that the concepts of "goal" and "intention," as we have them, always leave room for doubt; there are no completely convincing arguments that establish the possibility of goals without intentions.
We sometimes say that something has a function, but is not performing it (or is performing it poorly). For example, if my heart stops pumping blood it does not thereby lose its function. So it is not strictly true that if //Ф// is a function of //P//, then //P// contributes to //Ф//. The following, however, is true: if the members of the class of //P//'s never //Ф//, then //Ф// is not a function of //P//.
# "A function of the heart is to pump blood."
# "A function of the heart is to produce heart sounds."
# "A function of the earth is to intercept passing meteorites."
La première attribution est vraie. La seconde est fausse. Mais la troisième, d’après Beckner, n’est ni vraie ni fausse mais simplement inappropriée.
Granted that the functional ascription is appropriate, then "A function of //Ф’// in //S// is //Ф’’// is true if and only if there are regularly occurring states of //S// and its environment in which //Ф’// occurrs and in which the occurrence of //Ф’// causes an increase in the probability of the occurrence of //Ф//. Under these circumstances we may say that //Ф’// "contributes to" the performance of //Ф//.
We are now in a position to state rather briefly the major theses of Part II.
#First, functional ascriptions explicitly state that a part //P,,j,,// or activity //Ф’,,i,,// contributes to an activity //Ф// in or of system //S//.
#Second, functional ascription presupposes that //S// possesses a net-like organization such that
## the strands of the net are identified by the same general conceptual scheme which is employed in the ascription itself;
## a significant number of critical strands in the net definitionally contribute to one or more activities //Ф// of the whole system //S//; and
## the contribution ascribed is a contribution to activity //Ф// of the whole system //S//, where //Ф// is an activity to which a significant number of strands in the net definitionally contribute.
My conviction that teleological language cannot be translated into nonteleological language is based on the following hunch : if A is a teleological sentence, and if B translates A, B would also be teleological. I would tend to regard preservation of teleological character under translation as a condition of adequacy for any account of the translatability relation. The teleological character of a sentence is not a matter of vocabulary alone; it is a matter of the logical structure of the conceptual scheme employed in the sentence.
Teleological character is conferred on a sentence by the manner in which it fits into a conceptual scheme designed for the description of certain classes of systems possessing net-like organization. The elimination of teleological language thus involves a conceptual shift, and involves a different method of classifying the elements of a system.
the development of conceptual schemes which render functional ascriptions appropriate is seen to be just a special case of a general scientific procedure: the designing of languages aimed at bringing to light those causal relations which are most interesting to us.
L’avantage principal d’une description téléologique (par exemple une attribution fonctionnelle, ou une attribution de but) est sa plus grande généralité. Elle omet de nombreux détails et, par là-même, est applicable à un plus grand nombre de cas.
Par ailleurs, elle apporte une information supplémentaire. Par exemple, un même comportement peut être interprété comme un comportement de fuite ou un rituel d’accouplement. La simple description (non-téléologique) des faits ne permet pas de distinguer entre les deux.
![[I. Introduction|Beckner, M. (1969): introduction]]
L’auteur distingue clairement le fait d’être dirigé vers un but (Goal-Directed) et le fait d’avoir une fonction, car on peut facilement trouver des exemples de l’un sans l’autre, et vice-versa.
Il défend l’idée qu’un trait puisse avoir une fonction sans être en mesure de l’accomplir, comme un cœur incapable de pomper le sang <<slider "p. 153" "153" "{{Beckner, 1969: 153||cit}}">>.
![[II. Functional Ascriptions|Beckner, M. (1969): section 2]]
Beckner considère deux questions (pp. 154-155):
# Si l’on suppose qu’une ascription fonctionnelle est appropriée, quelle est la relation entre le trait fonctionnel et sa fonction? <<slider "Réponse" "réponse" "Une réponse consisterait à dire que le trait fonctionnel est nécessaire pour la réalisation de la fonction, mais cette réponse pose deux difficultés. La première est que d’autres traits peuvent être nécessaires mais non fonctionnels, comme le bruit des battements du cœur. La seconde est que le trait fonctionnel (le cœur) n’est pas forcément nécessaire, car l’activité fonctionnelle (pomper le sang) peut être réalisée par d’autres moyens (une machine).">>
# Comment distingue-t-on les ascriptions appropriées de celles qui ne le sont pas?
Pour répondre à cette seconde question, Beckner fait intervenir les notions de:
* ''organisation réticulaire'' d’un système,
* système contributeur (//contributory system//).
''L’organisation réticulaire'' (//net-like//) fait référence au fait que les parties sont interconnectées à la manière d’un réseau de relations causales (fig.2, p.158):
{{Beckner2.png}}
Cependant, n’importe quel système relativement complexe possède une organisation réticulaire, y compris des systèmes auxquels nous n’attribuerions pas de fonction, comme le système solaire.
Par ailleurs, un ''système contributeur'' est n’importe quel système dont les activités contribuent aux activités d’un autre système. Là encore, on peut trouver ce type de contribution dans le système solaire. Mais tandis que le cœur, en tant que tel, contribue //par définition// à pomper le sang, la Terre ne contribue à intercepter les météorites que par accident, car la Terre, en tant que telle, ne contribue par définition à rien de tel.
L’analyse des parties d’un système, qui donne lieu à l’analyse des contributions entre ces parties, dépend d’un schème conceptuel.
Il conclut en disant:
{{Beckner, 1969: 159-160||cit}}
! [[III. Eliminability|Beckner, M. (1969): section 3]]
Le langage téléologique n’est pas traduisible en termes non-téléologiques car la traduction elle-même devrait être téléologique; c’est une question de structure logique du schème conceptuel employé dans la phrase. <<slider "voir citation" "traduction" "{{Beckner, 1969: 162||cit}}">>
Cependant, n’importe quel phénomène pouvant être décrit en termes téléologiques peut également être décrit en termes non téléologiques. En ce sens, la téléologie est effectivement éliminable. Il suffit pour cela de changer de schème conceptuel (p. 162).
Les descriptions téléologique et non-téléologique d’un même phénomène ne sont pas intertraduisibles car elles ne disent pas la même chose (163). En effet, une description téléologique en dit à la fois beaucoup moins (car elle omet de nombreux détails) et beaucoup plus (car elle est fait certaines présuppositions et est applicable à de nombreux cas). Autrement dit, la dimension téléologique apporte une plus grande généralité à la description et elle apporte une information additionnelle que la simple description (non-téléologique) des faits n’apporte pas, car un même phénomène peut en effet répondre à différentes fonctions ou différents buts.
L’auteur défend une position où la [[Relation partie-tout]] joue un rôle central. Pour lui, la fonction d’une partie ou d’un processus est le rôle qu’il joue dans un système contenant. <<slider "p. 151" "151" "{{Beckner, 1969: 151'||cit}}">>
Par ailleurs, il considère que le langage téléologique est éliminable mais parfaitement légitime et intraduisible dans un langage non téléologique. C’est une question de schème conceptuel. Cependant, tout phénomène pouvant être décrit en termes téléologiques peut également être décrit en termes non téléologiques, bien que les deux descriptions ne disent pas la même chose (161).
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
L'un des papes de la VieArtificielle. Auteur d'articles sur la [[Téléologie]] biologique et sur la [[définition de la vie|VieDéfinition]].
Le fait qu'il revendique la dimension normative de la téléologie le rend particulièrement intéressant et sympathique pour moi. Ce qui est plus contestable, c'est le fait qu'il défend une analyse causale de type étiologique. Ce qui est le plus intéressant, et ce qui me permet de le discuter, c'est le fait que cette dimension normative n'est attribuable qu'à certaines choses: //« the kind of things that can be beneficiaries »//. Mais on ne sait pas comment il justifie cette distinction entre types de choses auxquelles des valeurs sont attribuables. Le fait est que sa distinction correspond à celle entre êtres vivants et choses inanimées.
La question que je pose est donc la suivante: qu'est-ce qui fait qu'une chose soit 'beneficiary' ou pas ? Et la distinction entre les unes et les autres est-elle objective ou subjective ? Is this 'kind of things' a natural kind ? En fait on rejoint là la question de la démarcation vivant/non-vivant. Les vivants sont des agents, et on peut donc leur attribuer des valeurs, une normativité; mais cela n'est pas compatible avec une description physico-chimique du monde. On peut expliquer par la physique tous les phénomènes de la vie, mais pas les valeurs. Il s'agit donc de deux points de vue opposés et complémentaires sur une même chose. Selon le point de vue de la physique, les êtres vivants ne sont que des machines mues par des causes. Selon l'autre point de vue, ce sont des agents mus par des fins. Les deux points de vue rendent compte des mêmes phénomènes, des mêmes activités, mais avec une intelligibilité différente. On ne peut pas réduire ni expliquer l'un par l'autre.
Ce que je dois contester dans son argument c'est la nécessité d'une analyse causale, et le recours à la sélection naturelle.
L'auteur défend une conception générale de la téléologie de type étiologique mais centrée sur les valeurs. Sa posture est proche de celle de [[Ayala]] et de [[Woodfield]]. Il commence par présenter et critiquer trois conceptions alternatives:
# The [[mental approach|ApprocheMentaliste]] = as made by a rational mind.
# The systems approach = Goal-Directed systems ([[Nagel]], pex).
# The [[Etiological approach|ApprocheÉtiologique]].
Il propose ensuite une distinction entre trois degrés (grades) de téléologie centrée sur les valeur:
* G1 : A Bs in order to C iff A Bs and A's Bing contributes to Cing and Cing is good for A.
** G1': A Bs in order to C iff A Bs because A's Bing contributes to Cing and Cing is good.
* G2: A Bs in order to C iff [ A Bs because A's Bing contributes to Cing ] and Cing is good.
* G3: A Bs in order to C iff [ A Bs because A's Bing contributes to Cing and Cing is good ].
Le premier degré, le plus faible, correspond à la téléologie qu'on peut attribuer à des objets inanimés. Le second correspond à la biologie. Le troisième est mental. L'auteur considère que le caractère problématique de la téléologie en biologie réside dans le fait qu'on n'a pas su distinguer entre le second et le troisième degré.
Étant donné la diversité des formes de vie possibles dans l'univers et dans les laboratoires, Bedau propose une définition fonctionnelle, laquelle permet de s'abstraire des détails chimiques inhérents aux systèmes vivants.
Il s'appuie sur un consensus plus ou moins établi dans la communauté //[[protocell]]// qui cherche à recréer la vie en laboratoire. Les trois fonctions critiques d'une cellule minimale sont:
# ''Identité:'' le système maintient son identité tout au long de son existence en concentrant ses composants et en protégeant leurs opérations des parasites moléculaires et autres poisons.
# ''Energie libre:'' le système extrait de l'énergie de son environnement pour se maintenir, se développer, se réparer, etc.
# ''Support informationnel héritable:'' tous ces processus sont sous le contrôle d'un support informationnel héritable qui peut être modifié au cours de la reproduction.
Ces trois fonctions sont autonomes, au sens où elles sont créées et soutenues par les opérations du système au lieu d'un mécanisme externe. Le système est responsable de son propre fonctionnement.
Ces trois fonctionnalités opérationnelles sont incarnées dans trois systèmes chimiques couplés: un ''métabolisme'', des ''gènes'', et un ''conteneur'' qui maintient le tout ensemble.
Pourquoi ces trois fonctionnalités et pas d'autres? Par exemple un traitement de l'information ou une réactivité face à l'environnement. Ces autres fonctions, selon Bedau, sont dérivatives des trois mentionnées. Mais pourquoi ces trois là? La réponse de l'auteur consiste à dire qu'elles dérivent d'une conception plus fondamentale de la vie fondée sur une //évolution sans limite//. En effet, pour qu'il y ait évolution par sélection naturelle, il faut un support informationnel héritable, lesquels ont besoin pour assurer leurs fonctions de matériaux bruts et d'énergie prélevés sur l'environnement, et le tout doit être concentré spatialement et protégé des perturbations extérieures par un conteneur.
Il ne s'agit en aucune façon de définir ce que nous entendons par "vie", mais au contraire d'en comprendre de façon théorique la nature fondamentale.
Bedau reprend une liste de caractéristiques de la vie formulée par [[Mayr]] (1982) qui est représentative et fait autorité. Toute vision acceptable du vivant doit expliquer pourquoi de telles propriétés hétérogènes coexistent de manière si spécifique dans la nature. La vision de la vie comme évolution sans limites donne une explication unifiée des caractéristiques citées par [[Mayr]].
L'auteur cite ensuite quatre mystères persistants du phénomène de la vie:
* Mystère 1: Comment sont reliées les différentes formes de vie à différents niveaux de la hiérarchie biologique?
* Mystère 2: Est-ce que la distinction entre vie et non-vie est dichotomique ou continue?
* Mystère 3: Est-ce que l'essence de la vie implique la matière ou la forme?
* Mystère 4: Est-ce que la vie et l'esprit sont intrinsèquement reliés?
Selon lui, la théorie du vivant comme évolution sans limites fournirait une solution naturelle à ces mystères.
Bedau termine par dire que la frontière vie/non-vie n'est pas dichotomique et qu'il existe une grande quantité de formes intermédiaires possibles.
*G1 : //A B//s in order to //C// iff //A B//s and //A//'s //B//ing contributes to //C//ing and //C//ing is good for //A//.
**G1*: A Bs in order to C iff A Bs because A's Bing contributes to Cing and Cing is good.<br><br>
*''G2: A Bs in order to C iff [ A Bs because A's Bing contributes to Cing ] and Cing is good.'' (//Téléologie biologique//)<br><br>
*G3: A Bs in order to C iff [ A Bs because A's Bing contributes to Cing and Cing is good ].
Dans ce texte, Bedau se prononce explicitement pour une définition fonctionnelle de la vie, mais il ne mentionne pas les difficultés de définition des [[fonctions biologiques|Fonctions]].
« Il n'y a pas de définition des choses que l'esprit n'a pas créées et qu'il n'enferme pas tout entières; il n'y a pas, en un mot, de définition des choses naturelles. »
:Cité par [[Le Dantec (1896): Théorie nouvelle de la vie]], p. 6
Le problème central que posent les auteurs est celui de la causation future qu'implique, selon eux, la notion de fonction. Or, les causes finales étant inadmissibles, comment rendre compte de la notion de fonction dans un cadre scientifique? Ils critiquent trois réponses avant de proposer la leur.
''1.) La première est éliminativiste:'' on ne prend pas les fonctions au sérieux en tant que propriétés des objets biologiques.
:Ils rangent Cummins dans cette catégorie car, selon eux, ses fonctions sont relatives aux intérêts de l'observateur. Ils rejettent cette option car elle n'est pas pertinente pour les sciences biologiques.
''2.) La seconde alternative sont les théories représentationnelles, ou "//goal theories//"'', qui invoquent la représentation d'un but comme ayant une efficacité causale.
:C'est le cas des artéfacts, avec l'intention du créateur. C'est valable en biologie seulement à condition que l'on invoque Dieu, mais pas dans le cadre de la théorie de l'évolution. Cependant, même avec les artéfacts on trouve des évolutions qui ne dépendent pas d'une intention préalable. De plus, on semble tomber dans un cercle vicieux, dans la mesure où les représentations mentales que l'on invoque pour analyser les fonctions pourraient à leur tour être analysables en termes de fonctions.
''3.) La troisième alternative est la conception étiologique'', qui repose sur la sélection naturelle.
:Elle a l'avantage de donner aux fonctions biologiques un pouvoir explicatif au sens de la biologie moderne. Le problème c'est qu'elle repose sur des bases contingentes, car si la théorie de l'évolution par la sélection naturelle s'avérait fausse, alors il n'y aurait pas de fonctions biologiques. De même, si comme disait Russell, le monde avait été créé il y a cinq minutes, alors il n'y aurait pas non plus de fonctions biologiques. Il convient donc de les définir sur une base plus solide, indépendamment de la sélection naturelle, et indépendamment des intentions d'un créateur.
Les auteurs proposent une théorie "//forward-looking//" qui décrit les fonctions en termes de dispositions et de [[Fitness]]. La fitness est une propriété dispositionnelle qui survient (//supervene//) sur les traits morphologiques de l'individu (ou espèce). La raison pour laquelle, historiquement, un trait a contribué à la survie d'un individu, c'est que ce trait confère à l'individu une propension plus élevée pour survivre.
Finalement, selon Bigelow & Pargetter, une fonction c'est ce qui confère une propension pour la sélection.
{{Bigelow & Pargetter, 1987: Four features||cit}}
Un trait ou une structure a une certaine fonction lorsque ses effets lui confèrent une propension à être sélectionné, sans que cette sélection ait besoin d’être effective.
« [Some tools] may have been produced with an over-all function in mind (say, hitting nails); but the toolmaker may not have in mind any function for the components and features of the tool, which contribute to the over-all function. »
« What if the theory of evolution by natural selection were to be (or had been) false? Clearly then, on the etiological theory of biological functions, as we have specified it, there would be no biological functions. »
« For creationism, there would of course be an enormous epistemological problem of discovering what the function of biological structures were; for this would depend on discovering what the creator had in mind. »
« what confers the status of a function is not the sheer fact of survival-due-to-a-character, but rather, survival due to the propensities the character bestows upon the creature. [...] Something has a (biological) function just when it confers a survival-enhancing propensity on a creature that possesses it. »
;Four features of this propensity theory of biological functions should be made explicit.
#''First'', like the corresponding account of fitness, ''this account of functions must be relativized to an environment''. [...]
#:When we speak of the function of a character, therefore we mean that the character generates propensities that are survival-enhancing in the creature’s natural habitat. [...] In ts most obvious use, the term 'habitat' applies to the physical surroundings of a whole organism. But we can also extend its usage, and apply the term 'habitat' to the surroundings of an organ within an organism. Or to the surroundings of a cell within an organ. [...]
#''Secondly'', on the propensity theory, ''functions are truly dispositional in nature''.
#:They are specified subjunctively: they //would// give a survival-enhancing propensity to a creature in an appropriate manner, in the creature’s natural habitat. This is true even if the creature does not survive or is never in its natural habitat. [...]
#''Thirdly'', in the long run, it will be necessary to spell out the notion of a "survival-enhancing propensity" in formal terms, employing the rigors of the probability calculus. [...]
#:''We are not attempting to find and defend //the//correct propensity theory'', but only arguing that a propensity theory offers the most promising theory of functions.
#''Fourthly'', there is the question as to whether the scope of the propensity is limited to biological functions or whether it can be extended , in some sense, to artifacts.
La différence entre la [[biologie|Biologie]] et la [[physique|Physique]], c'est peut-être le fait que les phénomènes physiques s'inscrivent dans le cadre d'une nécessité qu'expriment des [[lois|LoiNaturelle]], tandis que la biologie manifeste une contingence non-aléatoire qui, au-delà du comment, pose la question du pourquoi. Il faut arriver à comprendre pourquoi nous sommes si enclins à employer le concept de [[fonction|Fonctions]] en biologie et pas en physique. Ce à quoi [[Davies|Davies, PS (2001): Norms of Nature]] ne répond pas.
!Approche descendante (top-down)
*Définir l'ensemble minimal de gènes nécessaires pour qu'une cellule vivante accomplisse, dans les conditions environnementales les plus favorables, ses fonctions de base: construction métabolique et reproduction.
*Définir un ensemble de bio-briques interchangeables permettant de construire une cellule artificielle programmée comme un circuit électronique.
*Synthétiser de nouvelles protéines, étendre l'alphabet des nucléotides, ou inventer un nouveau code génétique.
!Approche ascendante (bottom-up)
*Reconstituer les éléments complexes du vivant à partir d'éléments simples. Actuellement, les études expérimentales du passage de l'inerte au vivant se concentrent essentiellement sur deux aspects:
**la biophysique des membranes et vésicules artificielles simples
**la chimie des polymères d'[[ARN]] autoréplicants.
*On cherche à construire un système de vésicules autoreproductrices capables à la fois de faire davantage de copies des mêmes ARN (autoréplicants) et de catalyser la synthèse des membranes à partir de substrats chimiques simples.
![[Mindreaders|Bloom (2004): chap. 1]]
Pour les adultes comme pour les enfants, les objets matériels possèdent les quatre propriétés suivantes:
#''Cohésion:'' Les objets sont des masses qui se déplacent comme un tout. Pour connaître les limites d'un objet, il suffit d'en attraper un bout et de tirer. Tout ce qui vient avec appartient au même objet; pas ce qui reste sur place.
#''Solidité'': Les objets ne sont pas facilement perméables par d'autres objets. Si on touche un objet avec le doigt, celui-ci ne s'enfonce pas.
#''Continuité'': Les objets se déplacent de façon continue dans le temps et l'espace.
#''Contact'': Les objets bougent par contact. Une bille sur une table de billard ne bougera pas à moins qu'un autre objet entre en contact avec elle. Les exceptions à cette règle sont les créatures animées, comme les personnes et les chiens, et aussi certains artefacts complexes comme les robots et les voitures.
[[Paul Bloom|Bloom]] affirme que les humains sont naturellement [[dualistes|Dualisme]]. L'auteur montre que les jeunes enfants interprètent le monde comme étant composé, d'un côté, d'objets inanimés obéissant aux lois de la physique et, de l'autre, d'esprits immatériels dont ils peuvent lire les émotions et y répondre. Les adultes conservent cette conception dualiste du monde. Selon l'auteur, ces deux capacités distinctes sont le produit de la SélectionNaturelle.
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
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" xmlns="http://www.w3.org/2000/svg" width="42.000000pt" height="36.000000pt" viewBox="0 0 600.000000 518.000000" preserveAspectRatio="xMidYMid meet">
<metadata>
Created by potrace 1.11, written by Peter Selinger 2001-2013
</metadata>
<g transform="translate(0.000000,518.000000) scale(0.100000,-0.100000)" fill="#000000" stroke="none">
<path d="M2705 5173 c-361 -16 -890 -99 -1330 -209 -365 -92 -885 -254 -1105 -345 -229 -95 -297 -195 -256 -371 21 -90 95 -277 163 -413 30 -60 64 -135 76 -165 20 -56 77 -153 96 -164 16 -10 118 -197 127 -231 14 -58 65 -154 108 -202 56 -63 92 -133 111 -215 26 -118 109 -258 152 -258 23 0 111 -151 134 -230 35 -115 108 -242 147 -254 25 -8 118 -174 126 -224 16 -107 104 -264 160 -287 44 -19 175 -239 199 -337 31 -127 103 -249 161 -273 28 -12 62 -62 241 -361 114 -191 223 -364 242 -385 40 -44 90 -64 140 -54 20 3 121 49 225 101 103 52 192 94 197 94 9 0 115 -228 146 -315 10 -27 21 -53 25 -58 3 -4 19 30 35 75 15 46 30 85 32 87 2 3 18 -9 36 -26 31 -29 121 -93 131 -93 2 0 -42 96 -99 213 -56 116 -100 215 -96 219 3 4 191 95 416 203 594 285 1499 736 1725 860 232 128 498 283 506 297 20 32 -34 88 -84 88 -16 0 -21 9 -26 45 -19 125 64 354 208 574 42 63 47 67 134 105 55 24 88 44 86 51 -3 6 -156 124 -341 261 -1352 1002 -2182 1653 -2648 2076 -157 143 -121 129 -300 121z m-52 -98 c93 -25 219 -61 280 -80 l112 -35 165 -141 c430 -368 938 -766 1816 -1426 308 -231 474 -361 478 -376 8 -30 6 -401 -2 -456 l-7 -45 -560 -266 c-495 -235 -1249 -602 -1586 -771 l-117 -58 -174 197 c-779 883 -1428 1686 -1968 2437 -139 194 -450 643 -450 650 0 5 282 94 455 144 400 114 804 197 1195 246 102 12 187 23 190 24 3 0 81 -19 173 -44z m-2128 -805 c-136 -20 -219 -118 -246 -289 -21 -137 19 -316 92 -410 27 -34 23 -49 -5 -22 -37 35 -86 153 -103 249 -28 160 10 314 97 401 53 53 112 80 175 79 38 0 38 -1 -10 -8z m295 -340 c-8 -5 -26 -10 -41 -10 -38 0 -124 -47 -159 -86 -78 -90 -115 -216 -107 -374 7 -143 40 -241 119 -352 22 -31 -2 -33 -27 -3 -125 155 -156 462 -65 651 49 99 165 184 254 184 30 0 37 -3 26 -10z m279 -375 c-2 -6 -25 -16 -51 -22 -75 -19 -121 -48 -173 -105 -166 -183 -180 -547 -29 -746 27 -35 25 -54 -4 -36 -26 17 -89 141 -107 212 -49 197 -15 406 90 550 53 72 127 125 205 146 59 16 73 16 69 1z m321 -425 c0 -6 -6 -12 -12 -14 -138 -37 -196 -72 -258 -155 -89 -118 -124 -242 -118 -421 5 -133 30 -220 91 -312 21 -30 37 -61 37 -67 0 -52 -101 93 -130 187 -28 91 -42 194 -35 267 25 260 139 441 318 506 58 20 107 24 107 9z m340 -484 c0 -8 -15 -17 -37 -21 -110 -20 -235 -115 -307 -233 -63 -105 -88 -190 -93 -327 -7 -161 20 -264 93 -362 24 -32 32 -63 15 -63 -16 0 -63 64 -92 125 -62 129 -75 309 -33 460 39 146 155 309 263 373 87 51 191 77 191 48z m3933 -143 c-155 -261 -203 -465 -143 -601 12 -29 21 -54 19 -56 -2 -1 -587 -290 -1298 -641 l-1295 -638 -25 34 c-14 19 -62 71 -107 116 l-82 83 -111 -58 c-113 -59 -115 -62 -46 -77 34 -7 118 -91 152 -153 l23 -41 -156 -75 c-179 -87 -206 -92 -258 -45 -89 78 -118 227 -65 339 113 237 448 450 1574 1003 876 430 1845 891 1854 882 2 -3 -14 -35 -36 -72z m-3540 -423 c-4 -4 -34 -16 -67 -25 -141 -44 -274 -170 -346 -329 -99 -218 -84 -461 38 -629 25 -35 32 -51 24 -59 -25 -25 -98 79 -138 199 -23 68 -27 94 -27 198 0 107 3 130 31 215 17 52 48 124 69 160 54 91 163 200 243 240 82 42 150 61 168 47 7 -6 9 -13 5 -17z"/>
</g>
</svg>
iVBORw0KGgoAAAANSUhEUgAAACoAAAAqCAYAAADFw8lbAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpEQzU2QjE2OUZGMzYxMUUyQUE4REVFM0YxMzlFQUU1NiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpEQzU2QjE2QUZGMzYxMUUyQUE4REVFM0YxMzlFQUU1NiI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkRDNTZCMTY3RkYzNjExRTJBQThERUUzRjEzOUVBRTU2IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkRDNTZCMTY4RkYzNjExRTJBQThERUUzRjEzOUVBRTU2Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+xxij6wAAAvtJREFUeNrUmbtuGkEUhg8DoTAXCcmioAAkDJYoiKBLCpLQuKEIKI9g+QFchSeIq6R3eIQI0qbAlomUVCBikJAlGiREgwsugoJwyTmbIVrh3WV3uWjyS7+mmYFvz8zunnPWAiZVKBQcOCTRKXQMfYo+Rjv4lDH6Ef2AvkffoMvZbHZs5v8sJgAJ7gKdQR8ZXD5BF9HXCFzeCygCvsDhikdxFyLQ9wj8cyegCOjC4SP6HPajPPoSgUemQRHyOQ5f0CewX7XQ7xD2l2FQhHyDw1e0Gw6jIfotwt7qBuWQ39DP4LD6jT5TgrWobHd5UyStViswxraims1msFwulSKbXD8GFoUbp6p1Jv1+P4TDYXC7tz8Rw+EQSqWS2plNyG8w29qET1qQ8XgcgsEgTKdTaLfbUkTMyuv1al3sCWc5fxJR/pz8obYyEAhAIpGAbrcLtVoNUqmUtP1m1Ov1pIuk3SkWi1pTX66es/KIXmmtCIVCMJ/PpUi6XC5oNptgs9kMAS4WC+lcE+BgMNCzhJhe/QPlr0XNNw7BEWg0GjW93bTV9XrdyJIksdHrdhWSi00rKBKdTgcqlYpp0HQ6DRaL4fSC2MqMZ0EZEFcZYmR8y48EBiW2JOP5pOhKMZ70iq4Y45m56DplvHwQXcdMVuOILAeD/0SMV4uia8x4SSu6Hhmvu0XXA+PNAdF1z3gHQ3TdMF4fTQSGnEjZE+8FFQQGLRDj6jl6fah/pXzU6XSCz+fTu+Tz6jkKSPwdh7tDgEYiEanWGo1G0Gg0Nk2/WzXT5EVPTqu425XsdjtUq1Wp9tKh3JNymao9zKTzoNEM83g8EIuZzwopkv1+Xy9kXt7pWy8jL9GvlWp7ahZQcUZF3jaicluHWpzFeEuHbgKj5fG6qH2jo2mxuaUjgxWuSaaY5vGJZ/zqDqWhGqQqqAw2yc/LvtXi232rlY+CBiydkwT8bV/vS/TbCa1us+oZVTm31ET7sOoF7UD0gsnt7GODArDYn28UgA/6QeyPAAMA2DsGFat9SJQAAAAASUVORK5CYII=
«A function of X is Z" means that in some contextually definite goal-directed system S, during some contextually definite time interval t, the Z-ing of X falls within some contextually circumscribed class of functions being performed by X during t – that is, ''causal contributions to a goal G of S''.»
« Para nosotros, la última y firme realidad de las cosas es la materia —los electrones giratorios que recorren distancias estelares en la soledad de los átomos—; para los capaces de platonizar, la especie, la forma. »
« [...] una cierta enciclopedia china que se titula //Emporio celestial de conocimientos benévolos//. En sus remotas páginas está escrito que los animales se dividen en (a) pertenecientes al Emperador, (b) embalsamados, (c) amaestrados, (d) lechones, (e) sirenas, (f) fabulosos, (g) perros sueltos, (h) incluidos en esta clasificación, (i) que se agitan como locos, (j) innumerables, (k) dibujados con un pincel finísimo de pelo de camello, (l) etcétera, (m) que acaban de romper el jarrón, (n) que de lejos parecen moscas. »
« La música, los estados de felicidad, la mitología, las caras trabajadas por el tiempo, ciertos crepúsculos y ciertos lugares, quieren decirnos algo, o algo dijeron que no hubieramos debido perder, o están por decir algo; esta inminencia de una revelación, que no se produce, es, quizá, el hecho estético. »
Las invenciones de la filosofía no son menos fantásticas que las del arte: Josiah Royce, en el primer volumen de la obra //The World and the Individual// (1899), ha formulado la siguiente: "Imaginemos que una porción del suelo de Inglaterra ha sido nivelada perfectamente y que en ella traza un cartógrafo un mapa de Inglaterra. La obra es perfecta; no hay detalle del suelo de Inglaterra, por diminuto que sea, que no esté registrado en el mapa; todo tiene ahí su correspondencia. Ese mapa, en tal caso, debe contener un mapa del mapa, que debe contener un mapa del mapa del mapa, y así hasta lo infinito."
<indent>
¿Por qué nos inquieta que el mapa esté incluido en el mapa y las mil y una noches en el libro de //Las Mil y una noches//? ¿Por qué nos inquieta que don Quijote sea lector del //Quijote//, y Hamlet, espectador de //Hamlet//? Creo haber dado con la causa: tales inversiones sugieren que si los caracteres de una ficción pueden ser lectores o espectadores, nosotros, sus lectores o espectadores, podemos ser ficticios. En 1833, Carlyle observó que la historia universal es un infinito libro sagrado que todos los hombres escriben y leen y tratan de entender, y en el que también los escriben."</indent>
...En aquel Imperio, el Arte de la Geografía logró tal Perfección que el mapa de una sola Provincia ocupaba toda una Ciudad, y el mapa del Imperio, toda una provincia. Con el tiempo, esos Mapas Desmesurados no satisficieron y los Colegios de Cartógrafos levantaron un Mapa del Imperio, que tenía el tamaño del Imperio y coincidía puntualmente con él. Menos Adictas al Estudio de la Cartografía, las Generaciones Siguientes entendieron que ese dilatado Mapa era Inútil y no sin Impiedad lo entregaron a las Inclemencias del Sol y de los Inviernos. En los desiertos del Oeste perduran despedazadas Ruinas del Mapa, habitadas por Animales y por Mendigos; en todo el País no hay otra reliquia de las Disciplinas Geográphicas.
:SUÁREZ MIRANDA: //Viajes de varones prudentes//,
:Libro Cuarto, Cap. XLV, Lérida, 1658."
Dans les histoires du Far Ouest, on voit souvent des boucles de ceinturon qui arrêtent les balles. Et c'est là quelque chose de très utile. Pourtant, on ne peut pas dire que la fonction des boucles de ceinturon soit d'arrêter les balles.
Les explications téléologiques s’appliquent aux [[comportements dirigés vers un but|Goal-Directed]] qui manifestent une [[plasticité|Plasticité]], c’est-à-dire qui se caractérisent par la ''multiplicité des chaines causales'' par lesquelles le but peut être atteint, et la ''diversité des conditions'' sous lesquelles l’activité dirigée vers un but peut avoir lieu.
!!DimensionTemporelle: {{*T(0)||tag}}
Le fait qu’un système soit dirigé vers un but (ou pas) dépend seulement des lois causales qui le gouvernent. Cela ne dépend donc pas du passé ni du futur.
En revanche, la connaissance que l’on peut avoir de la plasticité du système provient de l’expérience. C’est-à-dire soit du comportement passé de ce système, soit du comportement de systèmes du même type ou analogues.
Par conséquent, en termes fonctionnels, bien que notre connaissance de la fonction dépende du passé, le fait que le système en question aie ou pas la fonction qu’on lui attribue dépend seulement des caractéristiques du système et n’est pas relatif à une histoire passée ni future.
!!DimensionValorative: {{*V(0)||tag}}
À aucun moment l’auteur ne fait référence à une quelconque valeur.
!!DimensionSystémique: {{*S(0)||tag}}
L’analyse est applicable aussi bien à un système individuel complet (un organisme) qu’à ses parties. Il s’agit d’expliquer pourquoi un système, ou l’une de ses parties, manifeste un certain type de comportement. Par exemple, pourquoi le chat gratte la porte de la cuisine.
Le but auquel il fait référence en parlant de comportement dirigé vers un but n’est donc pas nécessairement celui d’un système plus grand que celui qui réalise le comportement. Autrement dit, il n’y a pas de relation partie-tout dans l’analyse de l’auteur.
!!DimensionContextuelle: {{*C(0)||tag}}
Le comportement d’un système est dirigé vers un but s’il est plastique, c’est-à-dire si le système possède plusieurs chaînes causales conduisant au même but sous diverses conditions extérieures. Cela ne signifie pas que toutes les chaines causales conduisent au but.
Le cœur bat pour faire circuler le sang, bien que sous certaines conditions ce but ne puisse pas être atteint. Mais le fait que le but ne puisse pas être atteint sous certaines conditions n’implique pas que le comportement du système ne soit pas dirigé vers ce but.
Idem avec un missile auto-dirigé. Le fait que son comportement soit dirigé vers un but n’empêche pas que dans certaines conditions il puisse rater sa cible.
Par conséquent, l’analyse de l’auteur n’est pas relative au contexte (bien qu’elle prenne en considération le contexte).
!![[Portée (variable)]]: {{_type||tag}}
{{Braithwaite, 1946: xiv''||cit}}
Une explication téléologique consiste à établir un but à atteindre: elle décrit l’action que l’on veut expliquer comme étant dirigée vers ce but ou cette fin.
Si une explication est une réponse à une question de type "pourquoi", alors les explications téléologiques sont parfaitement acceptables.
Le problème des explications téléologique est qu’elles font référence à des événements futurs. Cependant, cela est tout à fait acceptable dans le cas des actions intentionnelles humaines.
«Now there is one type of teleological explanation in which the reference to the future presents no difficulty, namely, explanations of an intentional human action in terms of a goal to the attainment of which the action is a means. [...] Teleological explanations of intentional goal-directed activities are always understood as reducible to causal explanations with intentions as causes»
Il y a deux manières de résoudre le problème. Les deux consistent à réduire les ExplicationTéléologique de manière à en faire des ExplicationCausale ordinaires. La première consiste à dire que tout est explicable en termes d’intentions ou de quelque chose d’analogue à une intention. (pp. iv-v)
La seconde consiste à exliquer les comportements dirigés vers un but en termes [[physicochimiques|PhysicoChimie]]. (pp. v-vi)
Bien que tous les phénomènes biologiques soient effectivement déterminés par la PhysicoChimie, on peut tout de même trouver une place importante en biologie pour les ExplicationTéléologique.
«In non-intentional goal-directed action the goal-directedness consists simply in the fact that ''the causal chain in the organism goes in the direction of the goal'' […] Thus the notion of causal chain is fundamental.»
Les explications téléologiques impliquent un type particulier de chaine causale. Les comportements dirigés vers un but manifestent une persistence vers ce but sous diverses conditions.
Un système est plastique si, malgré les variations de son état initial et des conditions externes, il finit par atteindre le même état final.
Exemples de systèmes plastiques: la régulation de la température des mammifères, et le pilote automatique d’un avion.
Si l’on connait les lois causales qui déterminent l’évolution future d’un système en fonction de son état initial et des conditions environnementales, alors on peut prédire son état final. Dans ce cas, une ExplicationTéléologique est sans valeur. En revanche, si l’on ne connait pas ces lois, et si l’on infère sa plasticité par induction à partir de l’expérience ou à partir de la connaissance de systèmes de même type, alors les explications téléologiques prennent toute leur valeur.
«A teleological explanation of a particular event is intellectually valuable if it cannot be deduced from known causal laws: other things being equal, it is the more valuable the wider the variancy of conditions, and hence the greater the plasticity of the behaviour concerned. It is because we are acquainted with systems-organisms and parts of organisms which exhibit great plasticity that we make use of teleological explanations. Such an explanation may be regarded as merely another way of stating the fact of the plasticity of the goal-directed behaviour. But to state this fact is to bring the explicandum under a general category, and moreover it enables us to make predictions, with a reasonable degree of reliability, as to how the system will behave in the future. It seems ridiculous to deny the title of explanation to a statement which performs both of the functions characteristic of scientific explanations of enabling us to appreciate connexions and to predict the future.»
Les explications téléologiques des systèmes plastiques nous permettent de réaliser des prédictions fiables de leur comportement futur. Il faut donc les considérer comme des explications de plein droit.
Les explications téléologiques ne s’appliquent pas seulement à des systèmes et des comportements particuliers, mais aussi à des [[types|_type]] généraux.
Les explications téléologiques ne sont pas irréductibles à la PhysicoChimie et ne requièrent pas un concept nouveau de loi causale. Elles sont utiles lorsque l’on ne connait pas l’ensemble des lois causales qui déterminent le comportement d’un système, lesquelles permettraient d’en prédire n’importe quel état futur. C’est notamment le cas en biologie où les explications téléologiques sont les seules nous permettant de prédire avec une certaine fiabilité le comportement futur d’un système.
On peut rendre compte des comportements Goal-Directed en termes de [[plasticité|Plasticité]], selon deux critères :
#la ''multiplicité des chaines causales'' par lesquelles le but peut être atteint;
#la ''variabilité des conditions'' sous lesquelles l’activité dirigée vers un but peut avoir lieu.
Autrement dit, une explication téléologique est valable lorsqu’elle fait référence à un comportement qui manifeste une persistence vers un but sous des conditions environnementales variées.
''ATTENTION: l’auteur n’emploie à aucun moment le concept de fonction !'' Il se limite à rendre compte des explications téléologiques appliquées à des comportements et actions non-intentionnels.
Natural selection is not differential reproduction since that can be achieved by chance: «Natural selection should be defined as differential reproduction which is due to the adaptative superiority of those organisms leaving more offspring. »
!!Functions = adaptations
« The proper objects of what-for-questions in biology are ''adaptations''. And adaptations are phenotypic traits which have evolved as a direct product of natural selection. »
What-for-questions demand teleological explanations as answers, teleological in the sense just specified.
« A current token of a trait T in an organism O has the function of producing an effect of type E just in case past tokens of T contributed to the fitness of O’s ancestors by producing E ''@@color:red;and were selected for@@ (over alternative items) because of this contribution to the fitness of O’s ancestors''. »
« A current token of a trait T in an organism O has the function of producing an effect of type E just in case past tokens of T contributed to the fitness of O’s ancestors by producing E, ''and thereby causally contributed to the reproduction of Ts in O’s lineage''. »
« Like the strong theory, the weak theory appeals to a trait’s history to characterize its function, defining the function of a current token of a trait in terms of the role played by ancestral tokens.
« The weak theory thus attributes a function to any trait that is (1) hereditary and (2) a descendant of tokens that performed a [[Cummins|Cummins, R. (1975): “Functional Analysis”]] function within the fitness of ancestral bearers of the trait. For any trait that satisfies these conditions will have causally contributed to its own reproduction via genetic mechanisms of inheritance and development. In short, then, according to the weak theory the function of a hereditary trait T in an organism O is the Cummins function that T had within the fitness of O’s ancestors, since performance of that function causally contributed to the reproduction of Ts in O’s lineage. »
« Both theories [strong and weak] entail that a trait T has the function of producing an effect of type E in an organism O only if T satisfies the following two conditions:
:(ET1) T must have contributed to the fitness of O’s ancestors by producing effects of type E, and
:(ET2) T must be hereditary.
Since both theories are committed to these two conditions, I will take them to represent the essential commitment of the etiological theory. But, whereas these two conditions exhaust the requirements of the weak theory, the strong theory adds the following condition:
:(ST3) at some point in evolutionary history, there must have been selection for T because of its producing E.
(ST3) entails, in turn, the strong requirements that
:(ST3.1) there must have been variation with respect to T at some point in evolutionary history, and
:(ST3.2) T’s bearers must have had greater fitness than bearers of its variants because of T’s producing E.
The weak theory thus attributes functions to traits more liberally than the strong theory, since it counts as functional any hereditary trait of an organism that causally contributed to the fitness of that organism’s ancestors, regardless of whether there was selection for that trait. Indeed, in accordance with the above requirements, the strong theory’s function attributions constitute a proper subset of the weak theory’s function attributions. »
! Dimensions
!! DimensionTemporelle: {{*T(-2)||tag}}
Apparemment, la définition de Buller ne recquiert pas une histoire récente. Lors de la caractérisation de l’approche étiologique, il mentionne le fait que plusieurs auteurs se décantent pour une histoire moderne (voir note 1), mais il ne revient pas là dessus plus tard dans l’article. Cela donne à penser que sa formulation est compatible avec les deux positions.
@@border:0px;display:inline-block;float:right;padding-left:2em;padding-bottom:1em;
|!Dimensions |<|
|[[Temporelle|DimensionTemporelle]] | {{{[title{!!title}tags[]tag[DimensionTemporelle]]||tag}}} |
|[[Valorative|DimensionValorative]] | {{{[title{!!title}tags[]tag[DimensionValorative]]||tag}}} |
|[[Systémique|DimensionSystémique]] | {{{[title{!!title}tags[]tag[DimensionSystémique]]||tag}}} |
|[[Contextuelle|DimensionContextuelle]] | {{{[title{!!title}tags[]tag[DimensionContextuelle]]||tag}}} |
|!Variables |<|
|[[Portée|Portée (variable)]] | {{{[title{!!title}tags[]tag[Portée (variable)]]||tag}}} |
|[[Nature|Nature (variable)]] | {{{[title{!!title}tags[]tag[Nature (variable)]]||tag}}} |
|[[Caractère|Caractère (variable)]] | {{{[title{!!title}tags[]tag[Caractère (variable)]]||tag}}} |
|[[Explication|Explication (variable)]] | {{{[title{!!title}tags[]tag[Explication (variable)]]||tag}}} |
|[[Artefacts|Artefacts (variable)]] | {{{[title{!!title}tags[]tag[Artefacts (variable)]]||tag}}} |
@@
«A function of I (in S) is to do C means I does C and that C is done is ''useful'' to S.»
« A function of I (in S) is to do C means I does C ; and if, ceteris paribus, C were not done in an S, then the probability of that S surviving and having descendants would be smaller than the probability of an S in which is done surviving or having descendants. »
Une AnalyseFonctionnelle est correcte si elle indique ce qu'un trait fait dans le système et si ce qu'il fait est [[utile|Utilité]] (//useful//) pour celui-ci. On peut analyser cette [[utilité|Utilité]] en termes de probabilité de survie de l'individu ou de l'espèce.
Mais les analyses téléologiques ne satisfont pas le modèle explicatif de couverture légale. De fait, ''les explications téléologiques ne sont pas des explications''.
-----
<$list filter="[is[current]tagging[]sort[title]]">
<$link to={{!!title}}><$view field="title"/></$link> - <$list filter="[is[current]tags[]sort[title]]" template="$:/core/ui/TagTemplate" listview="pop" itemClass="tw-tag-list-item"/><br>
<hr></$list>
Cette dimension admet deux valeurs :
| Valeur | Étiquette |h
|Token | {{_propre||$:/core/ui/TagTemplate}} |
|Type | {{_relatif||$:/core/ui/TagTemplate}} |
* auteur
* article
* livre
* citation
* concept
<<tabs "$:/aa/ui/SideBarAuteurs Publications $:/aa/ui/SideBarConcepts $:/aa/ui/SideBarThéories" "$:/aa/ui/SideBarAuteurs" 1>>
*Beaucoup de catégories dites "réelles" (c'est-à-dire celles pour lesquelles il existe des concepts exprimés par des mots dans les "langages naturels") partitionnent des domaines dont les éléments ne sont pas discrets mais composés de variations continues.
*Les catégories des langues naturelles ne sont pas nécessairement composées de combinaisons d'attributs plus simples et préappris.
*Pour la plupart des concepts des langues naturelles, si ce n'est pour tous, certains éléments sont clairement de meilleurs exemples de la catégories que d'autres éléments.
Les domaines des couleurs et des formes exemplifient les trois points précédents.
(Tiré de [[Rosch (1973), p. 329|Rosch (1973): “Natural Categories”]])
Il y a certaines couleurs et certaines formes qui sont perceptivement plus saillantes que d'autres dans leur domaine. L'hypothèse de Rosch est que les couleurs saillantes sont les zones de l'espace des couleurs qui correspondent le mieux aux noms des couleurs de base dans de nombreuses langues, et les formes saillantes sont les "bonnes formes" de la [[Gestalt]] (cercle, carré, etc.) Ces couleurs et ces formes attirent davantage l'attention que d'autres stimuli, et elles sont plus facilement apprises. Lorsque les noms de catégories sont appris, il tendent à être attachés en premier lieu aux stimuli saillants (et seulement après généralisés à d'autres couleurs), et c'est de cette manière que les "prototypes naturels" deviennent le foyer autour duquel s'organisent les catégories.
(Tiré de [[Rosch (1973), p. 330|Rosch (1973): “Natural Categories”]])
(<$count filter="[!is[system]!has[catégorie]]"/>)
<$list filter="[!is[system]!has[catégorie]sort[title]]"/>
La fonction de la chlorophylle est de réaliser la photosynthèse.
<$list filter="[is[current]!catégorie[template]]">
<<<
<h2>{{!!description}}</h2>
{{!!text}}
<<<{{{[title{!!title}]}}}
</$list>
<pre><$view field="text"/></pre>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd" [
<!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
<!ENTITY ns_extend "http://ns.adobe.com/Extensibility/1.0/">
<!ENTITY ns_ai "http://ns.adobe.com/AdobeIllustrator/10.0/">
<!ENTITY ns_graphs "http://ns.adobe.com/Graphs/1.0/">
]>
<svg version="1.1" baseProfile="tiny" id="Layer_1" xmlns:x="&ns_extend;" xmlns:i="&ns_ai;" xmlns:graph="&ns_graphs;"
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
x="0px" y="0px" width="42px" height="42px" viewBox="-0.5 0.5 42 42" xml:space="preserve">
<path d="M29.5,30.5h7c2.529,0,3-0.529,3-3v-21c0-2.41-0.59-3-3-3h-32c-2.47,0-3,0.53-3,3v20.971c0,2.469,0.41,3.029,3,3.029h13
c0,0,9.562,8.756,10.75,9.812c0.422,0.375,1.281,0.172,1.25-0.812V30.5z M7.5,21.5h21v3h-21V21.5z M7.5,15.5h13v3h-13V15.5z
M7.5,9.5h26v3h-26V9.5z"/>
</svg>
!!<$count filter="[field:catégorie/conception/sort[title]]" /> conceptions de la téléologie et du concept de fonction
<table class="rowstable"><thead><tr><th>Publications</th><th>Dimensions</th></tr></thead><tbody><$list filter="[field:catégorie/conception/sort[title]]"><tr><td>
<$link to={{!!title}}>
!!!<$view field="title"/>
</$link>
</td><td><$list filter="[is[current]tags[]catégorie[dimension]] [is[current]tags[]title[.≠Fonctions]] +[sort[title]]" template="$:/core/ui/TagTemplate" listview="pop" itemClass="tw-tag-list-item"/></td></tr></$list></tbody></table>
''<$count filter="[catégorie[concept]!title[ConceptTemplate]sort[title]]"/> concepts'' – <$button message="tw-new-tiddler" class="bluebutton" param="ConceptTemplate">Nouveau concept</$button><br><br>
<$list filter="[catégorie[concept]!title[ConceptTemplate]sort[title]]"><$link to={{!!title}}><$view field="title"/></$link>
(<small class="tw-menu-list-count"><$count filter="[is[current]tagging[]]"/></small>)<br></$list>
<$list filter="[is[current]field:catégorie/concept|théorie/tagging[]field:catégorie/concept|théorie/]" template="tag" emptyMessage="aucun"/>
<$list filter="[is[current]field:catégorie/concept|théorie/tagging[]field:catégorie/concept|théorie/tagging[]field:catégorie/concept|théorie/sort[title]] -[is[current]tagging[]field:catégorie/concept|théorie/]" template="tag" emptyMessage="aucun"/>
<$list filter="[is[current]field:catégorie/concept|théorie/tagging[]field:catégorie/concept|théorie/tagging[]field:catégorie/concept|théorie/tagging[]field:catégorie/concept|théorie/sort[title]] -[is[current]tagging[]field:catégorie/concept|théorie/tagging[]field:catégorie/concept|théorie/]" template="tag" emptyMessage="aucun"/>
<$list filter="[is[current]tagging[]field:catégorie/concept|théorie/tagging[]field:catégorie/concept|théorie/tagging[]field:catégorie/concept|théorie/tagging[]field:catégorie/concept|théorie/sort[title]]" template="tag"/>
On distingue traditionnellement trois types de ''connaissance'':
* [[Connaissance propositionnelle]] (savoir que, //know that//)
* [[Connaissance pratique]] (savoir faire, //know how//)
* ''Connaissance objectuelle'', "connaissance par familiarité" ou par "fréquentation" (//acquaintance//) qui est une connaissance des choses (des personnes, des lieux, etc.), par opposition à une connaissance des vérités ou à une "connaissance par description". Cette distinction est due à ((Bertrand Russell(Russell, B., //Our Knowledge of the External World// (1914), "La méthode scientifique en philosophie", Payot, Paris, 2002))).
Pour beaucoup d'épistémologues, la connaissance implique une [[Croyance]] ou une attitude psychologique analogue (certitude, conviction, acceptation). D'autres pensent que connaissance et croyance sont mutuellement incompatibles ou bien encore indépendants.
La définition classique de la [[Connaissance propositionnelle]] insiste sur la [[Justification]]. Cette justification repose sur la relation entre certaines croyances du sujet pouvant être des connaissances, et d'autres croyances pouvant être considérées comme des raisons de les tenir pour vraies. Face à cette conception internaliste de la connaissance, on peut penser au contraire que les connaissances sont des croyances issues de notre contact direct avec les faits extérieurs, à condition que ce soit par des mécanismes fiables. Il s'agit là d'une ((conception causale(Dretske, F., //Knowledge and the Flow of Information// (1981), MIT Press, MA, Cambridge.))) de la connaissance, qui peut donner lieu à une [[théorie naturalisée de la connaissance|Epistémologie naturalisée]] (//((Naturalised Epistemology(Quine, WVO (1969): "Epistemology Naturalized")))//). On peut aussi prendre en compte l'origine sociale de l'immense majorité de nos connaissances et faire la ((théorie de la transmission de connaissances(Goldman, A., //Knowledge in a Social World//, Oxford University Press, Oxford, 1999))) par le témoignage d'autrui. Dans tous les cas, il s'agit de déterminer dans quelles conditions une croyance peut être tenue pour vraie (sans que ce soit par hasard ou par coïncidence).
!Connaissance propositionnelle[[→|Connaissance propositionnelle]]
<<tiddler [[Connaissance propositionnelle]]>>
!Trilème d'Agrippa
Pour justifier une connaissance, il faut s'appuyer sur des croyances qui doivent elles-mêmes être justifiées. Cela conduit à trois solutions possibles:
* ''Fondationnalisme'': certaines connaissances de base n'ont pas à être justifiées, et elles peuvent de ce fait servir de fondement aux autres. Il peut s'agir de connaissances empiriques servant d'appui à toutes les autres (à l'image d'une pyramide) ou de connaissances rationnelles comme chez Descartes (à l'image d'un arbre).
* ''Régression à l'infini'': A défaut de connaissances de base non-justifiables, on peut entrer dans une régression à l'infini des justifications.
* ''Cercle vicieux'': Pour éviter la régression, il faudrait que certaines croyances se justifient mutuellement. Cette solution est le cohérentisme, défendu notamment par Keith Lehrer.
Les connaissances propositionnelles sont construites sous la forme: "Je sais que //p//", où //p// est la chose connue. L'"analyse standard" de la connaissance propositionnelle est une définition tripartite composée de trois conditions nécessaires et conjointement suffisantes:
*Croyance
*Justification
*Vérité
Autrement dit, la connaissance propositionnelle est une croyance vraie justifiée. Cette définition remonte peut-être à [[Platon]]. [[Edmund Gettier|Gettier]] en a formulé deux contre-exemples en 1963.
''<$count filter="[field:catégorie/contre-exemple/]" /> contre-exemples - ''<$button message="tw-new-tiddler" class="mon-bouton" param="$:/_Template/Note">+</$button><br>
<$list filter="[field:catégorie/contre-exemple/sort[à_propos_de]]">
<h2><$link to={{!!title}}><$transclude field="description"/></$link></h2>
À propos de : <$link to={{!!à_propos_de}}><$transclude field="à_propos_de"/></$link>
<<<
{{!!text}}
<<<
<hr>
</$list>
Les ''doctrines créationnistes'' invoquent un principe intelligent, en général divin, à l'origine de la vie et du monde. On peut en distinguer au moins trois formes:
* ''Créationnistes traditionnels:'' ils croient que le récit de la genèse est littéralement vrai.
* ''Créationnistes "évolutifs":'' ils admettent que le monde est vieux de plusieurs millions d'années et admettent une certaine évolution, mais se distinguent des {{darwinistes||alias}}, car ils considèrent que Dieu est intervenu dans le processus évolutif pour créer des espèces. Ils refusent par exemple le cousinage du moustique et de la baleine.
* ''{{Dessein intelligent||alias}}:'' reconnaissent le scénario darwinnien, mais considèrent que pour expliquer cette évolution on ne peut pas recourir uniquement à la {{sélection naturelle||alias}}, mais qu'il faut recourir à un principe intelligent.
Quel est le critère de [[Scientificité]]? Tous les débats autour du créationnisme sont aussi des débats autour de la scientificité.
When the ancient building was ruined, a large stone fragment fell on a kind of zodiac mosaic and embedded itself there. Since no sign of the roof remains, Y has mistakenly supposed the thing was designed as a sundial. As it happens, the local people have been using the thing to tell time for centuries, so Y is right about the function of the thing X pointed to. But it is simply false that the thing is there because it casts a shadow, for there is no agent who put it there 'because it casts a shadow'.
Les fonctions qu’on attribue aux traits d’un organisme correspondent à la capacité de ces traits à contribuer à une capacité plus générale de l’organisme :
<br><br>
<<<
«x functions as a ϕ in s (or: the function of x in s is to ϕ) relative to an analytical account A of s's capacity to ψ just in case x is capable of ϕ-ing in s and A appropiately and adequately accounts for s's capacity to ψ by, in part, appealing to the capacity of x to ϕ in s.» (Cummins, 1975: 762)
<<<
«When a capacity of a containing system is appropriately explained by analyzing it into a number of other capacities whose programmed exercise yields a manifestation of the analyzed capacity, the analyzing capacities emerge as functions.»
Once we are clear about the explanatory role of functions in evolutionary theory, it emerges that the function of an organ or process (or whatever) is appealed to in order to explain the biological capacities of the organism containing it, and from these capacities conclusions are drawns concerning the chances of survival for organisms of that type.
[…] to attribute a function to something is, in part, to attribute a disposition to it.
To attribute a disposition d to an object a is to assert that the behaviour of A is subject to (exhibits or would exhibit) a certain law-like regularity: to say a has d is to say that a would manifest d (shatter, dissolve) were any of a certain range of events to occur (a is put in water, a is struck sharply). The regularity associated with a disposition –call it the dispositional regularity– is a regularity which is special to the behaviour of a certain kind of object and obtains in virtue of some special facts(s) about that kind of object.
Les dispositions sont des propriétés (sic) et expliquer une propriété c'est montrer comment cette propriété est instanciée dans les choses qui la possèdent. Quand nous comprenons comment une disposition est instanciée, nous sommes en mesure de comprendre pourquoi se manifestent les régularités dispositionnelles.
To ascribe a function to something is to ascribe a capacity to it which is singled out by its role in an analysis of some capacity of a containing system. When a capacity of a containing system is appropiately explained by analyzing it into a number of other capacities whose programmed exercise yields a manifestation of the analyzed capacity, the analyzing capacities emerge as functions.
Selon Cummins, mentionner la fonction de quelque chose ne répond à la question de sa présence que dans le cas des artéfacts (p. 53). Curieusement Cummins semble un peu plus loin dire exactement le contraire en évoquant quelque chose dont on croyait que c'était une horloge solaire mais qui en réalité était là par hasard: <<slider "citation" "{{Cummins, 1975: 53}}">>
Cummins semble donc considérer que pour les artéfacts la fonction et la raison de l'existence sont liées, mais pas dans le cas de l’horloge solaire parce que ce n'est pas un artéfact, c'est quelque chose qui est utilisé comme si c'était un artéfact sans en être véritablement un. Dans la note 7 (3), Cummins indique que l'on peut effectivement parler dans ce cas de fonctions, mais celles-ci sont déterminées par l'//usage// qui est fait de la chose, ce qui n'a pas de sens en biologie et ne permet donc pas de rapprocher les deux types de fonction.
Les fonctions techniques relèvent bel et bien de la téléologie, tandis que les fonctions biologiques non, dans ce domaine il faut distinguer une explication fonctionnelle d'une explication téléologique. (p. 54)
Montrer que sa démarche, dans la mesure où elle élimine la téléologie et la normativité, est inacceptable.
En deuxième lieu, qu'il se plante complètement à propos des fonctions techniques et de leur différence avec les fonctions biologiques.
Ensuite montrer que sa prétention d'éliminer la téléologie et l'intentionnalité qu'elle implique grâce à une analyse physique de l'objet permettant de déterminer ses dispositions perd tout son sens à partir du moment où on retrouve l'intentionnalité au niveau de la physique, on ne peut donc pas laver le langage biologique de son intentionnalité en le réduisant à celui de la physique si ce dernier est lui même intentionnel.
La grosse erreur c'est de considérer les fonctions comme des propriétés et essayer de les réduire aux propriétés physiques, dans la mesure où en physique les propriétés n'existent plus.
!Dimensions
!! [[Temporelle|DimensionTemporelle]] : {{*T(0)||tag}}
!! [[Valorative|DimensionValorative]] : {{*V(0)||tag}}
!! [[Systémique|DimensionSystémique]] : {{*S(1)||tag}}
!! [[Contextuelle|DimensionContextuelle]]: {{*C(0)||tag}}
!Variables
!![[Portée|Portée (variable)]] : {{_token||tag}}
La définition est compatible avec une interprétation en termes de types, mais ce n’est pas l’interprétation qu’en donne l’auteur.
!![[Nature|Nature (variable)]] : {{_disposition||tag}}
!![[Caractère|Caractère (variable)]] : {{_relative||tag}}
!![[Explication|Explication (variable)]] : {{_E(1)||tag}}
Une attribution fonctionnelle est une explication d’une capacité du système contenant dans le cadre d’une analyse fonctionnelle de cette capacité.
!![[Artefacts|Artefacts (variable)]] : {{_A(0)||tag}}
Je ne vois aucune raison pour laquelle la définition de Cummins ne serait pas applicable aux artefacts, et il emploie lui-même des exemples d’artefacts pour illustrer son propos. Cependant, l’interprétation qu’il en donne lui-même consiste à dire que les fonctions artificielles et biologiques sont différentes car les premières dépendent des intentions de leur créateur.
Cummins essaie de montrer que la fonction (1) n'explique pas la présence de l'item et (2) n'est pas un effet de cette chose dans l'organisme. Il propose une conception alternative en déconnectant l'explication fonctionnelle de l'explication téléologique.
<<slider "…" "1" "
Il commence par critiquer les définitions proposées par Hempel et Nagel: la fonction comme condition nécessaire d'un certain effet, cette caractérisation est tout simplement fausse. Ils essaient d'expliquer la présence de l'organe à partir de ses effets, alors que ceux-ci sont “causaly irrelevant to its presence” (p. 52).
">>
''Contre (1)'' il montre que la fonction ne détermine pas la chose qui la remplit. Puisque deux objets peuvent remplir la même fonction, celle-ci n'explique pas pourquoi seul l'un des deux existe. L'explication de la présence d'un trait est génétique et, en partie, aléatoire. La fonction n'explique donc pas la présence d'un trait, mais les capacités de l'organisme en vertu desquelles il survit.
''Contre (2)'' il montre qu'on est incapable d'identifier et distinguer correctement les effets fonctionnels de ceux qui ne le sont pas, d'autant plus que leur caractère fonctionnel ou non est relatif à l'environnement. Il critique notamment la tentative de définir les effets fonctionnels comme ceux qui contribuent à la survie de l'espèce. Car indépendamment de sa valeur évolutive, le vol est une capacité qui demande une analyse en termes de fonctions.
''Alternative:'' une fonction n'est pas un effet, mais une disposition. Une disposition implique une régularité de type nomologique: quand une certaine condition est remplie, la disposition se réalise. Les dispositions sont des propriétés. Il s'agit d'expliquer les dispositions ou capacités d'un systềme en analysant le rôle de chacun des sous-systèmes, comme dans une chaîne de montage ou un circuit électronique. Un organisme biologique est un ensemble de systèmes, avec chacun certaines capacités, analysables à leur tour en termes de capacité des sous-systèmes qui les composent. Une fonction n'est pas un effet, mais une capacité, dans la mesure où elle contribue à une capacité du système qui la contient.
<important>
DÉFINITION:
"//x// functions as a //φ// in //s// (or: the function of //x// in //s// is to //φ//) relative to an analytical account //A// of //s//'s capacity to //ψ// just in case //x// is capable of //φ//-ing in //s// and A appropiately and adequately accounts for //s//'s capacity to //ψ// by, in part, appealing to the capacity of //x// to //φ// in //s//." (p. 64)
</important>
La fonction (des battements) du coeur est de pomper le sang. Elle n'est pas de produire des sons.
Pourtant, le fait de produire des sons peut être très utile pour réaliser un diagnostic médical.
On pourrait aussi amplifier les battements ducoeur et les utiliser comme basse dans une orchestre. On dira alors que le coeur fonctionne comme une basse, mais on ne peut pas dire
que ce soit là sa fonction.
Dans cet article, les auteurs montrent comment l'objectivité scientifique se moralise vers la fin du XIXe siècle à partir d'une conception mécanique de la connaissance, c'est-à-dire une conception dans laquelle l'homme devait s'effacer pour laisser la place à une reproduction mécanique des images, jugée moins subjective au sens où elle n'implique supposément aucune interprétation de ce qui est reproduit.
L'épistémologie du XVIIe siècle aspirait au point de vue des anges; au XIXe siècle, l'objectivité aspire à l'auto-discipline des saints. Cet idéal d'objectivité cherche à éliminer la présence de l'observateur.
Au XVIIIe siècle, pour être fidèles à la nature (//truth to nature//), les savants n'hésitaient pas à interpréter les images, c'est-à-dire à montrer l'essence des choses. Au XIXe siècle, cette interprétation est devenue suspecte de subjectivité. Pour l'éliminer, on poursuit une objectivité mécanique.
!Fidélité à la Nature (Truth to nature)
Les faiseurs d'atlas scientifiques du XVIIIe siècle présentaient des objets représentatifs des objets naturels. Il s'agissait d'images standardisées et d'une certaine manière idéalisées faites pour entraîner l'oeil à voir les objets réels. Il fallait pour cela éliminer les idiosyncrasies de l'objet et du sujet. Il fallait donc procéder à un choix d'images parmi la trop grande variété des objets naturels. Il fallait "fabriquer" des objets de travail. L'objet standard fabriqué par la science a donc une valeur normative, et pas seulement descriptive.
C'est ce problème du choix, et donc de l'interprétation de la nature, qui a provoqué la crise de confiance ayant aboutit à la conception mécanique. Car les scientifiques se rendent compte du caractère problématique de leurs jugements sur la typicalité des spécimens représentés.
!Objectivité et reproduction mécanique
Entre la fin du XIXe et le début du XXe siècle, avec l'apparition de techniques de reproduction mécanique comme la photographie, celles-ci deviennent l'idéal de la reproduction scientifique, car elles permettent - croit-on - d'éliminer la médiation de l'observateur entre l'objet et son image. La machine présentait l'avantage de ne pas interpréter la réalité et donc de ne pas introduire de biais subjectif dans sa représentation.
Quand la photographie est, quant à la précision ou à la fidélité de la représentation, inférieure au dessin, on préfère quand même la photo. On va jusqu'à faire des imperfections des photos le signe de leur objectivité. On renonce à la perfection, à l’idéal, au nom de l’objectivité. Ne pas interférer, laisser parler les choses par elles mêmes. “Accuracy had to be sacrificed on the altar of objectivity.” (114) On préfère l'autenticité à la similarité.
Au XXe siècle, on commence à se rendre compte que les techniques photomécaniques n’ont fait que déplacer le problème de la subjectivité, au lieu de l’éliminer.
!L'objectivité moralisée
C'est la non-intervention humaine, pas la vérisimilitude, qui était au coeur de l'objectivité mécanique. Mais cette non-intervention est chargé de connotations morales dans le cadre d'une religion séculaire de la connaissance dont les scientifiques seraient les prêtres et leur refus d'interpréter la nature une forme d'abnégation ascétique. Elle requiert auto-discipline et purification.
L'objectivité mécanique s'est confondue avec les autres acceptions de l'objectivité. L'acception métaphysique, qui l'identifie à la vérité. Et l'acception "//aperspectival//" qui correspond au fait d'échapper à toute perspective.
Éliminer la médiation de l’homme dans la production de données scientifiques@; mécaniser cela@:
« ''‘Let nature speak for itself’ became the watchword of a new brand of scientific objectivity that emerged in the latter half of the nineteenth century.'' At issue was not only accuracy but morality as well: the all-too-human scientists must, as a matter of duty, restrain themselves from imposing their hopes, expectations, generalizations, aesthetics, even ordinary language on the image of nature. Where human self-discipline flagged, the machine would take over. Wary of human intervention between nature and representation, Marey and his contemporaries turned to ''mechanically produced images to eliminate suspect mediation''. »
This essay is an account of the @@color:red;moralization of objectivity@@ in the late nineteenth and early twentieth centuries as reflected ''in scientific image making''.
What we will call ‘noninterventionist’ or ‘mechanical’ objectivity is only one of several elements that historical pressures have fused together into our current, conglomerate notion of objectivity.
Objectivity is related to subjectivity as wax to seal, as hollow imprint to the bolder and more solid features of subjectivity. @@color:red;''Each of the several components of objectivity opposes a distinct form of subjectivity''@@; each is defined by censuring some (by no means all) aspects of the personal. The history of the various forms of objectivity might be told as how, why, and when various forms of subjectivity came to be seen as //dangerously// subjective.
Mechanical objectivity was indifferent to the subjectivity of, for example, personal idiosyncrasies; rather, it combated the subjectivity of scientific and aesthetic judgment, dogmatic system building, and anthropomorphism.
The problem for nineteenth-century atlas makers was not a mismatch between world and mind, as it had been for seventeenth-century epistemologists, but rather a struggle with inward temptation. […] @@color:red;Seventeenth-century epistemology aspired to the viewpoint of angels; nineteenth-century objectivity aspired to the self-discipline of saints.@@ […] this ideal of objectivity attempts ''to eliminate the mediating presence of the observer''.
Toute cette discussion autour de l'ontologie des '//selected functions//' se fait contre une posture de type [[Millikan]]. Mais je doute que la critique reste valable quand on s'en tient à une analyse conceptuelle du langage des biologistes. Dans ce cas, on ne parle plus d'une entité, mais d'un concept, et on pourrait montrer que les biologistes utilisent un concept qui, effectivement, renvoie à une ontologie à propos de laquelle on peut être sceptique.
C'est-à-dire que [[Davies]] porte une critique (justifiée de mon point de vue) à l'encontre de l'idée que les fonctions //existent// en tant que propriétés dans le monde. Sa critique est nommément dirigée contre [[Millikan]], mais il en tire une conclusion générale qui est le rejet de la conception étiologique. Cependant, il va peut-être trop vite en besogne. Si on se limite à faire de l'analyse conceptuelle, on pourrait dire que, bien que les fonctions n'existent pas au sens habituel, leur usage conceptuel n'en est pas moins légitime. Après tout, on peut également douter de l'existence des atomes et des particules.
Il me semble que derrière la position de Davies il y a le modèle épistémologique de la physique.
![[Tracing Links of Causation|Davies (2001): chap. 1]]
Dans ce chapitre introductif, l'auteur présente ses idées principales:
* Le naturalisme et la normativité biologique sont incompatibles.
* Les fonctions sont des [[propriétés|Propriété]] des systèmes hiérarchiquement organisés, mais ne se limitent pas aux systèmes biologiques.
* Les fonctions des artefacts ne servent pas de modèle aux fonctions biologiques, et vice-versa.
* Sa proposition est révisionniste (elle rejette la téléologie) mais pas éliminativiste (elle n'est pas relative aux intérêts épistémiques). <<pop "(Voir citation)" "Davies, 2001: 8-9">>
* Il rejette toute idée de finalité (contre Aristote): les fins naturelles n'existent pas.
* L'apparence de finalité (purposiveness) peut s'expliquer par des processus strictement mécaniques.
![[Approaching the Norms of Nature|Davies (2001): chap. 2]]
Présentation des approches [[historique|ApprocheÉtiologique]], [[systémique|ApprocheSystémique]], et [[combinée|ApprocheMixte]].
![[Discarding Selected Functions|Davies (2001): chap. 3]]
Il n'y a qu'une seule vraie théorie des fonctions, la théorie [[systémique|ApprocheSystémique]].
![[Defeating Promiscuity: Hierarchical Systems and Systemic Functions|Davies (2001): chap. 4]]
Répondant aux critiques formulées à l'encontre de [[Cummins|Cummins, Robert]] selon lesquelles sa définition attribue des fonctions à tout et n'importe quoi (par exemple des nuages), il propose de limiter l'attribution fonctionnelle aux systèmes hiérarchiquement organisés.
![[Naturalizing Functions: Evidence, Methodology, and Ontology|Davies (2001): chap. 5]]
!!Résumé
L'approche historique échoue dans sa tentative de [[naturalisation|Naturalisme]] des fonctions.
* Une théorie n'est naturaliste que si elle ouverte à un test empirique ou théorique. (p. 107)
* Une théorie des fonctions peut être testée à deux niveaux:
** au niveau des attributions fonctionnelles
** au niveau de l'ontologie et de la méthodologie de la théorie elle-même, notamment vis-à-vis de sa conformité aux théories bien admises.
!!5.1 Confirming the Attribution of Selected Functions
* Les preuves historiques étant rares, les attributions fonctionnelles reposent souvent sur des spéculations.
* Les preuves historiques sont innécessaires, puisque des découvertes biologiques importantes se sont faites sans connaître l'histoire. Exple de [[Nagel|Nagel, Ernest]]: [[Harvey]] et la fonction du coeur.
** Discussion de la réponse de [[Millikan|Millikan, Ruth Garrett]] sur ce point: insatisfaisante.
** Discussion de la réponse de [[Neander (1991)|Neander, K (1991): "Functions as Selected Effects"]].
*** Dialectique entre les concepts et les définitions théoriques.
* Il est difficile d'identifier les traits organiques causalement responsables de la sélection, même dans des populations actuelles. ([[p. 119|Davies 2001:119]])
!!5.2 Confirmation and the Causes of Selection
''Problème des niveaux de sélection:'' Quand un organisme évolue par sélection, quelles propriétés de l'organisme sont causalement responsables de son succès sélectif (génotypiques, phénotypiques, les deux à la fois, ou autre chose)? On ne sait pas toujours à quoi attribuer la fonction. Ce problème a été soulevé par [[Brandon]].
!!5.3 Confirming the Theory of Selected Functions
Problèmes méthodologiques de la théorie.
!!5.4 Confirmation and the Ontology of Selected Functions
L'ontologie de la théorie est inacceptable d'un point de vue naturaliste. ([[Davies, 2001: 137]])
* Minimalisme: un trait possède la fonction F quand il descend de tokens sélectionnés en vertu de F. Les propriétés physiques ne comptent pas, ce qui compte c'est une relation historique. ([[Millikan 1989|Millikan (1989): "In defense of proper function")([[p.137|Davies, 2001: 137]])
** Selon Davies, cette posture est intenable du point de vue naturaliste, car on ne voit pas quel processus naturel pourrait imposer ou déterminer la fonction d'un trait au cours de l'évolution. <<pop "(voir citation)" "Davies, 2001: 139">>
** Pire encore, on ne voit pas par quel mécanisme un trait pourrait acquérir une norme, de telle manière qu'un trait physiquement incapable d'accomplir sa fonction soit considéré dysfonctionnel ([[Malfonction]]).
** Si on opte pour la thèse selon laquelle la fonction d'un trait est liée au succès sélectif //__et__// à ses capacités physiques présentes, alors on obtient des fonctions qui sont des propriétés abstraites et non-causales, ce qui les rend difficilement compatibles avec la méthode et les postulations des sciences de la nature. ([[Davies, 2001: 142]])
*** La théorie darwinienne ne requière pas ce type de norme, et est même contraire à son esprit (réintroduction d'une téléologie).
*** Les nombres et les ensembles sont également des propriétés abstraites et non-causales dont la science ne peut pas se passer, mais dans le cas des fonctions il y a une alternative (systémique) à ce type de fonctions.
!!!Commentaires
:> @@color:blue;{{Davies (2001) - Ontologie des fonctions}}@@
!!5.5 Complexity
La raison pour laquelle les systèmes biologiques semblent être orientés vers une fin, c'est leur grande complexité. Hypothèse psychologique: plus les systèmes hiérarchiques sont complexes (=interdépendants), plus nous sommes enclins à leur attribuer une fonction. Les systèmes hiérarchiques complexes ont deux caractéristiques notables :
* La stabilité dans le temps
* L'autoperpétuation
|<<tiddler [[Davies 2001:153/stableSelfPerpetuatingSystems]]>>|
|<<tiddler [[Davies 2001:154/properFunctionIsIllusion]]>>|
+++[commentaire]
>@@color:blue;<<tiddler [[Davies 2001:154/properFunctionIsIllusion - Notes/commentaire]]>>@@
===
Différence entre Davies et [[Nagel, E. (1977)]]. Selon Davies, [[goal-directedness|GoalDirectedness]] n'est pas une condition nécessaire pour l'attribution correcte des fonctions épistémiques. La hiérarchie est nécessaire, mais pas la complexité interne; il peut donc y avoir des fonctions systémiques en l'absence de [[goal-directedness|GoalDirectedness]]. D'un autre point de vue, les fonctions systémiques sont relatives à une //capacité// du système, mais toutes les capacités ne sont pas des buts (//goals//) au sens de Nagel. (p.155)
![[Guiding Inquiry: The Theoretical Roles of Systemic Functions|Davies (2001): chap. 6]]
''Decomposition, localisation.'' Les fonctions systémiques jouent d'abord un rôle comme guide de la recherche dans une démarche analytique: pour expliquer une capacité du système, on postule des mécanismes physiques (//bottom-up//) qu'il faut ensuite vérifier empiriquement. L'approche de Davies se veut naturaliste à deux niveaux, celui des attributions fonctionnelles, et celui de la théorie elle-même.
{{Davies, 2001: 158||cit}}
''Connectionism:'' Le modèle connexionniste limite fortement la possibilité de décomposition et localisation, mais l'auteur n'est pas d'accord sur le fait que ce modèle empêche l'attribution de fonctions.
[[Malfunctions|Malfonction]]'':'' L'apparente normativité des fonctions est un effet psychologique lié à nos expectatives.
{{Davies, 2001: 149||cit}}
!! 6.1 The Inquiry- Guiding Role of Systemic Functions
L'auteur ne cherche pas à expliquer l'usage que les biologistes font du concept de fonction, mais à expliquer le fonctionnement des systèmes complexes et le rôle du concept de fonction dans ce travail. En premier lieu, il ne s'agit pas d'expliquer, mais d'orienter dans la recherche. Attribuer une fonction, c'est d'abord postuler des mécanismes causals sous-jacents qu'il faudra ensuite confirmer. C'est une démarche analytique (comme voir les aiguilles d'une montre et postuler les rouages responsables de leur mouvement, pour ensuite aller vérifier empiriquement). Exemples de Gall (phrénologie) et de Watson (ADN).
{{Davies, 2001: 164||cit}}
{{Davies, 2001: 166-167||cit}}
!!!Commentaires
{{Fonctions: Pourquoi en Biologie et pas en Physique?||cit}}
!! 6.2 The Limits of Decomposition and Localization
Selon Bechtel & Richardson, certains systèmes sont si intégrés, leurs composants si interdépendants, qu'il devient impossible de décomposer la capacité globale du système en capacités de niveau inférieur attribuables à ses composants. Donc, selon eux, l'attribution de fonctions ne serait plus possible. Exemple des réseaux neuronnaux. Le modèle connexionniste limite fortement la possibilité de décomposition et localisation, mais l'auteur n'est pas d'accord sur le fait que ce modèle empêche l'attribution de fonctions.
!! 6.3 Systemic Malfunctions and Expectations
La pratique classificatoire qu'implique la théorie des fonctions produit en nous des expectatives quand aux types de systèmes et aux tokens de ces types. Ce sont ces expectatives qui expliquent notre tendance à dire que certains tokens [[malfonctionnent|Malfonction]].
![[Defining Functional Types: Success and Malfunctions|Davies (2001): chap. 7]]
Les approches historique et combinée sont incapables de rendre compte de la possibilité des dysfonctions alors que c'est pour elles une caractéristique centrale. Elles doivent être rejetées.
L'auteur se positionne clairement contre l'interprétation des fonctions en termes de sélection naturelle (approche historique). Par ailleurs, il affirme que les fonctions sont des propriétés.
{{Davies, 2001: xiii||cit}}
{{Davies, 2001: xiii'||cit}}
{{Davies, 2001: xiii''||cit}}
« What natural features of the causal-mechanical processes that constitute a selective history have the power to determine that descendent tokens are for the performance of some task? »
« On my view, natural traits cannot malfunction; they can disappoint our expectations, but they cannot malfunction. »
« My suggestion, then, is that certain of our psychological capacities and limitations incline us to conceptualize the capacities of stable, self-perpetuating systems as especially functional. »
« The intuition that some traits are "properly" functional is illusory, but the intuition that some are especially important within the system's internal economy is both real and true. »
« Specific attributions are naturalistic because the theory requires evidence for physical mechanisms that instantiate the attributed functions. The theory as a whole is naturalistic because it is an integral part of inquiry into hierarchical systems and because the ontology of the theory is thoroughly naturalistic. »
« [Decomposition and localization] The ultimate goal of this top-down strategy is discovery of physical mechanisms internal to the system responsible for the functional capacities listed in our taxonomy. »
« [...] naturalism, as I construe it, is a commitment not to a specific ontology but rather to the methods of inquiry employed by our best natural sciences. »
« the historical approach, in attempting to account for the possibility of malfunctions, commits itself to the existence of quite specific norms of performance that are noncausal and nonphysical in nature. »
« [...] functions are nothing more than systemic capacities that contribute to the exercise of higher-level capacities we wish to understand and control. »
« Our explanatory interests may be important in the discovery of systemic functions, but our interests are neither necessary nor sufficient for the existence of such functions. »
« I shall argue that, while most natural traits indeed have functional properties, those properties are not constituted by the selective success of ancestral tokens. Natural selection, I believe, is inessential to the __existence of functions__. »
« Functions are essentially systemic; history is not essential. »
« @@color:brown;Functions are contributions to systemic capacities and, while selection can preserve or eliminate those functions, selection is not their source.@@ »
L'auteur propose de définir les [[fonctions biologiques|Fonctions]] à partir de l'[[approche systémique|ApprocheSystémique]] de [[Cummins]], __contre__ les [[approches historiques|ApprocheHistorique]] ou [[étiologiques|ApprocheÉtiologique]].
Au nom d'un [[naturalisme|Naturalisme]] strict, il s'oppose à toute conception [[normativiste|Normativité]] et/ou [[téléologique|Téléologie]] des fonctions biologiques.
Sa proposition est révisionniste (car il ne cherche pas à rendre compte de l'usage courant du concept et remet en question les intuitions), mais pas éliminativiste^^[1]^^
comme celle de [[Cummins]]. C'est du moins ce que lui reprochent certains, dont [[Enç]] et aussi [[Bigelow & Pargetter|Bigelow & Pargetter (1987): “Functions“]]).
Pour [[Davies]], les fonctions ne sont rien d’autre que des capacités systémiques qui contribuent à la réalisation de capacités de plus haut niveau que l’on veut comprendre et contrôler. Davies propose d’améliorer l’approche systémique de [[Cummins]] en y ajoutant quatre thèses:
# ''Généralité:'' L'ApprocheSystémique est plus générale et subsume l'approche historique. (voir chap. 3)
# ''Restriction:'' L'approche systémique doit être limitée aux systèmes hiérarchiquement organisés. (voir chap. 4)
#>@@color:blue;Davies veut limiter son approche systémique aux systèmes qui sont hiérarchiquement organisés. Comme si en effet la fonctionnalité était un phénomène explicable par les sciences de la nature. De cette manière, il ignore volontairement le caractère fonctionnel d'artefacts aussi simples qu'une chaise. De fait, il refuse de considérer que les artefacts et les systèmes biologiques soient explicables dans les mêmes termes. Il considère que les fonctions sont des propriétés de systèmes complexes (pas nécessairement biologiques).@@
# ''Révisionnisme:'' L'intuition selon laquelle il faut distinguer fonctionel/accidentel et dysfonctionnel/non-fonctionnel est erronée, mais on peut en expliquer la source (psychologique). (voir chap. 5, 6 et 7)
# ''Naturalisme:'' L’approche systémique est plus conforme au [[naturalisme|Naturalisme]] que l’approche historique, car cette dernière assume l’existence de normes de fonctionnement dont la nature n’est ni causale ni physique
|En effet, {{Davies, 2001: 5}}|
|Ailleurs: {{Davies, 2001: 139}}|
>@@color:blue;Davies discute de l'existence de normes naturelles et de leur caractère causal et physique. Il semble aussi concevoir les fonctions comme des propriétés indépendantes qui seraient fixées par la Nature elle-même, en vertu de certains mécanismes causals. Cela en fait un adversaire tout désigné pour moi, et un point de départ pour la question du naturalisme en biologie.@@
>>@@color:blue;Montrer que la question pertinente à propos des normes n'est peut-être pas leur existence ni leur caractère physique. Ce serait plutôt une question de langage. Si on adopte un certain type de langage, alors on peut parler de normes. Si on adopte un langage mécaniste, alors on ne peut pas parler de normes, mais seulement de causes physiques.@@
|DÉFINITION: {{Davies, 2001: 5}}|
[1] Qui ne fait pas la différence entre une fonction et une disposition, d'où une élimination de fait du concept, réduit à une façon de parler.
[[Dawkins]] cherche à montrer que l'unité de sélection de l'évolution darwinienne est le gène. Il définit la vie sur la base de réplicateurs. Il introduit pour la première fois la notion de "mème", qui est l'équivalent du gène dans le domaine culturel.
Contient en avant propos une justification intéressante du langage anthropomorphique qu'il utilise.
The laws of physics are supposed to be true all over the accessible universe. ''Are there any principles of biology that are likely to have similar universal validity?'' When astronauts voyage to distant planets and look for life, they can expect to find cratures too strange and unearthly for us to imagine. But is there anything that must be true of all life, whereever it is found, and whatever the basis of its chemistry? If forms of life exist exist whose chemistry is based on silicon rather than carbon, or ammonia rather than water, if creatures are discovered that boil to death at -- 100 degrees centigrade, if a form of life is found that is not based on chemistry at all but on electronic reverberating circuits, will there still be any general principle that is true of all life? Obviously I do not know but, if I had to bet, I would put my money on ''one fundamental principle. This is the law that all life evolves by the differential survival of replicating entities.'' The gene, the DNA molecule, happens to be the @@color:red;''replicating entity''@@ that prevails on our own planet. There may be others. If there are, provided certain other conditions are met, they will almost inevitably tend to become the basis for an evolutionary process.
[[Jacques Monod|Monod]] [...] sais approximatively that, when trying to think through a chemical problem, he would ask himself what he would do if he were an electron. Peter Atkins, in his wonderful book //Creation Revisisted//, uses a similar personification when considering the refraction of a light beam, passing into a medium of higher refractive index which slows it down. [...] Personification of this kind is not just a quaint didactic device. It can also help a professional scientist to get the right answer, in the face of tricky temptations to error. Such is the case with Darwinian calculations of altruism and selfishness, cooperation and spite. It is very easy to get the wrong answer. Personifying genes, if done with due care and caution, often turns out to be the shortest route to rescuing a Darwinian theorist drowning in muddle.
''Daniel Clement Dennett'' est un philosophe américain né le 28 mars 1942. C'est l'un des plus importants philosophes contemporains, en [[philosophie de l'esprit|PhiloEsprit]] et en [[philosophie des sciences|PhiloSciences]], et en ce qui concerne la [[théorie de l'évolution|Darwinisme]] et les [[sciences cognitives|SciencesCognitives]]. Il est actuellement professeur de philosophie et directeur du //Center for Cognitive Studies// de l'université de Tufts (Medford, Massachusetts).
Les croyances (//beliefs//) existent-elles? Les philosophes ont tendance à répondre par oui ou par non, mais Dennett cherche à justifier une position intermédiaire entre le réalisme et l'instrumentalisme. Dennett compare tout d'abord ces états psychologiques avec des entités abstraites comme les centres de gravité.
![[What kinds of minds are there?|Dennett (1996): chap. 1]]
Quels sont les types d'esprit qui existent? Et comment le savons nous? La première question est ontologique, la seconde est épistémologique. Les deux questions sont liées, car ce qui distingue les esprits des autres choses de l'univers tient précisément à la manière dont nous les connaissons. Nous savons que nous avons un esprit, et nous savons que nous avons un cerveau, mais il s'agit de connaissances d'un genre différent
!!We mind-havers, we minders
L'appartenance à la classe des choses dotées d'un esprit a des implications morales.
!!Words and minds
Quiconque comprend les mots que j'écris ou que je prononce a un esprit, car seuls les esprits sont capables de comprendre le langage. Les êtres humains partagent un monde subjectif, d'une manière qui est tout à fait inaccessible aux autres animaux, grâce au langage que nous parlons. Aucun autre moyen de communication n'est aussi puissant pour partager des expériences entre individus, pour comprendre ce que l'autre ressent, accéder à sa vie mentale, etc.
!!The problem of incommunicative minds
Peut-il y avoir des êtres dotés d'un esprit mais dépourvus de langage (donc incapables de communiquer)? Nous avons tendance à penser que oui. D'un autre côté, nous avons aussi tendance à penser que certaines créatures, comme les bactéries ou les plantes, n'ont pas d'esprit et agissent automatiquement, inconsciemment. Mais où se situe la frontière entre les uns et les autres? Le problème est que nous nous n'avons aucune garantie scientifique au-delà de nos intuitions quant aux choses qui ont ou n'ont pas un esprit. Or, nos intuitions peuvent nous tromper.
Ce que propose Dennett, pour chercher une réponse plus solide et plus convainquante, est d'adopter une perspective historique, évolutionniste: nous avons évolué à partir de créatures avec des esprits plus simples que le nôtre, qui ont évolué à partir de créatures encore plus simples. On peut ainsi remonter à une époque où il n'y avait pas d'esprits du tout sur la Terre. Comment les choses ont-elles commencé, et comment ont-elles évolué?
![[Intentionality: The intentional systems approach|Dennett (1996): chap. 2]]
L'auteur adopte une posture à la fois évolutionniste et interprétationniste concernant l'intentionnalité. Il faut en chercher les origines dans les premières macromolécules qui ont commencé à se répliquer et qui ont enclenché le processus évolutif, mais il s'agit en même temps d'une stratégie interprétative (prédictive) par laquelle nous //attribuons// à des systèmes simples une intentionnalité
!!Simple beginnings: The birth of agency
Les premières macromolécules, comme l'ARN et l'ADN, n'ont certainement pas d'esprit, mais elles ont une incroyable capacité de réplication. Elles sont sans doute les premiers objets capables de réaliser des //actions// (au lieu d'avoir seulement des //effets//). Contrairement à elles, les humains sommes capables d'actions //intentionnelles//. Cependant, l'agentivité inconsciente des macromolécules est la seule origine possible de notre propre agentivité. Nous sommes des descendants directs de ces machines autoréplicantes et notre corps en est entièrement constitué. Tous nos ancêtres sont des //systèmes intentionnels//:
|<<tiddler [[Dennett 1996:26/intentionalSystems]]>>|
!!Adopting the intentional stance
|<<tiddler [[Dennett 1996:27/intentionalStance]]>>|
Cette stratégie, si elle est employée avec précaution, peut dénouer les mystères de l'esprit, de tous les esprits. Elle consiste, basiquement, à traiter une entité comme un agent, afin de prédire son comportement. Elle se distingue de deux autres stratégies: la //physical stance// et la //design stance//. Les prédictions de la //design stance// marchent très bien pour les artefacts, mais aussi pour les êtres vivants et leurs parties (ces "artefacts de Mère Nature"). Les prédictions de l'//intentional stance// concernent des systèmes complexes et permettent de prédire leur comportement //comme si// ils étaient des agents rationnels [l'auteur emploie le //as if// p.31].
Ce qui caractérise un agent rationnel, dit Dennett, c'est le fait qu'il recherche son propre bien. +++[citation]
|<<tiddler [[Dennett 1996:31-32/agentsInterests]]>>|
La capacité qu'on les organismes de discriminer ce qui est bon ou mauvais pour eux et d'y apporter une réponse corporelle est l'origine des [[fonctions|fonction biologique]]. +++[citation]
|<<tiddler [[Dennett 1996:32-33/birthOfFunction]]>>|
L'//intentional stance// consiste à traiter les systèmes intentionnels (macromolécules, thermostats, plantes, amibes, etc.) comme des agents rationnels, c'est-à-dire à leur attribuer des actions intelligentes, de manière à faire des prédictions. +++[citation]
|<<tiddler [[Dennett 1996:34/agentsRationnels]]>>|
!!The misguided goal of propositional precision
Les philosophes commettent l'erreur de chercher à préciser le contenu de la "pensé" des animaux non-humains à partir du langage propositionnel humain. Or, celui-ci permet des distinctions fines qui n'ont aucune raison d'exister pour d'autres créatures. C'est-à-dire que nous cherchons à retrouver chez d'autres la même précision propositionnelle que chez l'homme.
!!Original and derived intentionality
Certains philosophes, dont [[Searle]], distinguent intentionnalité intrinsèque (ou originale) et dérivée, laquelle est propre des artefacts. Mais on peut considérer le cerveau humain comme un artefact créé par Mère Nature (l'évolution par sélection naturelle); il devrait donc n'avoir qu'une intentionalité dérivée.
[[Dennett]] cherche à comprendre l'esprit, les différentes formes d'esprits, depuis une perspective évolutionniste. L'esprit de l'animal humain est semblable à celui des autres animaux sur bien des points, et différent sur d'autres points. Pour comprendre ces similitudes et ces différences, il faut revenir sur les processus évolutifs qui les ont fait apparaître.
Dennett y reprend sa théorie de l'//[[intentional stance|Dennett (1987): The Intentional Stance]]//.
Where utter patternlessness or randomness prevails, nothing is predictable. The success of folk-psychological prediction, like the success of any prediction, depends on there being some order or pattern in the world to exploit
La capacité de prédire ou d'anticiper les phénomènes dépend de l'existence d'un ordre dans le monde. Si tout était aléatoire, il ne serait pas possible de faire de prédictions. L'attitude intentionnelle de Dennett sert à faire des prédictions fiables pour des comportements complexes. De même, l'attribution de //design// ou l'attribution d'une finalité permettent d'anticiper le comportement d'un système et orientent l'action relativement à ce système.
Mais la conviction que quelque chose possède une fonction, bien qu'on ne sache pas forcément laquelle, peut naître simplement du fait que la chose à laquelle on attribue la fonction ne semble pas aléatoire. Lorsque j'observe un ordre manifeste dans un objet, je peux me poser la question de son organisation, des fonctions de ses parties. Cette question n'aurait aucun sens pour quelque chose dont l'existence ou la configuration sont dus au hasard.
''Peut-être alors que l'attribution de fonctions est une explication de l'ordre que présente un système.''
I call all these entities, from the simplest to the most complex, //intentional systems//, and I call the perspective from which their agenthood (pseudo or genuine) is made visible, the //intentional stance//.
The intentional stance is the strategy of interpreting the behaviour of an entity (person, animal, artifact, whatever) by treating it as if it were a rational agent who governed its 'choice' of 'action' by a 'consideration' of its 'beliefs' and 'desires'.
The intentional stance is undeniably a useful shorcut in such a case [of a chess-playing computer], but how seriously should we take it? What does a computer care, really, about whether it wins or loses? Why say that the alarm clock //desires// to obey its master? We can use this contrast between natural and artificial goals to heighten our appreciation of the fact that all real goals ultimately spring from the predicament of a living, self-protective thing. But we must also recognize that the intentional stance //works// (when it does) whether or not the attributed goals are genuine or natural or 'really appreciated' by the so-called agent, and this tolerance is crucial to understanding how genuine goal-seeking could be established in the first place. Does the macromolecule //really// want to replicate itself? The intentional stance explains what is going on, regardeless of how we answer that question. Consider a simple organism_say, a planarian or an amoeba_moving non-randomly across the bottom of a laboratory dish, alway heading to the nutrient-rich end of the dish, or away from the toxic end. This organism is seeking the good, or shunning the bad_its own good and bad, not those of some human artifact-user. Seeking one's own good is a fundamental feature of any rational agent, but are these simple organisms seeking or just 'seeking'? We don't need to answer that question. The organism is a predictable intentional system in either case.
Even the simplest organisms, if they are to favor what is good for them, need some sense organs of discriminative powers_some simple switches that turn ON in the presence of good and OFF in its absence_and these switches, or //transducers//, must be united to the right bodily responses. This requirement is the birth of //function//. A rock can't malfunction, for it has been well- or ill-equipped to further any good. When we decide to interpret an entity from the intentional stance, it is as if we put ourselves in the role of its guardian, asking ourselves, in effect, "If //I// were in this organism's predicament, what would I do?" And here we expose the underlying anthropomorphism of the intentional stance: we treat all intentional systems as if they were just like us_which of course they are not.
//Intentional systems// are, by definition, all and only those entities whose behaviour is predictable/explicable from the intentional stance. Self-replicating macromolecules, thermostats, amoebas, plants, rats, bats, people, and chess-playing computers are all intentional systems_some much more interesting than others. Since the point of the intentional stance is to treat an entity as an agent in order to predict its actions, we have to suppose that it is a smart agent, since a stupid agent might do any dumb thing at all. This bold leap of supposing that the agent will make only the smart moves (given its limited perspective) is what gives us the leverage to make predictions. We describe that limited perspective by attributing //particular// beliefs and desires to the agent on the basis of its perception of the situation and its goals or needs.
Cette dimension admet deux valeurs :
| Valeur | Étiquette |h
|Valeur positive | {{*C(1)||$:/core/ui/TagTemplate}} |
|Pas de valeur explicite | {{*C(0)||$:/core/ui/TagTemplate}} |
|Dimensions |>|>|>| Valeurs | Total |h
|<br>[[Temporelle|DimensionTemporelle]]<br><br> | {{*T(0)||$:/core/ui/TagTemplate}}<br><small class="tw-menu-list-count"><$count filter="[tag[*T(0)]]"/></small> | {{*T(+1)||$:/core/ui/TagTemplate}}<br><small class="tw-menu-list-count"><$count filter="[tag[*T(+1)]]"/></small> |{{*T(-1)||$:/core/ui/TagTemplate}} <small class="tw-menu-list-count"><$count filter="[tag[*T(-1)]]"/></small> |{{*T(-2)||$:/core/ui/TagTemplate}} <small class="tw-menu-list-count"><$count filter="[tag[*T(-2)]]"/></small> | !<small class="tw-menu-list-count"><$count filter="[tag[*T(-2)]] [tag[*T(-1)]] [tag[*T(0)]] [tag[*T(+1)]]"/></small> |
|<br>[[Valorative|DimensionValorative]]<br><br> |{{*V(0)||$:/core/ui/TagTemplate}} <small class="tw-menu-list-count"><$count filter="[tag[*V(0)]]"/></small> |{{*V(1)||$:/core/ui/TagTemplate}} <small class="tw-menu-list-count"><$count filter="[tag[*V(1)]]"/></small> | Y a-t-il une attribution explicite de ''valeur'' (par exemple: utilité) ? |<| !<small class="tw-menu-list-count"><$count filter="[tag[*V(0)]] [tag[*V(1)]]"/></small> |
|<br>[[Systémique|DimensionSystémique]]<br><br> |{{*S(0)||$:/core/ui/TagTemplate}} <small class="tw-menu-list-count"><$count filter="[tag[*S(0)]]"/></small> |{{*S(1)||$:/core/ui/TagTemplate}} <small class="tw-menu-list-count"><$count filter="[tag[*S(1)]]"/></small> | La fonction d’un item dépend-elle du ''système'' auquel elle appartient ? |<| !<small class="tw-menu-list-count"><$count filter="[tag[*S(0)]] [tag[*S(1)]]"/></small> |
| <br>[[Contextuelle|DimensionContextuelle]] <br><br> | {{*C(0)||$:/core/ui/TagTemplate}} <small class="tw-menu-list-count"><$count filter="[tag[*C(0)]]"/></small> |{{*C(1)||$:/core/ui/TagTemplate}} <small class="tw-menu-list-count"><$count filter="[tag[*C(1)]]"/></small> | La fonction d’un item varie-t-elle selon l’''environnement'' dans lequel il se trouve ? |<| !<small class="tw-menu-list-count"><$count filter="[tag[*C(0)]] [tag[*C(1)]]"/></small> |
|!Variables |>|>|>|>|>|>|
|<br>[[Portée|Portée (variable)]]<br><br> | {{_token||$:/core/ui/TagTemplate}} <small class="tw-menu-list-count"><$count filter="[tag[_token]]"/></small> |{{_type||$:/core/ui/TagTemplate}} <small class="tw-menu-list-count"><$count filter="[tag[_type]]"/></small> | Un cœur (//''token''//) malformé a-t-il une fonction ?<br>Oui, si sa fonction dépend du ''type'' auquel il appartient. |<| !<small class="tw-menu-list-count"><$count filter="[tag[_token]] [tag[_type]]"/></small> |
|<br>[[Nature|Nature (variable)]]<br><br> | {{_effet||$:/core/ui/TagTemplate}} <small class="tw-menu-list-count"><$count filter="[tag[_effet]]"/></small> | {{_disposition||$:/core/ui/TagTemplate}} <small class="tw-menu-list-count"><$count filter="[tag[_disposition]]"/></small> | Un item doit-il ''effectivement réaliser'' sa fonction, ou suffit-il qu’il en ait la capacité, la ''disposition'' ? |<| !<small class="tw-menu-list-count"><$count filter="[tag[_effet]] [tag[_disposition]]"/></small> |
|<br>[[Caractère|Caractère (variable)]]<br><br> | {{_propre||$:/core/ui/TagTemplate}} <small class="tw-menu-list-count"><$count filter="[tag[_propre]]"/></small> |{{_relative||$:/core/ui/TagTemplate}} <small class="tw-menu-list-count"><$count filter="[tag[_relative]]"/></small> | La fonction est-elle ''propre'' à l’objet ou ''relative'' au choix (d’analyse) d’un observateur ? |<| !<small class="tw-menu-list-count"><$count filter="[tag[_propre]] [tag[_relative]]"/></small> |
|<br>[[Explication|Explication (variable)]]<br><br> | {{_E(0)||$:/core/ui/TagTemplate}} <small class="tw-menu-list-count"><$count filter="[tag[_E(0)]]"/></small> |{{_E(1)||$:/core/ui/TagTemplate}} <small class="tw-menu-list-count"><$count filter="[tag[_E(1)]]"/></small> | L’attribution fonctionnelle (ou téléologique) est-elle explicative, et de quoi est-elle alors l’explication ? |<| !<small class="tw-menu-list-count"><$count filter="[tag[_E(0)]] [tag[_E(1)]]"/></small> |
|<br>[[Artefacts|Artefacts (variable)]]<br><br> | {{_A(0)||$:/core/ui/TagTemplate}} <small class="tw-menu-list-count"><$count filter="[tag[_A(0)]]"/></small> |{{_A(1)||$:/core/ui/TagTemplate}} <small class="tw-menu-list-count"><$count filter="[tag[_A(1)]]"/></small> | La définition ou conception de l’auteur est-elle extensible aux artefacts [A(1)] ou réservée aux êtres vivants [A(0)] ? |<| !<small class="tw-menu-list-count"><$count filter="[tag[_A(0)]] [tag[_A(1)]]"/></small> |
Cette dimension admet deux valeurs :
| Valeur | Étiquette |h
|[[Valeur positive|*S(1)]] | {{*S(1)||$:/core/ui/TagTemplate}} |
|[[Pas de valeur explicite|*S(0)]] | {{*S(0)||$:/core/ui/TagTemplate}} |
La différence entre {{*T(-2)||tag}} et {{*T(-1)||tag}} pose notamment la question des FonctionsVestigiales. Lorsque le texte ne les distingue pas explicitement, il faut se poser la question suivante: De quelle manière la définition de l’auteur rend-elle compte des fonctions vestigiales?
Cette dimension admet quatre valeurs :
| Valeur | Étiquette | Conceptions |h
|[[Passé (histoire ancienne)|*T(-2)]] | {{*T(-2)||$:/core/ui/TagTemplate}} | <small class="tw-menu-list-count"><$count filter="[tag[*T(-2)]tag[.conception]]"/></small> |
|[[Passé (histoire récente)|*T(-1)]] | {{*T(-1)||$:/core/ui/TagTemplate}} | <small class="tw-menu-list-count"><$count filter="[tag[*T(-1)]tag[.conception]]"/></small> |
|[[Présent (anhistorique)|*T(0)]] | {{*T(0)||$:/core/ui/TagTemplate}} | <small class="tw-menu-list-count"><$count filter="[tag[*T(0)]tag[.conception]]"/></small> |
|[[Futur|*T(+1)]] | {{*T(+1)||$:/core/ui/TagTemplate}} | <small class="tw-menu-list-count"><$count filter="[tag[*T(+1)]tag[.conception]]"/></small> |
|>|!Total| !<small class="tw-menu-list-count"><$count filter="[tag[*T(-2)]] [tag[*T(-1)]] [tag[*T(0)]] [tag[*T(+1)] +tag[.conception]]"/></small> |
<br><hr>
|Histoire ancienne |Histoire récente |Présent (intemporel) |Futur (forward looking) |h
|{{*T(-2)||$:/core/ui/TagTemplate}} |{{*T(-1)||$:/core/ui/TagTemplate}} |{{*T(0)||$:/core/ui/TagTemplate}} |{{*T(+1)||$:/core/ui/TagTemplate}} |
|<$list filter="[tag[*T(-2)]sort[title]]"><$link to={{!!title}}><$view field="title"/></$link><br><br></$list> |<$list filter="[tag[*T(-1)]sort[title]]"><$link to={{!!title}}><$view field="title"/></$link><br><br></$list> |<$list filter="[tag[*T(0)]sort[title]]"><$link to={{!!title}}><$view field="title"/></$link><br><br></$list> |<$list filter="[tag[*T(+1)]sort[title]]"><$link to={{!!title}}><$view field="title"/></$link><br><br></$list> |
Cette dimension admet deux valeurs :
| Valeur | Étiquette |h
|Valeur positive | {{*V(1)||$:/core/ui/TagTemplate}} |
|Pas de valeur explicite | {{*V(0)||$:/core/ui/TagTemplate}} |
!!Description
Imaginons qu’une fuite dans un tuyau de gaz toxique provoque la mort de ceux qui essaient de la réparer. La fuite est une conséquence de l’existence d’un trou dans le tuyau, et elle explique pourquoi le trou continue à être présent.
Selon la [[définition de Wright|Wright, 1973: définition]], il faudrait dire que la fonction du trou est de laisser s’échapper le gaz toxique. Pourtant, cette attribution fonctionnelle est contre-intuitive. On ne peut pas dire que le trou soit là pour laisser s’échapper le gaz, à moins qu’il n’ait été percé intentionnellement dans ce but.
!!Auteurs
Ce contre-exemple a été formulé par Christopher Boorse ([[1976|Boorse, C. (1976): “Wright on Functions“]], p. 72) et repris par d’autres (Kitcher, [[1993|Kitcher, P. (1993): “Function and Design”]], p. 264).
Bedau ([[1991|Bedau (1991): “Can Biological Teleology be Naturalized?”]], p. 648) propose un exemple analogue avec un objet naturel non vivant : un bâton dans un cours d’eau.
!!Solutions et réponses
Il y a au moins trois manières de lever ces contre-exemples.
#La première, consiste à limiter les attributions fonctionnelles aux items qui sont le fruit d’une ''histoire sélective''.
#:C’est la solution qu’adoptent les partisans d’une solution basée sur la sélection naturelle.
#La seconde consiste à rappeler que chez Wright l’explication de la présence d’un item doit être interprétée à la lumière du ''type'' auquel cet item appartient.
#:Cette solution est notamment avancée par H.M. Zellner (2001, p. 506) : “At least in the actual world there is no reason why the fact that the gas typically asphyxiated scientists would cause the presence of the gas in individual instances. The gas is present in a given case because it asphyxiated this scientist, not because the presence of the gas typically asphyxiates scientists.”
#:@@color:red;Cette solution ne semble cependant pas être applicable à des contre-exemples comme celui du [[cholestérol|(Contre-exemple) Le cholestérol a pour fonction de boucher les artères]].@@
#La troisième consiste à limiter la définition étiologique aux conséquences d’un item dont on peut dire qu’elles sont ''bénéfiques ou avantageuses''
#: ce qui n’est évidemment pas le cas des exemples précédents, à moins de considérer que la fuite de gaz est un acte de malveillance qui, d’une manière ou d’une autre, bénéficie à celui qui l’a intentionnellement perpétré.
#:Cette troisième solution est privilégiée par les partisans d’une approche valorative des fonctions, comme celle de [[Bedau (1992)|Bedau (1992): “Where's the Good in Teleology?”]].
Si nous sommes dualistes et distinguons les personnes et les objets inertes, où se situent les plantes et les animaux? Dans l’une de ces deux catégories ou dans une position intermédiaire? Voir CatégorisationPrototypique de [[Rosch]].
«Now an explanation of a fact, e.g., the fall of an apple, can be said to be teleological, or in terms of purpose, when the hypothetical cause offered as explanation (e.g.,that a boy shook the tree) is regarded not as a "blind" occurrence, but as a "purposive" act, i.e., as being the effect in an agent of his desire for the fact (the fall of the apple) and of his belief that the act (shaking tree) would cause the fact. Obviously that is sometimes the exact history of the occurrence of the fall of an apple, and in every such case none but a teleological explanation will be correct, and therefore no other can ever replace it. This remain so, as already stated, even if "belief" and "desire" are themselves capable of being described as special kinds of mechanisms. Mechanism and teleology are therefore not logically incompatible.»
|"Il est toujours utile, lorsqu'il s'agit de s'informer sur le noyau notionnel d'un terme théorique passé dans le vocabulaire intellectuel d'emploi courant, de se référer à un dictionnaire de langue. Un dictionnaire de langue a ceci d'intéressant qu'il n'est lié que par l'obligation de rendre compte d'un usage attesté de chaque terme, et qu'à ce titre, il extrait assez correctement, sans égard particulier pour le spécialiste, la substance de ce qui, d'un concept, est retenu dans l'usage comme admissible par tous."|
{{textright{
Patrick Tort, "Darwinisme", dans Lecourt (dir.), //Dictionnaire d'histoire et philosophie des sciences//, PUF, 2003.
}}}
''<$count filter="[tag[.définition]tag[Fonctions]!source[]]" /> définitions du concept de fonction'' - <$button message="tw-new-tiddler" class="bluebutton" param=".Définition">Nouvelle définition</$button>
<$list filter="[tag[Fonctions]] [tag[Téléologie]] +[tag[.définition]!source[]each[source]sort[source]]">
! <$link to={{!!source}}><$view field="source"/></$link>
{{{[title{!!source}tags[]sort[title]] -[title[.conception]]||tag}}}
<$list filter="[tag[.définition]tag[Fonctions]source{!!source}]">
!!{{!!description}}
<<<
<$transclude/>
<<< <$link to={{!!title}}>p. <$view field="pages"/></$link>
</$list>
<hr><br>
{{Davies, 2001: 139||cit}}
En fait, cette remarque me semble d'autant plus pertinente que c'est bien ce que je me suis demandé à propos de l'[[explication de la vie|VieMinimale]] depuis la perspective [[évolutionniste|ApprocheDarwinienne]]. C'est-à-dire que si la vie dépend d'une évolution darwinienne, alors combien de générations faut-il attendre? Et attendre quoi?
;Attendre que l'évolution (donc la vie) __se manifeste__:
* elle exisistait peut-être déjà, mais on ne le savait pas; il y a une différence entre le moment où l'évolution (la vie) commence, et le moment où nous pouvons le vérifier; mais y a-t-il vraiment un moment déterminé où les choses commencent?
** oui, sauf qu'il peut être plus ou moins flou, et plus ou moins facile à cerner; tout dépend de ce qu'on appelle un 'moment': une seconde précise, une heure, un jour, un an, un millénaire, etc., ?
** non, mais on peut adopter une ontologie [[gradualiste|Gradualisme]]
* à partir du moment où nous pouvons dire qu'il y a évolution, nous pouvons dire qu'il y a vie; mais cela ne veut pas dire qu'une propriété nouvelle soit apparue; c'est plutôt un mode de description qui devient disponible, une catégorie qui devient applicable; ici on se place dans une perspective épistémique: la vie n'existe pas idépendamment de nos capacités et catégories cognitives
;Attendre que la vie apparaisse
* Si la vie est identifiée à l'évolution, alors la remarque de Davies s'applique pareillement
<span title="Edit section"><$button message="tw-edit-tiddler" class="btn-invisible"><small>{{$:/core/images/edit-button}}</small></$button></span>
Définition formulée par [[Sommerhoff]] sur laquelle s’appuient ensuite les partisans d’une ApprocheCybernétique comme [[Braithwaite]] et [[Nagel]] :
<<<
« A set of state-parameters of a physical system S is a set of epistemically independent parameters if the definition and imposed conditions of S, and the physical laws which are assumed to apply to it, admit arbitrary constellations of values of these parameters as possible initial states of S, and hence permit the initial values of these parameters to be treated as mutually independent variables.
Since any point of time in the natural developmetnt of S may be selected as an initial point of time, it is evident that, according to this definition, a set of state-parameters is epistemically independent if it is such that at any instant the value of no meinber of the set is determined by the value at that instant of one or more other members of the set by reason of the conditions imposed on the system.for that instant, or of the laws held to apply to it. »
:Cité par [[Lehman, H. (1965): "Functional Explanation in Biology"]], p. 3.
<<<
''<$count filter="[field:catégorie/exemple/!field:catégorie/contre-exemple/]" /> exemples - ''<$button message="tw-new-tiddler" class="btn-invisible" param="$:/_Template/Note">nouveau</$button><br>
<$list filter="[field:catégorie/exemple/!field:catégorie/contre-exemple/sort[title]]">
<$list filter="[is[current]has[description]!description[]]">
<h2><$link to={{!!title}}><$transclude field="description"/></$link></h2>
</$list>
<$list filter="[is[current]description[]]">
<h2><$link to={{!!title}}><$transclude field="title"/></$link></h2>
</$list>
<$list filter="[is[current]!has[source]] [is[current]has[source]source[]]">
<<<
<$transclude/>
<<<
</$list>
<$list filter="[is[current]has[source]!source[]]">
<<<
<$transclude/>
<<< <$link to={{!!source}}><$transclude field="source"/>, p.<$list filter="[is[current]!pages[]]"><$transclude field="pages"/></$list>.</$link>
</$list>
<$list filter="[is[current]has[à_propos_de]!à_propos_de[]]">
À propos de : <$link to={{!!à_propos_de}}><$transclude field="à_propos_de"/></$link>
</$list>
<hr>
</$list>
@@float:right;padding:0.5em;
<img src="http://upload.wikimedia.org/wikipedia/commons/thumb/2/2f/Dr._Ayala.jpg/800px-Dr._Ayala.jpg" width="120px">
@@
@@border:1px solid #323232;display:inline-block;float:right;padding:0.5em;
![[Cranial nerves]]
CN I – [[Olfactory]]
CN II – [[Optic]]
CN III – [[Oculomotor]]
CN IV – [[Trochlear]]
CN V – [[Trigeminal]]
CN VI – [[Abducens]]
CN VII – [[Facial]]
CN VIII – [[Vestibulocochlear]]
CN IX – [[Glossopharyngeal]]
CN X – [[Vagus]]
CN XI – [[Accessory]]
CN XII – [[Hypoglossal]]
@@
The olfactory nerve, or cranial nerve I, is the first of twelve cranial nerves. It is instrumental in the sense of smell. Derived from the embryonic nasal placode, the olfactory nerve is capable of regeneration. The olfactory nerve is sensory in nature and originates on the olfactory mucosa in the anterosuperior nasal cavity.[1] From the olfactory mucosa, the nerve travels down the olfactory tract until it reaches the olfactory bulb, where the fascicles of the olfactory nerve pass through foramina on the cribriform plate, which resides on the roof of the nasal cavity. These fascicles are not visible on a cadaver brain because they are severed upon removal.
@@border:1px solid #323232;display:block;width:160px;padding:0.5em;
!Contents
# Anatomy
# Testing
# Lesions
# See also
# External links
# Notes
@@
!Anatomy
The specialized olfactory receptor neurons of the olfactory nerve are located in the olfactory mucosa of the upper parts of the nasal cavity. The olfactory nerves do not form two trunks as do the remaining cranial nerves. Rather, they consist of a collection of many sensory nerve fibers that extend from the olfactory epithelium to the olfactory bulb, passing through the many openings of the Cribriform plate of the Ethmoid bone, a sieve-like structure.
Olfactory receptor neurons continue to be born throughout life and extend new axons to the olfactory bulb. Olfactory ensheathing glia wrap bundles of these axons and are thought to facilitate their passage into the central nervous system.
The sense of smell (olfaction) arises from the stimulation of olfactory (or odorant) receptors by small molecules of different spatial, chemical, and electrical properties that pass over the nasal epithelium in the nasal cavity during inhalation. These interactions are transduced into electrical activity in the olfactory bulb, which then transmits the electrical activity to other parts of the olfactory system and the rest of the central nervous system via the olfactory tract.
The olfactory nerve is the shortest of the twelve cranial nerves and only one of two cranial nerves (the other being the optic nerve) that do not join with the brainstem.
!Testing
Damage to this nerve impairs the sense of smell. To test the function of the olfactory nerve, doctors block one of the patient's nostrils and place a pungent odor (such as damp coffee essence) under the open nostril. The test is then repeated on the other nostril. If the patient can smell the coffee, not necessarily identify what it is, the patient’s olfactory nerve is functioning.
!Lesions
Lesions to the olfactory nerve can occur because of blunt trauma, such as coup-contra-coup damage, meningitis, and tumors of the frontal lobe. They often lead to a reduced ability to taste and smell. However, lesions of the olfactory nerve do not lead to a reduced ability to sense pain from the nasal epithelium. This is because pain from the nasal epithelium is not carried to the central nervous system by the olfactory nerve; rather, it is carried to the central nervous system by the trigeminal nerve (cranial nerve V).
Depuis Aristote au moins, expliquer c'est répondre aux questions du "comment" et du "pourquoi".
Voir:
* [[ExplicationScientifique]]
* [[ExplicationTéléologique]]
* [[Expliquer et comprendre]]
!![[PositivismeLogique]]
Les sciences décrivent et prédisent, mais n'expliquent pas; car le positivisme c'est l'espoir d'éliminer la métaphysique. Les théories scientifiques sont des "instruments" destinés à effectuer des prédictions observables plutôt que des explications de la réalité ou des représentations (vraies ou fausses) de la réalité.
!![[Modèle déductif-nomologique]]
A partir des années 1930, des philosophes comme [[Popper]], [[Hempel]] et [[Oppenheim]] remettent en question l'idée que les sciences empiriques n'expliquent pas les phénomènes. Dans les années '60 et '70, cette conception devient la "[[Received View]]": expliquer un phénomène, c'est montrer comment il peut être subsumé sous une loi de la nature. De cette manière, on peut expliquer un phénomène en le déduisant des lois de la nature et des conditions initiales: c'est le modèle déductif-nomologique (D-N)
!![[Modèle inductif-statistique]]
C'est une variante du modèle D-N où les lois sont statistiques. C'est le modèle I-S. Il est défendu par [[Hempel]], mais pas par tous les partisans du modèle D-N.
!![[Explication causale/mécanique]]
Beaucoup d'objections à la received view portent sur le fait que les modèles d'explication qu'elle propose n'ont pas de contraintes causales. Les opposants sont [[Michael Scriven|Scriven]] (à partir des années '50), [[Wesley Salmon|Salmon]] ('60), et [[Peter Railton|Railton]] ('70). Selon eux, expliquer un phénomène c'est en identifier les causes, ou en exposer les mécanismes sous-jacents.
!![[Explication comme Unification]]
Développée par [[Michael Friedman|Friedman]] et [[Philip Kitcher|Kitcher]], cette conception consiste à dire qu'on explique le monde quand on réduit le nombre de présuppositions indépendantes qu'il faut introduire pour rendre compte de ce qui s'y passe. On explique un phénomène dans la mesure où on l'inscrit dans une conception du monde ou //Weltanschauung//.
!![[Explication pragmatiste]]
D'autres auteurs, comme [[Achinstein]] et [[van Fraassen]] analysent l'explication (pas seulement scientifique) en termes pragmatistes (plutôt que causals, logiques, ou légaux).
----
Sous sa forme moderne, l'opposition entre expliquer et comprendre naît à la fin du XIXème siècle, à partir des termes allemands //erklären// et //verstehen//, dont le premier désigne le mode d'explication par des causes naturelles dans les sciences physiques, et le second, le mode d'explication par des raisons dans les sciences humaines. Mais en remontant aux sources de la pensée scientifique, on retrouve une opposition analogue entre le mécanisme et la finalité. Et cette dernière opposition peut être retracée jusqu'au //Phédon// de [[Platon]].
Dans le cadre de la philosophie allemande de la fin du XIXème siècle, l'opposition a été défendue par W. Dilthey et G. Simmel pour rendre compte de la méthode propres aux "sciences de l'esprit" dont l'Histoire fournissait le paradigme. La compréhension des choses de l'esprit, c'est-à-dire des choses qui relèvent non pas de la nature mais de la culture, requière une interprétation, une [[herméneutique|Herméneutique]].
Dans le cadre de la philosophie analytique de l'action et de l'esprit, l'opposition est liée à celle entre les raisons et les causes. [[Davidson]], par exemple, propose de traiter les raisons comme des causes, dans la mesure où il y a survenance du mental sur le physique, dans son monisme anomale. Cette question est toujours d'actualité quand on parle de la causalité mentale.
Voir le texte de K.O. Apel, //Expliquer et Comprendre//.
Voir [[Davidson]], [[Dennett]], et [[Rorty]].
L'attribution de croyances et désirs dans le cadre de la folk psychology dépend de la corrélation du comportement, verbal et autre, avec l'environnement. Le contenu de nos croyances est une fonction des objets et circonstances publiques, il n'est pas enfermé dans notre tête. Le contenu des croyances est contextuel, il n'est pas quelque part dans la tête.
<<tiddler Concepts>>
++++![Histoire]
The word ''FUNCTION'' first appears in a Latin manuscript "Methodus tangentium inversa, seu de fuctionibus" written by [[Gottfried Wilhelm Leibniz|Leibniz]] (1646-1716) in 1673. Leibniz used the word in the non-analytical sense, as a magnitude which performs a special duty. He considered a function in terms of "mathematical job" — the "employee" being just a curve. He apparently conceived of a line doing "something" in a given //figura// ["aliis linearum in figura data functiones facientium generibus assumtis"]. From the beginning of his manuscript, however, Leibniz demonstrated that he already possessed the idea of function, a term he denominates //relatio//.
A paper "De linea ex lineis numero infinitis ordinatim..." in the //Acta Eruditorum// of April 1692, pp. 169-170, signed "O. V. E." but probably written by Leibniz, uses //functiones// in a sense to denote the various 'offices' which a straight line may fulfil in relation to a curve, viz. its tangent, normal, etc.
In the Acta Eruditorum of July 1694, "Nova Calculi differentialis..." (page 316), Leibniz used the word //function// almost in its technical sense, defining //function// as "a part of a straight line which is cut off by straight lines drawn solely by means of a fixed point, and of a point in the curve which is given together with its degree of curvature." The examples given were the ordinate, abscissa, tangent, normal, etc. [Cf. page 150 of Leibniz' "Mathematische Schriften," vol. III, edited by C. I. Gerhardt, ~Berlin-Halle (~Asher-Schmidt), 1849-63.]
In September 1694, Johann Bernoulli wrote in a letter to Leibniz, "quantitatem quomodocunque formatam ex indeterminatis et constantibus," although there is no explicit reference to the Latin term //functio//. The letter appears in //Mathematische Schriften//.
On July 5, 1698, Johann Bernoulli, in another letter to Leibniz, for the first time deliberately assigned a specialized use of the term //function// in the analytical sense, writing "earum [applicatarum] quaecunque functiones per alias applicatas //PZ// expressae." (Cajori 1919, page 211) [Cf. page 507 of Leibniz' "Mathematische Schriften," vol. III, edited by C. I. Gerhardt, ~Berlin-Halle (~Asher-Schmidt), 1849-63. Also see pages 506-510 and 525-526] At the end of that month, Leibniz replied (p. 526), showing his approval.
''//Function//'' is found in English in 1779 in //Chambers' Cyclopedia//: "The term function is used in algebra, for an analytical expression any way compounded of a variable quantity, and of numbers, or constant quantities" (~OED2).
(Information for this entry was provided by Julio González Cabillón and the ~OED2.)
:(source: http://members.aol.com/jeff570/mathword.html)
===
On attribue une fonction à un item X (dans un système S) pour répondre à quatre types de questions:
*Pourquoi X a-t-il été créé?
*A quoi X sert-il? (//What it is good for?//)
*Pourquoi X existe-t-il?
*Quel est le rôle de X dans le système S?
''La première question'' renvoie à un agent, qui est le créateur de X. La fonction dans ce cas est ''relative à une intention'' du créateur. C'est donc une conception de type [[mentaliste|Mentalisme]]. L'interprétation la plus courante est [[créationniste|Créationnisme]]: le créateur est un homme ou un Dieu. Dans un cadre scientifique, on peut adopter une interprétation métaphorique; l'attribution de fonctions pouvant ainsi être considérée comme une façon de parler. Une autre interprétation, non religieuse ni mentaliste, est cependant possible. C'est celle que propose [[Philip Kitcher|Kitcher, P (1998): "Function and Design"]] quand il conçoit les fonctions biologiques en termes de //[[design|Design]]//.
''La seconde question'' implique des valeurs. Elle met l'accent sur le fait que la fonction de X est toujours, d'une manière ou d'une autre, positive, bénéfique. Elle suppose que l'item X est, d'une manière ou d'une autre, //bon pour// quelque chose. Le cœur, par exemple, fait plusieurs choses: il pompe le sang, il fait du bruit, etc., mais ces activités n'ont pas toutes une utilité. Le bruit du cœur ne sert à rien (bien qu'il puisse être utilisé pour déceler une maladie cardiaque), il n'a pas de fonction. Le problème est de savoir qui réalise l'évaluation; autrement dit, une fonction est une activité bonne pour qui ou pour quoi? C'est le problème de l'[[Objectivité]] des valeurs. Ce problème fait que les interprétations du concept de fonction en termes de valeurs aient été écartées car dénuées de valeur scientifique (voir [[Hempel]] et [[Canfield]] ?). Je crois que [[Ayala]] défend aussi une conception en termes d'utilité. Le dernier en date est sans doute [[Bedau|Bedau (1992): “Where's the Good in Teleology?”]].
''La troisième question'' est d'ordre historique. C'est le passé, l'
La fonction de X est ce pour quoi X:
*''a été créé'' +++
*Mentalisme: X a été créé par quelqu'un dans un certain but. La fonction de X correspond à l'intention originelle.
*Design:
===
*''existe''; elle est sa raison d'être.
*''est utile'', ce à quoi il sert.
*''est bon'' (//What it is good for//).
De quel genre d'entité s'agit-il? Est-ce une [[propriété|Propriété]]?
![[Trois problèmes classiques|Fonctions: trois problèmes classiques]]
<<tiddler [[Fonctions: trois problèmes classiques]]>>
----
++++[Nuage de mots-clefs]>
<<tagCloud =Fonction>>
===
----
[[Davies]] utilise des exemples du domaine biologique, mais sa conception des fonctions systémiques n'a rien de spécifique à la biologie. De fait, il cite également des exemples techniques (fibre optique) ou physiques (dissolution de cristaux de sel). Mais dans ce cas son raisonnement devrait également être applicable au discours des physiciens, et pas seulement à celui des biologistes. Or, les physiciens n'utilisent pas (ou pas de la même manière et pas ouvertement) le concept de fonction, malgré le fait qu'ils emploient une démarche analytique telle que la décrit l'auteur. Donc, si les physiciens peuvent s'en passer, pourquoi les biologistes en auraient-ils besoin, puisque leur démarche analytique est comparable?
La théorie de Davies est donc insatisfaisante, car ou bien il fait des fonctions une simple façon de parler, qui peut être plus ou moins partagée par les physiciens et les biologistes, et alors il n'y a pas plus de propriétés fonctionnelles en biologie qu'en physique, ou bien les fonctions font référence à quelque chose de plus substantiel, mais alors Davies n'explique pas pourquoi les physiciens peuvent s'en passer et pas les biologistes.
Il me semble qu'on oscille entre une conception étiologique trop spécifique à la biologie, et une conception systémique qui n'a rien de spécifique à la biologie.
Voir aussi: [[Biologie et physique: le hasard et la nécessité]]
[[Woodfield (1976)|Woodfield, A. (1976): Teleology]], p.108, énonce trois problèmes liés aux fonctions:
#[[Hempel]]'s problem. Why is it that only some of an item's activities are functions, and the others accidental?
#[[Nagel]]'s problem. Why is it that we ascribe functions to the parts of some systems (like organisms) but not to the parts of others (like the solar system)?
#The problem of functional explanation. How can it be explanatory of an item to cite one of its effects?
//Naissance de la clinique// est une histoire du regard médical et de ses transformations avec l'apparition de la clinique. C'est une histoire de la constitution du sujet, le malade, tel qu'il peut devenir objet de connaissance. C'est donc une histoire de l'[[objectivité|Objectivité]] médicale.
!Chapitres
!!1. Espaces et classes
La médecine des espèces: classification des maladies.
!!2. Une conscience politique
Dimension sociale, populationnelle de la maladie (épidémies...)
!!3. Le champ libre
Réorganisation de la formation médicale avec la Révolution.
!!4. Vieillesse de la clinique
Les premières cliniques
!!5. La leçon des hôpitaux
[…] L'idée d'un domaine transparent, sans cloisonnement, ouvert de fond en comble à un regard armé pourtant de ses privilèges et de sa compétence, dissipait ses propres difficultés dans les pouvoirs prêtés à la liberté: en elle, ''la maladie devait formuler d'elle-même une vérité inaltérée et offerte, sans trouble, au regard du médecin'' […]
Le regard [clinique] n'est plus réducteur, mais fondateur de l'individu dans sa qualité irréductible. Et par là il devient possible d'organiser autour de lui un langage rationnel. ''L'//objet// du discours peut aussi bien être un //sujet//, sans que les figures de l'objectivité soient pour autant altérées.'' C'est cette réorganisation //formelle et en profondeur//, plus que l'abandon des théories et des vieux systèmes, qui a ouvert la possibilité d'une //expérience clinique//; elle a levé le vieil interdit aristotélicien: ''on pourra enfin tenir sur l'individu un discours à structure scientifique''.
[…] commenter, c'est admettre par définition un excès du signifié sur le signifiant, un reste nécessairement non formulé de la pensée que le langage a laissé dans l'ombre, résidu qui en est l'essence elle-même, poussée hors de son secret; mais commenter suppose aussi que ce non-parlé dort dans la parole, et que, par une surabondance propre au signifiant, on peut en l'interrogeant faire parler un contenu qui n'était pas explicitement signifié. […]
<<tiddler Idées>>Dans la [[définition de la vie|VieDéfinition]] de [[Varela]], il faut une membrane, car on comprend que la membrane permet d'éviter la dilution des éléments de l'organisme. Cette membrane peut être de type vésicule, ou elle peut être extérieure à l'organisme, comme une goutte de lipides ou d'hydrocarbures, ou comme une poche minérale à l'intérieur de laquelle les éléments chimiques sont concentrés.
Mais on peut envisager la frontière du vivant autrement qu'avec une membrane. Il me semble que dans la définition autopoïétique de [[Varela]] et [[Maturana]], l'identité de l'organisme est déterminée par la chaîne fermée de réactions chimiques, de type: A -> B -> C -> A
Un troisième type de frontière est d'ordre ThermoDynamique. Selon la définition de [[Carl Sagan|Sagan]], les êtres vivants sont des régions de l'espace où l'entropie diminue (ordre local), alors qu'elle augmente dans l'environnement, grâce à un flux d'énergie. Pour rendre compte de cette différence thermodynamique, il faut bien définir un intérieur et un extérieur du système.
! <span title="Edit section"><$button message="tw-edit-tiddler" param={{!!title}} class="btn-invisible"><$view field="title"/></$button></span>
<$transclude/>
La nature des espèces biologiques est un problème central de la philosophie de la biologie. Elles ont longtemps été considérées comme des genres naturels paradigmatiques. Le système de classification linnéen groupe les organismes en espèces et genres en vertu de leurs ressemblances morphologiques, mais les taxa plus élevés (famille, ordre, classe, phylum, règne) sont des divisions purement conventionnelles qui ont une fonction heuristique en biologie. Le problème qui se pose est de savoir si les espèces reflètent une division naturelle de la réalité ontologique, et si elles doivent être considérées considérées comme des individus plutôt que comme des genres.
A la suite de Quine, certains réalistes ont développé son intuition que les membres d'un genre naturel partagent des familles de propriétés qui ont été groupées de façon contingente par la nature (Boyd 1999; Millikan 1999). C'est-à-dire que ces familles de propriétés sont groupées ensemble à travers le temps à cause de la présence de certaines propriétés qui favorisent la présence des autres, ou à cause de mécanismes internes ou externes qui tendent à faire coïncider ces propriétés. Un genre naturel serait ainsi une famille de propriétés coïncidentes pouvant être employé pour faire des inférences inductives dans le cadre d'une explication scientifique. Étant donné que des contraintes environnementales peuvent altérer au cours du temps l'ensemble des propriétés associées à un genre, aucune des propriétés de l'ensemble n'est individuellement nécessaire pour déterminer l'appartenance au genre.+++[...]
<br>Boyd (1999) considère que les espèces biologiques sont des cas paradigmatiques de "//natural kind clusters//", où le groupement est du à un mécanisme homéostatique. Ce mécanisme fait en sorte que les déviations par rapport au cluster ont peu de chances de prospérer. C'est un mécanisme d'auto-régulation qui maintient un ensemble stable de propriétés. (Autrement dit, la plupart des variations ne sont pas adaptatives et réduisent les chances de survie ou de reproduction.)
<br>Les frontières d'un genre naturel peuvent être floues. Les //cluster kinds// forment cependant un genre (critère 4). Leurs membres ont au moins une propriété en commun (critère 1). Etant donné que l'émergence des //cluster kinds// n'est pas entièrement aléatoire mais déterminée par des mécanismes causals-historiques, ils sont par conséquent suffisamment robustes pour supporter l'induction (critère 2) et les lois de la nature (critère 3). En revanche, comme leurs frontières sont vagues, un //cluster kind realist// renoncera à ce qu'ils soient catégoriellement distincts (critère 6). Il peut être neutre quant aux hiérarchies (critère 5).
===
Le [[naturalisme|Naturalisme]] à propos des genres naturels s'oppose au ''conventionnalisme'' (ou [[constructivisme|Constructivisme]]) selon lequel les genres naturels n'existent pas indépendamment de nous. Les genres auxquels font référence les sciences sont relatives à nos intérêts épistémiques (scientifiques) qui sont des intérêts parmi d'autres. Les conventionnalistes nient qu'il y ait des formes naturellement privilégiées de classification. On peut en distinguer deux formes: une faible et une forte.
*Le ''conventionnalisme faible'' est un scepticisme à propos des classifications dont nous disposons actuellement; il est compatible avec le réalisme.
*Le ''conventionnalisme fort'' nie l'existence même (et pas seulement la connaissance) de classifications naturelles.
*Le ''relativisme ontologique'' est la forme la plus forte de conventionnalisme. C'est l'idée défendue par [[Goodman (1978)|Goodman, N (1978): Ways of Worldmaking]] selon laquelle toutes les entités, processus, relations, etc., sont relatifs à un [[Schème conceptuel]]. Il y a donc plusieurs manières égalemnt légitimes de "faire des mondes". L'idée qu'il y aurait une unique classification conceptuelle de la réalité est un mythe.
On peut également distinguer entre les conventionnalismes //''métaphysique''// et //''épistémique''// (Kukla 2000:4):
*Le ''conventionnalisme métaphysique'' affirme que les faits concernant le monde sont inventés, comme les genres sexuels, l'identité personnelle, etc. Les entités de la physique, de la chimie ou de la biologie seraient construites plutôt que découvertes.
*Le ''conventionnalisme épistémique'' affirme qu'il n'y a pas de garantie rationnelle objective pour aucune croyance: les garanties sont relatives à la culture, à la religion, aux paradigmes scientifiques, aux intérêts pratiques, voire même aux présupposés idéologiques.
L'affirmation majeure de toutes les formes de conventionnalisme est que les faits concernant le monde dépendent des êtres humains, de leurs concepts ou de leurs activités. Cette idée a été analysée de différentes manières par les constructivistes. Kukla (2000:ch.3) distingue trois formes de dépendance:
#''Matérielle:'' Les entités scientifiques sont construites par les activités des scientifiques dans leurs laboratoires. Ce sont, autrement dit, des entités artificiellement produites dans un environnement contrôlé qui ne correspond pas aux conditions naturelles.
#''Causale:'' Les genres naturels sont des conséquences de l'activité humaine. Par exemple, les scientifiques ne découvrent pas une nouvelle espèce, ils en stipulent une, et de cette manière sont causalement responsables de la construction d'un nouveau concept d'espèce dans le paradigme scientifique. Cest différent de la dépendance matérielle dans la mesure où le scientifique ne crée pas une nouvelle espèce mais la classification correspondante.
#''Constitutive:'' Les conventions sont constitutives des faits physiques, c'est-à-dire de la classification des espèces, par exemple.
Il y a trois arguments qui permettent de douter que les espèces soient des genres naturels:
*La similarité intrinsèque entre deux individus n'est pas suffisante pour qu'ils fassent partie d'une même espèce.+++[...]> Ainsi, deux individus identiques ne feront pas partie de la même espèce s'ils n'ont pas un ancêtre commun (un chat martien, par exemple, strictement identique à un chat terrien, ne fera pas partie de la même espèce).===
*La similarité intrinsèque entre deux individus n'est pas non plus nécessaire.+++[...]> Il ne semble pas y avoir de propriété essentielle partagée par tous les membres d'une espèce et seulement par eux.===
*Les espèces biologiques évoluent au cours du temps, de sorte que leurs propriétés essentielles présumées (si elles existent) sont susceptibles de changer.+++[...]> De plus, si la spéciation est un processus graduel, alors la détermination précise des frontières entre espèces n'est pas toujours possible. Par conséquent, la distinction catégorielle (critère 6) n'est pas non plus respectée.===
Mais le fait que les espèces ne soient pas des genres naturels n'implique pas l'abandon d'une conception réaliste à leur égard, car si elles ne sont pas des genres, elles peuvent être des //individus// dont les organismes seraient les parties.
Par ailleurs, si les espèces sont des genres naturels, alors on est confronté au problème de la pluralité des concepts d'espèce, lequel peut conduire à une conception conventionnaliste. Mais les naturalistes à propos des classifications nient le fait que les disputes concernant la systématique reflètent une indétermination dans le monde naturel. Ici le [[Monisme]] et le [[Pluralisme]] s'opposent. L'un pense que l'un des concepts est supérieur aux autres, l'autre défend l'idée contraire. Mais même le pluralisme peut être réaliste (Kitcher 1984; Dupré 1993; Ereshefsky 1992).
[[Kripke]] (1971, 1972) et [[Putnam]] (1975) utilisent les genres animaux comme exemples de genres naturels pour lesquels des essences //a posteriori// peuvent être découvertes. Ces essences sont des propriétés microstructurelles intrinsèques qui sont individuellement nécessaires et conjointement suffisantes pour qu'une entité soit membre du genre. Cependant, les différents concepts d'espèce s'appuient plutôt sur des propriétés relationnelles telles que la descendance commune ou l'interfertilité. Les propriétés essentielles peuvent aussi être d'ordre historique. Par exemple, on peut dire qu'il est essentiel pour l'espèce //Mus minutoides// (une souris pigmée africaine) d'appartenir à la famille des //Muridae// et à l'ordre //Rodentia//, car il est essentiel que toutes les souris pigmées africaines appartiennent à cette famille et à cet ordre.
Les genres naturels ont-ils une essence? On doit distinguer deux affirmations différentes. La première est que l'appartenance au genre //G// est une propriété essentielle du particulier //p//. La seconde est que les genres eux-mêmes ont des propriétés essentielles. La première affirmation implique la seconde, mais la seconde n'implique pas forcément la première.
Le réalisme des genres naturels peut être vu comme identique ou seulement analogue au réalisme des universaux. Le //fondamentalisme// est la conception selon laquelle non seulement il existe des genres naturels, mais ceux-ci ont une place //sui generis// dans notre ontologie.
On considère habituellement qu'il existe des manières //naturelles// de classer les choses, par opposition aux classifications arbitraires, conventionnelles ou fondées sur nos intérêts humains. Cette conception est appelée [[Naturalisme]]. On l'appelle également [[réalisme|Réalisme]] dans la mesure où le naturalisme est une conséquence ou un élément du [[réalisme scientifique|RéalismeScientifique]], mais le naturalisme peut ne pas avoir d'engagement ontologique concernant l'existence des genres eux-mêmes
Le naturalisme ne défend pas que toutes les catégories naturelles sont vraiment naturelles, puisque l'on peut se tromper. Par exemple, ce que nous appelons le jade n'est pas un genre naturel car il correspond en réalité à deux minéraux différents. Le naturalisme est la conception selon laquelle il y a des divisions naturelles entre les choses, de sorte que quand nous essayons d'établir une classification naturelle, le caractère naturel ou pas de cette classification est une question de fait (//there's a fact of the matter//).
Critères de classification
|<<tiddler [[./critèresCommuns]]>>|
|<<tiddler [[./critèresDiscutables]]>>|
Critères Communs
//Les critères ou caractéristiques habituellement citées des classifications de genres naturels sont les suivants://
{{indent{
''1.'' Les membres d'un genre naturel présumé doivent ''avoir en commun une [[propriété|Propriété]] (naturelle)''.+++[...]> On entend généralement par là une [[propriété intrinsèque|Propriété intrinsèque]].===
''2.'' Les genres naturels doivent permettre des ''généralisations inductives''.+++[...]> (Ce point est notamment défendu par Quine 1969.)===
''3.'' Les genres naturels doivent 'participer' des ''lois de la nature''.+++[...]> (C'est une version forte du critère 2)===
''4.'' Les membres d'un genre naturel doivent ''former un genre''.+++[...]>
Les critères 1-3 donnent des conditions nécessaires mais pas suffisantes. Par exemple, les objets avec une charge électrique négative ou avec une masse de 1 kg ont une propriété en commun, mais ils ne constituent pas un genre. Le problème c'est qu'on ne sait pas vraiment ce qu'est un genre.===
}}}</part>
<part critèresDiscutables hidden>//D'autres critères parfois suggérés sont plus discutables://
{{indent{
''5.'' Les genres naturels doivent former une ''hiérarchie''.+++[...]> (Si deux genres se superposent, l'un doit être un sous-genre de l'autre, ou alors ils sont identiques.===
''6.'' Les genres naturels doivent être ''catégoriellement distincts''.+++[...]>
Il ne peut pas y avoir une transition continue d'un genre à un autre, car sinon les frontières entre genres ne seraient pas dessinées par la nature, mais d'une manière ou d'une autre par nous, auquel cas les genres ne seraient pas tout à fait naturels.===
}}}
[[Dupré (1993)|Dupré, J (1993): The Disorder of Things]] défend l'idée qu'il y a d'innombrables manières de classifier le monde en genres. La structure du monde est complexe et peut être catégorisée de différentes façons, relativement aux intérêts épistémiques que l'on poursuit. Mais il n'est pas pour autant [[conventionnaliste|Genre naturel (conventionnalisme)]]; au contraire, il a plutôt un engagement [[naturaliste|Naturalisme]] et [[réaliste|Réalisme]] vis-à-vis des genres naturels. Il accepte que les genres naturels ont des propriétés en commun, mais nie que ce soient des propriétés intrinsèques (critère 1). Il nie également qu'il y ait dans le monde une structure hiérarchique des genres naturels et que les genres soient catégoriellement distincts.+++[...]
<br>[[Dupré (1993:28)|Dupré, J (1993): The Disorder of Things]] affirme que le //promiscuous realism// reflète nos pratiques classificatoires dans les domaines du sens commun et des sciences particulières. Les premières ne correspondent pas forcément aux secondes, mais les deux sont également légitimes dans la mesure où elles répondent à des intérêts différents. Les conflits de classification ont également lieu à l'intérieur même des pratiques scientifiques, comme à l'intérieur de la biologie avec les multiples classifications taxonomiques possibles des espèces. Il s'agit de classifications également légitimes et objectivement fondées. Il n'y a donc pas de façon unique de découper le monde selon ses jointures.===
Le ''réalisme'' à propos des genres naturels est la conception selon laquelle les entités auxquelles correspondent les genres naturels existent bel et bien. Tandis que le naturalisme à propos des classifications naturelles dit qu'il existe des manières naturelles de classer les choses mais n'implique pas un engagement ontologique, le réalisme implique lui un engagement ontologique. C'est-à-dire que la différence entre l'or et l'argent n'est pas seulement une différence entre deux groupes de choses naturelles, mais une différence entre deux entités distinctes: l'//or// et l'//argent//.+++[...]
<br>Le débat entre le réalisme et le nominalisme est un débat ontologique sur la nécessité d'invoquer, pour rendre compte des propriétés, une classe d'entités que sont les [[universaux|Universaux]]. Le débat concernant les genres naturels est analogue: pour rendre compte des catégories naturelles et des classifications naturelles les choses, faut-il invoquer une entité ontologique particulière? Un nominaliste pourrait admettre qu'il y a des manières naturelles de classer les individus en genres, mais il n'admet pas l'existence d'autres objets au-delà des individus eux-mêmes. Le réaliste (fort), au contraire, affirme qu'on ne peut pas rendre compte de la distinction entre classifications naturelles et non-naturelles sans invoquer des entités particulières que sont les genres naturels. Le naturaliste affirme qu'il y a une différence métaphysique entre les classifications naturelles et non-naturelles, mais il n'a pas besoin de s'engager vis-à-vis de l'existence d'entités ontologiques particulières que seraient les genres naturels.===
[[Quine (1969)|Quine (1969): “Natural Kinds”]] accepte les classifications naturelles en genres. Il soutient que les genres sont des ensembles et défend ainsi une forme de [[Réalisme]] (minimal) des genres. Il identifie genre et similarité, et fait de la similarité la base de l'induction. Un genre naturel est un ensemble dont les membres partagent une propriété naturelle (de sorte que l'ensemble des objets blancs est un candidat à genre naturel).
''Métaphysique:'' Que //sont// les genres naturels?++++[...]
#Les genres que nous considérons comme étant des genres 'naturels' sont-ils vraiment naturels? +++[...]>
Le problème est de savoir, parmi les genres auxquels la science fait appel, lesquels correspondent à de vrais genres naturels (existant dans la nature, pour ainsi dire) et lesquels sont seulement conventionnels (fixés par nous plutôt que par la nature).
===
#Les genres naturels ont-ils des [[essences|Essence]]? +++[...]>
Le problème est de savoir s'il y a des propriétés qui sont essentielles pour l'appartenance à un genre. Pour les essentialistes, l'essence d'un genre naturel serait une [[propriété|Propriété]] ou un ensemble de propriétés dont la possession est une condition nécessaire et suffisante pour qu'un individu appartienne au genre.
===
#Les genres naturels sont-ils des entités ontologiques de base ou peut-on les dériver ou les réduire à d'autres entités (les [[Universaux]], pex.)?+++[...]>
On peut voir les genres comme des entités ontologiques de base, ou au contraire chercher à les réduire à d'autres entités comme les universaux (Armstrong 1978, 1997) ou à des //clusters// de propriétés (Boyd 1991, Millikan 1999).
===
===
!Natural kind
(//Ce texte est une version abrégées et adaptée de l'article de la Stanford Encyclopedia of Philosophy//)
Les disciplines scientifiques divisent les entités particulières qu'elles étudient en ''genres'' et élaborent des théories à leur propos. Dire qu'un genre est //naturel// c'est dire qu'il correspond à un groupement ou un ordonnancement qui ne dépend pas des êtres humains (ni d'autres agents épistémiques).
Les éléments et les composés chimiques (H~~2~~O) sont souvent cités comme exemples paradigmatiques de genres naturels. On peut également mentionner les particules physiques élémentaires (électron, quark top), ainsi que les genres auxquelles elles appartiennent (lepton, quark), ou encore les genres plus élevés (fermion, boson). En biologie, l'identification des genres est plus problématique. On a longtemps pensé que les [[espèces|Espèce (biologie)]] étaient des genres naturels, mais la mutabilité des espèces et des individus qui les composent contraste avec l'[[invariance|Invariance]] (immuabilité) qu'on attribue généralement aux genres.
|<<tiddler [[./deuxQuestions]]>>|
<part deuxQuestions hidden>Les genres naturels posent deux types de questions:
*<<tiddler [[Genre naturel: questions métaphysiques]]>>
*''Sémantique:'' Que //signifient// les termes de genres naturels (//natural kind terms//) et à quoi font-ils référence?
</part>
!Métaphysique des genres naturels [[→|Genre naturel (métaphysique)]]
<<tiddler [[Genre naturel (métaphysique)]]>>
!Métaphysique des genres naturels dans les sciences[[→|Genre naturel (métaphysique scientifique)]]
<<tiddler [[Genre naturel (métaphysique scientifique)]]>>
!Semantique des genres naturels [[→|Genre naturel (sémantique)]]
<<tiddler [[Genre naturel (sémantique)]]>>
Fait référence aux comportements dirigés vers un but. Ce concept est particulièrement analysé par les partisans d’une ApprocheSystémique qui veulent rendre compte du comportement apparemment [[téléologique|Téléologie]] de certains [[systèmes complexes|Système]].
Le concept fait effectivement référence à une fin ou un but, mais les approches systémiques entendent cela au sens de l’état "final" d’un système ou d’un processus. L'exemple le plus évident est celui du thermostat ou du régulateur à boules qui tend toujours vers un certain état prédéfini par le système. Le but peut également être entendu comme ce vers quoi se dirige un missile auto-dirigé.
Par ailleurs, le comportement [[téléologique|Téléologie]] ou [[téléonomique|Téléonomie]] est généralement entendu dans le cadre d’une relation Moyens-Fin. L’activité analysée, à laquelle on attribue une fonction, étant le moyen de l’accomplissement d’une fin du système contenant.
« Biological functions are dispositions or effects a trait has which explain the ''recent maintenance of the trait under natural selection''. This is the "modern history" approach to functions. »
«The function of m is to F iff:
(i) m is a member of family T,
(ii) members of family T are components of biologically real systems of type S,
(iii) among the properties copied between members of T is property or property cluster C,
(iv) one reason members of T such as m exist now is the fact that past members of T were successful under selection, through positively contributing to the fitness of systems of type S, and
(v) members of T were selected because they did F, through having C. »
« The proper functions of a biological trait are the functions it is ascribed in a functional analysis of the capacity to survive and reproduce (fitness) which has been displayed by animals with that feature. This means that a feature will have a proper function only if it is an adaptation for that function. The trait must have been selected because it performs that function. »
« The proper functions of a trait are those effects of the trait which were components of the fitness of ancestors. They are the effects in virtue of wich the trait was selected, the effects for wich it is an adaptation. »
«Where i is a trait of systems of type S, a proper function of i in S's is F iff a selective explanation of the current non-zero proportion of S's with i must cite F as a component in the fitness conferred by i.»
Añadir esto a un stylesheet:
```
.titlebar button {
opacity: 0;
}
.titlebar:hover button {
opacity: 1;
}
```
« @@color:red;''I am not going to answer this question. In fact, I doubt if it will ever be possible to give a full answer, because we know what it feels like to be alive, just as we know what redness, or pain, or effort are.''@@ So we cannot describe them in terms of anything else. But it is not a foolish question to ask, because we often want to know whether a man is alive or not, and when we are dealing with the microscopic agents of disease, it is clear enough that bacteria are alive, but far from clear whether viruses, such as those which cause measles and smallpox, are so. »
:Passage reproduit dans M. Ruse (ed.), //Phillosophy of Biology//. New York: Prometheus Books, 1998, p.33
« There is no doubt, I think, that we can learn a lot more about life from a chemical than from a physical approach. This does not mean that life has been fully explained in terms of chemistry. It does mean that it is a pattern of chemical rather than physical events. [...] What is common to all life is the chemical events. And these are extraordinarily similar in very different organisms. ''We may say that life is essentially a pattern of chemical happenings'', and that in addition there is some building of a characteristic shape in almost all living things, characteristic motion in most animals, and feeling and purpose in some of them.
:Passage reproduit dans M. Ruse (ed.), //Phillosophy of Biology//. New York: Prometheus Books, 1998, p.33
« [...] Shakespeare's plays consist of words, whereas words are a very small part of Eisenstein's fims. It is important to know this, as it is important to know that life consists of chemical processes. But the arrangement of the words is even more important than the words themselves. And in the same way ''life is a @@color:red;pattern@@ of chemical processes''. [...] ''But to suppose that one can describe life fully on these lines is to attempt to reduce it to mechanism, which I believe to be impossible.'' On the other hand, to say that life does not consist of chemical processes is to my mind as futile and untrue as to say that poetry does not consist of words. »
:Passage reproduit dans M. Ruse (ed.), //Phillosophy of Biology//. New York: Prometheus Books, 1998, p.34
L'auteur propose une façon de concevoir les fonctions techniques alternative à celle proposée par [[Vermaas]] et [[Houkes]].
<<tabs "[tag[HelloWorld]]" "HelloWorldEnglish">>
<footer-right>Alberto Molina</footer-right>
<$list filter="[is[current]tagging[]catégorie[concept]] [[is[current]tagging[]catégorie[théorie]]"><$link><$view field="title"/></$link><br></$list>
{{$:/_home}}
<footer-right>Alberto Molina</footer-right>
<iframe src={{!!web}} width="900" height="600" style="border: none;" />
<$list filter="[tag[.conception]tags[]] -.conception +[sort[title]]">
! <$view field="title"/>
<$list filter="[is[current]tagging[]] +[tag[.conception]] +[sort[title]]">
<$link><$view field="title"/></$link>
</$list>
</$list>
''intentional stance, the'' - A strategy, proposed and defended by Daniel Dennett, for understanding an entity's behavior. When adopting the intentional stance towards an entity, we attempt to explain and predict its behavior by treating it as if it were a rational agent whose actions are governed by its beliefs and desires. The intentional stance contrasts with two other strategies, the physical stance and the design stance. See also Dennett, Daniel, intentionality.
!Introduction
According to Daniel Dennett, there are three different strategies that we might use when confronted with objects or systems: the physical stance, the design stance, and the intentional stance. Each of these strategies is predictive. We use them to predict and thereby to explain the behavior of the entity in question. (‘Behavior’ here is meant in a very broad sense, such that the movement of an inanimate object—e.g., the turning of a windmill—counts as behavior.) Since the intentional stance is best understood by contrast with the physical and the design stance, these other two stances will be discussed first.
!The Physical Stance and the Design Stance
The physical stance stems from the perspective of the physical sciences. To predict the behavior of a given entity according to the physical stance, we use information about its physical constitution in conjunction with information about the laws of physics. Suppose I am holding a piece of chalk in my hand and I predict that it will fall to the floor when I release it. This prediction relies on (i) the fact that the piece of chalk has mass and weight; and (ii) the law of gravity. Predictions and explanations based on the physical stance are exceedingly common. Consider the explanations of why water freezes at 32 degrees Fahrenheit, how mountain ranges are formed, or when high tide will occur. All of these explanations proceed by way of the physical stance.
When we make a prediction from the design stance, we assume that the entity in question has been designed in a certain way, and we predict that the entity will thus behave as designed. Like physical stance predictions, design stance predictions are commonplace. When in the evening a student sets her alarm clock for 8:30 a.m., she predicts that it will behave as designed: i.e., that it will buzz at 8:30 the next morning. She does not need to know anything about the physical constitution of the alarm clock in order to make this prediction. There is no need, for example, for her to take it apart and weigh its parts and measure the tautness of various springs. Likewise, when someone steps into an elevator and pushes "7," she predicts that the elevator will take her to the seventh floor. Again, she does not need to know any details about the inner workings of the elevator in order to make this prediction.
Design stance predictions are riskier than physical stance predictions. Predictions made from the design stance rest on at least two assumptions: first, that the entity in question is designed as it is assumed to be; and second, the entity will perform as it is designed without malfunctioning. The added risk almost always proves worthwhile, however. When we are dealing with a thing that is the product of design, predictions from the design stance can be made with considerably more ease than the comparable predictions from the physical stance. If the student were to take the physical stance towards the alarm clock in an attempt to predict whether it will buzz at 8:30 a.m., she would have to know an extraordinary amount about the alarm clock’s physical construction.
This point can be illustrated even more dramatically by considering a complicated designed object, like a car or a computer. Every time you drive a car you predict that the engine will start when you turn the key, and presumably you make this prediction from the design stance—that is, you predict that the engine will start when you turn the key because that it is how the car has been designed to function. Likewise, you predict that the computer will start up when you press the "on" button because that it is how the computer has been designed to function. Think of how much you would have to know about the inner workings of cars and computers in order to make these predictions from the physical stance!
The fact that an object is designed, however, does not mean that we cannot apply the physical stance to it. We can, and in fact, we sometimes should. For example, to predict what the alarm clock will do when knocked off the nightstand onto the floor, it would be perfectly appropriate to adopt the physical stance towards it. Likewise, we would rightly adopt the physical stance towards the alarm clock to predict its behavior in the case of a design malfunction. Nonetheless, in most cases, when we are dealing with a designed object, adopting the physical stance would hardly be worth the effort. As Dennett states, "Design-stance prediction, when applicable, is a low-cost, low-risk shortcut, enabling me to finesse the tedious application of my limited knowledge of physics." (Dennett 1996)
The sorts of entities so far discussed in relation to design-stance predictions have been artifacts, but the design stance also works well when it comes to living things and their parts. For example, even without any understanding of the biology and chemistry underlying anatomy we can nonetheless predict that a heart will pump blood throughout the body of a living thing. The adoption of the design stance supports this prediction; that is what hearts are supposed to do (i.e., what nature has "designed" them to do).
!The Intentional Stance
As already noted, we often gain predictive power when moving from the physical stance to the design stance. Often, we can improve our predictions yet further by adopting the intentional stance. When making predictions from this stance, we interpret the behavior of the entity in question by treating it as a rational agent whose behavior is governed by intentional states. (Intentional states are mental states such as beliefs and desires which have the property of "aboutness," that is, they are about, or directed at, objects or states of affairs in the world. See intentionality.) We can view the adoption of the intentional stance as a four-step process. (1) Decide to treat a certain object X as a rational agent. (2) Determine what beliefs X ought to have, given its place and purpose in the world. For example, if is X standing with his eyes open facing a red barn, he ought to believe something like, "There is a red barn in front of me." This suggests that we can determine at least some of the beliefs that X ought to have on the basis of its sensory apparatus and the sensory exposure that it has had. Dennett (1981) suggests the following general rule as a starting point: "attribute as beliefs all the truths relevant to the system’s interests (or desires) that the system’s experience to date has made available." (3) Using similar considerations, determine what desires X ought to have. Again, some basic rules function as starting points: "attribute desires for those things a system believes to be good for it," and ""attribute desires for those things a system believes to be best means to other ends it desires." (Dennett 1981) (4) Finally, on the assumption that X will act to satisfy some of its desires in light of its beliefs, predict what X will do.
Just as the design stance is riskier than the physical stance, the intentional stance is riskier than the design stance. (In some respects, the intentional stance is a subspecies of the design stance, one in which we view the designed object as a rational agent. Rational agents, we might say, are those designed to act rationally.) Despite the risks, however, the intentional stance provides us with useful gains of predictive power. When it comes to certain complicated artifacts and living things, in fact, the predictive success afforded to us by the intentional stance makes it practically indispensable. Dennett likes to use the example of a chess-playing computer to make this point. We can view such a machine in several different ways:
* as a physical system operating according to the laws of physics;
* as a designed mechanism consisting of parts with specific functions that interact to produce certain characteristic behavior; or
* as an intentional system acting rationally relative to a certain set of beliefs and goals
Given that our goal is to predict and explain a given entity’s behavior, we should adopt the stance that will best allow us to do so. With this in mind, it becomes clear that adopting the intentional stance is for most purposes the most efficient and powerful way (if not the only way) to predict and explain what a well designed chess-playing computer will do. There are probably hundreds of different computer programs that can be run on a PC in order to convert it into a chess player. Though the computers capable of running these programs have different physical constitutions, and though the programs themselves may be designed in very different ways, the behavior of a computer running such a program can be successfully explained if we think of it as a rational agent who knows how to play chess and who wants to checkmate its opponent’s king. When we take the intentional stance towards the chess-playing computer, we do not have to worry about the details of its physical constitution or the details of its program (i.e., its design). Rather, all we have to do is determine the best legal move that can be made given the current state of the game board. Once we treat the computer as a rational agent with beliefs about the rules and strategies of chess and the locations of the pieces on the game board, plus the desire to win, it follows that the computer will make the best move available to it.
Of course, the intentional stance will not always be useful in explaining the behavior of the chess-playing computer. If the computer suddenly started behaving in a manner inconsistent with something a reasonable chess player would do, we might have to adopt the design stance. In other words, we might have to look at the particular chess-playing algorithm implemented by the computer in order to predict what it will subsequently do. And in cases of more extreme malfunction—for example, if the computer screen were suddenly to go blank and the system were to freeze up—we would have to revert to thinking of it as a physical object to explain its behavior adequately. Usually, however, we can best predict what move the computer is going to make by adopting the intentional stance towards it. We do not come up with our prediction by considering the laws of physics or the design of the computer, but rather, by considering the reasons there are in favor of the various available moves. Making an idealized assumption of optimal rationality, we predict that the computer will do what it rationally ought to do.
!The Intentional Stance, Realism, and Instrumentalism
In his writings on the intentional stance, Dennett has often made the controversial further claim that the intentionality of a creature wholly consists in its behavior being well-predicted by our adoption of the intentional stance towards it: "all there is to being a true believer is being a system whose behaviour is reliably predictable via the intentional strategy, and hence all there is to really and truly believing that p (for any proposition p) is being an intentional system for which p occurs as a belief in the best (most predictive) interpretation." (Dennett 1981) Interestingly, however, Dennett claims that his view should be considered a sort of realism about the mind. As he himself notes, this requires a "delicate balancing act on the matter of the observer-relativity of attributions of belief and other intentional states." (Dennett 1987)
Typically, a realist about the mental treats beliefs and desires as inner states of a system that cause that system’s behavior. In contrast, an instrumentalist treats beliefs and desires as theoretical posits which we ascribe to various systems when doing so is instrumental to understanding that system’s behavior. These posits, however useful they might be to us, are nonetheless fictions, and thus our ascriptions of beliefs and desires are strictly speaking false according to the instrumentalist.
Given Dennett’s suggestion that we should understand beliefs on the model of abstract objects like centers of gravity, he has often been classified as an instrumentalist. But Dennett, who rejects the usual either-or dichotomy of realism and instrumentalism, prefers to classify his view as an in between position that he calls interpretationism. According to interpretationism, whether a system has a certain belief or desire depends on our imposing a certain interpretation on the system. A statement ascribing a certain belief or desire to an organism is true when the best overall interpretation of that system’s behavior says that the organism has that belief or desire. From the intentional stance, we detect certain patterns that, although partly constituted by our own reactions to them, are objective. But because these real patterns are not wholly determinate, the possibility of interpretive gaps will always remain. Due to such gaps, "there could be two different systems of belief attribution to an individual that differed substantially in what they attributed—even in yielding substantially different predictions of the individual’s future behavior—and yet where no deeper fact of the matter could establish that one was a description of the individual’s real beliefs and the other not." (Dennett 1991)
Though interpretationism clearly rejects the "inner-state" view of intentional states that is usually associated with realism, it also rejects the instrumentalist characterization of such states as mere fictions. The patterns detectable by our adoption of the intentional stance are, according to Dennett, real patterns. Beliefs, though they can only be detected once we take the intentional stance towards the believer, are nonetheless objective phenomena. Thus, he considers his view to be a form of realism, albeit a "soft" or "intermediate" one.
Amy Kind
!References
Works by Dennett:
1971 "Intentional Systems," Journal of Philosophy 68: 87-106
1981 "True Believers: The Intentional Strategy and Why It Works," Scientific Explanations: Papers based on Herbert Spencer Lectures Given in the University of Oxford," A.F. Heath, ed. Reprinted in The Nature of Consciousness, David Rosenthal, ed., 1991.
1987 The Intentional Stance. The MIT Press.
1991 "Real Patterns," Journal of Philosophy 88: 27-51.
1996 Kinds of Minds: Towards an Understanding of Consciousness. Basic Books.
Criticisms/discussions of Dennett’s intentional stance:
Bechtel, William. (1985) "Realism, Reason and the Intentional Stance." Cognitive Science 9: 473-497.
Fodor, Jerry and Lepore, Ernest. (1993) "Is Intentional Ascription Intrinsically Normative?," Dennett and His Critics, Bo Dahlbom, ed. Blackwell Publishers.
Stich, Stephen. (1981) "Dennett on Intentional Systems." Philosophical Topics 12: 39-62.
http://philosophy.uwaterloo.ca/MindDict/intentionalstance.html
Last updated: May 11, 2004
Voir [[Beckner, M. (1969): “Function and Teleology”]].
Philosophe étasunien d'origine coréenne, influencé par [[Hempel]] et [[Chisholm]], il est spécialisé en [[philosophie de l'esprit|PhiloEsprit]], notamment le [[problème corps-esprit|Problème Corps/Esprit]], en [[métaphysique|Métaphysique]], en [[épistémologie|Épistémologie]] et [[philosophie des sciences|PhiloSciences]].
En [[philosophie de l'esprit|PhiloEsprit]], il a défendu différentes théories, dont un [[physicalisme|Physicalisme]] [[non-réductionniste|Réductionnisme]] basé sur le concept de [[survenance|Survenance]], puis s'est démarqué du [[physicalisme|Physicalisme]] face au problème des [[qualia|Qualia]].
En [[métaphysique|Métaphysique]], il a travaillé sur les événements et les [[propriétés|Propriété]].
En [[épistémologie|Épistémologie]], il a critiqué l'[[épistémologie naturalisée|Quine (1969) - “Epistemology Naturalized”]] de [[Quine]], car il considère qu'elle est purement descriptive et ne répond pas à la [[normativité|Normativité]] qu'on demande d'une épistémologie.
Kim revient sur les origines du naturalisme dans la philosophie étasunienne de la première moitié du XXème siècle, avec des auteurs comme [[Roy Wood Sellars|Sellars]], [[John Dewey|Dewey]], [[John Herman Randall|Randall]], [[Sydney Hook|Hook]], et [[Ernest Nagel|Nagel]].
Il montre que les thèses principales de ces auteurs sont:
* La ''méthode scientifique'' comme unique source de connaissances
* La ''clôture causale/explicative'' du monde naturel
« The function of X is Y only if selection of Y is responsible for maintaining X both in the recent past and in the present. »
« The impulse to recognize X as having a function can stem from recognition that X is a response to an identifiable selection pressure whether or not the presence of X is completely explicable in terms of selection. »
« Entities have functions when they are designed to do something, and their function is what they are designed to do. »
Pour attribuer une fonction, il n'est pas nécessaire d'avoir une sélection directe du trait fonctionnel:
«It is enough [for the attribution of functions] that genuine demands on the organism have been identified and that the entities to which [we] attribute functions make causal contributions to the satisfaction of those demands.»
L'auteur définit les fonctions biologiques en termes de design tout en affirmant que cette notion, dans le cadre de la théorie darwinienne, n'est pas relative aux intentions d'un créateur intentionnel: "we can think of design without a designer".
La fonction d'une partie d'un système technique est relative à la contribution qu'elle apporte au fonctionnement de la machine dans son ensemble, ainsi qu'au lien entre le fonctionnement de la machine et les intentions de son créateur. En biologie, on peut faire la même distinction en partant de l'idée que la source du design est la sélection naturelle.
Par ailleurs, il défend l'idée d'un pluralisme inhérent à la biologie, en vertu duquel plusieurs intuitions et analyses peuvent être correctes.
« Ce qui est curieux dans la réponse de [[Haldane]], ce n'est pas seulement que, en tant que scientifique, il affirme qu'une pareille question pourrait ne pas avoir de réponse (est-ce parce que certaines questions scientifiques n'ont pas de réponse, ou parce que nous n'arriverons jamais à la connaître, ou parce que ce n'est pas une question scientifique), mais qu’''il compare la définition de la vie avec la définition de sensations subjectives'' comme la couleur, la douleur et l'effort. Certes, le fait de se sentir en vie est une sensation subjective, mais est-ce que la vie se limite ou se confond avec cette sensation? Un peu plus loin dans le texte, il dira que la vie est essentiellement de la chimie. »
''2. Objectif'', adj. D. //Objektiv// ; E. //Objective// ; I. //Obbietivo// et //Oggetivo//.
:''A.'' Dans la langue de la scholastique, (à partir de Duns Scot d'après Eucken, //Gesch. der phil. Terminologie//, p. 68) et encore au XVII° siècle: //est objectif// ou //existe objectivement//, ce qui constitue une représentation de l'esprit, et non pas une réalité subsistant en elle-même et indépendante. [...]
:''B.'' @@color:red;Opposé à //subjectif// (au sens d’//apparent//, //irréel//)@@ : qui constitue un objet, au sens ''D'', une réalité subsistant « en elle-même », c.-à-d. indépendamment de toute connaissance ou idée. [...]
:''C.'' @@color:red;Opposé à //subjectif//, au sens d’//individuel//.@@ — Valable pour tous les esprits, et non pas seulement pour tel ou tel individu. [...]
:''D.'' En parlant des esprits : qui voit les choses d’une manière objective (au sens ''C''), @@color:red;qui ne se laisse pas entraîner par ses préférences ou ses habitudes individuelles.@@
:''E.'' @@color:red;Indépendant de la volonté@@, comme le sont les phénomènes physiques. [...]
:''F.'' @@color:red;Opposé à //subjectif// (au sens de //conscient//, //mental//).@@ [...]
Dictionnaire philosophique de référence. Reflète la pensée philosophique de la première moitié du XXème siècle.
L'auteur commence dans l'intro avec une comparaison de la vie et du phlogistique, comme de principes ou de propriétés communes à certains corps (combustibles, dans le premier cas, vivants dans le second) que l'on cherche en vain à définir et dont on suppose l'existence.
* Quant on observe le débat sur les [[Fonctions]], on s’aperçoit que la plupart des auteurs sont d’accord sur le fait que les [[explications téléologiques|ExplicationTéléologique]] sont légitimes pour certaines entités mais pas pour d’autres.
* On attribue une [[Finalité]] aux actions des êtres humains dans la mesure où on leur attribue des [[Intentions]]: "le pêcheur tisse un filet //pour// attraper des poissons" implique que "le pêcheur //veut// attraper des poissons" et que le filet est un bon instrument.
* Cela est applicable à d’autres entités: dieux, extraterrestres, robots...
* En revanche, dire que "l’araignée tisse sa toile //pour// attraper des insectes" est problématique.
* La téléologie semble impliquer une CausalitéRétrograde. Le recours a l’intentionnalité permet d’éviter cela en faisant référence à des ÉtatsMentaux (représentations, désirs, croyances). Certaines entités ont des états mentaux, d’autres pas.
* Pour résoudre le problème de la téléologie chez certaines entités (humains, dieux, etc.), on adopte une [[stratégie mentaliste|TéléoMentalisme]]. Pour les autres entités, on adopte une [[stratégie naturaliste|Naturalisme]]: SélectionNaturelle, [[Programme]], etc.
''Objectivité.'' [...] Si l'on s'en remet au sens courant du mot, peut être dit « objectif » tout ce qui @@color:red;existe indépendamment de toute connaissance ou idée@@. Peut également être dit objectif ce qui est @@color:red;valable pour tous les esprits@@, et non seulement pour tel ou tel individu. On caractérise ensuite d'objectif ce qui est @@color:red;indépendant de la volonté@@. Mais ultimement, on dit qu'est objectif l'esprit de celui @@color:red;qui voit les choses telles qu'elles sont@@, sans se laisser influencer par ses préférences. [...]
\define slider(caption,state,text)
<$button popup="$state$" class="btn-invisible">$caption$</$button>
<$reveal type="nomatch" state="$state$" text="">
$text$
</$reveal>
\end
"""
[[Home]]
[[Dimensions]]
[[Conceptions]]
[[Définitions]]
[[Ma définition|MaDéfinition]]
[[Exemples]]
[[Contre-Exemples]]
http://www.sur-la-toile.com/article-5992-Les-plantes-parlent-.html
Les plantes parlent !
Biologie Les plantes utilisent des composés chimiques pour communiquer entre elles.
Une nouvelle étude de l'université de Californie s'est focalisée sur une plante parasite ressemblant à la vigne. On a montré que non seulement cette plante est capable de puiser dans les nutriments de la plante hôte mais aussi dans le « système de communication » de cette dernière et peut alors utiliser cela afin de rassembler de l'information pour son propre usage.
Les plantes communiquent avec différentes parties de leurs structures en utilisant des molécules ARN. Dans le cas de la plante étudiée, qui parasite des plants de tomates, les molécules ARN peuvent en fait passer dans la plante parasite et voyager jusqu'à 30 cm de l'endroit où la plante parasite s'est greffée sur le plant de tomate.
La plante parasite peut probablement être intéressée de savoir quand la plante fleurit afin qu'elle puisse fleurir en même temps. Les molécules ARN pourraient ainsi servir à la synchronisation de cycles. Les résultats de cette étude pourront servir à donner une méthode de combattre les plantes parasites qui affectent les cultures.
On avait aussi trouvé il y a deux ans que certaines plantes parasites alors non matures « reniflent » l'air en cherchant les composés chimiques relâchés par les plantes hôtes.
On a également remarqué que certaines plantes communiquent avec leurs congénères lorsqu'elles sont attaquées au niveau des racines par des insectes ; de cette manière, les plantes prévenues avaient le temps d'activer leur système de défense avant l'arrivée des insectes.
Sources : Imaginascience, Softpedia
[[Ernst Mayr|Mayr]], à la suite d'autres auteurs, a proposé une distinction entre plusieurs formes de téléologie:
#''La téléologie cosmique:'' C'est une orientation à grande échelle dans l'évolution de l'univers ou dans celle des êtres vivants. ([[Teilhard de Chardin]], par exemple?, ou l'IntelligentDesign)
#''Les processus téléomatiques'' semblent être dirigés vers un but par des lois naturelles et des conditions aux limites. Les exemples de Mayr sont des pierres tombant dans un puit et des tisonniers qui se refroidissent. Les pierres atteignent le fond du puit, où elles restent, et les tisonniers atteignent l'équilibre thermodynamique à la température ambiante.
#''Les processus [[téléonomiques|Téléonomie]]'' sont déterminés non seulement par des contraintes externes (lois physiques et conditions limites), mais aussi par une espèce de représentation interne de l'état final qui lance et guide le comportement ou le développement. Mayr dit: "a teleonomic process or behavior is one that owes its goal-directedness to the operation of a program." Il s'agit de processus biologiques où les représentations mentales font défaut.
#''Systèmes téléologiques ou [[fonctionnels|Fonctions]]:'' Selon Mayr, les systèmes en question ne relèvent pas vraiment de la //téléologie// dans la mesure où celle-ci ne s'applique qu'aux processus, pas aux systèmes. Il propose plutôt, dans ce dernier cas, de parler d'adaptations liées à la sélection naturelle.
:(Pour une discussion un peu plus détaillée, voir [[McLaughlin, P. (2001): What Functions Explain]])
<div class="tw-menu-list-item"><$link to={{!!title}}><$view field="title"/></$link>
</div>
;Objectif (de l'anc. franç. //object//, objet), //adj//. [...]
:Dans le langage de la scolastique et de [[Descartes]]. Qui est relatif à une entité intermédiaire entre le monde extérieur et la pensée ; l'entendement, dans cette vue, étant en communication non avec le monde extérieur, mais avec des représentations de ce monde que l'on supposait les seuls objets de la pensée ; de sorte que, pour [[Descartes]], le soleil par exemple est dans la pensée objectivement ou par représentation, et, dans la nature, actuellement ou en effet. Par la réalité objective d'une idée, j'entends l'entité ou l'être de la chose représentée par cette idée, en tant que cette entité est dans l'idée ; car tout ce que nous concevons comme étant dans les objets des idées, tout cela est objectivement ou par représentation dans les idées mêmes, [[DESC.|Descartes]] Rép. aux 2er object. 59. Les idées qui me représentent des substances sont sans doute quelque chose de plus [que des façons de penser], et contiennent en soi, pour ainsi parler, plus de réalité objective, [[DESC.|Descartes]] Médit. III, 10. Il est évident que ce qui est commun à tous et à toutes parties de tous convient à l'idée objective de tous, c'est-à-dire à l'idée qui est en Dieu de toutes les modalités de ses attributs, BOULLAINVILLIERS, Réfut. de Spinosa, p. 149. Aujourd'hui, objectif est opposé à subjectif, et se dit de toute idée qui vient des objets extérieurs à l'esprit ; cette nouvelle acception, qui est seule maintenant en usage, est due à la philosophie de [[Kant]]. On appelle, dans la philosophie allemande, idées subjectives celles qui naissent de la nature de notre intelligence et de ses facultés, et idées objectives toutes celles qui sont excitées par les sensations, STAËL, Allem. III, 6. [...]"
;Objectivement, //adv//.
:En philos. D'une façon objective, @@color:red;relativement aux objets extérieurs@@."
;Objectivité, //sf//.
:En philos. Terme de philosophie moderne. Qualité de ce qui est objectif ; existence des objets en dehors de nous."
;Objet (lat. //objectum//), //sm//.
:Tout ce qui se présente à la vue. Tout ce qui affecte les sens. [...] Terme de philosophie. Tout ce qui est en dehors de l'âme ; par opposition à sujet qui exprime ce qui est en dedans de l'âme. L'objet et le sujet. Terme de scolastique. Objet matériel, la chose même qu'une science considère. Objet formel, la manière dont l'objet matériel est considéré par la science. Objet total ou adéquat, réunion de l'objet matériel et de l'objet formel. [...]"
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus augue nulla, commodo ut lectus volutpat, pretium consequat quam. Duis ut laoreet felis. Etiam fringilla odio in posuere congue. Praesent pellentesque, mauris sed hendrerit sodales, purus massa fermentum justo, vel pulvinar lectus purus nec eros. Fusce vel tempor erat. Nunc ac purus id nulla dapibus dignissim vel ac augue. Proin luctus dui turpis, eget facilisis diam congue quis. Nunc dolor odio, aliquet vitae odio quis, interdum ultrices nisi. Pellentesque suscipit quis leo quis molestie. Fusce consequat tristique fringilla. Mauris ultricies libero arcu, non tristique nisl tempor ut. Fusce viverra, libero et accumsan laoreet, lacus justo aliquet mi, in tristique sem tortor in augue. Pellentesque porta mi ut enim ultricies, vitae semper tellus rhoncus.
Sed tempor massa non odio tempor, vel condimentum leo dapibus. Donec diam dolor, rutrum in tempus dignissim, bibendum ac magna. In hac habitasse platea dictumst. Sed gravida consequat risus id placerat. Pellentesque tincidunt gravida est eu pellentesque. Maecenas et dapibus eros. Quisque lacinia venenatis metus, vel eleifend erat aliquam sit amet. Nam id elementum enim. Integer vehicula in orci nec laoreet.
Nulla dignissim sollicitudin laoreet. Donec blandit ullamcorper lorem, sed consequat turpis feugiat nec. Maecenas sit amet urna luctus, convallis neque consectetur, sollicitudin tellus. Ut rhoncus in lectus nec ultricies. Nunc venenatis tellus ut tincidunt bibendum. Aliquam at libero ut arcu facilisis ullamcorper. Duis vitae dictum enim, vel tempus dui. Nam bibendum commodo tempor. Aenean at dapibus lacus.
{{{[title{VersionFaible!!source}tags[]] -[title[.conception]]||tag}}}
!!Version faible
<<<
<$transclude tiddler="VersionFaible"/>
<<<
!!Version forte
<<<
<$transclude tiddler="VersionForte"/>
<<<
http://www.futura-sciences.com/magazines/espace/infos/actu/d/astronomie-mars-synthetise-briques-vie-13896/
Mars a synthétisé des briques de la vie !
Par Laurent Sacco, Futura-Sciences
La mondialement célèbre météorite martienne Allan Hills 84001 fait à nouveau parler d’elle. A défaut de fournir une preuve indiscutable de la présence de vie sur Mars dans son passé, elle donne cette fois une preuve que l’environnement martien permet la synthèse de molécules organiques : c’est une première !
On se souvient de l’annonce retentissante faite par la Nasa, le 6 août 1996, de la preuve d’une vie passée sur Mars. En analysant la météorite martienne ALH84001, une achondrite découverte en Antarctique dans la région d’Allan Hills en décembre 1984, d’où son nom, les chercheurs de la Nasa croyaient en effet avoir repéré des fossiles de nanobactéries ne pouvant pas être d’origine terrestre, ou produits par des processus purement géochimiques reproduisant des structures biologiques sans en être vraiment.
La situation s’est obscurcie assez rapidement ces dernières années et ces traces ne sont plus considérées comme une preuve solide de l’apparition de la vie sur Mars il y a des milliards d’années. Toutefois, des scientifiques du Laboratoire de Géophysique de l’Institution Carnegie pensent maintenant avoir démontré, avec cette même météorite, qu’au moins certaines des molécules carbonées de base du vivant étaient bien synthétisées par la planète rouge.
Le message de la contrée des ours en armures
La découverte vient de la comparaison de ce morceau de lave martienne, s’étant cristallisé il y a 4,5 milliards d’années, avec des échantillons de laves terrestres provenant du Svalbard, la contrée que l’on nomme aussi Spitzberg et qui n’est donc pas une simple invention de Philip Pullman dans ses romans aujourd’hui portés à l’écran avec « A la croisée des mondes ».
Cliquez pour agrandir ALH84001. Crédit : Nasa-Caltech
Les laves du Svalbard étudiées par l'équipe se sont épanchées il y a un million d’années environ en Arctique. Le climat froid se rapproche des conditions martiennes. Or, dans ces laves, on trouve de petites sphères de minéraux carbonatés contenant des molécules organiques étroitement associées à un oxyde de fer assez célèbre sous forme d’un minéral appelé magnétite. Lors d’une éruption volcanique, la magnétite a agi comme un catalyseur au contact de fluides riches en dioxyde de carbone et en eau, bien qu’aucune présence de vie n’ait été possible à ce moment étant donné la température.
Des petites sphères de ce genre ont été trouvées dans ALH84001, et il s’agit donc très vraisemblablement de molécules synthétisées par la chimie martienne et pas par contaminations terrestre ultérieures. C’est la première fois qu’une preuve de ce genre a pu être apportée et elle renforce la conviction que des molécules organiques doivent facilement apparaître à la surface des grosses planètes telluriques dans l’Univers, même quand il y fait froid !
La mission Mars Exploration Rovers, qui sera lancée en 2009, venant épauler Spirit et Opportunity s’ils sont encore actifs, nous en apprendra sans doute davantage.
Né en 1904, ''Ernst Mayr'' est l'un des grands biologistes du XXe siècle. Il est peut-être le premier à avoir introduit en [[biologie|Biologie]] la notion de [[programme génétique|Programme génétique]] en 1961. Naturaliste, il a aussi beaucoup écrit en [[philosophie de la biologie|PhiloBio]] pour souligner les spécificités et l'[[autonomie de sa discipline|Réductionnisme]] face à la [[physique|Physique]] et aux conceptions par trop [[mécanistes|Mécanisme]] du vivant.
« a teleonomic process or behavior is one that owes its goal-directedness to the ''operation of a program'' ».
« Du Bois-Reymond a écrit, par exemple, en 1872 que la compréhension de la nature "revenait à expliquer tous les changements s'opérant dans le monde comme résultat du mouvement des atomes", autrement dit, qu'il s'agissait de "réduire tous les processus naturels à des mécanismes atomiques [...]. Dès l'instant où l'on peut montrer que les changements s'opérant dans tous les corps naturels peuvent s'expliquer en tant que somme constante d'énergies potentielles et cinétiques, il n'y a rien d'autre à rechercher." Ses contemporains n'ont pas remarqué que ce type de déclaration n'était, en fait, qu'un assemblage de mots creux, ne reposant sur aucune donnée précise et n'ayant guère de valeur explicative. »
« Selon l'un des groupes du [[vitalisme|Vitalisme]], la vie était liée soit à une ''substance spéciale'' (qu'ils appelaient le [[protoplasme|Protoplasme]]), ne figurant pas dans la matière inanimée; soit à un ''état particulier de la matière'' (comme l'état colloïdal). Et les sciences physico-chimiques, affirmaient ces auteurs, n'étaient pas en mesure d'analyser cette substance ou cet état de la matière. Un autre groupe de vitalistes soutenait qu'il existe une ''force vitale spéciale'' (parfois appelée //Lebenskraft//, "[[entéléchie|Entéléchie]]" ou "[[élan vital|Élan vital]]") distincte des forces dont s'occupent les physiciens. Au nombre de ceux qui acceptaient l'existence de cette force figuraient aussi les adeptes de la ''[[téléologie|Téléologie]]'', qui pensaient que la vie avait pour raison d'être quelque [[but final|Finalité]]. D'autres auteurs invoquaient des forces mentales ou psychologiques (PsychoVitalisme, PsychoLamarckisme) pour rendre compte des aspects des organismes vivants que les vitalistes n'avaient pas réussi à expliquer.
« A partir du moment où les processus physiologiques et ontogénétiques ont trouvé une explication en termes physico-chimiques aux niveaux cellulaire et moléculaire, il n'est resté aucun phénomène résiduel sous-tendant l'interprétation vitaliste: le vitalisme est tout simplement devenu superflu. »
« C'est ainsi que deux grandes notions sous-tendant le vitalisme se sont effondrées: la téléologie et l'antisélectionnisme. La génétique et le darwinisme ont réussi à fournir des interprétations convaincantes à des phénomènes que les vitalistes jugeaient inexplicables, à moins d'invoquer une force ou une substance vitales. »
« L'holisme, dans la mesure où il rejette le réductionnisme, "ne considère pas les organismes vivants comme des machines constituées d'une multitude de parties distinctes (d'unités physico-chimiques), que l'on peut extraire comme les pièces d'un moteur et que l'on peut décrire sans prendre en considération le système dont on les a tirées". Étant donné leurs interactions, la description des parties à l'état séparé ne peut pas rendre compte des propriétés du système en tant que tout: c'est leur agencement qui régit la totalité du système. »
« Tous les holistes sont d'accord pour admettre qu'aucun système ne peut être expliqué de façon exhaustive par les propriétés de ses parties, prises isolément. L'organicisme est fondé sur cette notion primordiale: les êtres vivants sont dotés d'une organisation. On ne peut pas les considérer comme des collections de caractéristiques ou de molécules, car leur fonctionnement dépend entièrement de l'agencement de ces dernières, de leurs interrelations, de leurs interactions et de leurs interdépendances. »
« Pour résumer, on peut dire que l'organicisme repose sur deux thèses: premièrement, ''l'organisme est un 'tout' ''; deuxièmement, sa globalité ne doit pas être considérée comme mystérieuse et impossible à analyser, elle doit être étudiée en choisissant le bon ''niveau d'analyse''. L'organiciste ne rejette pas cette dernière démarche, mais soutient qu'on ne doit pas la pousser en deçà du niveau où elle apporte des informations pertinentes et des éclairages nouveaux. »
« Toutes ces caractéristiques des organismes vivants les distinguent fondamentalement des systèmes inanimés. Dans l'histoire des sciences, c'est la reconnaissance graduelle du caractère unique et distinct des êtres vivants qui a conduit à délimiter cette science qu'on appelle la biologie, et à reconnaître son autonomie »
« Pratiquement tous les artisans de la révolution scientifique étaient de fervents chrétiens. Il n'est donc pas surprenant qu'ils aient créé un type de science se présentant comme une branche de la religion chrétienne. Dans cette optique, le monde avait été créé par Dieu et ne pouvait donc pas être chaotique. Il était gouverné par Ses lois, qui, parce qu'elles étaient les lois divines, étaient universelles. On considérait que l'explication d'un phénomène ou d'un processus donné était convaincante, dès lors qu'elle était compatible avec l'une de ces lois. Puisque la marche du cosmos était ainsi parfaitement et absolument déterminée, il devait être finalement possible de tout prouver et de tout prédire. L'objectif de cette science au service de Dieu était donc d'identifier ces lois universelles, de trouver l'ultime vérité sur tout grâce à elles et de mettre à l'épreuve leur exactitude au moyen de prédictions et d'expériences. »
« Par contraste [avec l'idéalisme de certains philosophes], les biologistes que je connais professent un réalisme du "bon sens". @@color:red;''Ils acceptent comme un fait incontestable qu'un "monde réel" existe hors de nous.''@@ On peut aujourd'hui mettre à l'épreuve, au moyen d'instruments, les impressions fournies par nos sens de tant de façons différentes, et les prédictions fondées sur ces observations sont confirmées de façon tellement constante qu'il ne semble guère y avoir d'intérêt à mettre en doute le réalisme du "bon sens" (ou réalisme pragmatique) à partir duquel les biologistes conduisent normalement leurs recherches. »
« En biologie, les concepts jouent un rôle bien plus grand que les lois dans l'élaboration des théories. Les deux facteurs majeurs qui contribuent, dans les sciences de la vie, à la formation de nouvelles théories sont la découverte de faits nouveaux (par le biais de l'observation) et le développement de concepts nouveaux. »
« Curieusement, la philosophie classique des sciences a peu mentionné le rôle important des concepts dans l'élaboration des théories. Cependant, plus j'étudie cette question, plus j'ai l'impression que les théories en vigueur dans les sciences physiques sont généralement fondées sur des lois, tandis que celles en cours en biologie le sont sur des concepts. »
« Toutes les activités et tous les processus mettant en jeu les instructions d'un programme sont des causes immédiates. C'est le cas des mécanismes responsables des processus physiologiques, ontologiques et éthologiques gouvernés par des programmes génétiques et somatiques. La description de ces mécanismes répond à des questions de type "Comment?". »
« Les causes lointaines ou évolutives sont celles qui président à l'apparition de nouveaux programmes génétiques ou à la modification de ceux qui existaient déjà. En d'autres termes, il s'agit de toutes les causes responsables des changements qui se produisent durant le processus de l'évolution. [...] Leur description répond généralement à des questions de type "Pourquoi?". »
« Les partisans du [[réalisme scientifique|RéalismeScientifique]], comme on appelle quelquefois les personnes soutenant ce type de point de vue, estiment que dès l'instant où une théorie est vérifiée, cela autorise à croire en l'existence réelle d'une [[entité théorique|EntitéThéorique]] postulée et à affirmer que cette dernière est aussi réelle que toute autre que l'on peut directement observer grâce à nos sens. Le réalisme scientifique est un point de vue partagé par tous les scientifiques que je connais. »
![[Quel est le sens du mot vie ?|Mayr, E. (1997): chap. 1]]
Les trois paradigmes modernes du vivant sont le physicalisme, le vitalisme et l'organicisme:
;Physicalisme
:Contre toute explication surnaturelle ou magique, les sciences modernes imposent une vision du monde dominée par le [[modèle de la machine|Mécanisme]] et des automates ([[Descartes]], [[La Mettrie]]). Les physicalistes ont permis un certains nombre d'avancées importantes dans la compréhension de la chimie et de la physiologie des êtres vivants. Cependant, tout en rejetant la notion de force vitale, ils recouraient eux-mêmes à des facteurs inexpliqués comme l' "énergie" ou les "mouvements". <<pop "(Voir citation.)" "Mayr, 1997: 20">>
:Au bout d'un certain temps, la vacuité et l'absurdité des explications purement physicalistes du vivant devint évidente aux yeux de la plupart des biologistes.
;Vitalisme
:Le vitalisme moderne est une réaction des naturalistes au [[physicalisme|Physicalisme]] et au [[mécanisme|Mécanisme]]. Groupe hétérogène, le vitalisme comporte de nombreuses facettes: substance spéciale ou état particulier de la matière, forces vitales ou mentales, finalisme. <<pop "(Voir citation.)" "Mayr, 1997: 23">>
:"Un grand nombre des thèses avancées par les vitalistes avaient pour but de définir les caractéristiques spécifiques des organismes qui sont aujourd'hui expliquées par la notion de programme génétique." Ainsi, dans de nombreux textes, on pourrait remplacer le mot "entéléchie" par "programme génétique".
:Le vitalisme s'est éteint vers 1930. Son déclin est lié à plusieurs facteurs:
:* Il a finit par être considéré comme une ''doctrine métaphysique'', incapable de rien prouver scientifiquement.
:* L'hypothèse d'une ''substance spéciale'' a été réfutée par l'avancée des connaissances chimiques.
:* Toutes les tentatives pour démontrer l'existence d'une ''force vitale'' non matérielle ont échoué. <<pop "Voir citation" "Mayr, 1997: 27">>
:* La génétique et le darwinisme ont réussi à expliquer les processus téléonomiques que les vitalistes jugeaient inexplicables. <<pop "(Voir citation.)" "Mayr, 1997: 28">>
;Organicisme (holisme)
:La chute du vitalisme n'a pas signé la victoire du physicalisme mais a laissé place à un nouveau paradigme explicatif lié à l’''organisation hiérarchique complexe'' des êtres vivants: "Les caractéristiques uniques en leur genre des êtres vivants ne sont pas dues à leur composition, mais plutôt à leur organisation." Les organicistes reprochent à la démarche physicaliste non pas tant ses aspects mécanistes que son réductionnisme. <<pop "(Voir citation 1" "Mayr, 1997: 30">> <<pop " et citation 2)" "Mayr, 1997: 32">>
:Grâce aux concepts de programme génétique et de propriétés émergentes, qui faisaient défaut au holisme, l'organicisme s'est révélé antiréductionniste, tout en restant mécaniste. <<pop "(Voir citation.)" "Mayr, 1997: 33">>
L'auteur dresse ensuite une liste des caractéristiques distinctives des êtres vivants, autour de leur ''organisation hiérarchique'' et de leur ''programme génétique''contenant de l'information historiquement acquise.
;Caractéristiques du vivant:
Les deux principales caractéristiques qui distinguent les êtres vivants de la matière inanimée sont, premièrement, leur ''organisation hiérarchique'' et, deuxièmement, le ''programme génétique''. L'auteur dresse alors la liste des phénomènes spécifiques aux êtres vivants:
* Programmes issus de l'évolution (dimension historique)
* Propriétés chimiques (macromolécules complexes)
* Mécanismes régulateurs (contrôle et régulation, rétro-action, etc. -> homéostasie)
* Organisation (systèmes complexes capables de réguler et de piloter leurs activités)
* Systèmes téléonomiques (activités dirigées vers un but, depuis le développement embryonnaire jusqu'aux activités physiologiques et éthologiques de l'adulte)
* Ordre de grandeur limité (la gamme de dimensions des organismes vivants est limitée, à l'échelle de l'univers)
* Cycles vitaux (de l'œuf à l'adulte, en passant par divers stades embryonnaires)
* Systèmes ouverts (extraction d'énergie et de matériaux de l'environnement, et élimination des produits finaux; en tant que systèmes ouverts, ils ne sont pas soumis aux limitations imposées par la seconde loi de la thermodynamique)
;Capacités spécifiques du vivant:
* la capacité d'évoluer;
* la capacité de s'autorépliquer;
* la capacité de croître et de se différencier par le biais d'un programme génétique;
* la capacité de métaboliser (captage et libération d'énergie);
* la capacité de s'autoréguler, de façon à conserver un régime constant (homéostasie, rétroactions);
* la capacité (par le biais de la perception et des organes des sens) de répondre aux stimuli de l'environnement;
* la capacité de changer à deux niveaux, celui du phénotype et celui du génotype. <<pop "Voir citation" "Mayr, 1997: 35">>
![[Quelles questions se pose-t-on en écologie?|Mayr, E. (1997): chap. 10]]
Comme l’indique le titre…
![[Où l'homme se situe-t-il dans l'évolution?|Mayr, E. (1997): chap. 11]]
L'apparition et le développement de l'humanité du point de vue de la théorie de l'évolution.
![[L'évolution peut-elle rendre compte de la morale?|Mayr, E. (1997): chap. 12]]
![[Qu’est-ce que la science ?|Mayr, E. (1997): chap. 2]]
L'auteur prononce quelques généralités sur la science, et défend l'autonomie de la biologie en tant que [[science à part entière|Moore (1993) - Critères de scientificité]], pas plus limitée à un domaine que ne l'est la physique. La recherche de lois scientifiques universelles est identifiée à une quête religieuse des lois divines:
{{Mayr, 1997: 40||cit}}
![[Comment la science explique-t-elle le monde matériel?|Mayr, E. (1997): chap. 3]]
Survol de la philosophie des sciences, avec quelques commentaires sur l'inadéquation à la biologie évolutionniste de ses modèles explicatifs:
*''Réalisme en biologie:'' Dans un bref passage, [[Mayr]] défend le ''réalisme du "bon sens"'' face aux spéculations idéalistes des philosophes: <<slider "Voir citation" "Mayr, 1997: 68" "{{Mayr, 1997: 68||cit}}">>
* ''Définitions:'' Elles ont pour objectif de lever des ambigüités. Les définitions des termes scientifiques sont aussi nécessaires que changeantes, c'est-à-dire qu'elles évoluent avec l'évolution des connaissances.
* ''Les concepts dans les sciences de la vie:''<<slider "Voir citation" "Mayr, 1997: 74" "{{Mayr, 1997: 74||cit}}">><<slider "Voir citation" "Mayr, 1997: 75" "{{Mayr, 1997: 75||cit}}">>
![[Comment la biologie explique-t-elle le monde vivant ?|Mayr, E. (1997): chap. 4]]
L'auteur aborde plusieurs thèmes, dont notamment les [[narrations historiques|NarrationHistorique]], la [[causalité|Causalité]] en biologie, le [[pluralisme|Pluralisme]] explicatif, et l'épistémologie évolutive cognitive.
!!Narrations historiques
La biologie élabore des [[narrations historiques|NarrationHistorique]] qui sont "peut-être la seule démarche scientifiquement et philosophiquement envisageable pour expliquer des phénomènes qui ne se sont produits qu'une seule fois". Cette démarche est contraire à l'élaboration de [[lois universelles|LoiNaturelle]] pratiquée par la physique. Leur valeur explicative vient du fait que "dans une séquence historique, les phénomènes qui viennent en premier conditionnent généralement les phénomènes plus tardifs". Or, "l'objectif le plus important d'une narration historique est de découvrir les facteurs déterminants qui ont contribué à la survenue des événements postérieurs dans une séquence historique" (p.78).
!!Causalité en biologie
En biologie, on distingue deux catégories de causes distinctes: [[Causes immédiates|CauseProximale]] (fonctionnelles)<<popnote "note 1" "{{Mayr, 1997: 80||cit}}">>, et [[Causes lointaines|CauseDistale]] (évolutives)<<popnote "note 2" "{{Mayr, 1997: 80'||cit}}">>.
<<<
"L'une des caractéristiques du monde vivant est qu'il présente ces deux sortes de causes. Dans le monde inanimé, au contraire, il n'y a qu'un seul type de cause, correspondant aux [[lois naturelles|LoiNaturelle]] (souvent en combinaison avec des processus aléatoires)."
<<<
!!Pluralisme
Les phénomènes complexes sont le résultats d'une multitude de facteurs qui rend difficile voire impossible l'identification d'//une// cause. Le pluralisme des explications causales pose un problème pour les procédures de confirmation ou de réfutation.
!!L'épistémologie évolutive cognitive
C'est l'idée que les structures cognitives de notre cerveau ont été façonnées par la sélection naturelle. L'auteur cite [[Uexküll]] au nombre de ceux qui ont montré que les mondes perçus par d'autres êtres vivants sont très différents du nôtre. Au passage, l'auteur fait profession de réalisme scientifique <<slider "voir" "Mayr, 1997: 86" "{{Mayr, 1997: 86||cit}}">>
L'auteur conclut en disant: "Globalement, je pense que l'épistémologie évolutive cognitive n'a rien de révolutionnaire, elle découle de l'application de la théorie darwinienne à la neurologie et à l'épistémologie."
![[Est-ce que la science progresse?|Mayr, E. (1997): chap. 5]]
La réponse de l'auteur est clairement ''oui !''<<popnote "note1" "Ceux qui pensent le contraire sont des philosophes incompétents pour juger les avancées scientifiques!">>, exemples à l'appui. Mais il n'y a pas de révolutions à la [[Kuhn]] (du moins pas en biologie<<popnote "note2" "La révolution darwinienne n'obéit pas au schéma de Kuhn.">>). Les changements théoriques ressemblent davantage au modèle darwinien.
![[Comment les sciences de la vie sont-elles structurées?|Mayr, E. (1997): chap. 6]]
Historique de la manière dont la discipline s'est constituée et structurée (subdivisions disciplinaires). ''A noter:'' la biologie en tant que science de la vie (i.e. des êtres vivants en tant que tels) n'est née que vers 1800.+++[citation]
|''Définition de la biologie:'' <<tiddler [[Treviranus 1802:4/définitionBiologie]]>>|
===
Mayr insiste sur la ''distinction des questions de type "Comment?" et "Pourquoi?"'', qui correspondent à la recherche des [[causes immédiates|CauseProximale]] et [[lointaines|CauseDistale]]. (Cette terminologie remonte à la fin du ~XIXe s.) Selon lui, @@color:red;"aucun phénomène biologique n'est totalement expliqué tant qu'on n'a pas éclairci à la fois ses causes immédiates et ses causes lointaines"@@ (p.132).
![[Les questions de type "Quoi?": l'étude de la biodiversité|Mayr, E. (1997): chap. 7]]
Un chapitre sur le travail de classification en biologie (taxonomie).
![[ Les questions de type "Comment?": la production d'un nouvel organisme|Mayr, E. (1997): chap. 8]]
Comment un nouvel individu se développe à partir d'un oeuf fécondé (ontogenèse).
![[Les questions de type "Pourquoi?": l'évolution des organismes|Mayr, E. (1997): chap. 9]]
Aperçu sur l'histoire et les principes de la théorie de l'évolution, et sur les controverses actuelles (l'unité de sélection, la sociobiologie).
[[Ernst Mayr|Mayr]] cherche à caractériser la [[biologie|Biologie]] parmi les autres sciences. Il distingue deux types de sciences biologiques, les unes s'efforçant d'expliquer les phénomènes du vivant d'après les [[causes immédiates|CauseProximale]] (c'est le cas de la physiologie, de la biologie moléculaire, etc.), les autres d'après les [[causes lointaines|CauseDistale]] (c'est le cas de toutes les disciplines biologiques se rattachant à la [[théorie de l'évolution|Darwinisme]]).
L'auteur expose ensuite les résultats obtenus dans quatre disciplines fondamentales: la systématique, la biologie du développement, l'écologie et la théorie du développement proprement dite, offrant en outre un remarquable résumé des derniers acquis de la paléo-anthropologie. Son dernier chapitre porte sur la morale: peut-elle être fondée sur ce que la biologie nous apprend de l'homme?
« The systems of which some parts are said to have functions in an explanatory sense are conceived as self-reproducing systems, that is, as systems whose identity conditions over time include their continual self-reproduction - either as the same individual or as successive instantiations of the same type. »
Pourquoi certains objets peuvent-ils être expliqués fonctionnellement et pas d'autres? A quel genre d'objets attribue-t-on des [[fonctions|Fonctions]] et en quoi celles-ci sont-elles [[explicatives|Explication]]? L'auteur défend l'idée selon laquelle les seules attributions fonctionnelles qui soient vraiment explicatives (au sens [[causal|Causalité]]) sont liées à un type de système qu'on rencontre dans les sciences sociales et en [[biologie|Biologie]]: les systèmes auto-reproducteurs.
Considérant que la [[sélection naturelle|SélectionNaturelle]] ne rend pas suffisamment compte de la dimension [[téléologique|Téléologie]] des fonctions, l'auteur a recours à la téléologie aristotélicienne. Il ne cherche pas un concept général qui couvre à la fois les fonctions naturelles et artificielles, car les secondes sont dérivées des premières; ce qu'il faut expliquer, c'est comment des systèmes avec des fonctions biologiques peuvent donner lieu à des systèmes avec des fonctions artificielles.
Recueil d'articles sur l'objectivité scientifique vue depuis plusieurs perspectives.
\define auteurslider(label)
@@text-align:left;
<$button popup="$:/state/$label$" class="btn-invisible tw-slider"><$reveal type="match" text="" default="" state="$:/state/$label$">⊞</$reveal><$reveal type="nomatch" text="" default="" state="$:/state/$label$">⊟</$reveal> {{$label$||unwikified}}</$button>
@@
<$reveal type="nomatch" text="" default="" state="$:/state/$label$" animate="yes">
<ul><$list filter="[field:catégorie/article|livre/auteur{!!nom}sort[title]]"><li><$link to={{!!title}}><$view field="title"/><br></$link></li></$list></ul>
</$reveal>
\end
<$list filter="[catégorie[auteur]!title[AuteurTemplate]sort[nom]]">
<$macrocall $name="auteurslider" label={{!!title}}/>
</$list>
« un item X a la fonction propre F si X provient de la “reproduction” (par exemple comme une copie, ou une copie de copie) d’un ou de plusieurs items antérieurs qui ont accompli F dans le passé parce qu’ils possédaient les propriétés reproduites »
La définition de "fonction propre" est récursive. Pour qu'un item A ait la "fonction propre" F, il est nécessaire (et presque suffisant) que l'une de ces deux conditions soit satisfaite:
<<<
# A originated as a "reproduction" (to give one example, as a copy, or a copy of a copy) of some prior item or items that, due in part to possession of the properties reproduced, have actually performed F in the past, and A exists because (causally historically because) of this or these performances.
# A originated as the product of some prior device that, given its circumstances, had performance of F as a proper function and that, under those circumstances, normally causes F to be performed by means of producing an item like A.
<<<
Les items qui tombent sous la seconde condition ont des "fonctions propres dérivées".
<justify>
Dans cet article, [[Millikan]] revient sur la définition des [[fonctions propres|FonctionPropre]] qu'elle avait proposée dans //[[Language, Thought, and Other Biological Categories|Millikan, RG (1984): Language, Thought, and Other Biological Categories]]//.
L'auteur prétend que sa définition couvre non seulement les fonctions des organes et des comportements innés, mais aussi celles des comportements acquis, des coutumes, des dispositifs du langage comme les mots et les formes syntactiques, ainsi que les artefacts.
Millikan s'oppose tout d'abord au projet d'une analyse conceptuelle, c'est-à-dire au fait de chercher des conditions nécessaires et suffisantes pour l'application du terme, ou la recherche de critères d'application.
Ce qu'elle propose est une définition théorique des fonctions, où le sens de "définition théorique" est défini par elle dans //[[Language, Thought, and Other Biological Categories|Millikan, RG (1984): Language, Thought, and Other Biological Categories]]//. Cette définition théorique s'applique dans le contexte "The/a function of _ is _", mais pas dans le contexte "_ functions //as// a _". La définition de fonction propre peut aussi être vue comme une définition théorique de "purpose".
Sa définition théorique ne rend pas compte de certaines expériences de pensée, comme celle du double où un hasard cosmique fait que des molécules se rassemblent et constitue un double parfait d'un objet doté de fonctions. Le double, lui, bien qu'identique, n'a pas de fonction, car son histoire n'est pas la bonne.
Elle discute ensuite l'article de [[Cummins]], montrant que sa définition porte sur autre chose, sur le sens de "//functions as//". Contrairement à Millikan, Cummins écarte toute référence à des intentions ou buts (//purpose//).
Ensuite elle discute le fait que les membres d'une catégorie fonctionnelle peuvent ne pas être capables d'accomplir leur fonction. Il s'agit d'une question normative.
</justify>
Millikan refuse l'AnalyseConceptuelle des fonctions pour proposer une définition théorique, de même que ~H2O est la définition théorique de l'eau.
Pourtant, derrière cette définition théorique, il n'y a aucune théorie. On n'a aucune théorie biologique à partir de laquelle on puisse expliquer les fonctions. C'est-à-dire que l'on définit les fonctions à partir de la sélection naturelle (théorie de Darwin), mais est-ce que en partant de la théorie de Darwin on peut en déduire l'existence de fonctions. Je crois que non. Cela rend l'explication par la sélection naturelle une explication ad hoc sans véritable fondement.
Par ailleurs, il y a une différence entre définir l'eau comme étant ~H2O et définir les fonctions. Le premier est une substance, un objet, tandis que le second est une propriété. Les propriétés ne peuvent pas simplement se définir de cette manière, il faut les expliquer. En physique, on explique les propriétés avec une théorie d'où elles dérivent.
La croissance, la reproduction, l'invariance, l'évolution, etc., sont des propriétés des êtres vivants, qui peuvent s'expliquer théoriquement à partir de la biochimie et de la physique, c'est-à-dire à partir d'autres propriétés de la matière, mais je pense que la vie elle-même, ainsi que les fonctions, ne sont pas des propriétés.
Voir aussi [[Théorie de la vie - Théorie des fonctions]]
''Jacques Monod'' (1910 - 1976) est un médecin et biologiste moléculaire français, Prix Nobel de médecine en 1965 (avec [[François Jacob|Jacob]] et A. Lwoff) pour ses travaux sur la régulation génétique et la découverte du rôle effectif de l'[[ARN]] messager. Directeur de l'Institut Pasteur de 1971 à sa mort.
Dans //[[Le hasard et la nécessité|Monod, J. (1970): Le hasard et la nécessité]]// il tire les conséquences philosophiques des découvertes en [[biologie moléculaire|BiologieMoléculaire]] et en donne une formulation canonique.
« L'//ultima ratio// de toutes les structures et performances [[téléonomiques|Téléonomie]] des êtres vivants est donc enfermée dans les séquences de radicaux des fibres polypériodiques, 'embryons' de ces [[démons de Maxwell|DémonMaxwell]] biologiques que sont les protéines globulaires. En un sens, très réel, c'est à ce niveau d'organisation chimique que gît, s'il y en a un, le secret de la vie. Et saurait-on non seulement décrire ces séquences, mais énoncer la loi d'assemblage à laquelle elles obéissent, on pourrait dire que le secret est percé, l'//ultima ratio// découverte. »
« la statégie fondamentale de la science dans l'analyse des phénomènes est la découverte des invariants. Toute loi physique, comme d'ailleurs tout développement mathématique, spécifie une relation d'invariance; les propositions les plus fondamentales de la science sont des postulats universels de conservation. »
« La pierre angulaire de la [[méthode scientifique|MéthodeScientifique]] est le postulat de l'[[objectivité|Objectivité]] de la Nature. C'est-à-dire le refus //systématique// de considérer comme pouvant conduire à une connaissance 'vraie' toute interprétation des phénomènes donnée en termes de [[causes finales|Téléologie]], c'est-à-dire de 'projet'. »
« L'[[objectivité|Objectivité]] cependant nous oblige à reconnaître le caractère [[téléonomique|Téléonomie]] des êtres vivants, à admettre que, dans leurs structures et performances, ils réalisent et poursuivent un projet. Il y a donc là, au moins en apparence, une contradiction épistémologique profonde. Le problème central de la biologie c'est cette contradiction elle-même, qu'il s'agit de résoudre si elle n'est qu'apparente, ou de prouver radicalement insoluble si en vérité il en est bien ainsi. »
''Le hasard et la nécessité: essai sur la philosophie naturelle de la biologie moderne'' expose les dernières découvertes en BiologieMoléculaire (1970) et en tire les conséquences philosophiques. L'auteur y affirme que la biologie a enfin percé le secret de la [[vie|Vie]] grâce à la découverte du [[code génétique|ProgrammeGénétique]] et des mécanismes moléculaires qui lui sont associés.
En effet, selon Monod, il y a trois propriétés fondamentales qui distinguent les êtres vivants de tous les autres objets présents dans l'univers: la ''[[téléonomie|Téléonomie]]'', la ''morphogénèse autonome'' et l' ''invariance reproductive''. Tout le livre consiste à montrer comment la biologie moléculaire permet d'expliquer ces trois propriétés.
Dans la préface de l'ouvrage, Monod affirme que le problème central de la biologie est la contradiction entre le postulat d'[[objectivité|Objectivité]] de la nature, qui est "le refus //systématique// de considérer comme pouvant conduire à une connaissance 'vraie' toute interprétation des phénomènes donnée en termes de causes finales, c'est-à-dire de 'projet'", et la [[téléonomie|Téléonomie]] des êtres vivants, ou le fait qu'ils sont doués d'un projet.
Monod montre comment le vivant est le fruit d'événements contingents qui sont conservés et reproduits par la mécanique moléculaire. Il veut montrer qu'il n'y a pas de prédétermination et que tout s'explique par le fruit du hasard et de la nécessité. Ce faisant, il ne peut que réduire la téléonomie biologique à une //apparence// de projet.
Selon [[John Moore|Moore]] (1993), il y a huit critères pour évaluer la [[scientificité d'une discipline|Moore (1993) - Critères de scientificité]]:
# Cette discipline doit être fondée sur le recueil de données obtenues par l'observation de la nature ou par des expériences de laboratoire, sans invoquer de facteurs surnaturels.
# Les données doivent être recueillies dans le but de répondre à des questions, et les observations doivent être faites afin de confirmer ou de réfuter des hypothèses.
# Des méthodes objectives doivent être employées, afin d'éliminer au maximum toute déformation des conclusions.
#Les hypothèses doivent être compatibles avec les observations et avec le cadre conceptuel général.
# Toutes les hypothèses doivent être testées et, si possible, de nouvelles hypothèses alternatives doivent être formulées et leurs mérites respectifs (leur capacité à résoudre les problèmes) comparés.
# Les généralisations doivent avoir valeur universelle au sein du domaine couvert par une science particulière. Les phénomènes uniques en leur genre doivent être explicables sans invoquer de facteurs surnaturels.
# Afin d'éliminer les éventuelles erreurs, un fait ou une découverte ne doivent être pleinement acceptés qu'à la condition d'avoir été confirmés de façon répétée par d'autres chercheurs.
# La science est caractérisée par l'amélioration constante des théories scientifiques, par le remplacement des conceptions incomplètes ou défectueuses par de nouvelles conceptions et par la résolution de problèmes antérieurement énigmatiques.
(Moore, J. (1993): Science as a Way of Knowing, Harvard University Press, Cambridge. Cité par [[E. Mayr (1997), p. 43|Mayr, E. (1997): Qu’est-ce que la biologie?]])
[
{
"title": "HelloThere",
"fromPageRect": {
"top": 83,
"left": 278,
"width": 81,
"right": 359,
"bottom": 100,
"height": 17
}
},
{
"title": "GettingStarted",
"fromPageRect": {
"top": 83,
"left": 278,
"width": 101,
"right": 379,
"bottom": 100,
"height": 17
}
},
{
"title": "GettingStarted",
"fromPageRect": {
"top": 83,
"left": 278,
"width": 101,
"right": 379,
"bottom": 100,
"height": 17
}
},
{
"title": "GettingStarted",
"fromPageRect": {
"top": 83,
"left": 278,
"width": 101,
"right": 379,
"bottom": 100,
"height": 17
}
}
]
Type the text for the tiddler 'MéthodeScientifique'
''Ernest Nagel'' (1901-1985) est un philosophe américain d'origine tchèque. Élève de [[John Dewey|Dewey]], sous l'influence du [[pragmatisme|Pragmatisme]] américain et de l'[[empirisme logique|PositivismeLogique]] européen, il s'intéresse à la philosophie et à la méthodologie de la science et de la logique. Selon Nagel, la tâche de la logique est d'éclairer les méthodes de la connaissance, dont les résultats doivent toujours être soumis à un contrôle empirique.
Partisan du [[naturalisme|Naturalisme]], il soutient que tous les événements, les qualités et les processus doivent être toujours rapportés à des corps situés dans l'espace et le temps. Il s'ensuit une vision déterministe du monde.
La première thèse du naturalisme est la ''primauté existentielle et causale de la matière organisée dans le déroulement des choses naturelles'' : tout ce qui existe et a lieu dans la Nature dépend in fine de la seule organisation de la matière.
Les événements, qualités et processus, ainsi que le comportement caractéristique de certains individus, dépendent de manière contingente de l'organisation de corps spatio-temporels dont la structure interne et les relations externes déterminent et limitent l'apparition et la disparition de tout ce qui arrive dans le monde.
Cela ne veut pas dire que seuls les corps matériels soient réels, car beaucoup de choses dont nous faisons l'expérience (modes d'action, relations de signification, rêves, joies, projets, etc) ne sont ni des corps matériels ni des organisations de corps matériels.
Ce que le naturalisme affirme comme étant une vérité, c'est que les formes de comportement et les fonctions des systèmes matériels, bien que faisant indéniablement (indefeasibly) partie de la nature, ne sont pas eux-mêmes les agents de leur propre réalisation ni de la réalisation de quoi que ce soit d'autre.
Dans la conception naturaliste des processus naturels, il n'y a pas de place pour l'opération de forces non-physiques ou l'intervention d'esprits immatériels.
La seconde grande thèse du naturalisme de Nagel est que la pluralité et la variété manifeste des choses, de leurs qualités et de leurs fonctions, est un trait irréductible du cosmos, et pas une apparence illusoire derrière laquelle se cacherait une ''réalité ultime'' ou une substance méta-empirique plus homogène.
Cette seconde thèse affirme également que l'ordre séquentiel avec lequel les choses arrivent, de même que les relations multiples de dépendance qu'entretiennent les choses, sont des connections contingentes, et pas les produits d'une structure fixée et cohérente (fixed and unified pattern) de relations logiques nécessaires.
On peut interpréter cette thèse comme étant la négation prudente d'un dessein ou d'un plan divin pour l'univers, mais l'auteur ne fait pas directement référence à Dieu dans ce passage. Il insiste plutôt dans son explication sur la téléologie en biologie et en cosmologie pour nier qu'il existe une organisation de type téléologique à l'échelle de l'univers.
Il conclut en disant que, si le naturalisme est vrai, alors la variété irréductible des choses (//irreducible variety//) et leur contingence logique sont des traits fondamentaux du monde dans lequel nous habitons effectivement. La raison peut nous permettre de comprendre la structure des choses et leurs relations, mais pas de manière déductive à partir de prémisses a priori.
« [...] a teleological statement of the form “The function of A in a system S with organization C is to enable S in environment E to engage in process P” can be reformulated more explicitly by: Every system with organization C and in environment E engages in process P; if S with organization C and in environment E does not have A, then S does not engage in P; hence, S with organization C must have A. »
« A commonly recognized but loosely delimited trait of biological organisms, a trait that is often said to distinguish living from inanimate things, is the apparently purposive character of living organisms. Teleological language reflects this distinction. »
« One distinction that will be useful in what follows is between "goal ascriptions" and "function ascriptions »
« It is evident that the process is both plastic and persistent; and it could also be shown that the relevant variables are orthogonal. The system is therefore goal-directed. It is also evident that being goal-directed is a property of a system, in virtue of the organization of its parts. »
« [...] since the system-property view is intended to cover Goal-Directed behavior whether it is biological or inanimate, it is not relevant in an exposition of the view to discuss either the various particular [[goals|But]] that may be pursued in those processes, or the mechanisms operative in them, or the origins of the mechanisms. Goal-Directed processes in living systems are patently [[programmed|Programme]], containing "instructions" for the development (among other things) of "Feed-Back" subsystems; and the origins of the programs are left to be explained by evolutionary theory. »
« According to it, teleological characterizations of nonhuman behavior constitute a "metaphorical extension" of anthropomorphic concepts. »
« The natural function of an item is therefore not any effect of the item's presence; it is that particular effect for the production of which the item had been selected. »
Chez Wright: « the function of an item i in system S is an effect F that i produces. However, the function of i is not any effect; it is that effect for the sake of which the item i was selected and placed in the position it actually does have. »
« According to him, the first principle does not demand that the events of nature be investigated onlywithin the frameword of mechanical laws. On the contrary, accpeting that maxim "does not prevent us, if occasion offers, from following out the second maxim in the case of certain natural forms... in order to reflect upon them according to the principle of final causes." On the other hand, though we may follow the second maxim in dealing with biological phenomena, this does not exclude the possibility that after all, living things have been produced in accordance with purely mechanical laws. Indeed, in investigating biological organisms as parts of nature, we must go as far as we can in our efforts to undestand them in terms of mechanical laws [...]. »
« The conclusion to be drawn from all this is that since we cannot really understand how final causes operate except in the case of our own actions, ascriptions of goals and functions to nonguman organisms and their parts cannot be taken literally, as objective assertions about nature. They must be constructed as statements that have only a heuristic value in guiding inquiry into the mechanisms of living organisms. »
« [[Ruse]] maintains that to say that the function of item i in organism S is to do F, is to say two things: first, the organism S does F by using item i; and second, F is an adaptation--that is, F contributes to the survival and reproductive activity of S. »
« A functionnal statement of the form: a function of the item i in system S and environment E is F, presupposes (though it may not imply) that S is goal-directed to some goal G, to the realization or maintenance of which F contributes. I will call this account the "goal-supporting" view of biological functions. »
« A functionnal statement of the form: a function of the item i in system S and environment E is F, presupposes (though it may not imply) that S is goal-directed to some goal G, to the realization or maintenance of which F contributes. I will call this account the "goal-supporting" view of biological functions. »
« One difficulty I do recognize is that every effect of an item will have to count as one of its functions, if it should turn out that each effect contributes to the maintenance of some goal or other. Although I have no reason for thinking that this is the actual situation for any organism, I do not know how to eliminate this possibility. »
« [...] on the goal-supporting view, being a function is relative to some goal [...] »
« In the first place, if the system-property account of goal-directed processes is sound, goal ascriptions can be explicated without employing any teleological notions in the explication; and goal ascriptions can be explained in a manner that is structurally identical with explanations in the natural sciences. And in the second place, if the goal-supporting view of biological functions is correct, functionnal statements, as well as the presuppositions of functional ascriptions, can also be rendered without using functional concepts; and functional explanations can be shown to have the same structure as explanations in the physical sciences. »
L'auteur y résume sa conception du naturalisme en deux grandes thèses :
;la première concerne l'existence de forces ou d'agents immatériels
:{{Nagel, 1956: 1ère thèse du naturalisme||slider}}
;la seconde concerne l'existence d'une téléologie à l'œuvre derrière les événements et phénomènes naturels
:{{Nagel, 1956: 1ère thèse du naturalisme||slider}}
Nagel non seulement défend la vérité du naturalisme, mais il affirme aussi que ses deux thèses principales sont confirmées par l'expérience. Son discours donne à penser que le naturalisme n'est pas simplement une attitude philosophique, une façon de voir et de penser, ou un programme de recherche, mais plutôt une hypothèse susceptible d'être confirmée, et qui se trouve confirmée de fait : « naturalism as I construe it merely formulates what centuries of human experience have repeatedly confirmed ».
Les idées qu'il présente s'appuient, dit-il, sur des faits (compelling empirical evidence), et pas sur des préférences dogmatiques. Il est possible de concevoir le monde autrement, et le naturalisme n'exclut a priori aucune conception alternative ; cela dit, seul le naturalisme correspond au monde tel qu'il est réellement, c'est-à-dire tel que nous le donnent à connaître les sciences de la nature. On peut imaginer un monde dans lequel des forces immatérielles seraient des agents dynamiques, ou un monde dans lequel tous les événements obéiraient à une structure logique sous-jacente. Dans un tel monde possible, dit-il, ce serait une erreur d'être naturaliste1 ; mais ce monde-là n'est pas le nôtre. Le rejet des hypothèses concernant des causes ou des entités surnaturelles n'est pas un rejet de principe, il est dû au fait que ces hypothèses soit n'expliquent rien soit ne sont pas confirmées par l'expérience.
Nagel cherche à garantir l'unité des sciences en montrant que les [[explications téléologiques|ExplicationTéléologique]] en biologie ne sont pas incompatibles ni véritablement différentes des [[explications mécanistes|ExplicationCausale]].
''(1) Les explications téléologiques peuvent être reformulées en termes non-téléologiques.'' La différence entre elles est due au point de vue adopté (selective attention), pas au contenu asserté. C'est comme dire que Y est un effet de X, ou dire que X est une cause ou une condition de Y.
''(2)'' Si elles étaient équivalentes, les [[lois de la physique|LoiNaturelle]] pourraient se traduire en termes téléologiques.
:''(a)'' De fait, de nombreux principes physiques s'expriment en un langage téléologique, comme minimisation ou maximisation d'une magnitude qui représente une propriété du système.<br><br>
:''(b)'' Cependant, les systèmes organiques manifestent un comportement orienté (Goal-Directed) qui consiste à conserver l'homéostasie face aux perturbations du milieu.<br>
::''i/'' Mais des systèmes physiques (techniques) manifestent également ce comportement: systèmes autorégulés. Donc aucune intentionnalité ni finalité ne sont requises.<br>
::''ii/'' "Surplus meaning" of teleological statements: Une explication téléologique présuppose que le système dont on parle est "directively organized". Mais ce surplus de sens peut s'exprimer dans un langage non téléologique.
''(3) La différence entre explications téléologiques et non-téléologiques réside dans "emphasis and perspective in formulation".''
:''(a)'' L'utilité des explications téléologiques n'est pas évidente. Il semble que ce soit un mode d'explication par défaut, en l'absence de meilleure connaissance des mécanismes sous-jacents.<br>
:''(b)'' @@color:red;La fonction d'un élément est relative au tout que l'on choisit de considérer@@, il n'y a donc pas de fonction "naturelle" d'un élément.
''(4) Structure et fonction:'' la première est une organisation spatiale des parties, tandis que la seconde est une organisation (spatio-) temporelle des changements de ces parties. La structure ne détermine pas la fonction.
Nagel commence par discuter trois conceptions de la [[téléologie|Téléologie]] comme "Goal-Directed" processes.
#''La première est le [[mentalisme|ApprocheMentaliste]] de [[Woodfield]].''<br><br>
#''La seconde est le "program view" (basée sur le [[programme|Programme]] génétique):''<br>
#:(a) En général, on n'affirme pas qu'un système est "Goal-Directed" en examinant le programme(génétique) qui le controle. Il y a d'autres moyens pour dire si un système est "goal-directed" plutôt que d'examiner son programme.<br><br>
#:(b) Le fait d'être contrôlé par un programme n'est pas suffisant. Il faut aussi que le programme ait des mécanismes de compensation. Mais on ne sait pas distinguer, au niveau génétique, ce qui compte comme un véritable "goal-directed process".<br><br>
#:(c) La distinction de [[Mayr]] entre programmes ouverts et fermés ne permet pas de savoir si un processus a un but prédictible.<br><br>
#:(d) La distinction de Mayr entre processus téléomatiques et téléonomiques n'est pas claire, car tous les processus pourraient être dits téléomatiques (puisqu'ils obéissent aux lois de la nature).<br><br>
#''La troisième est la [[conception systémique|ApprocheSystémique]] qu'il défend.'' Celle-ci a été précédemment soutenue par Gerd [[Sommerhoff]], //Analytical Biology//, 1950, qui cherchait à déterminer les conditions générales qu'un système doit satisfaire pour être considéré comme "Goal-Directed" indépendamment de sa nature (humaine, biologique, artéfact). Certaines des caractéristiques sont les suivantes:<br><br>
#*''[[Plasticité]] des processus:'' le but peut être atteint de manières différentes, à partir de situations initiales différentes.<br><br>
#*''Persistence des processus:'' résistance aux perturbations.<br><br>
#:>''Exemple:'' le sang contient une concentration stable de 90% d'eau malgré les variations auxquelles le corps est soumis. La conservation de cette concentration est le but du processus de régulation. Il y a au moins deux variables indépendantes (ou orthogonales): l'eau retirée du flux sanguin, et l'eau injectée dans le flux sanguin.
:Cette conception est censée s'appliquer tant aux êtres vivants qu'aux systèmes inanimés
!!DimensionTemporelle: {{*T(0)||tag}}
!!DimensionValorative: {{*V(0)||tag}}
!!DimensionSystémique: {{*S(1)||tag}}
!!DimensionContextuelle: {{*C(1)||tag}}
!![[Portée (variable)]]:
!![[Nature (variable)]]:
!![[Caractère (variable)]]:
!![[Explication (variable)]]:
Selon Nagel, les différentes conceptions de l'explication fonctionnelle sont liées aux différentes définitions de la notion de fonction. Il en analyse plusieurs:
!!(1) "Neutral view", de Walter Bock et Gerd von Wahlert.
La fonction d'un trait dans un organisme est l'ensemble de ses propriétés manifestes et dispositionnelles, y compris physico- chimiques. Ici, il n'y a évidemment pas de connotations téléologiques. Une définition plus proche de son usage biologique est liée à la notion de rôle biologique: they define the biological role of a faculty in an organism as "the action or use of the faculty by the organism in the course of its life history".
!!(2) "Selective agency view", de [[Wright]].
Cette conception, dit Nagel, est fondée sur l'existence d'analogies fortes entre le comportement d'un système non-intentionnel et les actions humaines. (Voir citations.)
Wright croit, dit Nagel, que les explications des fonctions naturelles ont la même structure que les explications des fonctions intentionnelles. Selon lui, dire que la fonction des battements cardiaques chez les vertébrés est la circulation du sang, c'est dire deux choses:
*premièrement, que la circulation est un effet ou conséquence des battements du coeur; et
*deuxièmement, que le coeur est présent chez les vertébrés parce qu'il fait circuler le sang par son battement.
La différence entre une fonction naturelle et intentionnelle, c'est que les premières existent en vertu non pas d'un créateur intentionnel, mais de la sélection naturelle. Les organismes qui disposent de ce type d'organe disposent d'un avantage sélectif dans le processus évolutif. Ainsi, attribuer une fonction à un item, c'est en même temps donner une explication de son origine.<br><br>
!!!CRITIQUES:
;(i) On peut attribuer une fonction à un organe sans avoir la moindre idée quant à son étiologie.
:Ainsi, lorsque Harvey a découvert la fonction du coeur, il ne connaissait pas la théorie de la sélection naturelle. Donc l'analyse de Wright ne correspond pas forcément à l'usage des biologistes.
;(ii) Il est douteux que la fonction d'un item explique sa présence.
:Dans le cas des artéfacts, ce n'est pas le fait qu'un item ait telle ou telle capacité qui explique sa présence, mais le fait que l'artisan saitou croitqu'il a cette conséquence.
:Dans le cas des organismes biologiques, soit on parle de l'existence d'un coeur particulier dans un organisme donné, et alors l'existence du coeur est génétiquement programmée indépendamment de ses effets; soit on parle de la présence d'un coeur chez les vertébrés en général.
>La critique de Nagel consiste à dire que la théorie de l'évolution ne valide pas l'idée que les coeurs existent parce qu'ils font circuler le sang, car en réalité ils doivent leur origine à des mutations aléatoires du code génétique.
>>@@color:blue;[La critique de Nagel répète en partie, il me semble, celle de Cummins. Mais je ne crois pas qu'elle soit très robuste. La question n'est pas de savoir pourquoi les premiers items sont apparus, mais pourquoi les organismes disposant de cette mutation particulière ont prospéré parmi beaucoup d'autres organismes avec d'autres mutations. Si la biologie est une loterie génétique, la question n'est pas de savoir pourquoi un numéro est en jeu, mais pourquoi il a gagné. Or, il semble assez convainquant de dire que s'il a gagné, c'est à cause de ses effets sur l'organisme.]@@
:Nagel discute ensuite la conception selon laquelle la sélection serait une espèce d'agent. Les défenseurs de cette position sont [[Dobzhansky]] et [[Mayr]]. Nagel rejette ce type de langage qu'il juge seulement métaphorique.
!!(3) "Heuristic view", de [[Kant]] et de C. D. [[Broad]]: The Mind and its Place in Nature, 1925
Selon Kant, bien que tous les phénomènes naturels doivent être expliqués par les lois de la mécanique, les systèmes biologiques semblent échapper à ce type d'explication. Un premier principe dit qu'ils doivent alors être considérés comme si ils étaient le fruit d'une intelligence. Un autre principe dit que certains phénomènes ne sont pas explicables par les lois de la mécanique. Cela conduit à une contradiction lorsque ces principes portent sur la constitution objective de la nature. Kant résout l'antinomie en faisant de ces principes de simples maximes, ou principes régulateurs de la recherche scientifique.
<<<
<<slider "Voir citation" "{{Nagel, 1977: 289||cit}}">>
<<<
<<<
<<slider "Voir citation 2" "{{Nagel, 1977: 289'}}">>
<<<
;C. D. Broad, The Mind and its Place in Nature, 1925, soutient une conception analogue.
:"Suppose that a system is composed of such parts arranged in such ways as might have been expected ifit had been constructed by an intelligent being to fulfil a certain purpose which he had in mind. And suppose that, when we investigate the system more carefully under the guidance of this hypothesis, we discover hitherto unnoticed parts or hitherto unnoticed relations between the parts, and that these are still found to accord with the hypothesis. Then I should call this system 'teleological'." (Broad, The Mind and its Place in Nature, London, 1925, p. 82)
Cependant, Broad soutient que l'intelligence du "créateur" excède de loin celle des hommes.
Selon Nagel, Kant et Broad sont agnostiques quant à la vérité des ascriptions littérales, et c'est là le prix à payer quand on soutient une conception de la notion de fonction biologique en termes d'intentions. Mais si la notion de fonction peut s'expliquer sans référence aux intentions ou choix d'organismes conscients, comme il le croit, alors la validité des ascriptions fonctionnelles peut se décider par une investigation empirique. (p.290)
!!(4) "Welfare view", de [[Hempel]], et de [[Ruse]]
!!!(4.a) Carl Hempel
Selon Hempel, le contenu de l'affirmation: "La fonction des battements du coeur chez les vertébrés est la circulation du sang" est rendu plus explicite de la manière suivante: "The heartbeat has the effect of circulating the blood, which ensures the satisfaction of certain conditions that are necessary for the proper functionning of the organism."
Etant donné que ce qu'il faut expliquer c'est la présence d'un trait idans le système S, la structure de l'explication est la suivante:
:i) Pendant une période t et dans l'environnement C, S fonctionne correctement.
:ii) Si Sfonctionne correctement, alors la condition n doit être satisfaite
:iii) Si i est présent dans S, alors les effets ede la présence de i dans S satisfont la condition n.
Pourtant, cette structure n'est pas suffisante pour impliquer la présence de i. Il faut alors remplacer iii) par:
:iii') La condition n est satisfaite seulement si le trait i est présent dans S.
Mais on peut douter que i soit une condition nécessaire et suffisante pour satisfaire la condition n, car il peut exister beaucoup d'alternatives. Hempel considère alors que les ascriptions fonctionnelles n'ont que peu ou aucune valeur explicative ou prédictive.
Une des critiques de Nagel consiste à dire que l'idée de "fonctionnement correct" de l'organisme est trop vague pour constituer un critère suffisant afin de distinguer les fonctions des simples effets. Néanmoins, son analyse est plus générale que les autres, et ces dernières peuvent être considérées comme des cas particuliers de sa formulation.
!!!(4.b) Michael Ruse
<<<
<<slider "voir citation" "{{Nagel, 1977: 296}}">>
<<<
Nagel commence par commenter et répondre à certaines critiques de Ruse contre lui. Il en profite pour reformuler sa propre position:
!!(5) "goal-supporting view", de Nagel
<<<
<<slider "voir citation" "{{Nagel, 1977: 297}}">>
<<<
Contre l'assimilation par Ruse des fonctions à des adaptations, Nagel argumente que cela fait dépendre la fonction de l'environnement. Il prend l'exemple des ours polaires, dont l'épaisse fourrure a pour fonction de les protéger du froid, et a donc une valeur adaptative. Mais en cas de réchauffement climatique ou de migration, la fourrure perd sa valeur adaptative, mais elle ne perd pas sa fonction. Il cite ensuite l'exemple des gènes qui produisent la couleur jaune de certains oignons. Il semble que cette couleur n'ait aucune valeur adaptative; pourtant, les gènes en question ont bien la fonction correspondante. L'objection n'est pas fatale, mais elle suggère que "making adaptedness the criterion of a trait being a function, is not always congruous with biological practice." (p. 298)
!!CONCLUSIONS:
<<<
<<slider "voir citation" "{{Nagel, 1977: 299}}">>
<<<
Selon Nagel, les explications des attributions de buts (goal ascriptions) sont causales, tandis que les explications de fonctions ne le sont pas; elle ne donnent pas une explication causale de la présence du trait auquel on attribue la fonction.
Tout cela n'implique pas, dit Nagel, que la biologie soit réductible à la physique, mais cela réfute une objection que l'on fait contre la possibilité d'une telle réduction. Il termine en disant que les concepts et les explications téléologiques ne sont pas obscures ni ne doivent être regardés avec suspicion.
Les tortues utilisent leurs nageoires pour creuser des nids dans le sable (pour y pondre leur oeufs). Et cela joue sans aucun doute un rôle important pour la préservation de ce trait dans la population. Donc, du point de vueétiologique, on peut dire que creuser dans le sable est une fonction des nageoires de tortue. Cependant, il serait évidemment faux de dire qu'elles ont été "designed" dans ce but. Cela suggère que function et "design" devraient être analysés séparément.
Pour qu'il y ait "//natural design//" il faut qu'il y ait non seulement un caractère fonctionnel, mais aussi que le trait en question soit le résultat d'un processus de changement lié à la sélection naturelle qui fait que les exemplaires actuels sont mieux adaptés à la fonction que leurs versions ancestrales.
Gould et Vrba nieraient le fait que creuser dans le sable soit une fonction des nageoires de tortue. Ils l'appelleraient plutôt une "exaptation". Ils recommendent l'usage du terme "fonction" seulement quand la sélection naturelle a donné forme a un trait pour un certain usage.
[tiré de Bedau, "Teleological notions in biology", Stanford encyclopaedia]
La connaissance narrative en histoire a notamment été analysée par [[Arthur Danto|Danto]].
En biologie, [[Ernst Mayr|Mayr]] utilise le concept de narration historique pour caractériser le type de connaissance propre à la biologie, par contraste avec la recherche de [[lois universelles|LoiNaturelle]] propre à la physique.
Ce qui distingue les explications causales et téléologiques a peut-être quelque chose à voir avec le type de narration. Dans un roman, on peut décrire de façon chronologique, c'est-à-dire au fur et à mesure que les événements arrivent, ou alors, comme dans un roman policier, on peut essayer de remonter dans le passé à partir d'un événement présent, un crime, qu'il s'agit d'expliquer.
Je crois que les [[explications téléologiques|ExplicationTéléologique]] sont plutôt comme des romans policiers: on connaît la fin de l'histoire (le crime) et on cherche à comprendre ce qui s'est passé avant à la lumière de cette fin. C'est je crois la raison pour laquelle on l'utilise en biologie: pour comprendre les organismes biologiques tels qu'on les observe actuellement, il faut remonter le fil du passé en prêtant attention aux causes qui sont pertinentes //pour// ce que l'on veut expliquer. Pour pouvoir voler, les oiseaux ont développé des ailes. Cela ne veut pas dire qu'il y ait des causes futures qui ont provoqué l'apparition des ailes, ni qu'il y ait un créateur dont c'était le dessein. Cela veut dire plutôt que notre façon de raconter l'histoire des événements passés est orientée vers un futur qui n'est déterminé que dans la mesure où nous le connaissons, car c'est notre présent.
On distingue deux formes principales du naturalisme : ontologique et méthodologique.
En première approximation, le NaturalismeOntologique est une conception du monde selon laquelle qu'il n'existe rien en dehors de la Nature ; selon laquelle toute réalité est naturelle, par opposition à surnaturelle. L'extension du concept de ''Nature'' restant à préciser, bon nombre de discussions portent sur ce que l'on doit ou non y inclure1.
Le NaturalismeMéthodologique, en première approximation, est la doctrine selon laquelle tout est explicable par les méthodes des sciences de la nature. Le naturalisme méthodologique consacre l'autorité de la méthode scientifique, de façon générale, pour l'acquisition des connaissances. Il est lié au versant ontologique du naturalisme dans la mesure où notre conception de ce qui existe dans le monde dépend de la manière dont nous acquérons des connaissances sur le monde. Réciproquement, l'image que nous avons du monde influe sur nos modes d'investigation.
Cette dimension admet deux valeurs :
| Valeur | Étiquette |h
|Token | {{_effet||$:/core/ui/TagTemplate}} |
|Type | {{_disposition||$:/core/ui/TagTemplate}} |
« It is the/a proper function of an item (X) of an organism (O) to do that which items of X's type did to contribute to the inclusive fitness of O's ancestors, and which caused the genotype, of which X is the phenotypic expression, to be selected by natural selection. »
!Dimensions
!!DimensionTemporelle: {{*T(-2)||tag}}
La fonction d’un trait est déterminée par une histoire sélective.
!!DimensionValorative: {{*V(0)||tag}}
!!DimensionSystémique:
!!DimensionContextuelle
!![[Portée (dimension)]]: {{_type||tag}}
La fonction d’un trait correspond au type auquel il appartient; elle est ce pour quoi les traits de ce type (ses ancêtres) ont été sélectionnés.
<$set name="titre" value={{$:/temp/search}}>
<$list filter="[!is[system]search/$titre$/sort[title]limit[250]]" />
</$set>
<$set name="titre" value={{$:/temp/search}}>
<$list filter="[!is[system]search/$(titre)$/sort[title]limit[250]]" />
</$set>
Guillaume Le Blanc, dans //Canguilhem et les Normes// (PUF, 1998), analyse le concept de [[Normativité]] de [[Canguilhem]] d'une manière qui me fait penser au concept de cognition de [[Varela]], repris par [[Bitbol]] et Luisi comme la caractéristique principale du vivant avec l'[[Autopoïèse]].
Il dit en effet que les comportements des organismes "ne sont pas des réponses automatiques à un //stimulus// externe mais des manières singulières de se rapporter à un milieu extérieur. Tout vivant explore à sa manière le milieu extérieur. Chaque vivant manifeste alors une activité propre. Cette activité est double. Elle est, d'une part, reproductrice: elle vise à maintenir l'organisme dans sa puissance intrinsèque. Elle est, d'autre part, productrice ou encore créatrice: elle permet à l'organisme d'inventer des réponses inédites dès qu'il est menacé. C'est cette activité première de l'organisme que Canguilhem désigne sous le nom de normativité." (p.53)
Un peu plus loin il ajoute: "Le vivant animal ne subit pas le milieu. Il contribue à le constituer." (p.53)
Etc.
<$list filter="[catégorie[note]!title[$:/_Template/Note]!description[dimensions]]" template="list"/>
++++![Définition générale]
L'''objectivité'' est la qualité de ce qui est [[objectif|Objectif]], au sens philosophique du terme. Elle peut caractériser:
##Un [[objet|Objet]] en tant qu'objet;
##La [[connaissance|Connaissance]] ou la [[représentation|Représentation]] d'un objet;
##Le [[sujet|Sujet]] de cette connaissance ou représentation (son auteur).
!!!Sens ontologique [[→|ObjectivitéOntologique]]
<<tiddler ObjectivitéOntologique>>
!!!Sens épistémique [[→|ObjectivitéEpistémique]]
<<tiddler ObjectivitéEpistémique>>
!!!Sens moral
<<tiddler [[./sensMoral]]>>
++++!![Autres définitions]
<<tiddler [[./définitions]]>>
===
===
+++!![Domaines]
<<tiddler [[./domaines]]>>
===
+++!![Bibliographie]
* [[Bachelard]], ''La formation de l'esprit scientifique : contribution à une psychanalyse de la connaissance'', Paris: Vrin, 2004.
* [[Castillejo]], ''The Formation of Modern Objectivity'', Madrid: Ediciones de Arte y Bibliofilia, 1982.
* [[Kuhn]], ''The structure of scientific revolutions'', Chicago: University of Chicago Press, 1996, 3º éd.
* [[Megill]], ''Rethinkink Objectivity'', London: Duke UP, 1994.
* [[Nagel, Ernest]], ''The Structure of Science'', New York: Brace and World, 1961.
* [[Nagel, Thomas]], ''The View from Nowhere'', Oxford: Oxford UP, 1986; trad. fr. ''Le point de vue de nulle part'', Paris, Éd. de l'Éclat, 1993.
* [[Nozick]], ''Invariances: the structure of the objective world'', Cambridge: Harvard UP, 2001.
* [[Popper]], ''Objective Knowledge'', Oxford: Clarendon Pr, 1972.
* [[Rescher]], ''Objectivity: the obligations of impersonal reason'', Notre Dame: Notre Dame Press, 1977.
* [[Rorty]], ''Objectivity, Relativism, and Truth'', Cambridge: Cambridge University Press, 1991; trad. fr. ''Objectivisme, relativisme et vérité'', Paris: PUF, 1994
* [[Rousset]], ''La théorie kantienne de l'objectivité'', Paris: Vrin, 1967.
* [[Schaeffler]], ''Science and Subjectivity'', Hackett, 1982.
===
++++!![Voir aussi]
| [[Existence]] | [[Métaphysique]] | [[Ontologie]] | [[Philosophie des sciences|PhiloSciences]] | [[Réalité]] | [[Sciences]] |
===
<part sensMoral hidden> L'objectivité d'un sujet est liée à des considérations à la fois épistémiques et morales. Elle s'exprime généralement en termes de neutralité, impartialité, désintéressement, ou impersonnalité.+++[suite...]
<br>Il s'agit d'une prise de distance du sujet vis-à-vis de lui-même pour se rapprocher de l'objet, étant admis que l'objectivité et la subjectivité sont mutuellement exclusives. L'individu objectif est censé, au moment de porter un jugement, abandonner tout ce qui lui est propre (idées, croyances ou préférences personnelles) pour atteindre une espèce d'universalité, ce que [[Thomas Nagel|Nagel, Thomas]] a appelé le "point de vue de nulle part". Cette conception utopique (de "nulle part") a été remise en question, surtout à partir des années 60 et 70, tant pour des raisons pratiques et de principe.
===
</part>
<part domaines hidden>
+++!!![Sciences de la nature]
* [[Kant]]
* [[Cassirer]] et l'[[école de Marbourg|EcoleMarbourg]]
* Le [[Cercle de Vienne]] et le [[positivisme logique|PositivismeLogique]]
* La thèse de l'[[Incommensurabilité]] des [[paradigmes|Paradigme]]
!!!!MécaniqueQuantique
* Le problème de la mesure
* L'[[objectivité "faible"|ObjectivitéFaible]] de [[d`Espagnat]]
* Les thèses de [[Bitbol, Michel]]
!!!![[Biologie]]
===
+++!!![Sciences humaines]
!!!![[Histoire]]
!!!![[Sociologie]]
* [[Durkheim]], Les règles de la méthode sociologique.
* [[Weber]]
===
</part>
<part définitions hidden>
*[[Littré, E. (1872-1877): Dictionnaire de la langue française]]+++["Objectif"]
|<<tiddler [[Littré, E. 1872-1877:"Objectif"/Objectif]]>>|
|<<tiddler [[Littré, E. 1872-1877:"Objectif"/Objectivement]]>>|
|<<tiddler [[Littré, E. 1872-1877:"Objectif"/Objectivité]]>>|
===
+++["Objet"]
|<<tiddler [[Littré, E. 1872-1877:"Objectif"/Objet]]>>|
===
*[[Lalande, A. (1926): Vocabulaire technique et critique de la philosophie]]+++["Objectif"]
|<<tiddler [[Lalande, A. 1926:"Objectif"/Objectif]]>>|
===
*[[Vattimo, G. (1981): Enciclopedia Garzanti di filosofia]]+++["Objectivité"]
|<<tiddler [[Vattimo, G. 1981:"Objectivité"/Objectivité]]>>|
===
+++["Objet"]
|<<tiddler [[Vattimo, G. 1981:"Objet"/Objet]]>>|
===
*[[Megill, A. (1994): Rethinking Objectivity]]+++[Objectivity]
|<<tiddler [[Objectivité: quatre acceptions différentes]]>>|
===
*[[Lecourt, D. (1999): Dictionnaire d`histoire et philosophie des sciences]]+++["Objectivité"]
|<<tiddler [[Lecourt, D. 1999:"Objectivité"/Objectivité]]>>|
===
</part>
Selon [[Peter Mandik|Mandik]], il y a types de théories de l'objectivité épistémique:
*Les ''théories du consensus'' définissent comme étant objectives les [[représentations|Représentation]] qui, pour être vraies, doivent faire l'objet d'un accord. [Voir Rorty (1979) et Gauker (1995) pour une discussion de la différence entre l'objectivité comme consensus et l'objectivité comme correspondance.)
*Les ''théories indexicales'' définissent comme étant objectives les [[représentations|Représentation]] qui sont dénuées d'éléments [[indexicaux|Indexicalité]]. (Pour une discussion des théories indexicales, voir Bell (1992), Lycan (1996), et McGinn (1983).)
*Les ''théories de la correspondance'' définissent comme étant objectives les [[représentations|Représentation]] qui se rapportent à des choses [[métaphysiquement objectives|ObjectivitéOntologique]] (indépendantes de l'esprit).
Dans l'introduction de //[[Rethinking Objectivity|Megill (1994): Rethinking Objectivity]]//, [[Allan Megill|Megill]] distingue quatre sens du concept d'objectivité:
#Le sens ''absolu'' correspond à l’idéal réaliste d’une saisie des choses ‘telles qu’elles sont réellement’.
#Le sens ''procédural'', auquel correspond l'idéal d'une méthode strictement impersonnelle et déshumanisée: « //Its motto might well be ‘untouched by human hands’// ». L'objectivité procédurale est fidèle à la lettre de l’objectivité absolue, mais pas à son esprit, étant agnostique à l’égard de la vérité.
#Le sens ''disciplinaire'' se concentre sur l'idée que la constitution d'objets est propre à chaque discipline et repose sur le consensus au sein de chaque communauté disciplinaire.
#Le sens ''dialectique'' insiste sur le rôle crucial de la subjectivité individuelle dans la constitution d'objets (dans la co-constitution sujet/objet) et sur l'aspect participatif (actif) de la connaissance.
Le concept d'[[Objectivité]] exprime-t-il une relation particulière de la [[Connaissance]] avec la [[Réalité]], ou est-ce qu'il n'exprime pas au contraire une relation au [[Sujet]] qui est l'auteur de cette connaissance? Est-ce qu'il pointe en direction de l'objet, de la réalité, ou est-ce qu'il indique plutôt une opposition à la [[Subjectivité]]? De fait, on définit le terme de façon négative, par opposition à la subjectivité.
[[Strawson]] défend une conception de la [[Vérité]] où celle-ci n'indique pas une relation de la connaissance avec la réalité, mais une relation au sujet: "c'est vrai" signifierait ainsi "je suis d'accord". C'est une conception performative de la vérité, de même que quand je dis "je promets".
Dans la même veine, dire "ceci est objectif" signifierait simplement "ceci n'est pas subjectif", où la subjectivité peut-être conçue de différentes manières.
L'objectivité, au sens [[ontologique|Ontologie]], est ce qui caractérise un objet (une propriété, un événement, etc.), par opposition à ce qui caractérise un sujet. Elle caractérise ce qui est propre à l'objet ou, plus généralement, ce qui //constitue// un objet. On entend habituellement par là ce en quoi consiste la [[réalité|Réalité]] de cet objet.
L'un des critères d'objectivité les plus courants est celui de l'indépendance à l'égard d'un quelconque sujet connaissant. Entendue au sens [[métaphysique|Métaphysique]] d'une réalité de l'objet, l'objectivité s'oppose soit à ce qui n'est qu'[[apparence|Phénomène]], [[illusion|Illusion]], [[fiction|Fiction]], soit à ce qui n'est que [[mental|Esprit]] ou [[spirituel|Âme]], contrairement à ce qui est [[physique|Physique]] ou [[matériel|Matière]]. Néanmoins, cette acception n'est ni nécessaire ni évidente.
Dans sa plus grande généralité, l'objectivité au sens ontologique ne repose en effet que sur la notion d'[[invariance|Invariance]]. Ce que nous considérons comme un objet réel est d'abord et avant tout un invariant. Les objets dits [[empiriques|Empirique]] ou matériels se caractérisent ainsi par la continuité spatio-temporelle, l'intermodalité (accord des différents sens: vue, toucher, odorat, etc.), et certaines autres propriétés mécaniques, chimiques ou autres que les scientifiques expriment par des lois.
L'objectivité, au sens [[épistémique|Épistémologie]], caractérise la validité d'une connaissance ou d'une représentation se rapportant à un objet. (Selon [[Peter Mandik|http://host.uniroma3.it/progetti/kant.field/suob.html]], ne peuvent être épistémiquement objectifs ou subjectifs que des phénomènes intentionnels: connaissance, croyances, peurs, jugements, théories, propositions, représentations mentales, informations journalistiques, etc.) Elle dépend, d'une part, de ce que l'on entend par //objet// et, de l'autre, des règles [[normatives|Normativité]] propres au domaine considéré.
En [[sciences|Science]], ces règles constituent la [[méthodologie scientifique|MéthodeScientifique]], qui est propre à chaque discipline.
L'objectivité au sens [[épistémique|Épistémologie]] n'est pas synonyme de [[vérité|Vérité]], quoi que l'usage ait tendance à les confondre. Elle est davantage un "indice de confiance" ou de "qualité" des connaissances et des représentations.
L'objectivité n'est pas non plus synonyme de fidélité à l'objet, bien que ce soit l'un de ses critères les plus couramment cités. Car les critères normatifs permettant de distinguer ce qui est objectif de ce qui ne l'est pas sont déterminés, dans chaque domaine d'utilisation du concept, par la communauté des membres ou des experts de ce domaine.
Depuis [[Kant]], on définit l'objectivité comme ce qui est valable universellement, c'est-à-dire pour tous les esprits, indépendamment de l'époque et du lieu, et par opposition à ce qui ne vaut que pour un seul ou pour un groupe. L'objectivité se trouve ainsi opposée au [[relativisme|Relativisme]]. À partir des années soixante, cependant, certains ont abandonné l'exigence d'une stricte universalité tout en conservant celle d'un [[consensus|Consensus]] au sein de la communauté (scientifique, culturelle,...), délimitant ainsi des sphères indépendantes d'application du concept. Loin de l'acception formelle ou méthodologique qui a marqué la période dite du PositivismeLogique, on tend aujourd'hui à privilégier une conception nettement [[intersubjective|Intersubjectivité]].
En ce qui concerne son fondement normatif, on peut dire que l'objectivité épistémique repose en dernière instance sur l'[[altérité|Altérité]] de l'objet vis-à-vis du sujet, ainsi que sur la [[rationalité|Rationalité]] des sujets. Cette rationalité et cette altérité, laquelle s'exprime par exemple en termes de résistance ou d'indépendance à l'égard de la volonté, sont peut-être à chercher du côté de l'[[action|Action]].
{{Objectivité épistémique: trois théories}}
L'une des significations de l'objectivité est celle d'une description fidèle, une description des choses telles qu'elles sont. Or, si par fidélité on entend exactitude (au sens de précision et de vérité), ou bien si l'on associe ces deux idées, on tombe dans des paradoxes que Borges a transcrits dans ses textes et qui montrent la vanité de cette prétention. Il s'agit notamment de paradoxes cartographiques comme les suivants:
!!{{Borges, 1952: “Magias parciales del 'Quijote'”!!description}}
<<<
{{Borges, 1952: “Magias parciales del 'Quijote'”}}
<<<[[Borges, 1952: “Magias parciales del 'Quijote'”]]
!!{{Borges, 1960: “Del Rigor en la Ciencia”!!description}}
<<<
{{Borges, 1960: “Del Rigor en la Ciencia”}}
<<<[[Borges, 1960: “Del Rigor en la Ciencia”]]
Cette Carte Démesurée peut bien prétendre être une description objective de la réalité du territoire, mais elle s'avère, de par les dimensions que sa précision requiert, impraticable et inutile.
Le caractère impraticable de la carte de Borges dépend de limitations techniques qu'aujourd'hui nous sommes en mesure de surmonter. Il suffit de penser à un GoogleEarth - voire à un GoogleUniverse - où la puissance de calcul rendrait possible la manipulation d'images indéfiniment précises. Poussée à son comble, l'idée d'un GoogleUniverse se confondrait d'une certaine manière avec celle du [[démon de Laplace|DémonLaplace]], à ceci près que la carte est statique, bien qu'elle permette de voyager virtuellement dans l'espace, tandis que la représentation du démon de Laplace est dynamique et permet de voyager dans le temps. Cette idée rejoint également celle de la modélisation scientifique, dont l'aboutissement serait une sorte de DémonLaplace. Mais la modélisation rend possible une expérimentation virtuelle, à la fois réelle et fictive ("Que se passerait-il si...?"), qui est un voyage dans le territoire du possible.
L'inutilité de la carte de Borges apparaît dès lors qu'on se pose la question de sa fonction, de son utilité. Car une carte qui serait la représentation exacte d'un territoire serait redondante avec celui-ci et n'apporterait rien qui n'y soit pas déjà. La connaissance n'est pas un reflet du monde dans le miroir du langage. Une carte peut avoir de nombreux usages, et en suivant l'usage qu'on veut en faire, il existe différents types de cartes. Celles-ci ne représentent que ce qui est //pertinent// pour l'usage qu'on veut en faire: une carte militaire ne représentera pas les mêmes choses qu'une carte géologique ou une carte botanique. C'est-à-dire que chaque carte, pour montrer ce qui mérite d'être vu, ce qui est jugé important, doit cacher le reste. Elle est donc infidèle à la réalité qu'elle représente dans la mesure où elle en montre une partie et en cache le reste selon un critère qui est directement relatif aux intérêts humains. Dira-t-on pour autant qu'une représentation cartographique est subjective?
Il est assez évident que toute connaissance scientifique procède par abstraction de l'objet qu'elle étudie. Sans cette abstraction, noyé dans une infinité de détails, le scientifique serait incapable de tirer la moindre conclusion. Il serait comme [[Funes el memorioso|Borges 1944: "Funes el memorioso"]] pour qui le chien de profil de 14h01 n'est pas le même que le chien de trois-quarts de 14h02. Abstraire ne veut pas forcément dire perdre de l'information, car il est possible de trouver des structures et des redondances dans cette information permettant de la formuler de manière plus concise ; c'est le principe des algorithmes. Mais ce procédé n'est sans doute pas suffisant, raison pour laquelle il est inévitable de perdre une partie de l'information pour gagner en intelligibilité.
Ce que montre le texte de [[Borges]], ce sont les limites de la connaissance entendue comme une représentation de la réalité. Pour ma part, je crois qu'il est plus intéressant de la considérer non pas comme une représentation, mais comme une interprétation. Interpréter c'est donner un ordre, donner une cohérence, quitte à éliminer une partie de l'information originale, et quitte à ajouter des choses. Interpréter, en ce sens, c'est donner du sens. On peut essayer de donner une formulation plus précise de cette idée, et surtout de lui imposer des limites, à partir de la théorie algorithmique de l'information.
----
[[William James|James, William]] (1907) utilise lui aussi l'image de la carte pour illustrer son concept de vérité: Quelqu'un se trouve perdu en forêt avec en sa possession plusieurs cartes de la même région. Laquelle de ces cartes est plus vraie? Pour un pragmatiste, la carte qui est vraie pour une personne perdue en forêt est celle qui lui permet d'en sortir. "[L]a idea correcta es aquella que nos conduce al camino de vuelta, la que nos conduce a la conclusión deseada, la que trae el estado de cosas pretendido."
On peut également penser à [[Descartes]], dans le //Discours de la méthode// je crois, où lui aussi évoque une personne perdue en forêt. (Peut-être que James s'en est inspiré.)
''Alvin Plantinga'' est un philosophe étasunien, [[protestant|Protestantisme]], spécialisé en [[philosophie de la religion|PhiloReligion]] et sur des questions de [[logique modale|PhiloLogique]].
Il développe notamment un argument évolutionniste contre le [[naturalisme|Naturalisme]], avec lequel il prétend montrer que le naturalisme et la [[théorie de l'évolution biologique|Darwinisme]], pris ensemble, s'auto-réfutent. Il développe cet argument dans le dernier chapitre de [[Warrant and Proper Function|Plantinga, A (1993): Warrant and Proper Function]], et dans un article inédit intitulé [["Naturalism Defeated"|Plantinga, A (1994): "Naturalism Defeated"]].
L'auteur pose la question: que faire quand la raison et la foi se contredisent? De façon générale, la réponse de l'auteur consiste à dire: on ne peut pas rejeter a priori l'un ou l'autre, il faut évaluer chaque question individuellement et voir de quelles garanties dispose chacune des propositions concurrentes.
Les sciences, contrairement à ce qu'elles prétendent, ne sont pas neutres vis-à-vis de la religion, ni de la morale. Il y a une bataille qui se livre entre trois adversaires: le naturalisme (athée), l'antiréalisme (kantien), le théisme (chrétien).
Il discute ensuite plus en détail la théorie de l'évolution. Il rejette en particulier, en citant des contre-exemples ou difficultés, l'hypothèse de l'ancêtre commun, à laquelle il oppose une création séparée pour les différentes espèces. Selon lui, cette hypothèse n'est probable que si l'on adopte au départ la perspective naturaliste, mais nous n'y sommes pas obligés.
Il propose finalement la création d'une "science théiste", non limitée par les parti-pris du naturalisme. Le christianisme est engagé dans une bataille contre les forces de l'incroyance, et la science n'est pas neutre. Il faut donc adopter une attitude critique vis-à-vis des universitaires et des experts, ne pas toujours les croire sur parole, et s'engager soi-même dans les sciences avec une perspective chrétienne.
L'article est disponible à l'adresse: http://www.calvin.edu/academic/philosophy/virtual_library/plantinga_alvin.html
« Dans la permière partie, l'auteur cherche à montrer, exemples à l'appui, que la science n'est pas neutre. Que ce soit en sociologie, en biologie évolutionniste, ou en cosmologie (//cosmic fine-tuning//). Il demande alors la création d'une science chrétienne.
Dans la seconde partie, il s'en prend d'abord à la définition de la science de M. Ruse qui exclut, par définition, toute référence à Dieu. Il discute ensuite de la manière dont Dieu agit ou est présent dans sa Création, et de la manière dont le théiste peut l'invoquer dans ses explications, notamment en référence au Dieu-des-brèches (God-of-the-gaps). Il discute finalement la "science duhemienne", c'est-à-dire l'idée que les théories scientifiques sont subordonnées à une métaphysique, et ce qui pourrait être une science augustinienne. »
L’enjeu de cette variable réside notamment dans la possibilité d’attribuer une fonction à un item qui n’est pas capable de la réaliser. Par exemple un cœur malformé incapable de pomper le sang. Si la fonction dépend du type auquel l’item appartient, alors oui il possède la fonction et on peut parler de dysfonction. En revanche, si la fonction ne dépend pas d’un type, alors un cœur malformé n’a pas de fonction.
Cette dimension admet deux valeurs :
| Valeur | Étiquette |h
|Token | {{_token||$:/core/ui/TagTemplate}} |
|Type | {{_type||$:/core/ui/TagTemplate}} |
<div class="tw-menu-list-item">
<$list filter="[catégorie[auteur]sort[nom]] -[[$:/_Template/Auteur]]">
!!<$link to={{!!title}}><$view field="nom"/></$link>
<div class="tw-menu-list-subitem">
<$list filter="[auteur{!!nom}sort[title]] -[[$:/_Template/Article]] -[[$:/_Template/Livre]]"/>
</div>
</$list>
</div>
[[Quine]] constate l'échec des tentatives du [[Cercle de Vienne]] pour justifier les connaissances par la réduction des propositions scientifiques à des propositions observationnelles, c'est-à-dire par une reconstruction rationnelle //a priori//. L'auteur tire les conséquences de sa critique de l'incommensurabilité de la traduction et de la distinction entre connaissance analytique et synthétique, et il affirme que le projet de justification rationnelle des connaissances doit être abandonné au profit de l'investigation scientifique: la nouvelle épistémologie doit être un chapitre de la psychologie, c'est-à-dire des sciences naturelles.
L'article est un classique de l'épistémologie contemporaine et mérite d'être relu, notamment pour la manière dont il définit les énoncés observationnels à partir d'une communauté linguistique.
<$linkcatcher to="$:/temp/customsearch">
Recherche avancée :
<div class="tw-search"><$edit-text tiddler="$:/temp/customsearch" type="search" tag="input"/><$reveal state="$:/temp/customsearch" type="nomatch" text=""> <$link to="" class="btn-invisible">{{$:/core/images/close-button}}</$link></$reveal></div>
</$linkcatcher>
<$reveal state="$:/temp/customsearch" type="nomatch" text="">
<div class="tw-search-results">
<$list filter="[is[tiddler]field:title/Fon/limit[10]]" message="Pas de tiddler avec ce nom">{{!!title}}</$list>
---
//<small><$count filter="[catégorie[note]search{$:/temp/customsearch}]"/> notes</small>//
<$list filter="[catégorie[note]search{$:/temp/customsearch}sort[title]limit[250]]">
<$link><$view field="title"/></$link><$list filter="[is[current]à_propos_de{$:/temp/customsearch}]">@@color:red; (*) @@</$list><$list filter="[is[current]tag{$:/temp/customsearch}]">@@color:green; (tag) @@</$list><$list filter="[is[current]backlinks{$:/temp/customsearch}]">@@color:blue; (*) @@</$list>
</$list>
</div>
</$reveal>
<$reveal state="$:/temp/customsearch" type="match" text="">
</$reveal>
<$linkcatcher to="$:/temp/rechercheAvancée">
Recherche avancée :
<div class="tw-search"><$edit-text tiddler="$:/temp/rechercheAvancée" type="search" tag="input"/><$reveal state="$:/temp/rechercheAvancée" type="nomatch" text=""> <$link to="" class="btn-invisible">{{$:/core/images/close-button}}</$link></$reveal></div>
</$linkcatcher>
<$reveal state="$:/temp/rechercheAvancée" type="nomatch" text="">
<div class="tw-search-results">
<$list filter="[!is[system]title{$:/temp/rechercheAvancée}]" emptyMessage="Pas de tiddler avec ce nom"/>
---
<div class="tw-menu-list-item">
<$list filter="[search{$:/temp/rechercheAvancée}field:catégorie/article|livre/]">
<$list filter="[search{$:/temp/rechercheAvancée}catégorie[auteur]nom{!!auteur}]">
<h2><$link to={{!!title}}><$view field="title"/></$link></h2>
<$list filter="[search{$:/temp/rechercheAvancée}catégorie[note]à_propos_de{!!title}]"/>
</$list>
<h3><$link to={{!!title}}><$view field="title"/></$link></h3>
<div class="tw-menu-list-subitem">
<$list filter="[search{$:/temp/rechercheAvancée}catégorie[note]à_propos_de{!!title}]"/>
<$list filter="[search{$:/temp/rechercheAvancée}catégorie[citation]source{!!title}]"/>
</div>
</$list>
</div>
---
---
<$list filter="[search{$:/temp/rechercheAvancée}]"/>
</div>
</$reveal>
<$reveal state="$:/temp/rechercheAvancée" type="match" text="">
</$reveal>
<$linkcatcher to="$:/temp/rechercheAvancée">
Recherche avancée :
<div class="tw-search"><$edit-text tiddler="$:/temp/rechercheAvancée" type="search" tag="input"/><$reveal state="$:/temp/rechercheAvancée" type="nomatch" text=""> <$link to="" class="btn-invisible">{{$:/core/images/close-button}}</$link></$reveal></div>
</$linkcatcher>
<$reveal state="$:/temp/rechercheAvancée" type="nomatch" text="">
<div class="tw-search-results">
<$list filter="[!is[system]prefix{$:/temp/rechercheAvancée}]" emptyMessage="Pas de tiddler avec ce nom"/>
---
<$list filter="[search{$:/temp/rechercheAvancée}field:catégorie/article|livre/]">
<$link><$view field="title"/></$link>
<indent>
<$list filter="[search{$:/temp/rechercheAvancée}catégorie[citation]source{!!title}]"/>
<$list filter="[search{$:/temp/rechercheAvancée}catégorie[note]à_propos_de{!!title}]"/>
</indent>
</$list>
---
<$list filter="[search{$:/temp/rechercheAvancée}]"/>
</div>
</$reveal>
<$reveal state="$:/temp/rechercheAvancée" type="match" text="">
</$reveal>
|!Search tag: | <$edit-text tiddler="$:/temp/RenameTags/search" tag="input" type="text"/> |! Replace by: | <$edit-text tiddler="$:/temp/RenameTags/replace" tag="input" type="text"/> |
---
!!!1^^st^^. Apply the tag <$tiddler tiddler={{$:/temp/RenameTags/replace}}><$transclude tiddler="showtag"/></$tiddler> to the following tiddlers
<$list filter="[!has[draft.of]tag{$:/temp/RenameTags/search}!tag{$:/temp/RenameTags/replace}sort[created]]">
<$checkbox tag={{$:/temp/RenameTags/replace}}> <$link to={{!!title}}><$view field="title"/></$link></$checkbox>
</$list>
!!!2^^nd^^. Remove the tag <$tiddler tiddler={{$:/temp/RenameTags/search}}><$transclude tiddler="showtag"/></$tiddler> from the following tiddlers
<$list filter="[!has[draft.of]tag{$:/temp/RenameTags/search}tag{$:/temp/RenameTags/replace}sort[created]]">
<$checkbox tag={{$:/temp/RenameTags/search}}> <$link to={{!!title}}><$view field="title"/></$link></$checkbox>
</$list>
« Man is an example of nature, and just as good an example as rocks, sea, and sky, because he is bone of her bones and flesh or her flesh. »
« Contemporary naturalism approaches the theory of nature from the fact of living rather than from the fact of doubting [...] Man does not understand the world by going outside of it, but by living in it. »
Ce texte cherche à décrire les caractéristiques essentielles du [[naturalisme|Naturalisme]] en tant que théorie de la nature.
Il commence par dire que le naturalisme est une réaction contre le mécanisme matérialiste du XIXe siècle à la lumière des révolutions de la physique: MécaniqueQuantique et Relativité. Le naturalisme correspondrait à un changement d'attitude vis-à-vis des sciences et du monde, moins dogmatique et plus ouvert à reconnaître les complexités de la nature. Il correspond à une tentative de comprendre le monde de l'intérieur, tenant compte du fait que l'homme fait partie de cette nature qu'il cherche à décrire (voir citations).
Le reste du texte est un peu bizarre, et je ne suis pas sûr qu'on puisse en tirer grand chose.
L'un des premiers articles à défendre l'idée que les catégories cognitives sont structurées autour de prototypes. L'étude porte sur la catégorisation des couleurs et des formes. Elle a été réalisée auprès de 162 membres d'une tribu dont le langage est dépourvu de concepts pour les formes géométriques et pour les teintes de couleur. Elle a consisté à leur présenter des catégories de couleur constituées autour de "prototypes naturels" perceptivement saillants, ainsi que des catégories où les prototypes naturels étaient périphériques, afin d'étudier la manière dont ils apprenaient et manipulaient ces catégories.
L'étude a montré que les catégories "naturelles" étaient nettement plus faciles à apprendre que les catégories "biscornues". Même lorsqu'il n'étaient pas centraux, les stimuli prototypiques naturels avaient tendance à être plus rapidement appris et plus souvent choisis comme exemples typiques de la catégorie que d'autres stimuli. L'article se termine par une discussion sur les différences générales entre les catégories naturelles et artificielles dans les recherches sur la formation des concepts.
[...] the basic hypothesis of the present study is that colors are 'natural categories' and conform to the hypotheses for the learning of natural categories stated in the introduction; that is, it is predicted that focal colors themselves and sets in which focal colors are central will be learned faster that nonfocal colors and than unnaturally structured sets.
Evidence has been presented that there are nonarbitrary color and form categories which form around perceptually salient "natural prototypes"
Lorsque [[Rosch]] parle de ''catégories naturelles'', cela ne veut pas forcément dire que ces catégories existent dans la nature, mais qu'elles correspondent à des noms de concepts dans les langues naturelles (voir [[ceci|Catégories: le continu et le discontinu]]) ou alors qu'elles correspondent à des domaines perceptifs.
D'ailleurs, pourrait-on dire que les catégories de couleurs correspondent à quelque chose dans la nature? Autrement dit, la partition du domaine continu des couleurs en rouge, jaune et bleu, par exemple, correspond-elle à quelque chose "là-dehors", indépendamment de nous? On pourrait penser que oui dans la mesure où l'on peut composer toutes les autres couleurs à partir de ces trois couleurs de base. Mais je ne suis pas sûr qu'on ne puisse pas le faire avec trois autres couleurs du spectre (@@à vérifier@@).
{{Rosch, 1973: 338||cit}}
La catégorisation des couleurs n'est pas arbitraire mais elle est limitée par des contraintes perceptuelles. Si les catégories de couleurs n'existent pas "là-dehors", cela veut dire qu'on peut envisager ''une espèce d'objectivité non réaliste'' des catégories de couleurs.
L'auteur cite ensuite certaines études qui tendent à montrer que ces catégories "naturelles" correspondent à des contraintes physiologiques dans la perception des couleurs. Mais s'il n'y a pas de raisons de penser que ces catégories préexistent d'une certaine manière à leur catégorisation, c'est-à-dire que si la partition du spectre des couleurs n'est pas indépendante de nous, alors les catégories en question ne renvoient pas à une "réalité extérieure" mais à des contraintes internes, bien que universellement partagées. ''Il pourrait donc s'agir de catégories humaines.''
[[Robert Rosen|Rosen]] (1934–1998) est un théoricien de la biologie américain et professeur de biophysique à l'université de Dalhousie.
''La physique, la biologie et la clôture sous causalité efficiente''
(par John Stewart, COSTECH, Université de Technologie de Compiègne)
Rosen (1991) propose de ré-interpréter les quatre types de [[Causalité]] que distinguait [[Aristote]]: les causalités matérielle, efficiente, formelle et finale. Dans le cas des systèmes dynamiques déterminés par leur état (SDDE), les trois causes matérielle, efficiente et formelle sont si étroitement imbriquées qu'au fond elles ne forment qu'une seule cause; et, comme l'a dit Russell, la notion même de "causalité" s'affaiblit dans la mesure où //tout est déterminé//. Par conséquent, il n'y a rigoureusement aucune place pour le quatrième type de causalité aristotélicienne, la "cause finale": elle ne //peut// rien ajouter, rien signifier, car tout est //déjà// déterminé et il n'y a plus rien à spécifier.
Rosen propose comme //définition// d'un organisme vivant le fait qu'il s'agit d'un système matériel qui est clos //sous causalité efficiente//. Cela n'est possible que si les causalités efficientes bouclent sur elles-mêmes dans une configuration circulaire ; ce qui est impossible dans le cadre conceptuel d'un SDDE car la structure des implications causales est déjà totalement saturée. Par exemple, la physique, en tant que science des SDDE, ne //peut// répondre à la question: "//pourquoi// la force est-elle proportionnelle au produit des masses et inversement proportionnelle au carré de la distance?" Les "lois dynamiques" sont en fait hétéronomes, "extérieures" en quelque sorte au système lui-même.
En employant la Théorie des Catégories, Rosen propose un modèle formel (minimal) de la clôture sous causalité efficiente, dans lequel @@il devient possible de donner un contenu scientifique aux notions de //cause finale// et de //fonction//@@. Chaque composant du modèle relationnel ainsi obtenu possède alors des "raisons d'être" qui proviennent de ses conséquences et des //fonctions//, non pas au sens mathématique (des applications), mais au sens biologique du terme.
Dire qu’un item X dans le système S a la fonction F signifie :
:i. « S actually does (can do) F by means of X ;
:ii. doing F is adaptative for S ; and
:iii. X is an adaptation (for doing Y). »
L’article porte sur l’étude du comportement d’un système quelconque (vivant ou non). Les auteurs s’intéressent uniquement au comportement externe des systèmes, laissant de côté leur organisation interne et leur analyse fonctionnelle (ainsi que la question de savoir s’ils possèdent des états mentaux).
Ils s’intéressent en particulier aux comportements actifs et //purposeful//, c’est-à-dire Goal-Directed. À noter que les auteurs entendent //purposeful// au sens d’un état final du système, à la manière d’un missile auto-dirigé, de sorte qu’une horloge n’est pas une machine //purposeful// car elle n’a pas d’état final.
Les mécanismes ou systèmes téléologiques sont ceux dont la finalité (//purpose//) se manifeste par l’ajustement dynamique de leur comportement aux variations environnementales en vue de poursuivre un objectif donné (//goal//). Ce comportement téléologique repose essentiellement sur des ''boucles de rétro-alimentation négative'' (//negative Feed-Back//) et peut être défini en ces termes.
La classification du comportement que proposent les auteurs est la suivante:
{{RWB, 1943: 21.png}}
!Dimensions
@@Attention: il ne s’agit pas ici de l’attribution de fonctions mais de la qualification d’un comportement comme étant téléologique ou /purposeful/.@@
!!DimensionTemporelle: {{*T(0)||$:/core/ui/TagTemplate}}
Le fait qu’un comportement soit qualifié de téléologique ne dépend pas d’une histoire passée ou future mais seulement du fait qu’il est contrôlé par //negative Feed-Back//.
!!DimensionValorative: {{*V(0)||$:/core/ui/TagTemplate}}
Aucune valeur explicite ni implicite dans la définition.
!!DimensionSystémique: {{*S(0)||$:/core/ui/TagTemplate}}
Les auteurs considèrent le comportement d’un système envers son but, mais leur définition n’implique à aucun moment une relation tout-parties.
!!DimensionContextuelle: {{*C(0)||$:/core/ui/TagTemplate}}
Le fait qu’un comportement soit dirigé vers un but n’est pas relatif à un contexte particulier, bien que tout système et tout comportement d’un système soient limités par certaines conditions environnementales: température critique de fonctionnement, etc.
« Active behavior may be subdivided into two classes: purposeless (or random) and purposeful. The term purposeful is meant to denote that the act or behavior may be interpreted as directed to the attainment of a goal-i.e., to a final condition in which the behaving object reaches a definite correlation in time or in space with respect to another object or event. »
« The term feed-back is also employed in a more restricted sense to signify that the behavior of an object is controlled by the margin of error at which the object stands at a given time with reference to a relatively specific goal. The feed-back is then negative, that is, the signals from the goal are used to restrict outputs which would otherwise go beyond the goal. It is this second meaning of the term feed-back that is used here. »
« All purposeful behavior may be considered to require negative Feed-Back. If a goal is to be attained, some signals from the goal are necessary at some time to direct the behavior. By non-feed-back behavior is meant that in which there are no signals from the goal which modify the activity of the object in the course of the behavior. »
« Feed-back purposeful behavior may again be subdivided. It may be extrapolative (predictive), or it may be non-extrapolative (non-predictive). The reactions of unicellular organisms known as tropisms are examples of non-predictive performances. The amoeba merely follows the source to which it reacts; there is no evidence that it extrapolates the path of a moving source. Predictive animal behavior, on the other hand, is a commonplace. A cat starting to pursue a running mouse does not run directly toward the region where the mouse is at any given time, but moves toward an extrapolated future position. Examples of both predictive and non-predictive servomechanisms may also be found readily. »
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br/9drZv3056ejoAISEhXH311eTm5qJSqXjooYe4+eabsdlsLFu2jMbGRqqqqnjrrbfIy8vj7rvvZvTo0YwdO7bZhLGGhgbWrl3LF198wcSJExkzZgxjx44lPz+fhQsXEhAQwLBhw6irqyMiIoIZM2Zw6623otFoyMzMJDU1ldTUVK655hr27NlDdnZ2s//WBAUF0apVKzIyMs75cAIhhBDnKSy63W52797NBx98wLx589i8eTO9evXitttuw8/PD7vdzoIFC9iyZQsPPfQQc+bMobGxkVmzZlFbW6uETa/XS3R0NJMnT6ZPnz688cYb7N69Wylx99prr+FyuUhNTaVv376sWLGCvLw8pRLF9OnTKSsrIzQ0lJiYGNq3b49er+e2225j5MiRhIaGMnToUA4fPkxeXh4AjY2NLF68mOLiYu677z6GDx/OtGnT2LJlC6+++ip+fn4MGTKEdu3aYbFYmDVrFtddd91vdivYbrezatUq5s6dyy233MLw4cOlJ+UcOVczan0Bpl+/fuh0Otq2bUt0dLSysHb79u1Rq9UYDAYMBgO9e/duNr5Qo9H84hnuKpWKwMBAQkJCmt3+1Wq1REZGEhsbS0hICFOmTOGVV17hlVdewWw2061bNxISErDZbOzatQu73U5ZWZnSaxcfH09AQABdu3YlOTmZmJgYoqKiKCoqoqysjPLycr788kvat29Pu3btiImJoWfPns1qXVdVVbF69Wqampro3r07ERERtG3bljZt2rBv3z5OnjxJTEwM4eHh9OzZkw4dOhAVFYXBYECj0dCtWzeioqKIjo7G6XRis9mavXeNRqOUY5S/BSGEuIR6FiMiIrjhhhuYO3cuS5cupaysjGnTppGZmUlDQwPr1q3Dbrfj8XioqKhArVaTmZnJ7t27UalUBAcHExAQwB/+8Afi4+Np06YNFRUVHDp0CJVKRUBAAOHh4YSEhKDRaCgoKKC2tpaysjKlEsVVV11F9+7dycnJweFwUF5eTnh4OA8++CCxsbHo9Xp69OiB1+vF4/EoIXT9+vWEhIQQFxdHcHAwXbt2RafTsWHDBtRqNcHBwVitVkwmE7feeivz589n1qxZv8nF1mq1dOnShYSEBNavX39JTsy56BrweVg6xzfuUKVS4efnp4QYj8fTrAdTrVaj0+mahRyPx4PFYvnVxzu95823v8bGRgIC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
« We have restricted the connotation of teleological behavior by applying this designation only to purposeful reactions which are controlled by the error of the reaction-i.e., by the difference between the state of the behaving object at any time and the final state interpreted as the purpose. Teleological behavior thus becomes synonymous with behavior controlled by negative feed-back, and gains therefore in precision by a sufficiently restricted connotation.
According to this limited definition, teleology is not opposed to determinism, but to non-teleology. Both teleological and non-teleological systems are deterministic when the behavior considered belongs to the realm where determinism applies. The concept of teleology shares only one thing with the concept of causality: a time axis. But causality implies a one-way, relatively irreversible functional relationship, whereas teleology is concerned with behavior, not with functional relationships. »
<$list filter="[is[current]catégorie[concept]] [is[current]catégorie[théorie]]">
<table class="rowstable">
<tbody>
<tr><td></td><td> <small>hiérarchie des concepts et des théories</small> </td></tr>
<tr><td><small>niv. 0</small></td><td>{{!!title||tag}}</td></tr>
<tr><td><small>niv. 1</small></td><td>{{!!title||concepts(+1)}}</td></tr>
<tr><td><small>niv. 2</small></td><td>{{!!title||concepts(+2)}}</td></tr>
<tr><td><small>niv. 3</small></td><td>{{!!title||concepts(+3)}}</td></tr>
</tbody></table>
</$list>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 17.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="42px" height="42px" viewBox="0 0 42 42" enable-background="new 0 0 42 42" xml:space="preserve">
<path fill="#C6C6C6" d="M1,17.838c0,8.747,7.131,15.827,15.94,15.827c8.796,0,15.938-7.08,15.938-15.827S25.736,2,16.94,2
C8.131,2,1,9.091,1,17.838z M6.051,17.838c0-5.979,4.868-10.817,10.89-10.817c6.01,0,10.888,4.839,10.888,10.817
c0,5.979-4.878,10.818-10.888,10.818C10.919,28.656,6.051,23.816,6.051,17.838z M28.162,32.361l6.855,7.809
c1.104,1.102,1.816,1.111,2.938,0l2.201-2.181c1.082-1.081,1.149-1.778,0-2.921l-7.896-6.775L28.162,32.361z"/>
</svg>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd" [
<!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
<!ENTITY ns_extend "http://ns.adobe.com/Extensibility/1.0/">
<!ENTITY ns_ai "http://ns.adobe.com/AdobeIllustrator/10.0/">
<!ENTITY ns_graphs "http://ns.adobe.com/Graphs/1.0/">
]>
<svg version="1.1" baseProfile="tiny" id="search" xmlns:x="&ns_extend;" xmlns:i="&ns_ai;" xmlns:graph="&ns_graphs;"
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
x="0px" y="0px" width="42px" height="42px" viewBox="0 0 42 42" xml:space="preserve">
<path d="M1.504,17.338c0,8.747,7.131,15.827,15.94,15.827c8.796,0,15.938-7.08,15.938-15.827S26.24,1.5,17.444,1.5
C8.635,1.5,1.504,8.591,1.504,17.338z M6.555,17.338c0-5.979,4.868-10.817,10.89-10.817c6.01,0,10.888,4.839,10.888,10.817
c0,5.979-4.878,10.818-10.888,10.818C11.423,28.156,6.555,23.316,6.555,17.338z M28.666,31.861l6.855,7.809
c1.104,1.102,1.817,1.111,2.939,0l2.201-2.181c1.082-1.081,1.15-1.778,0-2.921l-7.896-6.775L28.666,31.861z"/>
</svg>
\define filter_tags()
<$list filter="[!is[system]tags[]prefix{$:/temp/search}]"><$transclude tiddler="$:/core/ui/TagTemplate"/></$list>
\end
\define filter_prefix()
<$list filter="[!is[system]prefix{$:/temp/search}] -[tags[]]" template="$:/core/ui/ListItemTemplate"/>
\end
\define filter_title2()
<$list filter="[!is[system]field:title/$(titre)$/(i)] -[prefix{$:/temp/search}]" template="$:/core/ui/ListItemTemplate"/>
\end
\define filter_title1()
<$set name="titre" value={{$:/temp/search}}>
<<filter_title2>>
</$set>
\end
\define filter_others()
<$list filter="[!is[system]search{$:/temp/search}] -[prefix{$:/temp/search}] +[sort[title]limit[250]]" template="$:/core/ui/ListItemTemplate"/>
\end
<div class="tw-search"><$edit-text tiddler="$:/temp/search" type="search" tag="input"/> <$reveal state="$:/temp/search" type="nomatch" text=""><$linkcatcher to="$:/temp/search"><$link to="" class="btn-invisible">{{$:/core/images/close-button}}</$link></$linkcatcher></$reveal><$reveal state="$:/temp/search" type="match" text=""> <$link to="$:/AdvancedSearch" class="btn-invisible">…</$link></$reveal></div>
<$reveal state="$:/temp/search" type="nomatch" text="">
<div class="tw-search-results">
{{$:/language/Search/Matches}}
<$list filter="[!is[system]tags[]prefix{$:/temp/search}limit[1]]">
//Étiquettes ://
<br>
<<filter_tags>>
<br>
</$list>
<$list filter="[!is[system]prefix{$:/temp/search}] -[tags[]] +[limit[1]]">
//Tiddlers ://
<div class="tw-menu-list-subitem">
<<filter_prefix>>
</div>
</$list>
<div class="tw-menu-list-subitem">
<<filter_title1>>
</div>
<$list filter="[!is[system]prefix{$:/temp/search}] -[tags[]prefix{$:/temp/search}] +[limit[1]]"><hr><small>//Autres résultats//</small><br>
<<filter_others>>
</$list>
</div>
</$reveal>
Le texte concerne principalement le débat sur l'enseignement universitaire. A travers la défense de la tradition [[rationaliste|Rationalisme]] occidentale face à la cuture [[postmoderniste|PostModernité]], l'auteur y affirme une [[conception réaliste|Réalisme]] très claire (peut-être même //trop// claire) de la [[connaissance objective|Objectivité]]. Il y énonce six principes de la tradition rationaliste:
*La [[réalité|Réalité]] existe indépendamment de ses [[représentations|Représentation]] humaines.
*L’une au moins des fonctions du langage est de communiquer des [[significations|Signification]] de locuteurs à auditeurs, et parfois, ces significations permettent à la communication de se référer à des [[objets|Objet]] et à des états de choses dans le monde qui existent indépendamment du langage.
*La [[vérité|Vérité]] concerne la [[précision|Précision]] de la représentation.
*La [[connaissance|Connaissance]] est [[objective|Objectivité]].
*La [[logique|Logique]] et la [[rationalité|Rationalité]] sont formelles.
*Les [[standards intellectuels|Normes]] ne sont pas institués pour rien. Ce sont des critères de la création et de la qualité intellectuelles qui sont valides à la fois objectivement et [[intersubjectivement|Intersubjectivité]].
You might know that the field called "list" is a special field. Its value is in fact a list which can be used by the list widget. Now several times already users asked whether or not it is possible to use other fields as lists.
If you ever programmed in JavaScript, you know that there is a string method called "split" which allows to split a string into an array. This method is now also available as a filter function. An example:
This tiddler has a field "colors" with the content ''{{!!colors}}''. Using the split function, this field can be split into a list: ``{{{ [ is[current]] +[split:colors[,]] }}}``
{{{ [is[current]] +[split:colors[,]] }}}
Another field is "eu-countries" containing ''{{!!eu-countries}}''. As you see, the seperator here is a space followed by some whitespace. So a regular expression seems appropriate:
``{{{ [is[current]] +[split:eu-countries/\s*,\s*/] }}}``
{{{ [is[current]] +[split:eu-countries/, /] }}}
L'auteur cherche à expliquer/décrire l'évolution du naturalisme à son époque. Sans le définir, il l'oppose au supernaturalisme et le lie à la compréhension scientifique du monde qui nous entoure.
Il décrit la connaissance comme un processus d'adaptation au monde où les découvertes (théorie de la relativité, évolution biologique) qui paraissent surprenantes ou incompréhensibles à une génération d'hommes sont assimilées par la suivante.
Il décrit ensuite le naturalisme comme une idée ou une attitude ayant lentement émergé, depuis l'aube des temps.
Selon Sellars, les primitifs ne connaissaient ni naturalisme ni supernaturalisme, car ils vivaient dans l'ignorance et la stupidité (//primal stupidity//), qu'il associe aux rites, aux mythes et à la magie; car les hommes, pour qui le monde était une énigme, l'interprétaient en termes d'espoirs, peurs et créations imaginaires. Sellars voit l'évolution de l'homme à partir de cet état de 'stupidité primitive' à la lumière de la théorie de l'évolution. Avec les Grecs, l'intelligence et la réflection commencent à s'épanouir. Ils mettent de l'ordre dans les cieux et dans la cité, et ils commencent à chercher à comprendre la nature des choses. "The idea of nature as an orderly realm of events was born." (p. 316) Malheureusement, cet esprit de liberté intellectuelle ne dura pas.
Il associe ensuite le naturalisme à l'épicurisme, et s'interroge sur les raisons pour lesquelles il a disparu: parce que le monde n'était pas encore prêt pour le naturalisme.
Il présente vraiment le naturalisme comme une conquête de l'esprit humain, à la poursuite de la vérité, sur la superstition et les mythes qui ont dominé la pensée de l'humanité durant une grande partie de son histoire. C'est une entreprise héroique.
Après le récit de la grande épopée de la raison, Sellars distingue deux types de naturalisme: subjectif et objectif.
* Naturalisme subjectif: {{Sellars, 1924: 329||slider}}
* Naturalisme objecitf: {{Sellars, 1924: 329'||slider}}
Ces tentatives, fussent-elles erronées, sont des pas nécessaires vers la vérité, car les progrès de la pensée sont progressifs et cumulatifs.
L'apparition de la théorie de l'évolution au XIXe siècle a permis un pas supplémentaire dans la voie du naturalisme qui, avec le matérialisme, se trouvait dans une impasse:
{{Sellars, 1924: 334||slider}}
L'auteur termine en associant le naturalisme à l'humanisme.
[[Naturalism|Naturalisme]] is unthinkable apart from reflection. Its dawn demanded conditions which were late in arriving. [...] But it is surely obvious that naturalism implies the idea of nature as a realm of definite order and a rejection of the tendency to people the world with invisible agents like unto man. It involves an insight into events, a strong suspicion of the systematic and quasi-mechanical linkage of all changes, an appreciation of the conditions and nature of human behaviour. Such an outlook could arrive only gradually; and is scarcely thinkable apart from science.
the spirit of rational exploration was there and, with it, a daring in interpretation which must always awaken our admiration. / The soul was for Epicurus a complex of atoms which disintegrated at death when no longer held together by the fleshly wrapping of the body. [...] Man is part of nature. He comes to birth like the plants and like other animals, and after his little span of life disappears.
« Only for a brief time, then, were social conditions and the state of men's minds favorable to free inquiry and to naturalistic humanism. The Greek intellect had its short period of bloom in the free city-state and proved what it could accomplish in the way of daring analysis. »
In subjective naturalism we withness the attempt to assimilate man to nature, to demonstrate that there is nothing in his make-up that resists this assignment. [...] The method adopted was reduction. Psychology was to become physiology; physiology, chemistry; and chemistry, physics. By such a process of repeated translation the assimilation of man was to be accomplished. That nature itself contained natural levels so that assimilation by reduction could only be carried through by being untrue to nature was not grasped. Dead-level mechanicalism forced a Procrustean bed upon naturalism; gave it a false task and ideal. And its lack of success lowered its prestige.
In objective naturalism we find the rejection of any interference with nature from the outside. Nature was ever more clearly conceived as a closed system.
In psychology, logic, and theory of knowledge, we find the alliance of subjective naturalism with empiricism. In modern thought this movement found its first important protagonists in British philosophy. Sensationalism and associationism were directed against rationalism. Sense-impressions are regarded as the standard. What is not reducible to them is in some fashion non-natural and fictitious. [...] Motivating this outlook was the protest against the traditional idea of reason as innate and distinct from sense. The result was too hasty empiricism which tended to reject reason rather than to naturalize it. [...] In these tendencies we have the more or less counscious attempt to assimilate man to nature without a remainder; to treat mind as an atomistic or mechanical system as atomism and mechanism were then conceived. In short, naturalism reflected the current, non-evolutionary view of nature.
"If with the history of science and the results of science before us we pass straight on to the construction of a philosophy, [[idealism|Idéalisme]] has no chance. But, in truth, 'modern science' hardly needs to //construct// its philosophy; for, without any conscious labor on its part, the naturalistic view of the world seems to stand out clearly of itself." (James Ward, //Naturalism and Agnosticism//, Preface; cité par Sellars, p. 332)
Objective naturalism opposed itself to supernaturalism.[...] Thus we have the deism of the seventeenth and eighteenth centuries, which held nature to be a self-sufficient system which God had created and set going, but with whose working he did not interfere. United with this outlook was the distaste for revelation and the confidence in human reason. [...] We must not forget that other forms of naturalism adopted a pantheistic approach which tried to identify God with nature. [...] Farther to the left in this movement came the stricter form called 'materialism.'
And so we are brought to the frare-up of naturalism in the nineteenth century which accompanied the promulgation of a specific theory of biological evolution. [...] Soon psychology joined hands with biology and began to investigate more deeply the origin and structure of human nature. In this junction, the doom of the dualism between mind and body was prefigured.
The situation which confronts the human mind today is dramatic to the highest degree. Science has gained an increasing momentum because it investigates the world from the vantage point of centuries of discovery and of improvement in technique. And this is as true of the biological sciences as of the basic chemical and physical sciences. The prestige which science has gained on both theoretical and practical counts renders it almost impregnable. But there can be no question that the recognized implications of science are naturalistic in the extreme. That the organism is in some sense a physicochemical system is almost an axiom of research.
\define slider(caption,state,text)
<$button popup="$state$" class="btn-invisible">$caption$</$button>
<$reveal type="nomatch" state="$state$" text="">
$text$
</$reveal>
\end
<<slider "Open" "StateTiddler" "This is the text that will be hid or shown">>
\define slider(label)
@@text-align:left;
<$button popup="$:/state/$label$" class="btn-invisible tw-slider"><$reveal type="match" text="" default="" state="$:/state/$label$">⊞</$reveal><$reveal type="nomatch" text="" default="" state="$:/state/$label$">⊟</$reveal> {{$label$||unwikified}}</$button> <span title="Edit section"><$button message="tw-edit-tiddler" class="btn-invisible">{{$:/core/images/edit-button}}</$button></span>
@@
<$reveal type="nomatch" text="" default="" state="$:/state/$label$" animate="yes">
<$transclude/>
</$reveal>
\end
<$macrocall $name="slider" label={{!!title}}/>
\define slider(label)
@@text-align:left;
<h1><span title="Slide section"><$button popup="$:/state/$label$" class="mon-bouton"><$reveal type="match" text="" default="" state="$:/state/$label$">⊞</$reveal><$reveal type="nomatch" text="" default="" state="$:/state/$label$">⊟</$reveal> {{!!title}}</$button> </span><span title="Edit section"><$button message="tw-edit-tiddler" class="btn-invisible tw-images">{{$:/core/images/edit-button}}</$button></span></h1>
@@
<$reveal type="nomatch" text="" default="" state="$:/state/$label$" animate="yes">
<$transclude/>
</$reveal>
\end
<$macrocall $name="slider" label={{!!title}}/>
;Sense (i) of “function” : connection with the notion of making efforts to obtain a certain result.
;Sense (ii) of “function” : connection with the notion of a good.
« If my claims have been correct, then the word “function” in these two senses is connected with the notion of end, and any correct analysis of a statement that tells us the function of something (in sense (i) or sense (ii) of “function”), must retain this connection, and so must employ some teleological words. »
\define tag-styles()
background-color:$(backgroundColor)$;
\end
<span class="tw-tag-list-item"><$set name="backgroundColor" value={{!!color}}><$button popup=<<qualify "$:/state/tagpopup">> class="btn-invisible tw-tag-label" style=<<tag-styles>>><$transclude tiddler={{!!icon}}/> <$view field="title" format="text" /></$button></$set>
<$reveal state=<<qualify "$:/state/tagpopup">> type="popup" position="below" animate="yes"><div class="tw-drop-down"><$transclude tiddler="$:/core/ui/ListItemTemplate"/>
<hr>
<$list filter="[is[current]tagging[]]" template="$:/core/ui/ListItemTemplate"/>
</div></$reveal></span>
<span class="troiscolonnes">
<$list filter="[tags[]!is[system]sort[title]]" template="tag"/>
</span>
<div class="tw-search"><$edit-text tiddler="$:/temp/search" type="search" tag="input"/> <$reveal state="$:/temp/search" type="nomatch" text=""><$linkcatcher to="$:/temp/search"><$link to="" class="btn-invisible">{{$:/core/images/close-button}}</$link></$linkcatcher></$reveal><$reveal state="$:/temp/search" type="match" text=""> <$link to="$:/AdvancedSearch" class="btn-invisible">…</$link></$reveal></div>
<$reveal state="$:/temp/search" type="nomatch" text="">
<div class="tw-search-results">
//<small><$count filter="[tags[]search{$:/temp/search}]"/> matches</small>//
<$list filter="[tags[]prefix{$:/temp/search}]">
<$transclude tiddler="$:/core/ui/TagTemplate"/> <small class="tw-menu-list-count"><$count filter="[is[current]tagging[]]"/></small>
</$list>
</div>
</$reveal>
[[Teilhard de Chardin]] (1881 - 1955), jésuite, philosophe et paléontologue français. Il essaie dans son œuvre de concilier les connaissances scientifiques, et notamment l'évolution biologique, avec les dogmes de la foi chrétienne. Il développe ainsi une conception [[téléologique|Téléologie]], voire [[finaliste|Finalisme]], du monde et de la vie sur terre.
!!Le Phénomène humain
Dans le //Phénomène humain//, il trace, parmi les premiers, une synthèse de l'Histoire de l'Univers selon l'état des connaissances de son époque et dans une optique à la fois évolutionniste et spiritualiste.
<img src="http://www.groupe-teilhard.org/Phen%20Hum%20fig.gif" alt="Schéma du “Phénomène Humain” (interprétation de Jacques S. Abbatucci)" />
Est-ce que l'ApprocheÉtiologique n'implique pas un temps cyclique/mythique?
Une fonction de la Terre est d’intercepter des météorites<<popnote "note" "D’après son auteur, cette affirmation n’est pas strictement fausse mais plutôt inappropriée car la Terre n’est pas le genre de choses auxquelles on attribue des fonctions. Ou plus précisément, le fait d’intercepter des météorites ne fait pas partie de la définition du concept de “Terre” tandis que le fait de pomper le sang fait partie du concept de cœur">>.
<span title="Wikipedia"><img src={{wikipedia.png}} alt="Wikipedia" height="60px" /></span>
<span title="Wikipedia"><a href={{!!url}}><img src={{!!photo}} alt="Wikipedia" height="60px" /></a></span>
@@float:right;padding:1em;
<a href={{!!url}}><img src={{!!photo}}></a>
@@
{{TestCit!!title}}
---
{{{ [tag[Définition]] }}}
<a href="zotero://report/items/0_3I9WB8TW/html/report.html">This is a link</a>
En fait, le gros problème qu'on a avec la vie et les fonctions, c'est qu'on ne sait pas les définir. On hésite entre analyse conceptuelle (qui rende compte des intuitions du langage) et définition théorique. Mais ce qu'on n'a pas, c'est une [[Théorie]]. C'est-à-dire quelque chose qui puisse //expliquer// la vie et les fonctions, et pas seulement les décrire ou en donner les critères. En physique, pour expliquer le magnétisme, par exemple, on élabore une théorie de laquelle le magnétisme dérive. En biologie on n'a pas ça. L'usage des concepts de vie et de fonction ne s'appuie pas sur une théorie de la vie et des fonctions.
Voir aussi [[Millikan: Définition théorique sans théorie]].
!Trois théories du vieillissement:
* ''Accumulation de mutations (Medawar, 1952):'' Les mutations délétères à effets tardifs ne sont pas contre-sélectionnées car elles se manifestent après la période reproductive, et donc ne rentrent pas dans le jeu de la sélection.
* ''Pléiotropie antagoniste (Williams, 1957):'' Certains gènes sélectionnés pour leurs effets positifs précoces on ensuite des effets délétères après la période reproductive. Par exemple le gène de fixation du calcium est bon en phase de croissance, mais peut provoquer de l'artériosclérose chez les individus agés.
* ''Soma jetable (Kirkwood, 1977):'' L'organisme doit allouer ses ressources aux divers parties et fonctions de l'organisme et arbitrer entre favoriser la reproduction ou la survie. La réparation des dégradations de l'organisme a un coût qui peut être en concurrence avec le coût de la reproduction.
Par ailleurs, on constate que le vieillissement est d'autant plus rapide que le taux de mort accidentelle est élevé.
La théorie de la pléiotropie antagoniste semble confirmée par le fait qu'on retrouve les mêmes gènes qui contrôlent le vieillissement chez de nombreuses espèces. Certains pensent qu'ils ont été sélectionnés pour leurs effets bénéfiques. Alors que s'il s'agissait seulement d'une accumulation de mutations délétères après la reproduction, c'est-à-dire si ces gènes n'avaient aucune signification biologique, s'ils n'avaient pas été sélectionnés, on n'aurait aucune raison de les retrouver d'une espèce à l'autre. Or, on retrouve de grandes fonctions communes de contrôle du vieillissement entre espèces: la levure, le nématode, la souris, la drosophile, etc.
En quel sens, ou depuis quel point de vue certains traits sont-ils plus 'importants' que d'autres? N'est-ce pas de notre point de vue? Et selon quels critères? N'y a-t-il pas là derrière une espèce de jugement de valeur caché? D'un point de vue strictement physique, il n'y a pas des choses plus 'importantes' que d'autres. Par contre, du point de vue d'un ingénieur, oui. Mais si [[Davies]] veut faire des fonctions systémiques quelque chose qui n'est pas relatif à nos intérêts épistémiques, ou pas seulement, alors je ne vois pas en quel sens il peut dire que l'intuition de l'importance de certains traits est à la fois réelle et vraie.
Structure
@@.dirtree
* Auteurs
** Publications
*** Citations
****Notes
*** Notes
** Notes
* Concepts
** Notes
* Théories
** Notes
* Notes
@@
''Gottfried Reinhold Treviranus'' (1776 - 1837), naturaliste allemand, est l'un des premiers à introduire, en 1802, le terme "[[biologie|Biologie]]" pour désigner cette nouvelle discipline scientifique dont l'objet sont les [[êtres vivants|Vie]] en tant que tels.
!Bibliographie
* 1802 : [[Biologie, oder Philosophie der lebenden Natur|Treviranus, GR (1802): Biologie]], vol. 1, Göttingen, J. R. Röwer.
"Le sujet de nos recherches sera les diverses formes et manifestations de la vie, les lois et les conditions déterminant leur existence, ainsi que les mécanismes par lesquels celles-ci sont mises en œuvre. Nous désignerons la science qui traite de ces sujets du nom de biologie ou science de la vie."
(cité par [[Mayr, E. (1997): Qu’est-ce que la biologie?]], p. 123)
L'une des premières mentions de la "biologie" en tant que discipline scientifique dont le domaine est le vivant.
La trotteuse d’une montre a pour fonction d'indiquer les secondes.
Cette activité n'est pas utile ou bénéfique pour la montre elle- même, mais pour l'homme qui l'utilise. Cependant, si connaître l'heure avec ce degré de précision n'avait pour l'homme plus aucun intérêt ou utilité, la fonction de la trotteuse continuerait néanmoins d'être la même.
Un artéfact peut n'être d'utilité pour personne. Ce qui lui donne son caractère fonctionnel, c'est le fait qu'il est été intentionnellement créé pour quelque chose. La fonction c'est ce pour quoi il a été créé. Du moins, c’est ce que pensent la plupart des auteurs.
!Définition
Voir l'article sur [[Stanford Encyclopedia of Philosophy|http://plato.stanford.edu/]]:
++++[Teleological Notions in Biology]
<<tiddler TeleologicalNotionsInBiology>>
===
<br>
!Attributions téléologiques
On peut distinguer trois cas paradigmatiques d'attributions téléologiques:
# ''Attribution fonctionnelle'' (//functional ascription//): "La fonction du coeur est de pomper le sang." +++[exemples] <<tiddler TeleologieExemples>> ===
# ''Attribution de buts'' (//goal-ascription//): "Le but du rat est d'atteindre la nourriture au fond du labyrinthe."
# ''Attribution intentionnelle'' (//intention-ascription//): "Jean travaille dur pour rentrer chez lui plus tôt."
(Ces exemples sont donnés par Morton Beckner, "Function and Teleology", 1969)
!![[Les quatre formes de la téléologie (selon Mayr)]]
<<tiddler [[Les quatre formes de la téléologie (selon Mayr)]]>>
|<<tiddler [[./troisTypesTéléologie]]>> |
<part troisTypesTéléologie hidden>
++++!![Trois types de téléologie]
On doit distinguer trois types de téléologie en fonction de ce à quoi on l'applique:
*''Comportements:'' Cela concerne principalement des individus entiers. Leur comportement peut être vu comme [[orienté vers un but|GoalDirected]]. On peut par exemple leur appliquer l'IntentionalStance de [[Dennett|Dennett, Daniel]]. On peut les considérer comme des agents rationnels et leur attribuer des croyances et des désirs qui expliquent leur comportement.
*''Processus:'' La régulation de la température corporelle ou de la pression sanguine sont des processus qu'on peut dire [[orientés vers un but|GoalDirected]], mais qu'on ne peut pas considérer comme les actions volontaires d'un agent. C'est je crois le sens auquel [[Ernst Mayr|Mayr, Ernst]] applique le concept de [[Téléonomie]].
*''Organisation:'' On peut également voir l'organisation des êtres vivants comme répondant à une [[finalité|Finalité]], comme s'ils étaient le fruit d'un [[dessein|Design]]. C'est aussi en ce sens qu'on emploie le langage [[fonctionnel|Fonctions]]: les oiseaux ont des ailes //pour// voler; le coeur est fait //pour// pomper le sang.
===
</part>
++++!![Justification des explications téléologiques en biologie]
Je crois qu'il y a au moins --deux-- trois façons de justifier les explications téléologiques en biologie:
* ''[[Narration historique|Narrations causale et téléologique]]'' La première est liée à notre manière de raconter les choses pour les comprendre, et à notre position historique particulière: afin de décrire les phénomènes présents, nous devons raconter les événements qui ont dû se produire dans le passé //pour// que ces phénomènes aient lieu. La finalité en question n'est pas une cause future, mais la fin de l'histoire qu'on raconte pour expliquer le présent. C'est donc une espèce de biais épistémique. +++[suite]>
<<tiddler [[Narrations causale et téléologique]]>>
===
* ''[[Invariance et attracteurs|Téléologie et Invariance]]'' L'autre justification est davantage ontologique et consiste à dire que certains processus naturels ont un terme, une fin, plus facile à prédire que les mécanismes causals qui y ont conduit, notamment parce qu'il peut y avoir une multitude de processus qui débouchent sur le même résultat. La finalité, au sens d'état final, est ici explicative dans la mesure où elle permet de faire abstraction des détails causals (inconnus ou variables).+++[suite]>
<<tiddler [[Téléologie et Invariance]]>>
===
* ''[[Téléologie et Ordre Naturel]]'' On peut voir la téléologie, non comme une notion temporelle, mais comme une notion structurelle associée à l'explication d'un ordre naturel qu'on ne peut pas attribuer au hasard.+++[suite]>
<<tiddler [[Téléologie et Ordre Naturel]]>>
===
''Téléologie et probabilités: entre le hasard et la nécessité:''+++[voir ceci]>
<<tiddler [[Téléologie et principe anthropique]]>>
===
Les --deux-- trois justifications précédentes sont d'une certaine manière liées à un problème de perception des probabilités.++++[suite]>
<<tiddler [[Téléologie et probabilités]]>>
===
Lors de certains processus, l'état final est relativement indépendant de l'état initial. Le cas le plus simple est celui de la bille dans un bol: on sait qu'elle finira au fond du bol, quel que soient sa position et son mouvement initiaux (à l'intérieur de certaines limites). Autrement dit, on peut prédire l'état final indépendamment (ou presque) de l'état initial; ce qui veut dire que plusieurs états initiaux peuvent aboutir au même état final. De plus, on ne connaît pas toujours le mécanisme causal qui conduit d'un état initial donné à l'état final prévisible.
Le langage téléologique, dans ce cadre, permet de faire abstraction de détails superflus et/ou inconnus pour ne mentionner que l'invariant que constitue l'état final. Il permet donc de passer du particulier (le mécanisme causal concret) au général (l'état final invariant). A la question: "Pourquoi le verre s'est-il brisé?", on peut donner une explication causale et une explication téléologique. Cette dernière est: "Le verre s'est brisé //pour// augmenter l'entropie de l'univers". Cette réponse n'est pas fausse dans la mesure où il aurait tôt ou tard fini par se briser en vertu de la seconde loi de la thermodynamique, mais elle est incomplète, car on peut toujours demander: "Pourquoi s'est-il brisé //à ce moment-là//?" Pour répondre à cette seconde question il faut recourir à une explication causale: "Parce je l'ai fait tomber par terre... et parce que le verre a telles et telles propriétés physiques qui font que sa résistance aux chocs... etc."
Les propositions téléologiques sont par ailleurs sujettes à réfutation, dans la mesure où elles entraînent des prédictions. En physique, par exemple, dire qu'un système adopte telle configuration //pour// minimiser son énergie, signifie:
# que cette configuration permet effectivement de minimiser l'énergie du système (contrairement à d'autres configurations possibles), et
# que le fait de minimiser l'énergie du système est bien le facteur qui explique sa configuration.
On peut réfuter (1) en montrant que d'autres configurations minimisent davantage l'énergie, et (2) en trouvant un autre facteur plus pertinent.
Invoquer une finalité (un état final) n'explique pas en quoi cette finalité consiste. Et la réponse ne sera pas la même selon les phénomènes physiques impliqués, et encore moins lorsqu'il s'agit de phénomènes biologiques pour lesquels, dans de nombreux cas, la réponse est d'ordre génétique.
Invoquer une finalité est une manière de dire que le phénomène en question n'est pas aléatoire, contrairement à une explication causale. En effet, si tous les phénomènes ont une cause (laissons entre parenthèses les phénomènes quantiques), alors mêmes les phénomènes aléatoires peuvent recevoir une description causale.
Identifier une finalité, c'est identifier un invariant. La nature de cet invariant restant à déterminer. Cette finalité permet de comprendre les mécanismes causals qui sont à l'œuvre, dans la mesure où ils sont dirigés vers cet invariant. La téléologie a donc une fonction heuristique très importante, et une fonction explicative complémentaire des explications causales. Une explication causale ne peut pas être exhaustive car elle est limitée et ne peut pas forcément rendre compte de quelque chose qui est commun à de nombreuses séries causales différentes. Ce principe commun est justement ce que désigne la finalité. Par exemple, on peut montrer comment un mécanisme causal contribue à accroître l'entropie de l'univers, mais cela n'explique pas pourquoi //tous// les mécanismes y contribuent également.
----
En physique, je dis qu'une goutte d'eau se met en boule pour minimiser son énergie interne. Il y a certaines choses dont je peux parler téléologiquement, d'autres non. Quel est le critère ?
En premier lieu, il semble que je dois être capable de prévoir l'état final, indépendamment du parcours causal. En fait, ma goutte d'eau, en fonction du contexte, va prendre n'importe quelle forme qui lui permette de minimiser son énergie. En fait, on peut penser aux surfaces de savon qu'on dispose dans différents trucs et qui vont prendre différentes formes qui ont toutes en commun d'être la forme qui donne la surface minimale. (Pareil qu'une goutte d'eau dans l'huile) C'est-à-dire que quelle que soit la forme qu'adopte la surface de savon (laquelle peut être difficile à prédire) je peux être pratiquement sûr que ce sera la surface minimale.
La [[téléologie|Téléologie]] n'est pas forcément une notion temporelle. Elle pourrait plutôt faire référence à l'idée d'un ordre naturel où chaque chose est à sa place et joue le rôle qui lui correspond. Cet ordre peut avoir été pensé et imposé par un créateur divin, mais pas forcément. On peut envisager un ordre immanent à la nature.
D'un côté, cette conception "structurelle" et non temporelle de la téléologie permet de faire le lien entre la téléologie biologique et technique. Dans la nature comme dans une horloge, ce qui prime, c'est l'ordre, l'organisation, l'agencement des parties dans la totalité.
D'un autre côté, cette conception rejoint la conception "probabiliste" de la téléologie, c'est-à-dire la conception selon laquelle la téléologie sert à expliquer une contingence non aléatoire. Comment expliquer quelque chose qui est hautement improbable et qu'on ne peut pas attribuer au hasard? La chose en question, c'est justement l'ordre, l'organisation que manifestent les êtres vivants, ainsi que l'organisation de leurs relations.
Partant de là, on peut rejoindre également la [[Théorie algorithmique de l’information]] au sens où les structures ordonnées sont les plus improbables. (@@Voir cette histoire de mesure de Lévin dont je ne me souviens plus!@@)
La question de la téléologie ne se pose pas uniquement dans le cadre de la biologie. On l'a vue réapparaître notamment en cosmologie à partir de l'idée que les constantes fondamentales sont ajustées à la perfection pour produire un univers où peut apparaître la vie et la conscience, toutes les autres combinaisons aboutissant à un univers stérile. C'est la question du principe anthropique. Les choses se présentent //comme si// les constantes fondamentales de l'univers étaient ajustées //pour// engendrer la vie. (Je ne sais pas si c'est Hubert Reeves qui disait que l'univers était 'gros' de la vie.)
Dans ce cas, qu'est-ce qui nous amène à penser que l'univers a été //conçu pour// que la vie et la conscience puissent apparaître? Si on peut répondre à cette question, alors peut-être qu'on pourra mieux comprendre ce qu'il y a de si attractif dans l'idée d'une téléologie biologique. S'agit-il du même mécanisme psychologique?
Quoi qu'il en soit, il est évident qu'il ne s'agit pas de valider d'aucune façon l'idée qu'il existe effectivement une finalité intrinsèque à l'univers ou aux êtres vivants. Au contraire, je fais le choix d'affirmer que cette finalité n'est pas indépendante mais au contraire propre à l'Homme, c'est-à-dire relative à la manière dont il appréhende et connaît le monde. La finalité n'est pas propre à l'univers, à la vie, ni à quelque autre entité naturelle ou surnaturelle; elle est propre à //nous//.
Donc, par quel méchanisme psychologique sommes-nous amenés à concevoir l'univers et les êtres vivants comme orientés vers ou conçus pour quelque chose? Je crois que c'est lié à la question de la contingence et de la complexité. On pourrait traduire la pensée qui nous pousse à reconnaître une finalité dans un système par la phrase: "Ce n'est pas un hasard si..." Et derrière ce //si// il y a l'extraordinaire ajustement des constantes fondamentales de l'univers. Ce n'est pas un hasard car la probabilité pour arriver à //ce résultat// par un tirage aléatoire est extêmement faible, infiniment plus faible que de gagner à la lotterie. Ce n'est pas un hasard car cette situation défie les lois du hasard, d'autant plus si l'on conçoit un tirage unique. Certes, il est toujours //possible// de gagner le gros lot avec un seul tirage, mais la probabilité est tellement faible que n'importe quelle autre explication en devient, par comparaison, vraissemblable. Notamment l'explication divine. Si Dieu existe (mais comment quantifier la probabilité de son existence? une chance sur deux? je me demande pas si Pascal a fait le calcul!) alors le fait qu'il ait ajusté les paramètres universels comme un horloger ajuster les ressorts de sa montre devient une explication toute naturelle.
Un de mes professeurs de collège me disait, pour justifier son scepticisme à propos du Big Bang, qu'il ne pouvait pas croire qu'une explosion puisse aboutir à une bibliothèque. Ici c'est l'apparition d'ordre à partir du désordre qui est incroyable. Evidemment, le second principe de la thermodynamique n'est pas violé si l'entropie totale de l'univers augmente. Autrement dit, il peut y avoir production locale d'ordre (diminution locale de l'entropie) à condition que cela soit compensé par une production de désordre plus importante. En on sait maintenant que ces mécanismes existent, notamment avec les sciences dites de la complexité. Nous serions donc seulement face à un biais cognitif qui fait que nous voyons l'ordre produit, mais pas le désordre compensatoire, et le faux déséquilibre entre les deux rend attractive l'idée d'une finalité, ou du moins fait douter de l'explication scientifique face à une histoire du monde où une grande explosion finit par donner lieu à de la vie intelligente.
A propos du second principe de la thermodynamique, on peut penser à la nouvelle (nom?) de Isaac Asimov qu'appréciait tant Prigogine (?). La question que pose cette nouvelle est la possibilité de renverser le second principe, contrecarrer la croissance de l'entropie qui aboutit nécessairement à la stérilisation de l'univers par l'équilibre thermodynamique. Une famille d'ordinateurs à l'intelligence illimitée cherche une réponse à cette question pendant tellement de temps que la mort thermodynamique finit par arriver. Et c'est à ce moment précis que le //fiat// est prononcé par cette 'intelligence' (on ne peut plus vraiment parler de machine, puisque la matière a entièrement disparu) et que tout recommence. Autrement dit, on ne peut pas renverser la vapeur, si ce n'est par la destruction totale de l'univers et la création d'un autre.
Ca me fait penser aussi au film //The Hitchhicker's Guide to the Galaxy// où un autre ordinateur à l'intelligence supérieure se voit poser la question de "L'univers, la vie, et tout le reste...", et la réponse que donne la machine, après une réflexion de plusieurs siècles ou millénaires, est: "42"! Immense déception. Mais à question absurde, réponse absurde.
Revenons à nos moutons. Qu'est-ce qui pourrait nous ôter l'envie de reconnaître dans l'ajustement des constantes universelles le signe d'une téléologie ou d'une Intelligence? Par exemple, si au lieu d'un unique tirage dans la lotterie universelle on en envisage un nombre illimité, c'est-à-dire si on envisage qu'il existe une multiplicité d'univers, alors il y en a nécessairement un où les constantes sont propices à l'apparition d'une vie intelligente qui s'interroge sur l'ajustement des constantes universelles. Or, cet univers là, c'est le nôtre. Autrement dit, il n'y a qu'un effet de perspective: celui qui gagne au loto peut bien se demander pourquoi il a gagné, mais la seule réponse c'est que si ce n'avait pas été lui, ça aurait été un autre qui se serait posé la même question. Quand le fait qu'il y ait un gagnant devient nécessaire, l'attrait du finalisme est moins grand. Mais on peut encore réduire l'attrait du finalisme si on pense que, étant donné un nombre de tirages infini (mais de quel ordre d'infini parle-t-on?), on pourrait toucher une infinité de fois le gros lot. En d'autres termes, on pourrait envisager une infinité d'univers habités par des êtres intelligents qui se posent la question du pourquoi de leur existence.
Curieusement, cette question de l'infinité des mondes possibles rejoint celle que se sont posés les théologiens après la condamnation par Tempier des thèses averroistes. Et c'est cette question qui, selon Blumenberg, aurait amené le développement moderne des mathématiques.
Tous les phénomènes sont explicables en vertu de leur histoire causale, y compris les phénomènes hautement improbables (la goutte d'encre dans un verre d'eau qui se reconstitue après s'être diluée). Mais cette explication n'est pas toujours suffisante. Face à la goutte d'eau qui se reconstitue, on aurait beau savoir comment cela est possible, on continuerait à chercher une explication. En effet, dans la mesure où l'événement semble contingent (il aurait pu ne pas se produire), faire référence à l'histoire causale n'est pas suffisant, car il reste à expliquer pourquoi c'est //cette histoire là// s'est produite et pas une autre. Autrement dit, tous les événements ne sont pas équiprobables, et il peut sembler pour le moins étrange que celui qui se produit effectivement soit l'un des moins probables. A la question du comment (histoire causale) s'ajoute donc la question du pourquoi (la justification de l'occurence //cette// histoire causale). Une réponse possible est: le hasard. Mais le hasard n'est pas toujours la meilleure explication.
Par exemple, lorsque l'on pose la question, "Pourquoi l'ADN a-t-il remplacé l'ARN au cours de l'évolution?", la réponse est généralement: "Afin de permettre l'apparition de génomes de grande taille". En effet, l'ADN est plus stable que l'ARN, ce qui lui permet d'avoir une taille supérieure. La réponse est clairement téléologique. Elle consiste à dire: "Ce n'est pas un hasard". Autrement dit, si cet événement s'est produit (car il aurait pu ne pas se produire), c'est n'est pas par hasard. En effet, quand on observe les organismes postérieurs à cette évolution, on constate qu'ils sont plus complexes, ou mieux adaptés, ou quoi que ce soit d'autre qui justifie (de manière non causale) qu'il ne s'agit pas d'un simple hasard. De plus, on ignore quel a été le mécanisme effectif de cette transformation; ce qui veut dire que plusieurs histoires causales sont éventuellement possibles et que, par conséquent, le fait de décrire //une// histoire causale (mais s'il s'agit de celle qui s'est réellement produite) pourquoi l'évolution s'est orientée dans cette direction et pas une autre.
On pourrait dire que toutes les directions de l'évolution biologique ne sont pas équiprobables, et c'est ça que les explications téléologiques cherchent à expliquer. Cette explication ne se substitue pas à l'histoire causale, elle la complète. On retrouve la même chose avec l'évolution du temps physique, qui n'est pas symétrique. En physique, l'assymétrie se justifie à partir de la thermodynamique, par exemple. En biologie, le sens de l'évolution se justifie à partir de la sélection naturelle. Certaines voies évolutives sont privilégiées dans la mesure où elles confèrent aux organismes qui les empruntent un avantage sélectif. Ainsi, on va expliquer que le passage de l'ARN à l'ADN a fourni un avantage sélectif, et c'est //pour// cela que les organismes ont suivi cette voie.
On peut traduire ce genre d'explication téléologique en termes causals: l'ADN a remplacé l'ARN //parce que// ou "//à cause que//" les organismes à ADN ont un avantage sélectif. Ensuite on peut discuter sur la nature de cet avantage: par exemple, ils auraient eu un génome de taille supérieure. On peut la contester, proposer des explications alternatives^^[1]^^, etc. Quoi qu'il en soit, l'explication par la sélection naturelle n'est pas identique à une explication par l'histoire causale. Dire que les virus ont adopté l'ADN //pour// se protéger des défenses cellulaires anti-ARN, c'est une manière de dire "//parce que// cela leur apportait un avantage sélectif dans la mesure où...". A partir de là, plusieurs histoires causales sont possibles et compatibles avec le mécanisme de sélection naturelle.
---
^^[1]^^ Le remplacement de l'ARN par de l'ADN n'aurait pas immédiatement produit des génomes de plus grande taille; l'avantage sélectif immédiat aurait été plutôt une résistance des virus à ADN envers les défenses cellulaires "anti-ARN". (Voir l'article de Patrick Forterre, "Des virus ont-ils inventé l'ADN?", //Pour la Science//, Dossier juillet-septembre 2008, p.29)
http://www.futura-sciences.com/magazines/sante/infos/actu/d/genetique-video-curieux-arn-temoin-origine-vie-14116/
En vidéo : un curieux ARN témoin de l'origine de la vie ?
Par Jean Etienne, Futura-Sciences
Un champignon microscopique a peut-être fourni une clé de l'apparition de la vie. L'association intime entre un ARN, cousin de l'ADN, et d'une protéine, qui joue le rôle d'une enzyme, a pu être étudiée en détail. Or, on pense que c'est ainsi que tout a commencé...
Le problème tient un peu de celui de l'œuf et de la poule. Qui donc est apparu le premier ? L'ADN, qui enregistre l'information pour fabriquer les protéines ? Ou bien l'ARN et la machinerie cellulaire pour réaliser cette fabrication avec les informations lues dans l'ADN ? Seul, l'ADN ne sert à rien, et, sans lui, la machine à fabriquer les protéines ne saura pas quelles molécules construire.
Aujourd'hui, on a de bonnes raisons de penser que l'ARN, qui peut enregistrer de l'information tout comme l'ADN, a joué un rôle d'intermédiaire au tout début de la vie sur Terre, avant l'adoption générale de l'ADN. On parle même d'un « monde à ARN ». Cette molécule se serait liée à des protéines, capables de catalyser les réactions biochimiques, devenant donc ce que l'on appelle des enzymes. C'est une telle association qui vient d'être finement observée dans un champignon unicellulaire par une équipe américaine, qui publie ses résultats dans Nature.
Le champignon Neurospora crassa. Crédit : Purdue University Department de Biochemistry
« Il est hautement probable que l’ARN, ou une molécule similaire, a été une des premières molécules de la vie, transmettant le code génétique de génération en génération tout en se repliant au sein de la structure cellulaire de façon à pouvoir y fonctionner, avance la biologiste Barbara Golden, de la Purdue University, co-auteur de cette étude. A un certain moment, cette molécule d’ARN a évolué et est devenue capable d’utiliser les fonctions de certaines protéines. »
Les chercheurs ont utilisé comme une machine à remonter le temps l’ARN d'un champignon microscopique, en l’occurrence Neurospora crassa, de la division des Ascomycètes, un organisme simple déjà largement utilisé comme modèle. Son génome (comportant 43 mégabases et environ 10.000 gènes) a été complètement séquencé le 23 avril 2003. Cet ARN a été cristallisé en compagnie d'une protéine, à laquelle il est intimement lié.
Sur la forme cristallisée de l'ARN fixé à sa protéine, les chercheurs ont pu étudier la structure de cette association. L'ARN est à droite et la protéine à gauche. Crédit : Barbara Golden, Purdue University Department de Biochemistry
Protéine à double face
Ce zoom a révélé deux informations capitales. Tel un masque à deux faces, la protéine de ce complexe présente deux parties, chacune lui donnant des propriétés différentes. Seconde découverte, alors que l'une de ces faces montre les caractéristiques d'une enzyme, l'autre semble lui permettre de jouer le rôle classique de l'ARN dans les organismes, à savoir la lecture du code génétique de l'ADN.
« Cette structure cristalline fournit une image instantanée qui explique comment, durant l’évolution, les protéines sont venues assister les molécules d’ARN pour les aider dans leurs fonctions biologiques, et finir par prendre en charge certains des rôles [de catalyse, NDLR] précédemment joués par l’ARN. » explique Barbara Golden.
Association entre une molécule d’ARN de champignon microscopique et une protéine, peut-être un moment-clé du passage de l’inanimé à la vie. Crédit Purdue University
« Evidemment, nous ne pouvons pas observer directement le passage de l’ARN au complexe ARN-protéine puis à l’ADN. Il nous faudrait pour cela une véritable machine à remonter le temps... tempère Barbara Golden. Mais en utilisant cette protéine de ce champignon, nous pouvons voir ce processus à l'œuvre aujourd'hui ».
Ce n'est pas la première fois que Lambowitz, Paukstelis et leur équipe de chercheurs de l’université du Texas s’intéressent à ce champignon. Ils en avaient déjà étudié une autre protéine et montré comment les processus biochimiques pouvaient progresser d’un monde ARN/protéine vers une structure d’ADN. Cette protéine stabilise l'ARN et lui permet de mieux se fixer à l'ADN au niveau d'un gène afin d'en réaliser une copie. Quant à l'ARN de ce complexe, il est capable, lui, de catalyser une certaine réaction chimique pourvu qu'il soit associé à sa protéine.
Ces études très fondamentales sur l'histoire de la vie pourraient aussi déboucher sur des applications pratiques. Selon Alan Lambowitz, autre co-auteur, ces résultats ouvrent la voie au développement de médicaments antifongiques. Cette possibilité sera bientôt étudiée par l'équipe.
Commenter cette news ou lire les commentaires
La biologiste Barbara Golden devant le complexe ARN-protéine. Crédit : Purdue Agricultural Communication/Tom Campbell
La biologiste Barbara Golden devant le complexe ARN-protéine. Crédit : Purdue Agricultural Communication/Tom Campbell
Source: [[Actualité > En vidéo : un curieux ARN témoin de l'origine de la vie ?|http://www.futura-sciences.com/fr/sinformer/actualites/news/t/genetique-1/d/en-video-un-curieux-arn-temoin-de-lorigine-de-la-vie_14116/]]
Chez les espèces d'eau douce, elle sert à évacuer l'excès d'eau qui s'accumule à l'intérieur par osmose, et elle évite ainsi que le protozoaïre explose.
La fonction de la valve cardiaque chez les
vertébrés est de donner une direction au flux
sanguin.
''Gianni Vattimo'' est un philosophe et homme politique italien, [[herméneute|Herméneutique]], [[post-moderne|Post-Modernité]]
Version française: ''Encyclopédie de la philosophie'', La Pochothèque, 2002.
''Objectivité'' caractère de ce qui est objectif. La notion est corrélative de celle de subjectivité et lui est souvent opposée. Elle sert à caractériser en général tous les processus qui se déroulent indépendamment de l'intervention d'un sujet. Est objectif ce qui relève donc de l'expérience externe au sujet ou de l'expérimentation scientifique. On notera qu'on tend à présenter la science moderne comme un effort de connaissance objective de la réalité. On peut distinguer entre deux grandes conceptions de l'objectivité: l'une consiste à poser une indépendance absolue des phénomènes objectifs relativement au sujet qui les observe ou les conçoit, c'est en ce sens que le mathématicien et astronome Ampère peut déclarer que « les lois mathématiques du mouvement des astres réglaient leur mouvement depuis que le monde existe et bien avant que Kepler ne les ait démontrées ». L'autre, qui en tenant compte du caractère construit de l'objectivité scientifique, considère que le sujet participe en quelque manière de la détermination de l'objet. Ainsi le phénomène, au sens kantien, est objectif en ce sens qu'il procède de l'application des formes pures de l'intuition sensible (espace, temps) et des catégories pures de l'entendement à la matière empirique. [...]
''Objet'' concept introduit dans la philosophie occidentale par les philosophes scolastiques afin de désigner le contenu caractéristique d'un acte intellectif ou perceptif. [...] Le recours au concept d'objet – qui n'a pas d'antécédent dans l'Antiquité classique – dérive probablement d'un usage terminologique de la latinité tardive, où //ob-jectum// (littéralement, si l'on décompose le mot, « ce qui est posé //contre// ou //devant// » signifiait aussi bien l'obstacle qui s'oppose au développement d'une activité que l'écran qui s'interpose entre le sujet, source de puissance, et le terme où elle s'accomplit, au même titre que la Terre s'interpose entre la lumière du Soleil et la Lune, ou la corporéité divine entre sa lumière divine et le monde. L'objet, ou plutôt l'//objectum//, qualifie donc la manière dont le réel est saisi dans un acte intellectif ou perceptif. On dira de quelque chose (par exemple des universaux) qu'il a de l'//être objectif// (en lat., //esse objective//) pour signifier qu'il //n//'est //pas// une chose réellement existante, mais le contenu d'une activité de l'âme correspondant à l'une de ses puissances ou facultés (Ockham, //Ordinario//, D. II, que. VIII). Au contraire, une chose réellement existante possède de l'être subjectif (//esse subjective//), dans la mesure où elle est un sujet (au sens aristotélicien de l'//hypokeimenon//) de prédicats possibles. L'usage actuel est donc inverse par rapport à l'usage médiéval, puisque nous aurions spontanément tendance, en français, à qualifier d'objectif ce qui n'est justement pas relatif à une activité psychique ou représentative, et, à l'inverse, de subjectif ce qui procède d'un acte du sujet ou de la conscience. Ce n'est que plus tard, au XVII° s., et plus encore au XVIII°, que l'on entendra par « objet » un être extérieur à l'âme, et qui est //représenté// par une idée dans l'âme. Dans la conception cartésienne, les idées sont des copies directes, plus ou moins adéquates, des choses mêmes : la suppression de tout intermédiaire entre l'idée et la chose conduit à identifier à la chose elle-même ce qui détermine le contenu d'un acte intellectif, c'est-à-dire ce qu'on appelait l'« objet ». Hobbes aussi tient le terme d'« objet » pour synonyme de « corps extérieur », le corps extérieur étant la source des sensations, c'est-à-dire des contenus de pensée. Il faudra attendre la fin du XIX° s. pour que Franz Brentano propose à nouveau une analyse de l'esprit qui s'apparente à celle des philosophes de la scolastique médiévale. Dans son sillage, Alexius Meinong présentera sa théorie des objets comme science de ce qui est connu en tant que tel, pour distinguer les objets aussi bien des choses connues, considérées par exemple comme objets physiques, que des événements de l'esprit considérés comme objets psychiques. Il s'agira pour lui de la science des contenus des actes de l'entendement. D'une manière analogue, Edmund Husserl entendra par objet ce vers quoi est tourné un acte de l'entendement. Au contraire, le principal courant de l'épistémologie post-cartésienne continue à utiliser le mot « objet », pour se référer au terme extra-psychique de l'activité intellectuelle, et, en particulier – surtout avec Kant –, de l'activité de la connaissance. [...]
;La/une fonction d’un //token// de type //X// dans un système de type //S// et dans le contexte //C// est //f,,(X),,// ssi :
>(i) //f,,(X),,// est une conséquence de //X// qui contribue à //F,,(S),,// dans //C// et
>(ii) //f,,(X),,// appartient à //S// dans //C//.
;La/une fonction d’un //token// de type //X// dans un système de type //S// et dans le contexte //C// est //f,,(X),,// ssi :
>(i) //X// réalise //f,,(X),,// dans //S// parce que //f,,(X),,// contribue à //F,,(S),,// dans //C// ;
>(ii) //f,,(X),,// appartient à //S// dans //C//.
Plusieurs théories sont en compétition pour expliquer les origines de la vie. Les principales sont les suivantes:
# ''ADN + ARN'': l'idée selon laquelle la vie ait requis un mécanisme impliquant à la fois l'ADN et l'ARN semble aujourd'hui peu plausible
# ''ARN primordial'': L'idée est que les brins d'ARN pourraient s'autocatalyser, et qu'avant la vie telle que nous la connaissons, il y aurait eu un monde à ARN. Le problème est que l'ARN est constitué de nucléotides, qui sont des molécules complexes (un sucre, un phosphate, et una base azotée), et l'apparition spontanée d'un ARN autoréplicant est peu probable.
# ''Lipid view'': La vie serait apparue à partir de la croissance et division de liposomes (vésicules). Cela pourrait être une partie de la réponse.
# ''Collective autocatalysis'': L'idée est de [[Stuart Kauffman|Kauffman]] et Freeman Dyson, selon laquelle plusieurs polymères se catalysent mutuellement. Ils forment un ensemble autocatalytique et atteignent la clôture catalytique.
# ''Metabolism first'': C'est l'idée de Morowitz selon laquelle le métabolisme peut former des cycles autocatalytiques de lui-même.
;Le rôle des minéraux:
:De nombreux chercheurs considèrent désormais que les minéraux ont joué un rôle actif dans la chimie prébiotique. Ils ont procuré des havres où des molécules simples se sont accumulées; dans ces compartiments, elles se sont assemblées et croisées; les surfaces cristallines de certains minéraux ont "sélectionné" des molécules; les ions métalliques d'autres minéraux ont permis de catalyser des réactions; et des minéraux dissous ont été incorporés aux molécules biologiques. Elles auraient également pu fournir de l'énergie, comme celle des réactions chimiques qui produisent la pyrite.
;Réplicateur //vs.// Métabolisme:
:On peut distinguer deux grandes familles de théories scientifiques relatives à l'origine de la vie: celle du ((réplicateur primordial(voir citation de Dawkins))) et celle du métabolisme primordial. La première favorise l'émergence d'une molécule autoréplicante, de type ARN, qui par sélection naturelle (mutations, sélection) aurait donné lieu à des molécules de plus en plus complexes jusqu'à l'apparition des cellules. L'autre théorie privilégie l'apparition de cycles de réactions chimiques, à l'intérieur de compartiments naturels (minéraux, par exemple), capables d'extraire et d'exploiter l'énergie de leur environnement (métabolisme), et capables de se complexifier, de croître et de se reproduire, jusqu'à l'invention des membranes cellulaires et d'un mécanisme d'hérédité.
:>L'hypothèse du métabolisme primordial requiert plusieurs conditions: un compartiment, une source d'énergie externe (oxydoréduction d'un minéral, par exemple) et couplée à une réaction d'alimentation, un réseau chimique incluant cette réaction et un mécanisme simple de reproduction.
\define title-styles()
fill:$(foregroundColor)$;
\end
<$list filter="[is[current]!has[draft.of]catégorie[auteur]has[nom]!nom[]]">
<div class="tw-tiddler-title"><div class="titlebar"><span class="tw-tiddler-controls"><$list filter="[is[shadow]!has[draft.of]tag[$:/tags/ViewToolbar]] [!is[shadow]!has[draft.of]tag[$:/tags/ViewToolbar]] +[tag[$:/tags/ViewToolbar]]" variable="listItem"><$transclude tiddler=<<listItem>>/></$list>
</span><$set name="foregroundColor" value={{!!color}}><span style=<<title-styles>>><$transclude tiddler={{!!icon}}/></span></$set> <span class="title"><$view field="nom"/></span></div>
<$reveal type="nomatch" text="" default="" state=<<tiddlerInfoState>> class="tw-tiddler-info tw-popup" animate="yes">
<$transclude tiddler="$:/core/ui/TiddlerInfo"/>
</$reveal></div>
</$list>
<$list filter="[is[current]tag[.index]]">
!!<$count filter="[is[current]tagging[]!tag[.hiden]sort[title]]" /> références
<table class="rowstable"><tbody><$list filter="[is[current]tagging[]!tag[.hiden]sort[title]]"><tr><td><br><$link to={{!!title}}><$view field="title"/></$link><br><br></td><td><$list filter="[is[current]tags[]sort[title]]" template="$:/core/ui/TagTemplate" listview="pop" itemClass="tw-tag-list-item"/></td></tr></$list></tbody></table>
«The/a function of a token of type X with respect to selective regime R is to m iff X's doing m positively (and significantly) contributes to the average fitness of individuals possessing X with respect to R.»
<iframe src={{!!web}} width="900" height="600" style="border: none;" />
« les systèmes fonctionnels sont des types de machines dont les parties contribuent par leur articulation aux fins définies par un processus de sélection — qu’il soit d’origine interne ou externe, naturel ou artificiel »
« In order to analyse our present notion of Goal-Directed behaviour it was found necessary to postulate a mentalistic core-concept, and to hypothesise that our present concept, which applies to machines as well as to animals, was derived from it by an analogical extension. It had been discovered earlier that no behaviour of a system could be goal-directed unless it was the result of the system's being in a certain kind of internal state. It followed from this that only certain kinds of systems were capable of goal-directed behaviour, namely, those capable of being in the relevant internal state. »
|''Table of analyses''|c
|>|!ANALYSANDUM|!ANALYSANS|>|>|>|>|>|
| ''Explanandum'' | ''Explanans '' | '' Explanandum'' | ''Explanans'' |>|>|>|>|
|~|~|~|| //''intensional''//<br> | //''causal''// | //''evaluative''// |
|//S// does //B//| in order to do //G//. | //S// does //B//|because|//S// believes|(//B// => //G//|& //G// is good).|
|//S// does //B//| in order to do //F//. | //S// does //B//|because| -- |//B// => //F//|& //F// is good.|
|//X// does/has //A//| in order to do //G//. | //X// does/has //A//|because|//S// believes|(//A// => //G//|& //G// is good.)|
|//X// does/has //A//| in order to do //F//. | //X// does/has //A//|because| -- |//A// => //F//|& //F// is good.|
;''S:'' System ; ''B:'' Behavior ; ''G:'' Goal ; ''F:'' Function ; ''X:'' Part of a system ; ''A:'' Activity.
L'auteur défend une conception dite "[[mentaliste|TéléoMentalisme]]" de la [[téléologie|Téléologie]], dans la mesure où, sur la base d'une analyse du langage téléologique, il conclut que les comportements dirigés vers un but ont pour modèle le comportement intentionnel humain et ne s'appliquent //stricto sensu// qu'aux êtres dotés d'un esprit. Le paradigme de ce type de comportement est l'être humain, et son attribution à certains animaux et à certaines machines relève de l'analogie ou de la métaphore. Selon cette conception, en effet, la caractéristique essentielle des membres de plein droit de la classe des //goal-directed systems// est leur capacité à avoir et à agir en fonction de désirs et de croyances, c'est-à-dire, d'après Woodfield, en vertu d'un certain état interne ([[p.201|Woodfield 1976: 201]]).
L'approche de Woodfield, comme celle des naturalistes, semble au premier abord être causale. Selon lui, la cause d'un comportement B (//behavior//) dirigé vers un but G (//goal//) n'est pas un événement futur (le but visé : G) mais un état interne du système S que l'on peut traduire en termes de désirs et de croyances :
>avoir un but G, c'est désirer G et croire que B conduit à G (B => G).
Mais cela n'implique pas une intention consiente ou un état mental.
Cet état interne est la cause du comportement téléologique. Lorsqu’un système n’a pas d’états mentaux, alors on retombe sur une approche valorative ou sur une attribution métaphorique (analogique).
<$list filter="[à_propos_de{!!title}]"/>
[…] it seems clear that conscious and natural functions are functions in the same sense, despite their obvious differences. Functional ascriptions of either sort have a profoundly similar ring.
Both natural and conscious functions are functions by virtue of their being the reason the thing with the function 'is there', subject to the above restrictions. The differentiating feature is merely the //sort// of reason appropriate in either case: specifically, whether a conscious agent was involved or not. But in the functional-explanatory context which are examining, the difference is minimal. When we explain the presence or existence of //X// by appeal to a consequence //Z//, the overriding consideration is that //Z// must be or create conditions conducive to the survival or maintenance of //X//. The exact //nature// of the conditions is inessential to the possibility of this form of explanation: it can be looked upon as a matter of mere etiological detail, nothing in the essential form of the explanation. In any given case something could conceivably get a function through either sort of consideration. Accordingly, this analysis begs no theological questions. The organs of organisms could logically possibly get their functions through God’s conscious design; but we can also make perfectly good sense of their functions in the absence of divine intervention. And in either case they would be functions in precisely the same sense. This of course was accomplished only by disallowing explicit mention of intent or purpose in accounting for conscious functions.
!Dimensions
!! [[Temporelle|DimensionTemporelle]] : {{*T(-1)||tag}}
Une attribution fonctionnelle est une explication causale (au sens large) de la présence de l’item en question. Par conséquent, elle fait dépendre l’existence de cet item d’un événement passé qui, tel que l’interprète son auteur, est une forme de sélection consciente (artefacts) ou naturelle (organismes biologiques).
Par ailleurs, d’après la définition, et comme il le reconnait explicitement dans son [[livre, p. 91|Wright, L. (1976): Teleological Explanations]], quoi que les traits vestigiaux aient fait par le passé, ce n’est plus la raison de leur présence actuelle. Par conséquent, la définition restreint l’attribution fonctionnelle aux effets qui sont actuellement responsables de la présence de l’item. Autrement dit, les traits vestigiaux n’ont actuellement aucune fonction.
!! [[Valorative|DimensionValorative]] : {{*V(0)||tag}}
!! [[Systémique|DimensionSystémique]] : {{*S(0)||tag}}
!! [[Contextuelle|DimensionContextuelle]]: {{*C(0)||tag}}
!Variables
!![[Portée|Portée (variable)]]: {{_type||tag}}
La définition de Wright est compatible avec les deux interprétations. Mais elle a généralement été interprétée au sens restreint (//token//), ce qui a donné lieu à des contre-exemples comme celui du [[tuyau de gaz toxique qui fuit|(Contre-exemple) Le tuyau de gaz toxique qui fuit]].
Cependant, d’après l’auteur, il est préférable, en particulier pour les objets biologiques, de considérer que l’item X fait référence à un type plutôt qu’à un exemplaire concret ([[Wright, L. (1976)|Wright, L. (1976): Teleological Explanations]], p. 113). La présence de poumons chez un individu (quelconque) s’explique par le fait que ce type d’organe permet aux individus (en général) de respirer. Cette fonction est une conséquence typique, donc censée se produire même quand de fait un cœur particulier en est incapable ([[Wright, L. (1976)|Wright, L. (1976): Teleological Explanations]], p. 112).
Contrairement à d’auteurs auteurs, nous interpréterons donc la définition de Wright au sens large, c’est-à-dire en termes de types.
!![[Nature|Nature (variable)]]: {{_effet||tag}}
A priori, la définition de Wright semble compatible avec une interprétation en termes d’effets, comme de dispositions, mais son insistance sur l’idée qu’une fonction est le produit d’une sélection (naturelle ou consciente) fait pencher la balance du côté des effets.
!![[Caractère|Caractère (variable)]] : {{_propre||tag}}
Voir notes <<slider "1" "1" "
>{{Wright, L. (1973): distinction entre fonctions conscientes et naturelles}}
">>
et
<<slider "2" "2" "
>{{Wright, L. (1973): fonctions propres aux objets}}
">>.
!![[Explication|Explication (variable)]]: {{_E(1)||tag}}
Sa définition repose sur l’idée que les attributions fonctionnelles, de même que les attributions de buts, sont une forme d’explication : attribuer un but ou une finalité au comportement d’un agent, c’est donner une explication de ce comportement. De manière analogue, attribuer une fonction à un élément d’un système, c’est donner une explication de la présence de cet élément dans le système
!![[Artefacts|Artefacts (variable)]]: {{_A(1)||tag}}
L’auteur l’indique explicitement dans son texte:
{{Wright, 1973: 143||cit}}
[…] functional explanations, although plainly not causal in the usual, restricted sense, do concern how the thing with the function //got there//. Hence they //are// etiological, which is to say "causal" in an extended sense.
It is only slightly less obvious how natural functions can satisfy (I)<<popnote "voir" "//X// is there //because// it does //Z//">> : We can say that the natural function of something—say, an organ in an organism—is the reason the organ is there by invoking natural selection. If an organ has been naturally differentially selected-for by virtue of something it does, we can say that the reason the organ is there is that it does that something.
;The function of X is Z means
:(a) X is there because it does Z,
:(b) Z is a consequence (or result) of X's being there.
In a functional explanation, the consequences of X's being there (where it is, and so forth) must be invoked to explain why X is there (exists, and so forth). Functional characterizations, by their very nature, license these explanatory appeals.
Given our criteria, we might well say that X does select itself in conscious consequence-selection. By the very nature of X, Z, and our criteria (the implementation of which may be considered the environment), X will automatically be selected.
[…] something can get a function-either conscious or natural-as the result of an accident of this sort. Organismic mutations are paradigmatically accidental in this sense. But that only disqualifies an organ from functionhood for the first-or the first few-generations. If it survives by dint of its doing something, then that something becomes its function on this analysis.
L'auteur distingue des fonctions conscientes (artefacts) et d'autres naturelles (biologiques).
Cette distinction est une erreur fondamentale, puisqu'elle revient à considérer la fonction comme une propriété de la chose et à lier l'intentionnalité de la fonction d'un objet au dessein de la construction de cet objet, la distinction se faisant alors entre les objets consciemment conçus pour réaliser leur fonction et ceux dont la conception n'est pas intentionnelle (objets biologiques).
À partir de là, la question de la fonction de quelque chose va inévitablement se trouver liée à la question du pourquoi de l'existence de ce quelque chose. D'où le recours au concept d'[[Adaptation]]. Parce que lier la fonction d'une chose et le pourquoi de son existence est un piège. Parce qu'évidemment, dans le cas des objets biologiques, ça pose problème.
Wright dit que des deux, les fonctions naturelles sont philosophiquement les plus problématiques (p. 29). Il ajoute que, en effet, certains ont voulu situer l'intentionnalité des fonctions naturelles dans le [[Dessein]] de Dieu, tandis que d'autres ont voulu nier l'existence de ces fonctions du fait de l'absence d'un dessein à l'origine de leur existence.
Ce qu'il fait en invoquant la sélection naturelle c'est définir une finalité (l'auto-conservation et la reproduction) relativement à laquelle se définissent les fonctions, mais il ne comprend pas que cette finalité n'est définie que par lui et que par conséquent il pourrait bien définir nimporte quelle autre finalité plus ou moins pertinente.
Al querer dar cuenta de las funciones como de algo propio a los objetos, esto es, como algo cuya existencia es independiente de nosotros, el autor se encuentra atrapado en una trampa. Pretende que las funciones son relativas a las razones de su existencia, lo cual le obliga a emplear el término de causa, pero por un lado no quiere considerarlas como causas físicas por entender que esto significaría reducir //de hecho// el lenguaje funcional al lenguaje de la física, y por el otro lado es incapaz de explicitar rigurosamente su concepto de causalidad en sentido ámplio por lo que se queda en una notion totalmente intuitiva en el sentido de precientífica: "in this sense 'A because B' does not require that B be either necessary or sufficient for A" (p. 39). Al final, lo único que hace es sustituir una palabra oscura por otra que lo es más todavía. Ver la nota 11 del artículo de [[Cummins, R. (1975): “Functional Analysis”]].
L'auteur présente une conception étiologique du concept de fonction, applicable aussi bien aux artefacts qu'aux organismes biologiques. Sa définition repose sur l'idée que l'attribution d'une fonction à un item est une explication de sa présence. La fonction est la raison d'être de la chose; c'est aussi l'une de ses conséquences.
<important>
;La fonction de X est F signifie:
:(a) X existe (est présent) parce qu'il réalise F
:(b) F est une conséquence (ou résulte) de l’existence de X
</important>
We might want to say that natural selection is really self-selection, that nothing is doing the selecting; given the nature of X, Z, and the environment, X will automatically be selected.
L’une des principales adaptations de ce ~TiddlyWiki par rapport à la version originale concerne la visualisation des contenus. Pour chaque type de contenu (auteurs, livres, articles, citations, notes, etc.), j’ai créé un modèle de visualisation, appelé //ViewTemplate//, qui dépend de la valeur du champ "catégorie" de chaque tiddler. Ces modèles permettent de structurer le contenu et le complètent avec des informations additionnelles.
Par exemple, les tiddlers consacrés aux auteurs montrent une liste de leurs publications. Et les tiddlers consacrés aux livres et aux articles possèdent des onglets pour le résumé général et pour les chapitres ou sections du texte.
De plus, en bas à droite de chaque tiddler, une série de compteurs indiquent le nombre de notes, de citations, etc., relatives à ce tiddler. À côté, le bouton [▼] permet de déplier une fenêtre avec des onglets contenant des informations pertinentes.
Ce ~TiddlyWki continuera à évoluer, aussi bien dans la forme que dans le fond. Si vous avez des questions, dirigez-vous au forum de discussion http://groups.google.com/group/TiddlyWiki.
L'ésotérisme est synonyme de [[gnose|Gnose]], qui est une forme de connaissance fondée sur le symbolisme, et qui a une dimension à la fois intellectuelle et expérientielle. C'est une forme de pensée qui apparaît sous sa forme spécifique à la [[Renaissance]] et qui comporte quatre caractéristiques fondamentales:
# L'idée des correspondances/interdépendances universelles.
# L'idée que ''la nature est vivante'' et toute ''pleine de significations''.
# L'idée d'imagination active, imagination créatrice s'exerçant sur des supports de médiation (symboles).
# L'idée de transformation, de transmutation. Par exemple alchimie.
Voir IbnArabi