Welcome to TiddlyWiki created by Jeremy Ruston, Copyright © 2007 UnaMesa Association
<<<
!AUGUIS ( Pierre-Jean-Baptiste ), Député des Deux-Sèvres de 1791 à 1810
{{center{[img(++,auto)[images/convention.jpg]]}}}
"Il fit des études peu brillantes : son goût le portait vers la carrière des armes, qu'il embrassa d'abord. Il avait même obtenu le grade de capitaine de dragons, quand il quitta l'épée pour la robe, et devint président du bailliage de Melle. Son amour pour ses pénates lui fit refuser d'échanger cette place contre celle de procureur-général en Corse.
La révolution de 1789 le trouva chaud partisan de ses principes : aussi la présidence du tribunal de Melle lui fut-elle dévolue. Les suffrages des électeurs du département des Deux-Sèvres l'appelèrent à l'Assemblée législative. Le titre de député à la Convention lui fut confirmé par les suffrages des électeurs du même département. Si Auguis s'était peu fait remarquer à l'Assemblée législative, il n'en fut pas ainsi à la Convention. Sa conduite y fut fort honorable.
Dans le procès de Louis XVI, il ne vota point la mort, mais la détention et le bannissement à la paix. En 1793, la Convention l'envoya dans les départements de l'Ouest. L'Histoire de Niort fait mention des services de ce patriote infatigable. L'année suivante il eut une mission semblable pour Marseille, et s'en acquitta avec la même distinction. Il y comprima les partisans de Robespierre, et dénonça leurs manœuvres, qu'il fit avorter par son énergie. A son retour au sein de l'Assemblée, il fut nommé membre du Comité de sûreté générale, et il fit, en cette qualité, plusieurs rapports à la Convention.
Il eut deux nouvelles occasions de signaler son zèle et son courage. Dans la première, le 1 avril 1795, les faubourgs de Paris s'insurgèrent; il remplissait alors une mission pacifique, celle de visiter les prisons. Il ne put faire entendre la voix de la raison à ces forcenés, ils le blessèrent, et il fut arrêté un moment au corps-de-garde de la section des Thermes. Le 20 mai suivant, il redoubla d'énergie, il triompha d'une nouvelle insurrection, et, à minuit, il entra dans la salle des séances de la Convention, à la tête de la force armée ; il en chassa une multitude effrénée qui voulait influencer les délibérations de l'Assemblée nationale , et fit adopter les mesures de salut public que réclamaient les circonstances.
En vertu d'un décret du 6 juin 1795, il fut envoyé en mission à l'armée des Pyrénées occidentales. D'après les décrets du 22 et du 30 août de cette année, qui appelaient au Conseil des Anciens les deux tiers des membres de la Convention, Auguis fit partie de ce Conseil. Le 21 avril 1798, il en fut nommé l'un des secrétaires. En 1799, les suffrages des électeurs des Deux-Sèvres l'appelèrent au conseil des Cinq-Cents.
Dans la séance orageuse du 15 octobre, il soutint, contre l'avis de Lamarque, qu'en déclarant la patrie en danger, en 1792, l'Assemblée législative eut l'intention de renverser le trône, et qu'une semblable mesure compromettrait l'existence du gouvernement directorial. La proposition d'Auguis fut adoptée, ce qui favorisa la journée du 18 brumaire. Aussi dès la création du Corps législatif, Auguis y fut placé; il en fut nommé secrétaire le 1 janvier 1800. Depuis cette époque, il fut réélu deux fois par les électeurs des Deux-Sèvres. La carrière législative d'Auguis fut de plus de vingt années. Pour un député aussi zélé, aussi actif, c'est un demi-siècle de gloire."
//Histoire de la ville de Niort Par Hilaire Alexandre Briquet//
<<<
//@@color:#FF0;{{right{~~Asc. LECOQ~~}}}@@//
Voir également [[Biographie universelle, ancienne et moderne|http://books.google.fr/books?id=XLIFAAAAQAAJ&lpg=PA557&ots=j8wh1vM9lw&dq=AUGUIS%20MARSEILLE%20REVOLUTION&pg=PA557#v=onepage&q=&f=false]]
Sur GénéInfos
[[La carte des AD et des communes en ligne|http://geneinfos.typepad.fr/geneinfos/nouvelle_carte.html]]
[[Archives Départ. de Seine et Marne|http://archives.seine-et-marne.fr/archives-en-ligne]]
window.oldDisplayMessage = displayMessage;
displayMessage = function (text,linkText)
{ oldDisplayMessage(text,linkText);
setTimeout( 'clearMessage()', 1800 );}
http://books.google.fr/books?id=WlAVAAAAQAAJ&pg=RA1-PA126&lpg=RA1-PA126&dq=de+BRUY%C3%88RES+genealogie&source=bl&ots=ktADCA6sOs&sig=8bgrwHcXRinCNB-tSgdfd4VLtbY&hl=fr&ei=g8NLSu__FdeOjAfaj73SBA&sa=X&oi=book_result&ct=result&resnum=7
<html><table width="96%" style="border:none;margin:1px;background:transparent;clear:both;"><iframe id="ifsample1" name="ifsample1" src="http://roglo.eu/roglo" width="100%" height="1000" scrolling="yes" frameborder="0" allowtransparency style="border:none;"></iframe></table></html>
http://gallica.bnf.fr/
^^[[Armorial de la noblesse du Languedoc.... Généralité de Toulouse....La Roque, Louis de|http://gallica.bnf.fr/ark:/12148/bpt6k206421b.r=Armorial+de+la+noblesse+du+Languedoc.langFR]]
[[Armorial de la noblesse du Languedoc.... Généralité de Montpellier....La Roque, Louis de|http://gallica.bnf.fr/ark:/12148/bpt6k206420z.r=Armorial+de+la+noblesse+du+Languedoc.langFR]]
^^
<<<
[<img(19%+,auto)[images/moulins-changy2.jpg]]
^^//On trouve sur le plan d'intendance de la commune d'Avon, deux maisons établies en bord de rivière avec un symbole qui laisse supposer qu'il s'agit de moulins, plans établis entre 1777 et 1789 par Louis Bertier de Sauvigny (AD77).
Le moulin de Changy serait celui situé le plus au Nord, le moulin de L'Erable au Sud.//^^
<<<
<<<
!__Moulin de Changy__
~~@@color:#FF0;"Ce moulin consiste en un corps de bâtiments renfermant le moulin, un logement du meunier, petit jardin derrière d'eniron huit perches et clos de murs.
De l'autre côté de la rue en face du moulin sont d'autres bâtiments qui en dépendent et qui consiste en une petite grange, écurie, poulailler, toit à porc et petite laitrie ; à côté est un clos entouré de murs contenant environ douze arpents séparé en deux par un fossé. Dans la partie haute duquel clos est un clombier. Partie dudit clos en pré et partie en terre labouré.
Cy ............................... 12 arpents
Au dessus dudit clos est une autre pièce de terre auusy entouré de murs appellé Le Haut et Bas verger, planté de quelques arbres à fruits et contenant
environ ................................ 3 apents
Total .......................................... 15 arpents "@@
//Dossier de vente et aliénation de biens nationaux n° 50-P-4 - 29 Novembre 1790//
~~
"Dès le mois de janvier 1753 le sieur Etienne LECOQ est qualifié meunier de Changy ...
La famille LECOQ, originaire de Cély, exploitait déjà le moulin de Changy en 1753 : le 4 juin 1755, Etienne LECOQ en devint fermier au prix de 400 livres et y mourut le 6 décembre 1765, à l'age de 94 ans ( 85 ans ).
Le 8 février de cette même année, son fils unique, appelé aussi Etienne, avait conclu un nouveau bail avec les Carmes au prix de 450 livres; par acte du 27 décembre 1772, il céda ses droits à son quatrième fils, Charles, et mourut au moulin de l'Erable, le 5 février 1779, à l'âge de 68 ans.
Déjà le 6 mai 1777, Charles LECOQ avait pris les moulins de Changy et de l'Erable en bail à vie, moyennant un loyer annuel de 700 livres. Quand la Révolution survint, les Carmes furent dépossédés, mais Charles LECOQ resta au moulin de Changy, où il mourut le 27 octobre 1818 : son fils CHarles Luois Isidore le possédait encore vers 1840."
^^//Source : " Le Prieuré des Basses-Loges et le fief de Changy" par l'abbé Omer Estounet - page 55"//^^
<<<
<<<
!__Moulin de l'Erable__
"Par acte du 17 juin 1755, Etienne LECOQ fils le remplaça aux mêmes charges et conditions; celui-ci obtint un nouveau bail le 17 septembre 1765 et céda ses droits à son fils Charles qui demeura propriétaire du moulin après la Révolution et le transmit à ses descendants. Ce moulin n'existe plus aujourd'hui et a été transformé en maison bourgeoise."
^^//Source : " Le Prieuré des Basses-Loges et le fief de Changy" par l'abbé Omer Estounet - page 60"//^^
^^//Bail à vie des moulins de Changy et de l'Erable par le R.P. Prieur des Basses Loges à Charles LECOQ et Marie Osmane DESREZ du 6 mai 1777//^^
[img(60%+,auto)[images/changy-bail-1777.jpg]]
<<<
!Moulin de Choiseau
<<<
[<img(23%+,+)[images/Moulin_choiseau.jpg]][[Le Moulin de Choiseau|http://www.moulindechoiseau.fr/]] à Cely en bière tire son nom du canal artificiel qui amène l’eau en chute sur la roue du moulin. Construit sur un bras du Rû joignant le ruisseau du Pissot, il est attesté dès le XIIème siècle.
<<<
<<<
[>img(25%+,+)[images/Moulin_choiseau2.jpg]]
<<<
{{center{[img(70%,auto)[images/19siecle.jpg]]}}}
//~~Fontainebleau / Nemours~~//
{{center{[img(70%,auto)[images/gatinais.jpg]]}}}
//~~Montargis~~//
{{center{[img(70%,auto)[images/gatinais2.jpg]]}}}
//~~Asc. LECOQ en bleu / Asc. MORTIER en rose~~//
{{center{[img(60%,auto)[images/Repart_geo.jpg]]}}}
Background: #fff
Foreground: #000
PrimaryPale: #8cf
PrimaryLight: #18f
PrimaryMid: #04b
PrimaryDark: #014
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
config.options.txtSelectedTiddlerTabButton = "none";
config.options.chkInsertTabs = true;
config.options.txtIconsCSS ="";
config.options.txtBackupFolder = "backup";
/***
|''Name''|DeprecatedFunctionsPlugin|
|''Description''|Provides support for functions removed from the TiddlyWiki core|
|''Version''|1.0.0|
|''Status''|stable|
|''Source''|http://www.tiddlywiki.com/coreplugins.html#DeprecatedFunctionsPlugin|
|''~CodeRepository:''|http://svn.tiddlywiki.org/Trunk/association/plugins/DeprecatedFunctionsPlugin/DeprecatedFunctionsPlugin.js |
|''License''|[[BSD open source license]]|
|''~CoreVersion''|2.3.0|
|''Feedback''|[[TiddlyWiki community|http://groups.google.com/group/TiddlyWiki]] |
|''Keywords''|legacySupport|
!Code
***/
//{{{
if(!version.extensions.DeprecatedFunctionsPlugin) {
version.extensions.DeprecatedFunctionsPlugin = {installed:true};
//--
//-- Deprecated code
//--
// @Deprecated: Use createElementAndWikify and this.termRegExp instead
config.formatterHelpers.charFormatHelper = function(w)
{
w.subWikify(createTiddlyElement(w.output,this.element),this.terminator);
};
// @Deprecated: Use enclosedTextHelper and this.lookaheadRegExp instead
config.formatterHelpers.monospacedByLineHelper = function(w)
{
var lookaheadRegExp = new RegExp(this.lookahead,"mg");
lookaheadRegExp.lastIndex = w.matchStart;
var lookaheadMatch = lookaheadRegExp.exec(w.source);
if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
var text = lookaheadMatch[1];
if(config.browser.isIE)
text = text.replace(/\n/g,"\r");
createTiddlyElement(w.output,"pre",null,null,text);
w.nextMatch = lookaheadRegExp.lastIndex;
}
};
// @Deprecated: Use <br> or <br /> instead of <<br>>
config.macros.br = {};
config.macros.br.handler = function(place)
{
createTiddlyElement(place,"br");
};
// Find an entry in an array. Returns the array index or null
// @Deprecated: Use indexOf instead
Array.prototype.find = function(item)
{
var i = this.indexOf(item);
return i == -1 ? null : i;
};
// Load a tiddler from an HTML DIV. The caller should make sure to later call Tiddler.changed()
// @Deprecated: Use store.getLoader().internalizeTiddler instead
Tiddler.prototype.loadFromDiv = function(divRef,title)
{
return store.getLoader().internalizeTiddler(store,this,title,divRef);
};
// Format the text for storage in an HTML DIV
// @Deprecated Use store.getSaver().externalizeTiddler instead.
Tiddler.prototype.saveToDiv = function()
{
return store.getSaver().externalizeTiddler(store,this);
};
// @Deprecated: Use store.allTiddlersAsHtml() instead
function allTiddlersAsHtml()
{
return store.allTiddlersAsHtml();
}
// @Deprecated: Use refreshPageTemplate instead
function applyPageTemplate(title)
{
refreshPageTemplate(title);
}
// @Deprecated: Use story.displayTiddlers instead
function displayTiddlers(srcElement,titles,template,unused1,unused2,animate,unused3)
{
story.displayTiddlers(srcElement,titles,template,animate);
}
// @Deprecated: Use story.displayTiddler instead
function displayTiddler(srcElement,title,template,unused1,unused2,animate,unused3)
{
story.displayTiddler(srcElement,title,template,animate);
}
// @Deprecated: Use functions on right hand side directly instead
var createTiddlerPopup = Popup.create;
var scrollToTiddlerPopup = Popup.show;
var hideTiddlerPopup = Popup.remove;
// @Deprecated: Use right hand side directly instead
var regexpBackSlashEn = new RegExp("\\\\n","mg");
var regexpBackSlash = new RegExp("\\\\","mg");
var regexpBackSlashEss = new RegExp("\\\\s","mg");
var regexpNewLine = new RegExp("\n","mg");
var regexpCarriageReturn = new RegExp("\r","mg");
}
//}}}
!//Pour Ruben//
<<<
![[El Cid Campeador - le « seigneur qui gagne les batailles »|http://fr.wikipedia.org/wiki/Rodrigo_D%C3%ADaz_de_Bivar]]
{{center{[<img(20%,auto)[images/cid.jpeg]]}}}
[[Rodrigo Díaz de Bivar|http://gw5.geneanet.org/index.php3?b=yml&lang=fr;pz=xx;nz=lecoq;ocz=0;p=rodrigue;n=de+bivar]],Burgos 1043 - Valence 1099, se signala par ses exploits sous les règnes de Ferdinand Sanche II et Alphonse VI, rois de Léon et de Castille. Il s'attacha à Sanche II, roi de Castille, qui était en guerre avec Alphonse, roi de Léon, son frère; Sanche ayant été assassiné et remplacé par Alphonse, le Cid fut disgracié et quitta la cour.
Dans sa retraite, il rassembla ses vassaux et ses amis, marcha contre les Maures, les battit en plusieurs rencontres, s'empara de Tolède (1085), de Valence (1094) et par ses exploits força le roi à le rappeler et à lui donner toute sa confiance (La Reconquista). Ayant vaincu cinq rois maures, les députés que ces rois lui avaient envoyés le qualifièrent, en le saluant, du titre de seid ou cid, c'est-à-dire seigneur; ce surnom lui resta ensuite. On le surnomme aussi Campeador, mot qui paraît signifier le héros des camps.
<<<
~~
<html>
<div style="text-align: center;">
<a href="http://gw5.geneanet.org/index.php3?b=yml&lang=fr;pz=xx;nz=lecoq;ocz=0;p=rodrigue;n=de+bivar">Rodrigue Diaz le Cid Campéador de BIVAR</a> <em><bdo dir="ltr">1043-1099</bdo></em>
<br>
|<br>
<a href="index.php3?b=yml&lang=fr;pz=xx;nz=lecoq;ocz=0;p=cristina+rodriguez;n=de+bivar">Cristina Rodriguez de BIVAR</a> <em><bdo dir="ltr">1077</bdo></em>
<br>
|<br>
<a href="index.php3?b=yml&lang=fr;pz=xx;nz=lecoq;ocz=0;p=garcia;n=de+navarre">Garcia de NAVARRE</a> <em><bdo dir="ltr">ca 1110-1151</bdo></em>
<br>
|<br>
<a href="index.php3?b=yml&lang=fr;pz=xx;nz=lecoq;ocz=0;p=sancha;n=de+navarre">Sancha de NAVARRE</a> <em><bdo dir="ltr">1144-1176</bdo></em>
<br>
|<br>
<a href="index.php3?b=yml&lang=fr;pz=xx;nz=lecoq;ocz=0;p=aymeric;n=de+narbonne+lara">Aymeric de NARBONNE LARA</a> <em><bdo dir="ltr">ca 1170-1239</bdo></em>
<br>
|<br>
<a href="index.php3?b=yml&lang=fr;pz=xx;nz=lecoq;ocz=0;p=amalric;n=de+narbonne+lara">Amalric I de NARBONNE LARA</a> <em><bdo dir="ltr">1210</bdo></em>
<br>
|<br>
<a href="index.php3?b=yml&lang=fr;pz=xx;nz=lecoq;ocz=0;p=gausserande;n=de+narbonne">Gausserande de NARBONNE</a> <em><bdo dir="ltr">ca 1255</bdo></em>
<br>
|<br>
<a href="index.php3?b=yml&lang=fr;pz=xx;nz=lecoq;ocz=0;p=pierre;n=de+voisins;oc=2">Pierre de VOISINS</a> <em><bdo dir="ltr">ca 1275</bdo></em>
<br>
|<br>
<a href="index.php3?b=yml&lang=fr;pz=xx;nz=lecoq;ocz=0;p=amalric;n=de+voisins">Amalric de VOISINS</a> <em><bdo dir="ltr">ca 1310-1346/</bdo></em>
<br>
|<br>
<a href="index.php3?b=yml&lang=fr;pz=xx;nz=lecoq;ocz=0;p=gausserande;n=de+voisins">Gausserande de VOISINS</a>
<br>
|<br>
<a href="index.php3?b=yml&lang=fr;pz=xx;nz=lecoq;ocz=0;p=marguerite;n=de+montbrun;oc=1">Marguerite de MONTBRUN</a>
<br>
|<br>
<a href="index.php3?b=yml&lang=fr;pz=xx;nz=lecoq;ocz=0;p=antoine;n=de+cardaillac">Antoine de CARDAILLAC</a>
<br>
|<br>
<a href="index.php3?b=yml&lang=fr;pz=xx;nz=lecoq;ocz=0;p=bertrande;n=de+cardaillac">Bertrande de CARDAILLAC</a>
<br>
|<br>
<a href="index.php3?b=yml&lang=fr;pz=xx;nz=lecoq;ocz=0;p=gastonne;n=de+beaulac">Gastonne de BEAULAC</a> <em><bdo dir="ltr">ca 1472</bdo></em>
<br>
|<br>
<a href="index.php3?b=yml&lang=fr;pz=xx;nz=lecoq;ocz=0;p=antoine;n=de+thezan;oc=1">Antoine de THEZAN</a> <em><bdo dir="ltr">ca 1500</bdo></em>
<br>
|<br>
<a href="index.php3?b=yml&lang=fr;pz=xx;nz=lecoq;ocz=0;p=pierre;n=de+thezan">Pierre de THEZAN</a>, <em>écuyer seigneur de Saint Geniès</em> <em><bdo dir="ltr">ca 1530-1595/</bdo></em>
<br>
|<br>
<a href="index.php3?b=yml&lang=fr;pz=xx;nz=lecoq;ocz=0;p=charles;n=de+thezan">Charles de THEZAN</a>, <em>baron de Saint Geniès</em> <em><bdo dir="ltr">ca 1565-1631</bdo></em>
<br>
|<br>
<a href="index.php3?b=yml&lang=fr;pz=xx;nz=lecoq;ocz=0;p=isabeau;n=de+thezan">Isabeau de THEZAN</a> <em><bdo dir="ltr">ca 1610</bdo></em>
<br>
|<br>
<a href="index.php3?b=yml&lang=fr;pz=xx;nz=lecoq;ocz=0;p=nicolas;n=de+rabaudy+montoussin">Nicolas de RABAUDY MONTOUSSIN</a>, <em>écuyer , seigneur du Travet, de Montoussin et du Tilhet</em> <em><bdo dir="ltr">1627-1680</bdo></em>
<br>
|<br>
<a href="index.php3?b=yml&lang=fr;pz=xx;nz=lecoq;ocz=0;p=jean+pierre+gaston;n=de+rabaudy+montoussin">Jean Pierre Gaston de RABAUDY MONTOUSSIN</a> <em><bdo dir="ltr">1680-1746</bdo></em>
<br>
|<br>
<a href="index.php3?b=yml&lang=fr;pz=xx;nz=lecoq;ocz=0;p=michel;n=de+rabaudy+montoussin">Michel de RABAUDY MONTOUSSIN</a> <em><bdo dir="ltr">1720</bdo></em>
<br>
|<br>
<a href="index.php3?b=yml&lang=fr;pz=xx;nz=lecoq;ocz=0;p=francois+marguerite;n=de+rabaudy+montoussin">François Marguerite de RABAUDY MONTOUSSIN</a> <em><bdo dir="ltr">†1828</bdo></em>
<br>
|<br>
<a href="index.php3?b=yml&lang=fr;pz=xx;nz=lecoq;ocz=0;p=michel+joseph+guillaume;n=de+rabaudy">Michel Joseph Guillaume de RABAUDY</a> <em><bdo dir="ltr">1784-1837</bdo></em>
<br>
|<br>
<a href="index.php3?b=yml&lang=fr;pz=xx;nz=lecoq;ocz=0;p=marie+aimee;n=de+rabaudy">Marie Aimée de RABAUDY</a> <em><bdo dir="ltr">1822-1884</bdo></em>
<br>
|<br>
<a href="index.php3?b=yml&lang=fr;pz=xx;nz=lecoq;ocz=0;p=marie+cecile;n=moulac">Marie, Cécile MOULAC</a> <em><bdo dir="ltr">1844-1895</bdo></em>
<br>
|<br>
<a href="index.php3?b=yml&lang=fr;pz=xx;nz=lecoq;ocz=0;p=marie+louise+marguerite;n=roy">Marie-Louise, Marguerite ROY</a> <em><bdo dir="ltr">1867-1956</bdo></em>
<br>
|<br>
<a href="index.php3?b=yml&lang=fr;pz=xx;nz=lecoq;ocz=0;p=jacques;n=mortier">Jacques MORTIER</a> <em><bdo dir="ltr">1890-1951</bdo></em>
<br>
|<br>
<a href="index.php3?b=yml&lang=fr;pz=xx;nz=lecoq;ocz=0;p=marie+george;n=mortier">xx LECOQ</a>
<br>
|<br>
<a href="index.php3?b=yml&lang=fr;pz=xx;nz=lecoq;ocz=0;p=xx;n=lecoq">Ruben</a>
<br>
</div>
<div>
<br>
</div>
<br><br>
</td>
</tr>
<tr>
<td></td>
<td align="right">
<br>
</td>
</tr>
</tbody>
</html>
~~
//~~(Part of the [[ForEachTiddlerPlugin]])~~//
Create customizable lists, tables etc. for your selections of tiddlers. Specify the tiddlers to include and their order through a powerful language.
''Syntax:''
|>|{{{<<}}}''forEachTiddler'' [''in'' //tiddlyWikiPath//] [''where'' //whereCondition//] [''sortBy'' //sortExpression// [''ascending'' //or// ''descending'']] [''script'' //scriptText//] [//action// [//actionParameters//]]{{{>>}}}|
|//tiddlyWikiPath//|The filepath to the TiddlyWiki the macro should work on. When missing the current TiddlyWiki is used.|
|//whereCondition//|(quoted) JavaScript boolean expression. May refer to the build-in variables {{{tiddler}}} and {{{context}}}.|
|//sortExpression//|(quoted) JavaScript expression returning "comparable" objects (using '{{{<}}}','{{{>}}}','{{{==}}}'. May refer to the build-in variables {{{tiddler}}} and {{{context}}}.|
|//scriptText//|(quoted) JavaScript text. Typically defines JavaScript functions that are called by the various JavaScript expressions (whereClause, sortClause, action arguments,...)|
|//action//|The action that should be performed on every selected tiddler, in the given order. By default the actions [[addToList|AddToListAction]] and [[write|WriteAction]] are supported. When no action is specified [[addToList|AddToListAction]] is used.|
|//actionParameters//|(action specific) parameters the action may refer while processing the tiddlers (see action descriptions for details). <<tiddler [[JavaScript in actionParameters]]>>|
|>|~~Syntax formatting: Keywords in ''bold'', optional parts in [...]. 'or' means that exactly one of the two alternatives must exist.~~|
''Using JavaScript''
To give you a lot of flexibility the [[ForEachTiddlerMacro]] uses JavaScript in its arguments. Even if you are not that familiar with JavaScript you may find forEachTiddler useful. Just have a look at the various ready-to-use [[ForEachTiddlerExamples]] and adapt them to your needs.
''The Elements of the Macro''
The arguments of the ForEachTiddlerMacro consist of multiple parts, each of them being optional.
<<slider chkFETInClause [[inClause]] "inClause" "inClause">>
<<slider chkFETWhereClause [[whereClause]] "whereClause" "whereClause">>
<<slider chkFETSortClause [[sortClause]] "sortClause" "sortClause">>
<<slider chkFETScriptClause [[scriptClause]] "scriptClause" "scriptClause">>
<<slider chkFETActions [[Action Specification]] "Action Specification" "Action Specification">>
''Using Macros and ">" inside the forEachTiddler Macro''
You may use other macro calls into the expression, especially in the actionParameters. To avoid that the {{{>>}}} of such a macro call is misinterpreted as the end of the {{{<<forEachTiddler...>>}}} macro you must escape the {{{>>}}} of the inner macro with {{{$))}}} E.g. if you want to use {{{<<tiddler ...>>}}} inside the {{{forEachTiddler}}} macro you have to write {{{<<tiddler ...$))}}}.
In addition it is necessary to escape single {{{>}}} with the text {{{$)}}}.
''Using {{{<<tiddler ... with: ...>>}}} to re-use ForEachTiddler definitions''
Sometimes you may want to use a certain ForEachTiddler definition in slight variations. E.g. you may want to list either the tiddlers tagged with "ToDo" and in the other case with "Done". To do so you may use "Tiddler parameters". Here an example:
Replace the variable part of the ForEachTiddler definition with $1 ($2,... $9 are supported). E.g. you may create the tiddler "ListTaggedTiddlers" like this
{{{
<<forEachTiddler
where
'tiddler.tags.contains("$1")'
>>
}}}
Now you can use the ListTaggedTiddlers for various specific tags, using the {{{<<tiddler ...>>}}} macro:
{{{
<<tiddler ListTaggedTiddlers with: "systemConfig">>
}}}
{{{
<<tiddler ListTaggedTiddlers with: "Plugin">>
}}}
See also [[ForEachTiddlerExamples]].
/***
|''Name:''|ForEachTiddlerPlugin|
|''Version:''|1.0.8 (2007-04-12)|
|''Source:''|http://tiddlywiki.abego-software.de/#ForEachTiddlerPlugin|
|''Author:''|UdoBorkowski (ub [at] abego-software [dot] de)|
|''Licence:''|[[BSD open source license (abego Software)|http://www.abego-software.de/legal/apl-v10.html]]|
|''Copyright:''|© 2005-2007 [[abego Software|http://www.abego-software.de]]|
|''TiddlyWiki:''|1.2.38+, 2.0|
|''Browser:''|Firefox 1.0.4+; Firefox 1.5; InternetExplorer 6.0|
!Description
Create customizable lists, tables etc. for your selections of tiddlers. Specify the tiddlers to include and their order through a powerful language.
''Syntax:''
|>|{{{<<}}}''forEachTiddler'' [''in'' //tiddlyWikiPath//] [''where'' //whereCondition//] [''sortBy'' //sortExpression// [''ascending'' //or// ''descending'']] [''script'' //scriptText//] [//action// [//actionParameters//]]{{{>>}}}|
|//tiddlyWikiPath//|The filepath to the TiddlyWiki the macro should work on. When missing the current TiddlyWiki is used.|
|//whereCondition//|(quoted) JavaScript boolean expression. May refer to the build-in variables {{{tiddler}}} and {{{context}}}.|
|//sortExpression//|(quoted) JavaScript expression returning "comparable" objects (using '{{{<}}}','{{{>}}}','{{{==}}}'. May refer to the build-in variables {{{tiddler}}} and {{{context}}}.|
|//scriptText//|(quoted) JavaScript text. Typically defines JavaScript functions that are called by the various JavaScript expressions (whereClause, sortClause, action arguments,...)|
|//action//|The action that should be performed on every selected tiddler, in the given order. By default the actions [[addToList|AddToListAction]] and [[write|WriteAction]] are supported. When no action is specified [[addToList|AddToListAction]] is used.|
|//actionParameters//|(action specific) parameters the action may refer while processing the tiddlers (see action descriptions for details). <<tiddler [[JavaScript in actionParameters]]>>|
|>|~~Syntax formatting: Keywords in ''bold'', optional parts in [...]. 'or' means that exactly one of the two alternatives must exist.~~|
See details see [[ForEachTiddlerMacro]] and [[ForEachTiddlerExamples]].
!Revision history
* v1.0.8 (2007-04-12)
** Adapted to latest TiddlyWiki 2.2 Beta importTiddlyWiki API (introduced with changeset 2004). TiddlyWiki 2.2 Beta builds prior to changeset 2004 are no longer supported (but TiddlyWiki 2.1 and earlier, of cause)
* v1.0.7 (2007-03-28)
** Also support "pre" formatted TiddlyWikis (introduced with TW 2.2) (when using "in" clause to work on external tiddlers)
* v1.0.6 (2006-09-16)
** Context provides "viewerTiddler", i.e. the tiddler used to view the macro. Most times this is equal to the "inTiddler", but when using the "tiddler" macro both may be different.
** Support "begin", "end" and "none" expressions in "write" action
* v1.0.5 (2006-02-05)
** Pass tiddler containing the macro with wikify, context object also holds reference to tiddler containing the macro ("inTiddler"). Thanks to SimonBaird.
** Support Firefox 1.5.0.1
** Internal
*** Make "JSLint" conform
*** "Only install once"
* v1.0.4 (2006-01-06)
** Support TiddlyWiki 2.0
* v1.0.3 (2005-12-22)
** Features:
*** Write output to a file supports multi-byte environments (Thanks to Bram Chen)
*** Provide API to access the forEachTiddler functionality directly through JavaScript (see getTiddlers and performMacro)
** Enhancements:
*** Improved error messages on InternetExplorer.
* v1.0.2 (2005-12-10)
** Features:
*** context object also holds reference to store (TiddlyWiki)
** Fixed Bugs:
*** ForEachTiddler 1.0.1 has broken support on win32 Opera 8.51 (Thanks to BrunoSabin for reporting)
* v1.0.1 (2005-12-08)
** Features:
*** Access tiddlers stored in separated TiddlyWikis through the "in" option. I.e. you are no longer limited to only work on the "current TiddlyWiki".
*** Write output to an external file using the "toFile" option of the "write" action. With this option you may write your customized tiddler exports.
*** Use the "script" section to define "helper" JavaScript functions etc. to be used in the various JavaScript expressions (whereClause, sortClause, action arguments,...).
*** Access and store context information for the current forEachTiddler invocation (through the build-in "context" object) .
*** Improved script evaluation (for where/sort clause and write scripts).
* v1.0.0 (2005-11-20)
** initial version
!Code
***/
//{{{
//============================================================================
//============================================================================
// ForEachTiddlerPlugin
//============================================================================
//============================================================================
// Only install once
if (!version.extensions.ForEachTiddlerPlugin) {
if (!window.abego) window.abego = {};
version.extensions.ForEachTiddlerPlugin = {
major: 1, minor: 0, revision: 8,
date: new Date(2007,3,12),
source: "http://tiddlywiki.abego-software.de/#ForEachTiddlerPlugin",
licence: "[[BSD open source license (abego Software)|http://www.abego-software.de/legal/apl-v10.html]]",
copyright: "Copyright (c) abego Software GmbH, 2005-2007 (www.abego-software.de)"
};
// For backward compatibility with TW 1.2.x
//
if (!TiddlyWiki.prototype.forEachTiddler) {
TiddlyWiki.prototype.forEachTiddler = function(callback) {
for(var t in this.tiddlers) {
callback.call(this,t,this.tiddlers[t]);
}
};
}
//============================================================================
// forEachTiddler Macro
//============================================================================
version.extensions.forEachTiddler = {
major: 1, minor: 0, revision: 8, date: new Date(2007,3,12), provider: "http://tiddlywiki.abego-software.de"};
// ---------------------------------------------------------------------------
// Configurations and constants
// ---------------------------------------------------------------------------
config.macros.forEachTiddler = {
// Standard Properties
label: "forEachTiddler",
prompt: "Perform actions on a (sorted) selection of tiddlers",
// actions
actions: {
addToList: {},
write: {}
}
};
// ---------------------------------------------------------------------------
// The forEachTiddler Macro Handler
// ---------------------------------------------------------------------------
config.macros.forEachTiddler.getContainingTiddler = function(e) {
while(e && !hasClass(e,"tiddler"))
e = e.parentNode;
var title = e ? e.getAttribute("tiddler") : null;
return title ? store.getTiddler(title) : null;
};
config.macros.forEachTiddler.handler = function(place,macroName,params,wikifier,paramString,tiddler) {
// config.macros.forEachTiddler.traceMacroCall(place,macroName,params,wikifier,paramString,tiddler);
if (!tiddler) tiddler = config.macros.forEachTiddler.getContainingTiddler(place);
// --- Parsing ------------------------------------------
var i = 0; // index running over the params
// Parse the "in" clause
var tiddlyWikiPath = undefined;
if ((i < params.length) && params[i] == "in") {
i++;
if (i >= params.length) {
this.handleError(place, "TiddlyWiki path expected behind 'in'.");
return;
}
tiddlyWikiPath = this.paramEncode((i < params.length) ? params[i] : "");
i++;
}
// Parse the where clause
var whereClause ="true";
if ((i < params.length) && params[i] == "where") {
i++;
whereClause = this.paramEncode((i < params.length) ? params[i] : "");
i++;
}
// Parse the sort stuff
var sortClause = null;
var sortAscending = true;
if ((i < params.length) && params[i] == "sortBy") {
i++;
if (i >= params.length) {
this.handleError(place, "sortClause missing behind 'sortBy'.");
return;
}
sortClause = this.paramEncode(params[i]);
i++;
if ((i < params.length) && (params[i] == "ascending" || params[i] == "descending")) {
sortAscending = params[i] == "ascending";
i++;
}
}
// Parse the script
var scriptText = null;
if ((i < params.length) && params[i] == "script") {
i++;
scriptText = this.paramEncode((i < params.length) ? params[i] : "");
i++;
}
// Parse the action.
// When we are already at the end use the default action
var actionName = "addToList";
if (i < params.length) {
if (!config.macros.forEachTiddler.actions[params[i]]) {
this.handleError(place, "Unknown action '"+params[i]+"'.");
return;
} else {
actionName = params[i];
i++;
}
}
// Get the action parameter
// (the parsing is done inside the individual action implementation.)
var actionParameter = params.slice(i);
// --- Processing ------------------------------------------
try {
this.performMacro({
place: place,
inTiddler: tiddler,
whereClause: whereClause,
sortClause: sortClause,
sortAscending: sortAscending,
actionName: actionName,
actionParameter: actionParameter,
scriptText: scriptText,
tiddlyWikiPath: tiddlyWikiPath});
} catch (e) {
this.handleError(place, e);
}
};
// Returns an object with properties "tiddlers" and "context".
// tiddlers holds the (sorted) tiddlers selected by the parameter,
// context the context of the execution of the macro.
//
// The action is not yet performed.
//
// @parameter see performMacro
//
config.macros.forEachTiddler.getTiddlersAndContext = function(parameter) {
var context = config.macros.forEachTiddler.createContext(parameter.place, parameter.whereClause, parameter.sortClause, parameter.sortAscending, parameter.actionName, parameter.actionParameter, parameter.scriptText, parameter.tiddlyWikiPath, parameter.inTiddler);
var tiddlyWiki = parameter.tiddlyWikiPath ? this.loadTiddlyWiki(parameter.tiddlyWikiPath) : store;
context["tiddlyWiki"] = tiddlyWiki;
// Get the tiddlers, as defined by the whereClause
var tiddlers = this.findTiddlers(parameter.whereClause, context, tiddlyWiki);
context["tiddlers"] = tiddlers;
// Sort the tiddlers, when sorting is required.
if (parameter.sortClause) {
this.sortTiddlers(tiddlers, parameter.sortClause, parameter.sortAscending, context);
}
return {tiddlers: tiddlers, context: context};
};
// Returns the (sorted) tiddlers selected by the parameter.
//
// The action is not yet performed.
//
// @parameter see performMacro
//
config.macros.forEachTiddler.getTiddlers = function(parameter) {
return this.getTiddlersAndContext(parameter).tiddlers;
};
// Performs the macros with the given parameter.
//
// @param parameter holds the parameter of the macro as separate properties.
// The following properties are supported:
//
// place
// whereClause
// sortClause
// sortAscending
// actionName
// actionParameter
// scriptText
// tiddlyWikiPath
//
// All properties are optional.
// For most actions the place property must be defined.
//
config.macros.forEachTiddler.performMacro = function(parameter) {
var tiddlersAndContext = this.getTiddlersAndContext(parameter);
// Perform the action
var actionName = parameter.actionName ? parameter.actionName : "addToList";
var action = config.macros.forEachTiddler.actions[actionName];
if (!action) {
this.handleError(parameter.place, "Unknown action '"+actionName+"'.");
return;
}
var actionHandler = action.handler;
actionHandler(parameter.place, tiddlersAndContext.tiddlers, parameter.actionParameter, tiddlersAndContext.context);
};
// ---------------------------------------------------------------------------
// The actions
// ---------------------------------------------------------------------------
// Internal.
//
// --- The addToList Action -----------------------------------------------
//
config.macros.forEachTiddler.actions.addToList.handler = function(place, tiddlers, parameter, context) {
// Parse the parameter
var p = 0;
// Check for extra parameters
if (parameter.length > p) {
config.macros.forEachTiddler.createExtraParameterErrorElement(place, "addToList", parameter, p);
return;
}
// Perform the action.
var list = document.createElement("ul");
place.appendChild(list);
for (var i = 0; i < tiddlers.length; i++) {
var tiddler = tiddlers[i];
var listItem = document.createElement("li");
list.appendChild(listItem);
createTiddlyLink(listItem, tiddler.title, true);
}
};
abego.parseNamedParameter = function(name, parameter, i) {
var beginExpression = null;
if ((i < parameter.length) && parameter[i] == name) {
i++;
if (i >= parameter.length) {
throw "Missing text behind '%0'".format([name]);
}
return config.macros.forEachTiddler.paramEncode(parameter[i]);
}
return null;
}
// Internal.
//
// --- The write Action ---------------------------------------------------
//
config.macros.forEachTiddler.actions.write.handler = function(place, tiddlers, parameter, context) {
// Parse the parameter
var p = 0;
if (p >= parameter.length) {
this.handleError(place, "Missing expression behind 'write'.");
return;
}
var textExpression = config.macros.forEachTiddler.paramEncode(parameter[p]);
p++;
// Parse the "begin" option
var beginExpression = abego.parseNamedParameter("begin", parameter, p);
if (beginExpression !== null)
p += 2;
var endExpression = abego.parseNamedParameter("end", parameter, p);
if (endExpression !== null)
p += 2;
var noneExpression = abego.parseNamedParameter("none", parameter, p);
if (noneExpression !== null)
p += 2;
// Parse the "toFile" option
var filename = null;
var lineSeparator = undefined;
if ((p < parameter.length) && parameter[p] == "toFile") {
p++;
if (p >= parameter.length) {
this.handleError(place, "Filename expected behind 'toFile' of 'write' action.");
return;
}
filename = config.macros.forEachTiddler.getLocalPath(config.macros.forEachTiddler.paramEncode(parameter[p]));
p++;
if ((p < parameter.length) && parameter[p] == "withLineSeparator") {
p++;
if (p >= parameter.length) {
this.handleError(place, "Line separator text expected behind 'withLineSeparator' of 'write' action.");
return;
}
lineSeparator = config.macros.forEachTiddler.paramEncode(parameter[p]);
p++;
}
}
// Check for extra parameters
if (parameter.length > p) {
config.macros.forEachTiddler.createExtraParameterErrorElement(place, "write", parameter, p);
return;
}
// Perform the action.
var func = config.macros.forEachTiddler.getEvalTiddlerFunction(textExpression, context);
var count = tiddlers.length;
var text = "";
if (count > 0 && beginExpression)
text += config.macros.forEachTiddler.getEvalTiddlerFunction(beginExpression, context)(undefined, context, count, undefined);
for (var i = 0; i < count; i++) {
var tiddler = tiddlers[i];
text += func(tiddler, context, count, i);
}
if (count > 0 && endExpression)
text += config.macros.forEachTiddler.getEvalTiddlerFunction(endExpression, context)(undefined, context, count, undefined);
if (count == 0 && noneExpression)
text += config.macros.forEachTiddler.getEvalTiddlerFunction(noneExpression, context)(undefined, context, count, undefined);
if (filename) {
if (lineSeparator !== undefined) {
lineSeparator = lineSeparator.replace(/\\n/mg, "\n").replace(/\\r/mg, "\r");
text = text.replace(/\n/mg,lineSeparator);
}
saveFile(filename, convertUnicodeToUTF8(text));
} else {
var wrapper = createTiddlyElement(place, "span");
wikify(text, wrapper, null/* highlightRegExp */, context.inTiddler);
}
};
// ---------------------------------------------------------------------------
// Helpers
// ---------------------------------------------------------------------------
// Internal.
//
config.macros.forEachTiddler.createContext = function(placeParam, whereClauseParam, sortClauseParam, sortAscendingParam, actionNameParam, actionParameterParam, scriptText, tiddlyWikiPathParam, inTiddlerParam) {
return {
place : placeParam,
whereClause : whereClauseParam,
sortClause : sortClauseParam,
sortAscending : sortAscendingParam,
script : scriptText,
actionName : actionNameParam,
actionParameter : actionParameterParam,
tiddlyWikiPath : tiddlyWikiPathParam,
inTiddler : inTiddlerParam, // the tiddler containing the <<forEachTiddler ...>> macro call.
viewerTiddler : config.macros.forEachTiddler.getContainingTiddler(placeParam) // the tiddler showing the forEachTiddler result
};
};
// Internal.
//
// Returns a TiddlyWiki with the tiddlers loaded from the TiddlyWiki of
// the given path.
//
config.macros.forEachTiddler.loadTiddlyWiki = function(path, idPrefix) {
if (!idPrefix) {
idPrefix = "store";
}
var lenPrefix = idPrefix.length;
// Read the content of the given file
var content = loadFile(this.getLocalPath(path));
if(content === null) {
throw "TiddlyWiki '"+path+"' not found.";
}
var tiddlyWiki = new TiddlyWiki();
// Starting with TW 2.2 there is a helper function to import the tiddlers
if (tiddlyWiki.importTiddlyWiki) {
if (!tiddlyWiki.importTiddlyWiki(content))
throw "File '"+path+"' is not a TiddlyWiki.";
tiddlyWiki.dirty = false;
return tiddlyWiki;
}
// The legacy code, for TW < 2.2
// Locate the storeArea div's
var posOpeningDiv = content.indexOf(startSaveArea);
var posClosingDiv = content.lastIndexOf(endSaveArea);
if((posOpeningDiv == -1) || (posClosingDiv == -1)) {
throw "File '"+path+"' is not a TiddlyWiki.";
}
var storageText = content.substr(posOpeningDiv + startSaveArea.length, posClosingDiv);
// Create a "div" element that contains the storage text
var myStorageDiv = document.createElement("div");
myStorageDiv.innerHTML = storageText;
myStorageDiv.normalize();
// Create all tiddlers in a new TiddlyWiki
// (following code is modified copy of TiddlyWiki.prototype.loadFromDiv)
var store = myStorageDiv.childNodes;
for(var t = 0; t < store.length; t++) {
var e = store[t];
var title = null;
if(e.getAttribute)
title = e.getAttribute("tiddler");
if(!title && e.id && e.id.substr(0,lenPrefix) == idPrefix)
title = e.id.substr(lenPrefix);
if(title && title !== "") {
var tiddler = tiddlyWiki.createTiddler(title);
tiddler.loadFromDiv(e,title);
}
}
tiddlyWiki.dirty = false;
return tiddlyWiki;
};
// Internal.
//
// Returns a function that has a function body returning the given javaScriptExpression.
// The function has the parameters:
//
// (tiddler, context, count, index)
//
config.macros.forEachTiddler.getEvalTiddlerFunction = function (javaScriptExpression, context) {
var script = context["script"];
var functionText = "var theFunction = function(tiddler, context, count, index) { return "+javaScriptExpression+"}";
var fullText = (script ? script+";" : "")+functionText+";theFunction;";
return eval(fullText);
};
// Internal.
//
config.macros.forEachTiddler.findTiddlers = function(whereClause, context, tiddlyWiki) {
var result = [];
var func = config.macros.forEachTiddler.getEvalTiddlerFunction(whereClause, context);
tiddlyWiki.forEachTiddler(function(title,tiddler) {
if (func(tiddler, context, undefined, undefined)) {
result.push(tiddler);
}
});
return result;
};
// Internal.
//
config.macros.forEachTiddler.createExtraParameterErrorElement = function(place, actionName, parameter, firstUnusedIndex) {
var message = "Extra parameter behind '"+actionName+"':";
for (var i = firstUnusedIndex; i < parameter.length; i++) {
message += " "+parameter[i];
}
this.handleError(place, message);
};
// Internal.
//
config.macros.forEachTiddler.sortAscending = function(tiddlerA, tiddlerB) {
var result =
(tiddlerA.forEachTiddlerSortValue == tiddlerB.forEachTiddlerSortValue)
? 0
: (tiddlerA.forEachTiddlerSortValue < tiddlerB.forEachTiddlerSortValue)
? -1
: +1;
return result;
};
// Internal.
//
config.macros.forEachTiddler.sortDescending = function(tiddlerA, tiddlerB) {
var result =
(tiddlerA.forEachTiddlerSortValue == tiddlerB.forEachTiddlerSortValue)
? 0
: (tiddlerA.forEachTiddlerSortValue < tiddlerB.forEachTiddlerSortValue)
? +1
: -1;
return result;
};
// Internal.
//
config.macros.forEachTiddler.sortTiddlers = function(tiddlers, sortClause, ascending, context) {
// To avoid evaluating the sortClause whenever two items are compared
// we pre-calculate the sortValue for every item in the array and store it in a
// temporary property ("forEachTiddlerSortValue") of the tiddlers.
var func = config.macros.forEachTiddler.getEvalTiddlerFunction(sortClause, context);
var count = tiddlers.length;
var i;
for (i = 0; i < count; i++) {
var tiddler = tiddlers[i];
tiddler.forEachTiddlerSortValue = func(tiddler,context, undefined, undefined);
}
// Do the sorting
tiddlers.sort(ascending ? this.sortAscending : this.sortDescending);
// Delete the temporary property that holds the sortValue.
for (i = 0; i < tiddlers.length; i++) {
delete tiddlers[i].forEachTiddlerSortValue;
}
};
// Internal.
//
config.macros.forEachTiddler.trace = function(message) {
displayMessage(message);
};
// Internal.
//
config.macros.forEachTiddler.traceMacroCall = function(place,macroName,params) {
var message ="<<"+macroName;
for (var i = 0; i < params.length; i++) {
message += " "+params[i];
}
message += ">>";
displayMessage(message);
};
// Internal.
//
// Creates an element that holds an error message
//
config.macros.forEachTiddler.createErrorElement = function(place, exception) {
var message = (exception.description) ? exception.description : exception.toString();
return createTiddlyElement(place,"span",null,"forEachTiddlerError","<<forEachTiddler ...>>: "+message);
};
// Internal.
//
// @param place [may be null]
//
config.macros.forEachTiddler.handleError = function(place, exception) {
if (place) {
this.createErrorElement(place, exception);
} else {
throw exception;
}
};
// Internal.
//
// Encodes the given string.
//
// Replaces
// "$))" to ">>"
// "$)" to ">"
//
config.macros.forEachTiddler.paramEncode = function(s) {
var reGTGT = new RegExp("\\$\\)\\)","mg");
var reGT = new RegExp("\\$\\)","mg");
return s.replace(reGTGT, ">>").replace(reGT, ">");
};
// Internal.
//
// Returns the given original path (that is a file path, starting with "file:")
// as a path to a local file, in the systems native file format.
//
// Location information in the originalPath (i.e. the "#" and stuff following)
// is stripped.
//
config.macros.forEachTiddler.getLocalPath = function(originalPath) {
// Remove any location part of the URL
var hashPos = originalPath.indexOf("#");
if(hashPos != -1)
originalPath = originalPath.substr(0,hashPos);
// Convert to a native file format assuming
// "file:///x:/path/path/path..." - pc local file --> "x:\path\path\path..."
// "file://///server/share/path/path/path..." - FireFox pc network file --> "\\server\share\path\path\path..."
// "file:///path/path/path..." - mac/unix local file --> "/path/path/path..."
// "file://server/share/path/path/path..." - pc network file --> "\\server\share\path\path\path..."
var localPath;
if(originalPath.charAt(9) == ":") // pc local file
localPath = unescape(originalPath.substr(8)).replace(new RegExp("/","g"),"\\");
else if(originalPath.indexOf("file://///") === 0) // FireFox pc network file
localPath = "\\\\" + unescape(originalPath.substr(10)).replace(new RegExp("/","g"),"\\");
else if(originalPath.indexOf("file:///") === 0) // mac/unix local file
localPath = unescape(originalPath.substr(7));
else if(originalPath.indexOf("file:/") === 0) // mac/unix local file
localPath = unescape(originalPath.substr(5));
else // pc network file
localPath = "\\\\" + unescape(originalPath.substr(7)).replace(new RegExp("/","g"),"\\");
return localPath;
};
// ---------------------------------------------------------------------------
// Stylesheet Extensions (may be overridden by local StyleSheet)
// ---------------------------------------------------------------------------
//
setStylesheet(
".forEachTiddlerError{color: #ffffff;background-color: #880000;}",
"forEachTiddler");
//============================================================================
// End of forEachTiddler Macro
//============================================================================
//============================================================================
// String.startsWith Function
//============================================================================
//
// Returns true if the string starts with the given prefix, false otherwise.
//
version.extensions["String.startsWith"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
String.prototype.startsWith = function(prefix) {
var n = prefix.length;
return (this.length >= n) && (this.slice(0, n) == prefix);
};
//============================================================================
// String.endsWith Function
//============================================================================
//
// Returns true if the string ends with the given suffix, false otherwise.
//
version.extensions["String.endsWith"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
String.prototype.endsWith = function(suffix) {
var n = suffix.length;
return (this.length >= n) && (this.right(n) == suffix);
};
//============================================================================
// String.contains Function
//============================================================================
//
// Returns true when the string contains the given substring, false otherwise.
//
version.extensions["String.contains"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
String.prototype.contains = function(substring) {
return this.indexOf(substring) >= 0;
};
//============================================================================
// Array.indexOf Function
//============================================================================
//
// Returns the index of the first occurance of the given item in the array or
// -1 when no such item exists.
//
// @param item [may be null]
//
version.extensions["Array.indexOf"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
Array.prototype.indexOf = function(item) {
for (var i = 0; i < this.length; i++) {
if (this[i] == item) {
return i;
}
}
return -1;
};
//============================================================================
// Array.contains Function
//============================================================================
//
// Returns true when the array contains the given item, otherwise false.
//
// @param item [may be null]
//
version.extensions["Array.contains"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
Array.prototype.contains = function(item) {
return (this.indexOf(item) >= 0);
};
//============================================================================
// Array.containsAny Function
//============================================================================
//
// Returns true when the array contains at least one of the elements
// of the item. Otherwise (or when items contains no elements) false is returned.
//
version.extensions["Array.containsAny"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
Array.prototype.containsAny = function(items) {
for(var i = 0; i < items.length; i++) {
if (this.contains(items[i])) {
return true;
}
}
return false;
};
//============================================================================
// Array.containsAll Function
//============================================================================
//
// Returns true when the array contains all the items, otherwise false.
//
// When items is null false is returned (even if the array contains a null).
//
// @param items [may be null]
//
version.extensions["Array.containsAll"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
Array.prototype.containsAll = function(items) {
for(var i = 0; i < items.length; i++) {
if (!this.contains(items[i])) {
return false;
}
}
return true;
};
} // of "install only once"
// Used Globals (for JSLint) ==============
// ... DOM
/*global document */
// ... TiddlyWiki Core
/*global convertUnicodeToUTF8, createTiddlyElement, createTiddlyLink,
displayMessage, endSaveArea, hasClass, loadFile, saveFile,
startSaveArea, store, wikify */
//}}}
/***
!Licence and Copyright
Copyright (c) abego Software ~GmbH, 2005 ([[www.abego-software.de|http://www.abego-software.de]])
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
Neither the name of abego Software nor the names of its contributors may be
used to endorse or promote products derived from this software without specific
prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
DAMAGE.
***/
/***
|''Name:''|FrenchTranslationPlugin|
|''Description:''|Translation of TiddlyWiki into French|
|''Author:''|ocalTW (ocalTW (at) gmail (dot) com)|
|''Source:''|www.tiddlywiki.fr |
|''CodeRepository:''|http://svn.tiddlywiki.org/Trunk/association/locales/core/fr/locale.fr.js |
|''Version:''|2.3.0 fr|
|''Date:''|Jan 24, 2008|
|''Comments:''|Please make comments at http://groups.google.co.uk/group/TiddlyWikiDev |
|''License:''|[[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]] |
***/
//{{{
//--
//-- Translateable strings
//--
// Strings in "double quotes" should be translated; strings in 'single quotes' should be left alone
config.locale = "fr"; // W3C language tag
if (config.options.txtUserName == 'YourName') // do not translate this line, but do translate the next line
merge(config.options,{txtUserName: "VotreNom"});
merge(config.tasks,{
save: {text: "sauvegarder", tooltip: "Sauvegarde vos modifications dans ce bloc-notes TiddlyWiki", action: saveChanges},
sync: {text: "synchroniser", tooltip: "Synchronise les modifications avec d'autres fichiers ou d'autres serveurs TiddlyWiki", content: '<<sync>>'},
importTask: {text: "importer", tooltip: "Importe des éléments et des extensions depuis d'autres fichiers ou d'autres serveurs TiddlyWiki", content: '<<importTiddlers>>'},
tweak: {text: "réglages", tooltip: "Adapte l'apparence et le comportement de ce bloc-notes TiddlyWiki", content: '<<options>>'},
plugins: {text: "extensions", tooltip: "Gère les extensions déjà installées", content: '<<plugins>>'}
});
// Options that can be set in the options panel and/or cookies
merge(config.optionsDesc,{
txtUserName: "Nom d'utilisateur qui signe les modifications",
chkRegExpSearch: "Activer les expressions régulières pour les recherches",
chkCaseSensitiveSearch: "La recherche est sensible à la casse des mots",
chkAnimate: "Activer les animations",
chkSaveBackups: "Générer un fichier backup lors de l'enregistrement des modifications",
chkAutoSave: "Enregistrer automatiquement les modifications",
chkGenerateAnRssFeed: "Générer un flux RSS lors de l'enregistrement des modifications",
chkSaveEmptyTemplate: "Générer un fichier de démarrage initial 'empty.html' lors de l'enregistrement des modifications",
chkOpenInNewWindow: "Ouvrir un lien externe dans une nouvelle fenêtre",
chkToggleLinks: "Fermer les éléments lorsque l'on clique sur des liens qu'ils contiennent",
chkHttpReadOnly: "Masquer les caractéristiques d'édition lorsqu'il est accédé par HTTP",
chkForceMinorUpdate: "Ne modifier ni le nom de l'utilisateur ni la date lors de l'édition des éléments",
chkConfirmDelete: "Demander une confirmation lors d'une suppression d'un élément",
chkInsertTabs: "Utiliser la touche 'tab' pour insérer une tabulation au lieu de changer de champs",
txtBackupFolder: "Nom du dossier dans lequel seront conservés les backups",
txtMaxEditRows: "Nombre maximum de lignes dans les zones d'édition",
txtFileSystemCharSet: "Jeux de caractères à utiliser lors de l'enregistrement des modifications (uniquement pour Firefox/Mozilla)"});
merge(config.messages,{
customConfigError: "Problèmes rencontrés lors du chargement d'extensions. Consulter le 'PluginManager' (menu 'extensions') pour les détails",
pluginError: "Erreur : %0",
pluginDisabled: "L'extension a été désactivée par positionnement de l'index 'systemConfigDisable'",
pluginForced: "L'exécution a été forcée à cause de l'index 'systemConfigForce'",
pluginVersionError: "L'extension a été désactivée car elle nécessite une version plus récente de TiddlyWiki",
nothingSelected: "Aucune sélection faite. Il vous faut d'abord sélectionner au moins un item",
savedSnapshotError: "Ce bloc-notes TiddlyWiki ne semble pas conforme. Reportez-vous à http://www.tiddlywiki.com/#DownloadSoftware ",
subtitleUnknown: "(inconnu)",
undefinedTiddlerToolTip: "L'élément '%0' n'est pas encore créé.",
shadowedTiddlerToolTip: "L'élément '%0' n'est pas encore créé, mais a un contenu par défaut.",
tiddlerLinkTooltip: "%0 - %1, %2",
externalLinkTooltip: "Lien externe vers %0",
noTags: "Il n'y a pas d'éléments indexés.",
notFileUrlError: "Vous devez sauvegarder ce bloc-notes TiddlyWiki dans un fichier avant de pouvoir enregistrer vos modifications",
cantSaveError: "Sauvegarde impossible : \n- soit votre navigateur ne permet pas de sauvegarder les sauvegardes (FireFox, Internet Explorer, Safari et Opera fonctionnent s'ils sont configurés corectement),\n- soit le chemin d'accès à votre fichier contient des caractères invalides\n- soit le fichier de ce bloc-notes TiddlyWiki a été déplacé ou renommé",
invalidFileError: "Le fichier '%0' choisi ne semble pas être un TiddlyWiki valide",
backupSaved: "Sauvegarde effectuée",
backupFailed: "Echec de l'enregistrement du fichier de backup",
rssSaved: "Flux RSS sauvegardé",
rssFailed: "Echec de l'enregistrement du fichier de flux RSS",
emptySaved: "Fichier de démarrage initial 'empty.html' enregistré",
emptyFailed: "Echec de l'enregistrement du fichier de démarrage initial 'empty.html'",
mainSaved: "Fichier principal du bloc-notes TiddlyWiki enregistré",
mainFailed: "Echec de l'enregistrement du fichier principal TiddlyWiki. Vos modifications n'ont pas été enregistrées",
macroError: "Erreur dans la macro <<\%0>>",
macroErrorDetails: "Erreur d'exécution de la macro <<\%0>>:\n%1",
missingMacro: "Macro non trouvée",
overwriteWarning: "Il y a déjà un élément nommé '%0'. Confirmez pour le remplacer",
unsavedChangesWarning: "ATTENTION! Les dernières modifications de ce bloc-notes TiddlyWiki n'ont pas été enregistrées.\n\nOK pour les enregistrer\nANNULER pour les abandonner",
confirmExit: "--------------------------------\n\nCertaines modifications n'ont pas été enregistrées dans ce bloc-notes TiddlyWiki.\n\n Si vous quittez maintenant vous les perdrez définitievement.\n\n--------------------------------",
saveInstructions: "Sauvegarder",
unsupportedTWFormat: "Format de TiddlyWiki non supporté '%0'",
tiddlerSaveError: "Erreur lors de l'enregistrement de l'élément '%0'",
tiddlerLoadError: "Erreur lors du chargement de l'élément '%0'",
wrongSaveFormat: "Impossible d'enregistrer avec le format '%0'. Le format standard est utilisé pour sauvegarder.",
invalidFieldName: "Nom de champ invalide %0",
fieldCannotBeChanged: "Le champ '%0' ne peut être changé",
loadingMissingTiddler: "Tentative de récupération de l'élément '%0' à partir du serveur '%1' server à :\n\n'%2' dans l'espace de travail '%3'"});
merge(config.messages.messageClose,{
text: "fermer",
tooltip: "fermer cette zone de messages"});
config.messages.backstage = {
open: {text: "barre de services", tooltip: "Ouvre la barre de services pour effectuer des tâches de rédaction et d'edition"},
close: {text: "fermer", tooltip: "Fermer la barre de services"},
prompt: "services : ",
decal: {
edit: {text: "éditer", tooltip: "Editer l'élément '%0'"}
}
};
config.messages.listView = {
tiddlerTooltip: "Cliquer pour une vue complète de cet élément",
previewUnavailable: "(aperçu non disponible)"
};
config.messages.dates.months = ["janvier", "février", "mars", "avril", "mai", "juin", "juillet", "août", "septembre", "octobre", "novembre","décembre"];
config.messages.dates.days = ["dimanche", "lundi","mardi", "mercredi", "jeudi", "vendredi", "samedi"];
config.messages.dates.shortDays = ["dim.", "lun.", "mar.", "mer.", "jeu.", "ven.", "sam."];
// suffixes pour les dates, par exemple "1er",
config.messages.dates.daySuffixes = ["er","","","","","","","","","",
"","","","","","","","","","",
"","","","","","","","","","",
""];
config.messages.dates.am = "matin";
config.messages.dates.pm = "après-midi";
merge(config.messages.tiddlerPopup,{
});
merge(config.views.wikified.tag,{
labelNoTags: "pas d'index",
labelTags: "Index : ",
openTag: "Ouvrir l'index '%0'",
tooltip: "Afficher les éléments indexés avec '%0'",
openAllText: "Tout ouvrir",
openAllTooltip: "Ouvrir tous les éléments avec cet index",
popupNone: "Pas d'autres éléments indexés avec '%0'"});
merge(config.views.wikified,{
defaultText: "L'élément '%0' n'a pas encore été créé. Double-cliquer pour le créer.",
defaultModifier: "(manquant)",
shadowModifier: "(élément masqué installé par défaut)",
dateFormat: "DD MMM YYYY", // Utilisé pour changer le format de la date (ici : "YYYY MMM DD"), ne pas changer les lettres D (jour), M (mois) ou Y (année)
createdPrompt: "créé le"});
merge(config.views.editor,{
tagPrompt: "Mettre un espace entre chaque index, si nécessaire [[entre doubles crochets]], ou associer un index existant",
defaultText: "Entrer le texte de '%0'"});
merge(config.views.editor.tagChooser,{
text: "index",
tooltip: "Sélectionner les index existants à associer à cet élément",
popupNone: "Aucun d'index déjà été défini",
tagTooltip: "Associer l'index '%0'"});
merge(config.messages,{
sizeTemplates:
[
{unit: 1024*1024*1024, template: "%0\u00a0GB"},
{unit: 1024*1024, template: "%0\u00a0MB"},
{unit: 1024, template: "%0\u00a0KB"},
{unit: 1, template: "%0\u00a0B"}
]});
merge(config.macros.search,{
label: "chercher",
prompt: "Rechercher dans ce bloc-notes TiddlyWiki",
accessKey: "F",
successMsg: "%0 éléments répondent au critère %1",
failureMsg: "Aucun élément ne répond au critère %0"});
merge(config.macros.tagging,{
label: "éléments indexés : ",
labelNotTag: "pas d'index",
tooltip: "Afficher les éléments indexés avec '%0'"});
merge(config.macros.timeline,{
dateFormat: "DD MMM YYYY"}); // Utilisé pour changer le format de la date (ici : "YYYY MMM DD"), ne pas changer les lettres D (jour), M (mois) ou Y (année)
merge(config.macros.allTags,{
tooltip: "Afficher les éléments avec comme index '%0'",
noTags: "Aucun élément n'a d'index"});
config.macros.list.all.prompt = "Tous les éléments classés par ordre alphabétique";
config.macros.list.missing.prompt = "Eléments référencés par un lien mais qui ne sont pas non créés";
config.macros.list.orphans.prompt = "Eléments orphelins qui ne pas référencés par un lien dans d'autres éléments";
config.macros.list.shadowed.prompt = "Eléments masqués avec toujours leur contenu initial du modèle de référence TiddlyWiki";
config.macros.list.touched.prompt = "Eléments ayant été modifiés localement";
merge(config.macros.closeAll,{
label: "tout fermer",
prompt: "Fermer tous les éléments affichés (sauf ceux en cours d'édition)"});
merge(config.macros.permaview,{
label: "permalien",
prompt: "Lien vers l'URL qui référence la page avec tous les éléments actuellement affichés"});
merge(config.macros.saveChanges,{
label: "sauvegarde des modifications",
prompt: "Sauvegarde tous les éléments du bloc-notes TiddlyWiki",
accessKey: "S"});
merge(config.macros.newTiddler,{
label: "nouvel élément",
prompt: "Crée un nouvel élément",
title: "Nouvel Elément",
accessKey: "N"});
merge(config.macros.newJournal,{
label: "nouveau journal",
prompt: "Crée un nouvel élément avec la date courante",
accessKey: "J"});
merge(config.macros.options,{
wizardTitle: "Réglage des options avancées",
step1Title: "Ces options sont enregistrées dans des cookies de votre navigateur",
step1Html: "<input type='hidden' name='markList'></input><br><input type='checkbox' checked='false' name='chkUnknown'>Afficher les options inconnues</input>",
unknownDescription: "//(inconnu)//",
listViewTemplate: {
columns: [
{name: 'Option', field: 'option', title: "Option", type: 'String'},
{name: 'Description', field: 'description', title: "Description", type: 'WikiText'},
{name: 'Name', field: 'name', title: "Nom", type: 'String'}
],
rowClasses: [
{className: 'lowlight', field: 'lowlight'}
]}
});
merge(config.macros.plugins,{
wizardTitle: "Gestionnaire des extensions",
step1Title: "Extensions actuellement chargées",
step1Html: "<input type='hidden' name='markList'></input>", // DO NOT TRANSLATE
skippedText: "(Cette extension n'a pas été éxecutée car elle a été ajoutée après le démarrage de ce bloc-notes TiddlyWiki)",
noPluginText: "Aucune extension n'est installée",
confirmDeleteText: "Etes vous sûr(e) de vouloir supprimer ces extensions :\n\n%0",
removeLabel: "Supprimer l'index 'systemConfig'",
removePrompt: "Supprime l'index 'systemConfig'",
deleteLabel: "supprimer",
deletePrompt: "Suppression définititve de ces éléments",
listViewTemplate: {
columns: [
{name: 'Selected', field: 'Selected', rowName: 'title', type: 'Selector'},
{name: 'Tiddler', field: 'tiddler', title: "Elément", type: 'Tiddler'},
{name: 'Size', field: 'size', tiddlerLink: 'size', title: "Taille", type: 'Size'},
{name: 'Forced', field: 'forced', title: "Exécution forcée", tag: 'systemConfigForce', type: 'TagCheckbox'},
{name: 'Disabled', field: 'disabled', title: "Désactivé", tag: 'systemConfigDisable', type: 'TagCheckbox'},
{name: 'Executed', field: 'executed', title: "Chargé", type: 'Boolean', trueText: "Yes", falseText: "No"},
{name: 'Startup Time', field: 'startupTime', title: "Durée de lancement", type: 'String'},
{name: 'Error', field: 'error', title: "Etat", type: 'Boolean', trueText: "Error", falseText: "OK"},
{name: 'Log', field: 'log', title: "Log", type: 'StringList'}
],
rowClasses: [
{className: 'error', field: 'error'},
{className: 'warning', field: 'warning'}
]}
});
merge(config.macros.toolbar,{
moreLabel: "(suite)",
morePrompt: "Affiche des commandes supplémentaires"
});
merge(config.macros.refreshDisplay,{
label: "réafficher",
prompt: "Réaffiche le contenu complet du bloc-notes TiddlyWiki"
});
merge(config.macros.importTiddlers,{
readOnlyWarning: "Il n'est pas possible d'importer dans un bloc-notes TiddlyWiki qui n'est qu'en lecture seule. Essayez de l'ouvrir en local à partir d'une URL 'file://'",
wizardTitle: "Importer des éléments depuis un autre fichier ou un serveur",
step1Title: "Etape 1 : localiser le serveur ou le ficher du bloc-notes TiddlyWiki à importer",
step1Html: "Spécifier le type du serveur : <select name='selTypes'><option value=''>Choisir ...</option></select><br>Indiquer l'URL ou le chemin : <input type='text' size=50 name='txtPath'><br>... ou rechercher un fichier en local : <input type='file' size=50 name='txtBrowse'><br><hr>... ou selectionner une source pré-définie : <select name='selFeeds'><option value=''>Choisir ...</option></select>",
openLabel: "ouvrir",
openPrompt: "Ouvre la connexion vers ce fichier ou ce serveur",
openError: "Il y a des erreurs lors de l'accès au fichier contenant le bloc-notes TiddlyWiki",
statusOpenHost: "Hôte en cours d'ouverture",
statusGetWorkspaceList: "Obtenir la liste des espaces de travail disponibles",
step2Title: "Etape 2 : choisir l'espace de travail",
step2Html: "Entrer le nom d'un espace de travail : <input type='text' size=50 name='txtWorkspace'><br>... ou selectionner un espace de travail : <select name='selWorkspace'><option value=''>Choisir ...</option></select>",
cancelLabel: "annuler",
cancelPrompt: "Annule cette importation",
statusOpenWorkspace: "Ouverture de l'espace de travail",
statusGetTiddlerList: "Obtenir la liste des éléments disponibles",
step3Title: "Etape 3: Choisir les éléments à importer",
step3Html: "<input type='hidden' name='markList'></input><br><input type='checkbox' checked='true' name='chkSync'>Conserver ces éléments liés à ce serveur pour pouvoir synchroniser avec les changements ultérieurs</input><br><input type='checkbox' name='chkSave'>Enregistrer les détails de ce serveur dans un élément 'systemServer' nommé :</input> <input type='text' size=25 name='txtSaveTiddler'>",
importLabel: "importer",
importPrompt: "Importe ces éléments",
confirmOverwriteText: "Etes-vous sûr de vouloir écraser ces éléments :\n\n%0",
step4Title: "Etape 4 : Importe %0 élément(s)",
step4Html: "<input type='hidden' name='markReport'></input>", // DO NOT TRANSLATE
doneLabel: "fait",
donePrompt: "Ferme cet assistant",
statusDoingImport: "Importe ces éléments",
statusDoneImport: "Tous les éléments ont été importés",
systemServerNamePattern: "%2 sur %1",
systemServerNamePatternNoWorkspace: "%1",
confirmOverwriteSaveTiddler: "Cet élément '%0' existe déjà. Cliquer sur 'OK' pour l'écraser avec les caractéristiques de ce serveur ou 'Annule' pour les conserver en l'état",
serverSaveTemplate: "|''Type :''|%0|\n|''URL :''|%1|\n|''Espace de travail :''|%2|\n\nCet élément avait été automatiquement créé pour enregistrer les détails de ce serveur",
serverSaveModifier: "(Système)",
listViewTemplate: {
columns: [
{name: 'Selected', field: 'Selected', rowName: 'title', type: 'Selector'},
{name: 'Tiddler', field: 'tiddler', title: "Elément", type: 'Tiddler'},
{name: 'Size', field: 'size', tiddlerLink: 'size', title: "Taille", type: 'Size'},
{name: 'Tags', field: 'tags', title: "Index", type: 'Tags'}
],
rowClasses: [
]}
});
merge(config.macros.sync,{
listViewTemplate: {
columns: [
{name: 'Selected', field: 'selected', rowName: 'title', type: 'Selector'},
{name: 'Tiddler', field: 'tiddler', title: "Elément", type: 'Tiddler'},
{name: 'Server Type', field: 'serverType', title: "Type de serveur", type: 'String'},
{name: 'Server Host', field: 'serverHost', title: "Hôte serveur", type: 'String'},
{name: 'Server Workspace', field: 'serverWorkspace', title: "Espace de travail du serveur", type: 'String'},
{name: 'Status', field: 'status', title: "Etat de la synchronisation", type: 'String'},
{name: 'Server URL', field: 'serverUrl', title: "URL du serveur", text: "View", type: 'Link'}
],
rowClasses: [
],
buttons: [
{caption: "Synchronise ces éléments", name: 'sync'}
]},
wizardTitle: "Synchronisation avec des serveurs externes et des fichiers",
step1Title: "Choisir les éléments à synchroniser",
step1Html: "<input type='hidden' name='markList'></input>", // DO NOT TRANSLATE
syncLabel: "synchroniser",
syncPrompt: "Synchronise ces éléments",
hasChanged: "Modifié pendant la déconnection",
hasNotChanged: "Non modifié pendant la déconnexion",
syncStatusList: {
none: {text: "...", color: "transparent"},
changedServer: {text: "Modifié sur le serveur", color: '#80ff80'},
changedLocally: {text: "Modifié pendant la déconnexion", color: '#80ff80'},
changedBoth: {text: "Changé pendant la déconnexion et sur le serveur", color: '#ff8080'},
notFound: {text: "Non trouvé sur le serveur", color: '#ffff80'},
putToServer: {text: "Modifications enregistrées sur le serveur", color: '#ff80ff'},
gotFromServer: {text: "Récupéré les modifications depuis le serveur", color: '#80ffff'}
}
});
merge(config.commands.closeTiddler,{
text: "fermer",
tooltip: "Ferme cet élément"});
merge(config.commands.closeOthers,{
text: "isoler",
tooltip: "Ferme tous les autres éléments"});
merge(config.commands.editTiddler,{
text: "éditer",
tooltip: "Editer cet élément",
readOnlyText: "voir",
readOnlyTooltip: "Affiche la source de cet élément"});
merge(config.commands.saveTiddler,{
text: "valider",
tooltip: "Valide les modifications effectuées sur cet élément"});
merge(config.commands.cancelTiddler,{
text: "annuler",
tooltip: "Abandon des modifications effectuées sur cet élément",
warning: "Confirmez-vous l'abandon de vos modifications de l'élément '%0'?",
readOnlyText: "retour",
readOnlyTooltip: "Revenir à l'affichage normal de cet élément"});
merge(config.commands.deleteTiddler,{
text: "supprimer",
tooltip: "Supprime cet élément",
warning: "Confirmez-vous la suppression de '%0'?"});
merge(config.commands.permalink,{
text: "permalien",
tooltip: "Permalien pour cet élément"});
merge(config.commands.references,{
text: "références",
tooltip: "Affiche les éléments qui font référence à l'élément courant",
popupNone: "Pas de référent(s)"});
merge(config.commands.jump,{
text: "aller vers",
tooltip: "Permet d'atteindre l'un des éléments déjà ouvert dans le bloc-notes TiddlyWiki courant"});
merge(config.commands.syncing,{
text: "synchronisation",
tooltip: "Contrôle la synchronisation de cet élément avec un serveur ou un fichier externe",
currentlySyncing: "<div>Actuellement en cours de synchronisation avec <span class='popupHighlight'>'%0'</span> vers :</"+"div><div>host: <span class='popupHighlight'>%1</span></"+"div><div>workspace: <span class='popupHighlight'>%2</span></"+"div>", // Note escaping of closing <div> tag
notCurrentlySyncing: "Pas de synchronisation en cours",
captionUnSync: "Arrête la synchronisation de cet élément",
chooseServer: "Synchronise cet élément avec un autre serveur :",
currServerMarker: "\u25cf ",
notCurrServerMarker: " "});
merge(config.commands.fields,{
text: "champs",
tooltip: "Affiche les champs supplémentaires de cet élément",
emptyText: "Il n'y a pas de champs supplémentaires pour cet élément",
listViewTemplate: {
columns: [
{name: 'Field', field: 'field', title: "Champ", type: 'String'},
{name: 'Value', field: 'value', title: "Valeur", type: 'String'}
],
rowClasses: [
],
buttons: [
]}});
merge(config.shadowTiddlers,{
DefaultTiddlers: "GettingStarted",
MainMenu: "GettingStarted",
TranslatedGettingStarted: "Pour utiliser ce //bloc-notes// TiddlyWiki, commencez par modifier les //éléments// suivants (''//tiddlers//'' dans le jargon TiddlyWiki) :\n* __SiteTitle__ et __SiteSubtitle__ : Le titre et le sous-titre de ce //bloc-notes// TiddlyWiki. Après modification, ils apparaîtront aussi dans la barre de titre du navigateur)\n* __MainMenu__: Le menu principal (généralement à gauche)\n* __DefaultTiddlers__ : La liste les noms des //éléments// que vous voulez voir s'afficher à l'ouverture de ce //bloc-notes// TiddlyWiki. \n* Entrez également le ''nom d'utilisateur'' avec lequel seront signés vos ajouts ou vos modifications dans les //éléments// :\n** <<option txtUserName>>",
SiteTitle: "Mon TiddlyWiki",
SiteSubtitle: "organiseur personnel web interactif et autoporteur, voir http://www.tiddlywiki.com pour le site TiddlyWiki original en anglais",
SiteUrl: "http://www.tiddlywiki.com/",
OptionsPanel: "Les options de configuration de ce bloc-notes TiddlyWiki sont sauvegardées dans des cookies de votre navigateur.\n\nNom d'utilisateur avec lequel seront signés vos ajouts ou vos modifications dans les éléments (par exemple Jeremy_Ruston).\n\n<<option txtUserName>>\n<<option chkSaveBackups>> Backup de chaque version\n<<option chkAutoSave>> Backup à chaque modification\n<<option chkRegExpSearch>> Expression régulières dans les recherches\n<<option chkCaseSensitiveSearch>> Respecter la casse dans les recherches\n<<option chkAnimate>> Animations à l'ouverture des éléments\n",
SideBarOptions: '<<search>><<closeAll>><<permaview>><<newTiddler>><<newJournal "DD MMM YYYY" "journal">><<saveChanges>><<slider chkSliderOptionsPanel OptionsPanel "options »" "Modifie les options supplémentaires de ce bloc-notes ~TiddlyWiki">>',
SideBarTabs: '<<tabs txtMainTab "Chrono" "Affichage chronologique" TabTimeline "Alpha" "Liste alphabétique des éléments" TabAll "Index" "Liste de tous les index" TabTags "Autres" "Autres listes" TabMore>>',
TabMore: '<<tabs txtMoreTab "Manquants" "Eléments manquants" TabMoreMissing "Orphelins" "Eléments orphelins" TabMoreOrphans "Masqués" "Eléments masqués" TabMoreShadowed>>'});
merge(config.annotations,{
AdvancedOptions: "Cet élément masqué permet d'accéder à différentes options avancées",
ColorPalette: "Les valeurs de cet élément masqué détermine la palette des couleurs utilisées pour l'interface utilisateur de ~TiddlyWiki",
DefaultTiddlers: "Les éléments enumérés dans cet élément seront automatiquement affichés au démarrage de ~TiddlyWiki",
EditTemplate: "Le gabarit HTML dans cet élément masqué détermine la manière dont les éléments sont présentés lorsqu'ils sont édités",
GettingStarted: "Cet élément fournit quelques instructions basiques pour utiliser un bloc-notes ~TiddlyWiki",
ImportTiddlers: "Cet élément par défaut fournit l'accès à l'interface d'importation d'éléments",
MainMenu: "Le contenu de cet élément défini le menu de la colonne de gauche de cette feuille HTML",
MarkupPreHead: "Le contenu de cet élément est inséré au début de la section <head> du fichier HTML de ce bloc-notes ~TiddlyWiki",
MarkupPostHead: "Le contenu de cet élément est inséré à la fin de la section <head> du fichier HTML de ce bloc-notes ~TiddlyWiki",
MarkupPreBody: "Le contenu de cet élément est inséré au début de la section <body> du fichier HTML de ce bloc-notes ~TiddlyWiki",
MarkupPostBody: "Le contenu de cet élément est inséré à la fin de la section <body> du fichier HTML de ce bloc-notes ~TiddlyWiki, immédiatement avant le bloc 'script'",
OptionsPanel: "Le contenu de cet élément par défaut est utilisé par le panneau déroulant des options dans la colonne de droite de cette feuille HTML",
PageTemplate: "Le gabarit HTML de cet élément masqué détermine la mise en page générale de ce bloc-notes ~TiddlyWiki",
PluginManager: "Cet élément masqué permet d'accéder au gestionnaire d'extensions",
SideBarOptions: "Le contenu de cet élément par défaut est utilisé par le panneau des options dans la barre de droite de la feuille HTML",
SideBarTabs: "Le contenu de cet élément par défaut est utilisé par le panneau des onglets dans la barre de droite de la feuille HTML",
SiteSubtitle: "Cet élément est utilisé comme deuxième partie du titre de la page",
SiteTitle: "Cet élément est utilisé comme première partie du titre de la page",
SiteUrl: "Cet élément par défaut doit contenir l'URL complet du site utilisé pour la publication",
StyleSheetColours: "Cet élément par défaut contient des définitions CSS concernant les couleurs des composants de page",
StyleSheet: "Cet éléments par défaut contient des définitions CSS personnalisées",
StyleSheetLayout: "Cet éléments par défaut contient des définitions CSS concernant la mise en page de composants",
StyleSheetLocale: "Cet élément par défaut contient des définitions CSS concernant la traduction ",
StyleSheetPrint: "Cet élément par défaut contient des définitions CSS pour l'impression",
TabAll: "Le contenu de cet élément par défaut est utilisé par le panneau de l'onglet 'Alpha' dans la colonne de droite de cette feuille HTML",
TabMore: "Cet élément par défaut contient le contenu de l'onglet 'Suite' dans la barre de droite de l'écran",
TabMoreMissing: "Cet élément par défaut contient le contenu de l'onglet 'Manquants' dans la colonne de droite de cette feuille HTML",
TabMoreOrphans: "Cet élément par défaut contient le contenu de l'onglet 'Orphelins' dans la colonne de droite de cette feuille HTML",
TabMoreShadowed: "Cet élément par défaut contient le contenu de l'onglet 'Défaut' dans la colonne de droite de cette feuille HTML",
TabTags: "Cet élément par défaut contient le contenu de l'onglet 'Index' dans la colonne de droite de cette feuille HTML",
TabTimeline: "Cet élément par défaut contient le contenu de l'onglet 'Chrono' dans la colonne de droite de cette feuille HTML",
ViewTemplate: "Le gabarit HTML dans cet élément par défaut determine comment sont présentés les éléments"
});
//}}}
http://gw5.geneanet.org/index.php3?b=yml&lang=fr&m=NG&t=N&pz=xx&nz=lecoq&ocz=0&n=genibrousse&x=0&y=0
http://www.vivies.com/index.php?title=Genibrousse
<html>
<tr valign=top>
<td> </td>
<td> </td>
<td> <form name="bnf" action="http://gallica.bnf.fr/Search" target="_blank">
<span class="pt">écrire le nom d'un lieu :</span>
<p>
<input type=hidden name="ArianeWireIndex" value="index">
<input type=text name="q" size="35">
<input type=hidden name="f_free_access" value="fayes">
<input type=hidden name="f_oai_set" value="cartes">
<input type=submit class=sub value="" title="envoi !">
</form></td>
</tr>
</html>
To get started with this blank TiddlyWiki, you'll need to modify the following tiddlers:
* SiteTitle & SiteSubtitle: The title and subtitle of the site, as shown above (after saving, they will also appear in the browser title bar)
* MainMenu: The menu (usually on the left)
* TopMenu: Top menu
* DefaultTiddlers: Contains the names of the tiddlers that you want to appear when the TiddlyWiki is opened
You'll also need to enter your username for signing your edits: <<option txtUserName>>
----
<<tiddler TiddlyWikiGlass>>
<html><iframe width="850" height="700" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="http://maps.google.fr/maps/ms?ie=UTF8&hl=fr&msa=0&ll=46.69839,2.24293&spn=11.607405,19.753418&msid=108813463671882903896.00046f8a5c2ca38727902&output=embed"></iframe><br />
<small>Afficher<a href="http://maps.google.fr/maps/ms?ie=UTF8&hl=fr&msa=0&ll=46.69839,2.24293&spn=11.607405,19.753418&msid=108813463671882903896.00046f8a5c2ca38727902&source=embed" style="color:#0000FF;text-align:left">Genea-Lecoq</a> sur une carte plus grande</small></html>
[[d'HAUTPOUL|http://gw5.geneanet.org/index.php3?b=yml&lang=fr;pz=xx;nz=lecoq;ocz=0;m=N;v=d%27HAUTPOUL;t=A]]
<<<
^^//Jeanne d'HAUTPOUL est née à une date inconnue.
Elle est la fille légitime de Pierre d'HAUTPOUL, conseiller au parlement de Toulouse et de [[Jeanne de PUYBUSQUE.|PUYBUSQUE (de) famille]]
Elle s'unit avec Jean-Sébastien de GENIBROUSSE (~ 1560-), le fils légitime de François de GENIBROUSSE et de Marguerite de MONTBRUN.
Ce couple aura un enfant :
- François né vers 1610.
Ils se marient le mardi 14 juin 1594.
Jeanne d'HAUTPOUL est décédée le samedi 3 février 1629.//^^
<<<
{{center{[img(++,auto)[images/hautpoul.png]]}}}
^^
!!Articles :
* [[Evolution des prix du 15ème au 19ème siècle - Panier de la ménagère, services, salaires|http://www.histoirepassion.eu/spip.php?article72]]
* [[Conversion des monnaies d’avant la Révolution en valeur actuelle|http://www.histoirepassion.eu/spip.php?article36]]
!!Sites :
* [[Lexilogos|http://www.lexilogos.com/]] mots et merveilles d'ici et d'ailleurs
** [[Toulouse|http://www.lexilogos.com/toulouse_carte.htm]]
^^
[img(90px,auto)[LE MÊME François Thomas|images/mrc387.jpg][LE MÊME François Thomas]]
----
[img(160px,auto)[MOULAC Vincent Marie|images/moulacxb4.jpg][MOULAC Vincent Marie]]
----
[img(98px,+)[Moulin de Choiseau|images/Moulin_choiseau.jpg][CHOISEAU - moulin de]]
----
[img(90px,auto)[Famille de PUYBUSQUE|images/009_puybusque.jpg][PUYBUSQUE (de) famille]]
----
[img(160px,auto)[AUGUIS Pierre Jean Baptiste|images/convention.jpg][AUGUIS Pierre Jean Baptiste]]
/***
|Name|ImageSizePlugin|
|Source|http://www.TiddlyTools.com/#ImageSizePlugin|
|Version|1.2.1|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|plugin,formatter|
|Requires||
|Overrides|'image' formatter|
|Description|adds support for resizing images|
This plugin adds optional syntax to scale an image to a specified width and height and/or interactively resize the image with the mouse.
!!!!!Usage
<<<
The extended image syntax is:
{{{
[img(w+,h+)[...][...]]
}}}
where ''(w,h)'' indicates the desired width and height (in CSS units, e.g., px, em, cm, in, or %). Use ''auto'' (or a blank value) for either dimension to scale that dimension proportionally (i.e., maintain the aspect ratio). You can also calculate a CSS value 'on-the-fly' by using a //javascript expression// enclosed between """{{""" and """}}""". Appending a plus sign (+) to a dimension enables interactive resizing in that dimension (by dragging the mouse inside the image). Use ~SHIFT-click to show the full-sized (un-scaled) image. Use ~CTRL-click to restore the starting size (either scaled or full-sized).
<<<
!!!!!Examples
<<<
{{{
[img(100px+,75px+)[images/meow2.jpg]]
}}}
[img(100px+,75px+)[images/meow2.jpg]]
{{{
[<img(34%+,+)[images/meow.gif]]
[<img(21% ,+)[images/meow.gif]]
[<img(13%+, )[images/meow.gif]]
[<img( 8%+, )[images/meow.gif]]
[<img( 5% , )[images/meow.gif]]
[<img( 3% , )[images/meow.gif]]
[<img( 2% , )[images/meow.gif]]
[img( 1%+,+)[images/meow.gif]]
}}}
[<img(34%+,+)[images/meow.gif]]
[<img(21% ,+)[images/meow.gif]]
[<img(13%+, )[images/meow.gif]]
[<img( 8%+, )[images/meow.gif]]
[<img( 5% , )[images/meow.gif]]
[<img( 3% , )[images/meow.gif]]
[<img( 2% , )[images/meow.gif]]
[img( 1%+,+)[images/meow.gif]]
{{tagClear{
}}}
<<<
!!!!!Revisions
<<<
2009.02.24 [1.2.1] cleanup width/height regexp, use '+' suffix for resizing
2009.02.22 [1.2.0] added stretchable images
2008.01.19 [1.1.0] added evaluated width/height values
2008.01.18 [1.0.1] regexp for "(width,height)" now passes all CSS values to browser for validation
2008.01.17 [1.0.0] initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.ImageSizePlugin= {major: 1, minor: 2, revision: 1, date: new Date(2009,2,24)};
//}}}
//{{{
var f=config.formatters[config.formatters.findByField("name","image")];
f.match="\\[[<>]?[Ii][Mm][Gg](?:\\([^,]*,[^\\)]*\\))?\\[";
f.lookaheadRegExp=/\[([<]?)(>?)[Ii][Mm][Gg](?:\(([^,]*),([^\)]*)\))?\[(?:([^\|\]]+)\|)?([^\[\]\|]+)\](?:\[([^\]]*)\])?\]/mg;
f.handler=function(w) {
this.lookaheadRegExp.lastIndex = w.matchStart;
var lookaheadMatch = this.lookaheadRegExp.exec(w.source)
if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
var floatLeft=lookaheadMatch[1];
var floatRight=lookaheadMatch[2];
var width=lookaheadMatch[3];
var height=lookaheadMatch[4];
var tooltip=lookaheadMatch[5];
var src=lookaheadMatch[6];
var link=lookaheadMatch[7];
// Simple bracketted link
var e = w.output;
if(link) { // LINKED IMAGE
if (config.formatterHelpers.isExternalLink(link)) {
if (config.macros.attach && config.macros.attach.isAttachment(link)) {
// see [[AttachFilePluginFormatters]]
e = createExternalLink(w.output,link);
e.href=config.macros.attach.getAttachment(link);
e.title = config.macros.attach.linkTooltip + link;
} else
e = createExternalLink(w.output,link);
} else
e = createTiddlyLink(w.output,link,false,null,w.isStatic);
addClass(e,"imageLink");
}
var img = createTiddlyElement(e,"img");
if(floatLeft) img.align="left"; else if(floatRight) img.align="right";
if(width||height) {
var x=width.trim(); var y=height.trim();
var stretchW=(x.substr(x.length-1,1)=='+'); if (stretchW) x=x.substr(0,x.length-1);
var stretchH=(y.substr(y.length-1,1)=='+'); if (stretchH) y=y.substr(0,y.length-1);
if (x.substr(0,2)=="{{")
{ try{x=eval(x.substr(2,x.length-4))} catch(e){displayMessage(e.description||e.toString())} }
if (y.substr(0,2)=="{{")
{ try{y=eval(y.substr(2,y.length-4))} catch(e){displayMessage(e.description||e.toString())} }
img.style.width=x.trim(); img.style.height=y.trim();
config.formatterHelpers.addStretchHandlers(img,stretchW,stretchH);
}
if(tooltip) img.title = tooltip;
// GET IMAGE SOURCE
if (config.macros.attach && config.macros.attach.isAttachment(src))
src=config.macros.attach.getAttachment(src); // see [[AttachFilePluginFormatters]]
else if (config.formatterHelpers.resolvePath) { // see [[ImagePathPlugin]]
if (config.browser.isIE || config.browser.isSafari) {
img.onerror=(function(){
this.src=config.formatterHelpers.resolvePath(this.src,false);
return false;
});
} else
src=config.formatterHelpers.resolvePath(src,true);
}
img.src=src;
w.nextMatch = this.lookaheadRegExp.lastIndex;
}
}
config.formatterHelpers.addStretchHandlers=function(e,stretchW,stretchH) {
e.title=((stretchW||stretchH)?'DRAG=stretch/shrink, ':'')
+'SHIFT-CLICK=show full size, CTRL-CLICK=restore initial size';
e.statusMsg='width=%0, height=%1';
e.style.cursor='move';
e.originalW=e.style.width;
e.originalH=e.style.height;
e.minW=Math.max(e.offsetWidth/20,10);
e.minH=Math.max(e.offsetHeight/20,10);
e.stretchW=stretchW;
e.stretchH=stretchH;
e.onmousedown=function(ev) { var ev=ev||window.event;
this.sizing=true;
this.startX=!config.browser.isIE?ev.pageX:(ev.clientX+findScrollX());
this.startY=!config.browser.isIE?ev.pageY:(ev.clientY+findScrollY());
this.startW=this.offsetWidth;
this.startH=this.offsetHeight;
return false;
};
e.onmousemove=function(ev) { var ev=ev||window.event;
if (this.sizing) {
var s=this.style;
var currX=!config.browser.isIE?ev.pageX:(ev.clientX+findScrollX());
var currY=!config.browser.isIE?ev.pageY:(ev.clientY+findScrollY());
var newW=(currX-this.offsetLeft)/(this.startX-this.offsetLeft)*this.startW;
var newH=(currY-this.offsetTop )/(this.startY-this.offsetTop )*this.startH;
if (this.stretchW) s.width =Math.floor(Math.max(newW,this.minW))+'px';
if (this.stretchH) s.height=Math.floor(Math.max(newH,this.minH))+'px';
clearMessage(); displayMessage(this.statusMsg.format([s.width,s.height]));
}
return false;
};
e.onmouseup=function(ev) { var ev=ev||window.event;
if (ev.shiftKey) { this.style.width=this.style.height=''; }
if (ev.ctrlKey) { this.style.width=this.originalW; this.style.height=this.originalH; }
this.sizing=false;
clearMessage();
return false;
};
e.onmouseout=function(ev) { var ev=ev||window.event;
this.sizing=false;
clearMessage();
return false;
};
}
//}}}
/***
|''Name:''|abego.IncludePlugin|
|''Version:''|1.0.1 (2007-04-30)|
|''Type:''|plugin|
|''Source:''|http://tiddlywiki.abego-software.de/#IncludePlugin|
|''Author:''|Udo Borkowski (ub [at] abego-software [dot] de)|
|''Documentation:''|[[IncludePlugin Documentation|http://tiddlywiki.abego-software.de/#%5B%5BIncludePlugin%20Documentation%5D%5D]]|
|''Community:''|([[del.icio.us|http://del.icio.us/post?url=http://tiddlywiki.abego-software.de/index.html%23IncludePlugin]]) ([[Support|http://groups.google.com/group/TiddlyWiki]])|
|''Copyright:''|© 2007 [[abego Software|http://www.abego-software.de]]|
|''Licence:''|[[BSD open source license (abego Software)|http://www.abego-software.de/legal/apl-v10.html]]|
|''~CoreVersion:''|2.1.3|
|''Browser:''|Firefox 1.5.0.9 or better; Internet Explorer 6.0|
***/
/***
This plugin's source code is compressed (and hidden). Use this [[link|http://tiddlywiki.abego-software.de/archive/IncludePlugin/Plugin-Include-src.1.0.0.js]] to get the readable source code.
***/
///%
if(!window.abego){window.abego={};}var invokeLater=function(_1,_2,_3){return abego.invokeLater?abego.invokeLater(_1,_2,_3):setTimeout(_1,_2);};abego.loadFile=function(_4,_5,_6){var _7=function(_8,_9,_a,_b,_c){return _8?_5(_a,_b,_9):_5(undefined,_b,_9,"Error loading %0".format([_b]));};if(_4.search(/^((http(s)?)|(file)):/)!=0){if(_4.search(/^((.\:\\)|(\\\\)|(\/))/)==0){_4="file://"+_4;}else{var _d=document.location.toString();var i=_d.lastIndexOf("/");_4=_d.substr(0,i+1)+_4;}_4=_4.replace(/\\/mg,"/");}loadRemoteFile(_4,_7,_6);};abego.loadTiddlyWikiStore=function(_f,_10,_11,_12){var _13=function(_14,_15){if(_12){_12(_14,"abego.loadTiddlyWikiStore",_15,_f,_11);}};var _16=function(_17,_18){var _19=_18.indexOf(startSaveArea);var _1a=_18.indexOf("<!--POST-BODY-END--"+">");var _1b=_18.lastIndexOf(endSaveArea,_1a==-1?_18.length:_1a);if((_19==-1)||(_1b==-1)){return config.messages.invalidFileError.format([_f]);}var _1c="<html><body>"+_18.substring(_19,_1b+endSaveArea.length)+"</body></html>";var _1d=document.createElement("iframe");_1d.style.display="none";document.body.appendChild(_1d);var doc=_1d.document;if(_1d.contentDocument){doc=_1d.contentDocument;}else{if(_1d.contentWindow){doc=_1d.contentWindow.document;}}doc.open();doc.writeln(_1c);doc.close();var _1f=doc.getElementById("storeArea");_17.loadFromDiv(_1f,"store");_1d.parentNode.removeChild(_1d);return null;};var _20=function(_21){_13("Error when loading %0".format([_f]),"Failed");_10(undefined,_f,_11,_21);return _21;};var _22=function(_23){_13("Loaded %0".format([_f]),"Done");_10(_23,_f,_11);return null;};var _24=function(_25,_26,_27,_28){if(_25===undefined){_20(_28);return;}_13("Processing %0".format([_f]),"Processing");var _29=config.messages.invalidFileError;config.messages.invalidFileError="The file '%0' does not appear to be a valid TiddlyWiki file";try{var _2a=new TiddlyWiki();var _2b=_16(_2a,_25);if(_2b){_20(_2b);}else{_22(_2a);}}catch(ex){_20(exceptionText(ex));}finally{config.messages.invalidFileError=_29;}};_13("Start loading %0".format([_f]),"Started");abego.loadFile(_f,_24,_11);};(function(){if(abego.TiddlyWikiIncluder){return;}var _2c="waiting";var _2d="loading";var _2e=1000;var _2f=-200;var _30=-100;var _31=-300;var _32;var _33=[];var _34={};var _35=[];var _36;var _37=[];var _38;var _39=function(){if(_32===undefined){_32=config.options.chkUseInclude===undefined||config.options.chkUseInclude;}return _32;};var _3a=function(url){return "No include specified for %0".format([url]);};var _3c=function(){var _3d=_35;_35=[];if(_3d.length){for(var i=0;i<_37.length;i++){_37[i](_3d);}}};var _3f;var _40=function(){if(_36!==undefined){clearInterval(_36);}_3f=0;var _41=function(){abego.TiddlyWikiIncluder.sendProgress("","","Done");};_36=setInterval(function(){_3f++;if(_3f<=10){return;}clearInterval(_36);_36=undefined;abego.TiddlyWikiIncluder.sendProgress("Refreshing...","","");refreshDisplay();invokeLater(_41,0,_2f);},1);};var _42=function(_43){var _44;for(var i=0;i<_33.length;i++){var _46=abego.TiddlyWikiIncluder.getStore(_33[i]);if(_46&&(_44=_43(_46,_33[i]))){return _44;}}};var _47=function(){if(!window.store){return invokeLater(_47,100);}var _48=store.fetchTiddler;store.fetchTiddler=function(_49){var t=_48.apply(this,arguments);if(t){return t;}if(config.shadowTiddlers[_49]!==undefined){return undefined;}if(_49==config.macros.newTiddler.title){return undefined;}return _42(function(_4b,url){var t=_4b.fetchTiddler(_49);if(t){t.includeURL=url;}return t;});};if(_33.length){_40();}};var _4e=function(){if(!window.store){return invokeLater(_4e,100);}var _4f=store.getTiddlerText("IncludeList");if(_4f){wikify(_4f,document.createElement("div"));}};var _50=function(_51){var _52=function(){var _53=store.forEachTiddler;var _54=function(_55){var _56={};var _57;var _58=function(_59,_5a){if(_56[_59]){return;}_56[_59]=1;if(_57){_5a.includeURL=_57;}_55.apply(this,arguments);};_53.call(store,_58);for(var n in config.shadowTiddlers){_56[n]=1;}_56[config.macros.newTiddler.title]=1;_42(function(_5c,url){_57=url;_5c.forEachTiddler(_58);});};store.forEachTiddler=_54;try{return _51.apply(this,arguments);}finally{store.forEachTiddler=_53;}};return _52;};var _5e=function(_5f,_60){return _5f[_60]=_50(_5f[_60]);};abego.TiddlyWikiIncluder={};abego.TiddlyWikiIncluder.setProgressFunction=function(_61){_38=_61;};abego.TiddlyWikiIncluder.getProgressFunction=function(_62){return _38;};abego.TiddlyWikiIncluder.sendProgress=function(_63,_64,_65){if(_38){_38.apply(this,arguments);}};abego.TiddlyWikiIncluder.onError=function(url,_67){displayMessage("Error when including '%0':\n%1".format([url,_67]));};abego.TiddlyWikiIncluder.hasPendingIncludes=function(){for(var i=0;i<_33.length;i++){var _69=abego.TiddlyWikiIncluder.getState(_33[i]);if(_69==_2c||_69==_2d){return true;}}return false;};abego.TiddlyWikiIncluder.getIncludes=function(){return _33.slice();};abego.TiddlyWikiIncluder.getState=function(url){var s=_34[url];if(!s){return _3a(url);}return typeof s=="string"?s:null;};abego.TiddlyWikiIncluder.getStore=function(url){var s=_34[url];if(!s){return _3a(url);}return s instanceof TiddlyWiki?s:null;};abego.TiddlyWikiIncluder.include=function(url,_6f){if(!_39()||_34[url]){return;}var _70=this;_33.push(url);_34[url]=_2c;var _71=function(_72,_73,_74,_75){if(_72===undefined){_34[url]=_75;_70.onError(url,_75);return;}_34[url]=_72;_35.push(url);invokeLater(_3c);};var _76=function(){_34[url]=_2d;abego.loadTiddlyWikiStore(url,_71,null,_38);};if(_6f){invokeLater(_76,_6f);}else{_76();}};abego.TiddlyWikiIncluder.forReallyEachTiddler=function(_77){var _78=function(){store.forEachTiddler(_77);};_50(_78).call(store);};abego.TiddlyWikiIncluder.getFunctionUsingForReallyEachTiddler=_50;abego.TiddlyWikiIncluder.useForReallyEachTiddler=_5e;abego.TiddlyWikiIncluder.addListener=function(_79){_37.push(_79);};abego.TiddlyWikiIncluder.addListener(_40);if(config.options.chkUseInclude===undefined){config.options.chkUseInclude=true;}config.shadowTiddlers.AdvancedOptions+="\n<<option chkUseInclude>> Include ~TiddlyWikis (IncludeList | IncludeState | [[help|http://tiddlywiki.abego-software.de/#%5B%5BIncludePlugin%20Documentation%5D%5D]])\n^^(Reload this ~TiddlyWiki to make changes become effective)^^";config.shadowTiddlers.IncludeState="<<includeState>>";var _7a=function(e,_7c,_7d){if(!anim||!abego.ShowAnimation){e.style.display=_7c?"block":"none";return;}anim.startAnimating(new abego.ShowAnimation(e,_7c,_7d));};abego.TiddlyWikiIncluder.getDefaultProgressFunction=function(){setStylesheet(".includeProgressState{\n"+"background-color:#FFCC00;\n"+"position:absolute;\n"+"right:0.2em;\n"+"top:0.2em;\n"+"width:7em;\n"+"padding-left:0.2em;\n"+"padding-right:0.2em\n"+"}\n","abegoInclude");var _7e=function(){var e=document.createElement("div");e.className="includeProgressState";e.style.display="none";document.body.appendChild(e);return e;};var _80=_7e();var _81=function(_82){removeChildren(_80);createTiddlyText(_80,_82);_7a(_80,true,0);};var _83=function(){invokeLater(function(){_7a(_80,false,_2e);},100,_30);};var _84=function(_85,_86,_87,url,_89){if(_87=="Done"||_87=="Failed"){_83();return;}if(_86=="abego.loadTiddlyWikiStore"){_3f=0;if(_87=="Processing"){_81("Including...");}}else{_81(_85);}};return _84;};abego.TiddlyWikiIncluder.setProgressFunction(abego.TiddlyWikiIncluder.getDefaultProgressFunction());config.macros.include={};config.macros.include.handler=function(_8a,_8b,_8c,_8d,_8e,_8f){_8c=_8e.parseParams("url",null,true,false,true);var _90=parseInt(getParam(_8c,"delay","0"));var _91=_8c[0]["url"];var _92=getFlag(_8c,"hide",false);if(!_92){createTiddlyText(createTiddlyElement(_8a,"code"),_8d.source.substring(_8d.matchStart,_8d.nextMatch));}for(var i=0;_91&&i<_91.length;i++){abego.TiddlyWikiIncluder.include(_91[i],_90);}};config.macros.includeState={};config.macros.includeState.handler=function(_94,_95,_96,_97,_98,_99){var _9a=function(){var s="";var _9c=abego.TiddlyWikiIncluder.getIncludes();if(!_9c.length){return "{{noIncludes{\nNo includes or 'include' is disabled (see AdvancedOptions)\n}}}\n";}s+="|!Address|!State|\n";for(var i=0;i<_9c.length;i++){var inc=_9c[i];s+="|{{{"+inc+"}}}|";var t=abego.TiddlyWikiIncluder.getState(inc);s+=t?"{{{"+t+"}}}":"included";s+="|\n";}s+="|includeState|k\n";return s;};var _a0=function(){removeChildren(div);wikify(_9a(),div);if(abego.TiddlyWikiIncluder.hasPendingIncludes()){invokeLater(_a0,500,_31);}};var div=createTiddlyElement(_94,"div");invokeLater(_a0,0,_31);};var _a2=Tiddler.prototype.isReadOnly;Tiddler.prototype.isReadOnly=function(){return _a2.apply(this,arguments)||this.isIncluded();};Tiddler.prototype.isIncluded=function(){return this.includeURL!=undefined;};Tiddler.prototype.getIncludeURL=function(){return this.includeURL;};var _a3={getMissingLinks:1,getOrphans:1,getTags:1,reverseLookup:1,updateTiddlers:1};for(var n in _a3){_5e(TiddlyWiki.prototype,n);}var _a5=function(){if(abego.IntelliTagger){_5e(abego.IntelliTagger,"assistTagging");}};var _a6=function(){if(config.macros.forEachTiddler){_5e(config.macros.forEachTiddler,"findTiddlers");}};_47();invokeLater(_4e,100);invokeLater(_a5,100);invokeLater(_a6,100);})();
//%/
{{center{[img(++,auto)[images/ruben.jpg]]}}}
<<<
!Index alphabétique
^^
{{threecolumns
{
<<forEachTiddler
where
'tiddler.title.toUpperCase()&& ! tiddler.tags.containsAny(["excludeLists","systemConfig","TWServer", "CSS", "Brouillon"])'
sortBy
'tiddler.title.toUpperCase()'
script
'
function getGroupCaption(tiddler) {
return tiddler.title.substr(0,1).toUpperCase();
}
function getGroupTitle(tiddler, context) {
if (!context.lastGroup || context.lastGroup != getGroupCaption(tiddler)) {
context.lastGroup = getGroupCaption(tiddler);
return "* {{{"+(context.lastGroup?context.lastGroup:"no tags")+"}}}\n";
} else
return "";
}
'
write
'getGroupTitle(tiddler, context)+"** [[" + tiddler.title+"]]\n"'
>>
}}}
^^
<<<
<<<
!Par catégories
~~<<tagCloud systemConfig excludeLists TWServer CSS Brouillon>>~~
<<<
/***
|Name|InlineJavascriptPlugin|
|Source|http://www.TiddlyTools.com/#InlineJavascriptPlugin|
|Documentation|http://www.TiddlyTools.com/#InlineJavascriptPluginInfo|
|Version|1.9.5|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides||
|Description|Insert Javascript executable code directly into your tiddler content.|
''Call directly into TW core utility routines, define new functions, calculate values, add dynamically-generated TiddlyWiki-formatted output'' into tiddler content, or perform any other programmatic actions each time the tiddler is rendered.
!!!!!Documentation
>see [[InlineJavascriptPluginInfo]]
!!!!!Revisions
<<<
2009.04.11 [1.9.5] pass current tiddler object into wrapper code so it can be referenced from within 'onclick' scripts
2009.02.26 [1.9.4] in $(), handle leading '#' on ID for compatibility with JQuery syntax
|please see [[InlineJavascriptPluginInfo]] for additional revision details|
2005.11.08 [1.0.0] initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.InlineJavascriptPlugin= {major: 1, minor: 9, revision: 5, date: new Date(2009,4,11)};
config.formatters.push( {
name: "inlineJavascript",
match: "\\<script",
lookahead: "\\<script(?: src=\\\"((?:.|\\n)*?)\\\")?(?: label=\\\"((?:.|\\n)*?)\\\")?(?: title=\\\"((?:.|\\n)*?)\\\")?(?: key=\\\"((?:.|\\n)*?)\\\")?( show)?\\>((?:.|\\n)*?)\\</script\\>",
handler: function(w) {
var lookaheadRegExp = new RegExp(this.lookahead,"mg");
lookaheadRegExp.lastIndex = w.matchStart;
var lookaheadMatch = lookaheadRegExp.exec(w.source)
if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
var src=lookaheadMatch[1];
var label=lookaheadMatch[2];
var tip=lookaheadMatch[3];
var key=lookaheadMatch[4];
var show=lookaheadMatch[5];
var code=lookaheadMatch[6];
if (src) { // external script library
var script = document.createElement("script"); script.src = src;
document.body.appendChild(script); document.body.removeChild(script);
}
if (code) { // inline code
if (show) // display source in tiddler
wikify("{{{\n"+lookaheadMatch[0]+"\n}}}\n",w.output);
if (label) { // create 'onclick' command link
var link=createTiddlyElement(w.output,"a",null,"tiddlyLinkExisting",wikifyPlainText(label));
var fixup=code.replace(/document.write\s*\(/gi,'place.bufferedHTML+=(');
link.code="function _out(place,tiddler){"+fixup+"\n};_out(this,this.tiddler);"
link.tiddler=w.tiddler;
link.onclick=function(){
this.bufferedHTML="";
try{ var r=eval(this.code);
if(this.bufferedHTML.length || (typeof(r)==="string")&&r.length)
var s=this.parentNode.insertBefore(document.createElement("span"),this.nextSibling);
if(this.bufferedHTML.length)
s.innerHTML=this.bufferedHTML;
if((typeof(r)==="string")&&r.length) {
wikify(r,s,null,this.tiddler);
return false;
} else return r!==undefined?r:false;
} catch(e){alert(e.description||e.toString());return false;}
};
link.setAttribute("title",tip||"");
var URIcode='javascript:void(eval(decodeURIComponent(%22(function(){try{';
URIcode+=encodeURIComponent(encodeURIComponent(code.replace(/\n/g,' ')));
URIcode+='}catch(e){alert(e.description||e.toString())}})()%22)))';
link.setAttribute("href",URIcode);
link.style.cursor="pointer";
if (key) link.accessKey=key.substr(0,1); // single character only
}
else { // run script immediately
var fixup=code.replace(/document.write\s*\(/gi,'place.innerHTML+=(');
var c="function _out(place,tiddler){"+fixup+"\n};_out(w.output,w.tiddler);";
try { var out=eval(c); }
catch(e) { out=e.description?e.description:e.toString(); }
if (out && out.length) wikify(out,w.output,w.highlightRegExp,w.tiddler);
}
}
w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;
}
}
} )
//}}}
// // Backward-compatibility for TW2.1.x and earlier
//{{{
if (typeof(wikifyPlainText)=="undefined") window.wikifyPlainText=function(text,limit,tiddler) {
if(limit > 0) text = text.substr(0,limit);
var wikifier = new Wikifier(text,formatter,null,tiddler);
return wikifier.wikifyPlain();
}
//}}}
// // GLOBAL FUNCTION: $(...) -- 'shorthand' convenience syntax for document.getElementById()
//{{{
if (typeof($)=='undefined') { function $(id) { return document.getElementById(id.replace(/^#/,'')); } }
//}}}
[<img(11%,auto)[images/mrc387.jpg]]
''Capitaine corsaire''
^^//François Thomas LE MÊME voit le jour le vendredi 13 janvier 1764 à Saint-Malo (35400) - Ille-et-Vilaine.
Il est le fils légitime de Jacques Henry LE MÊME et de Marguerite BODIN.
Il s'unit avec Marie Cécile ROBIN (1779-1795), la fille légitime de Zacharie ROBIN et de Jeanne TOUFFET.
Ils se marient le lundi 17 février 1794 à Port-Louis.
François T. LE MÊME est décédé le samedi 30 mars 1805, par 10° de latitude sud et 77° de longitude est, en mer, à l'âge de 41 ans.//^^
<<<
Le Même va se montrer, au milieu des événements qui surgissent, homme de guerre; alors il ne manquera à sa renommée que de n'avoir pu rencontrer des Anglais plutôt que des Hollandais. Il égala son compatriote Surcouf, dont le nom est passé à la postérité, tandis que le sien serait encore inconnu, même parmi ses compatriotes ...
<<<
''Sa biographie par Ch. CUNAT''
{{center{
<html>
<iframe frameborder="0" scrolling="no" style="border:0px" src="http://books.google.fr/books?id=W1koAAAAYAAJ&dq=Saint-Malo%20illustr%C3%A9%20par%20ses%20marins%20lem%C3%AAme&pg=PA403&output=embed" width=500 height=500></iframe>
</html>
}}}
!Famille de meuniers du Gâtinais français
<<<
^^1 - @@Pierre LECOQ@@, décédé avant 1638, domicilié à Trezan, marié avant 1627 avec Jeanne GILET, //ils auront sept enfants, deux baptisés à Boigneville, trois seront meuniers : Jehan ci-dessous, Claude et Simon.//^^
<<<
<<<
^^2 - @@Jehan LECOQ@@, né avant 1614, marié avec Louise AUSSIERE.
meunier du moulin Paillard à Buno^^
<<<
<<<
^^3 - @@Paul LECOQ@@, né avant 1643, marié avec Anne CHABOT, le vendredi 21 février 1659, il décéde le 26 janvier 1698 à Gironville.
Meunier du moulin Paillard à Buno
Meunier du moulin de Girolle en la paroisse de Gironville en 1685 > après 1694^^
<<<
<<<
^^4 - @@Etienne LECOQ@@, né le lundi 4 novembre 1680 à Vayres-sur-Essonne (91639), marié avec Jeanne HARUY (1673-< 1739), le mardi 12 juin 1708 à Cély (77065), il décéde le vendredi 6 décembre 1765, à l'âge de 85 ans, à Avon (77014).
Meunier du moulin de Courance avant 1734 jusqu'en décembre 1742^^
<<<
<<<
^^5 - @@Etienne LECOQ@@, né le mardi 16 avril 1709 à Cély (77065), marié avec Marguerite CHARPENTIER (1705-1771) le mardi 15 novembre 1729 à Verrieres, il décéde le vendredi 5 février 1779, à l'âge de 69 ans, à Avon.
Meunier sortant du moulin de Danemois en février 1734
Meunier du moulin de Choiseau à Cély à compter du 25 janvier 1737^^
<<<
<<<
^^6 - @@Charles LECOQ@@, né le samedi 30 mai 1744 à Cély (77065), marié avec Marie Osmane DESREZ (1755-1831), le mardi 24 janvier 1775 à Héricy (77226). Il décéde le mardi 27 octobre 1818, à l'âge de 74 ans, à Avon (77014).
Meunier des [[moulins de Changy|CHANGY - moulins de]] et de l'Erable à Avon ^^
<<<
<<<
^^7 - Antoine, Louis Abraham LECOQ né le mardi 14 mars 1797 à Avon (77014), marié avec Anne Louise COURTELLEMONT (1797-1864), le mardi 16 mai 1820 à Saint-Sauveur-sur-École (77435). Il décéde le samedi 12 avril 1823, à l'âge de 26 ans, à Nemours (77333).^^
<<<
{{center{[img(++,auto)[images/lecoq-meuniers.jpg]]}}}
!!!!Plainte du 27 Novembre 1744 ~~( AD77 2Bp481 )~~ de M. Claude François Lesoussieux curé de Cély
<<<
"... disant que depuis deux ans environ il autoit invité le nommé Estienne Lecocq et sa femme meusnier au moulin de Choiseau paroisse dudit Cély à laisser venir leu fils aîné chez ledit suppliant pour profiter des instructions que ledit sieur curé vouloit luy donner, ce quy auroit esté consenty de la part des père et mère.
... lequel aurait tellement profité à la lecture écriture et mesme dans la langue latine que le ledist Estienne Lecoq père, temoins et satisfait des progrès de son fils ... malgré les oppositions de sa femme il continuroit et d'envoyer son fils pour parvenir à une plus ample instruction ... la femme dudit Estienne Lecocq loin d'en avoir de la reconnoissance ... se seroit opposée en différentes circonstances et dans les derniers temps à ce que sondit fils continua ses études ... avec menaces et ensuitte avec coups et mauvais traitement réitérés
... leurdit fils s'estant réfugié chez ledit sieur curé pour requérir son assistance et protection et continuer ses études, ledit Estienne Lecocq et sa femme seroient venus furieusement, le mercredi dix huit sur les neuf à dix heures du matin réclamer leur dit fils ... "
<<<
!!!!Dépositons et déclarations des témoins du 1er décembre 1744
<<<
//Etienne Campois garçon vigneron//
" ... il a vue ledit Lecocq entrer dans la cour dudit sieur curé jusquà la porte de sa cuisinne, et sa femme aussy dans ladite cour ... estant venu au bruit quil avoit entendu de la part dudit sieur curé qui crioit au secours, et où, il aetnedu ledit Lecocq dire au sieur curé que si il ne luy rendoit pas son fils dans le lendemain matin huit du matin il luy casserait la teste d'un coup de pistollet, et que la dite Charpentier femme Lecocq dit audit Sieur Lesoussieux quil estoit indigne d'estre un pretre et quil estoit autant capable d'estre prestre que les savattes de ses souliers ... que ledit sieur Lesoussieux estant sorty de chez lui dans la rue ... lesdits Lecocq et sa femme ayant suivi ...
//Genevieve DECOURBE, femme de vigneron//
" ... vit ladite femme femme Lecocq ... qui leva la main sur ledit sieur curé, mais ne sait si elle la frappé, apersut auusy ledit sieur curé qui en se retournant du costé de ladite femme Lecocq dit " a mon Dieu, l'insolente qui a la hardiesse de metre la main sur moy et de me frapper", et luy donna quelques coups, et vit aussi ladite femme qui revangeoit, présentant sa main à la fasse dudit sieur curé, et que s'estant séparée, elle a vue ladite femme Lecocq otter ses sabots de ses pieds et les jetter l'un après l'autre à la teste du dit sieur curé, ne say si elle la blessé ou non ...
<<<
<<<
<<<
"Le meunier était le plus souvent un homme du monde rural, des bourgs, des petites villes. Son moulin, situé près des autres habitations ou à l'égard, dans un vallon ou sur une colline, était à eau cinq fois sur six, et lui servait fréquemment de demeure.
Il était des meuniers de conditions fort différentes. Les uns, seuls dans de très modestes moulins, se bornaient à écraser le grain en un unique passage entre les meules et à rendre un produit brut au client. D'autres fournissaient un travail plus soigné : le grain était préalablement lavé, puis la farine tamisée mécaniquement; ils pouveaint disposer de deux paires de meules, voire plus; ils employaient une ou deux personnes, de leur famille ou salariées, et faisaient partie des gens aisés du village ou du bourg. D'autres étaient encore plus largement équipés et certains pratiquaient la mouture dite "économique", écrasant le grain en plusieurs fois pour mieux détacher la farine du son. Le plus souvent le meunier traitait du grain appartenant à ses clients, particuliers et boulangers. Fréquement, lui-même ou son "chasse-moûte" allait le chercher et rapportait la farine. Il avait alors une bête de somme et, pour la nourrir, un pré. Traditionnellement payé en nature, en général au seizième du volume des grains moulus, il était lui-même vendeur de blé et de farine. Les meuniers les plus puissants, desservant les principales villes, tendaient, à la fin du XVIII° siècle, à transformer leur activité en achetant eux-mêmes le blé pour revendre ensuite la farine.
La sécheresse, le gel, les crues, la faiblesse des vents, le travail d'entretien courant accompli par le meunier comme rebattre les meules ou recoudre les voiles, et les grosses réparations à faire au mécanisme ou à l'amenée d'eau, empêchaient de moudre de façon continue. Un moulin arrêté seulement deux mois dans l'année était considéré comme très avantagé. Aussi le meunier avaitil souvent d'autres ressources : tel exploitait une ferme, tel autre une pêcherie grâce à sa retenue d'eau.
La Révolution apporta plusieurs changements. Des lois de 1790 et 1792 abolirent presque entièrement la banalité du moulin. C'était un monopole assez répandu, généralement en faveur d'un seigneur ayant des droits sur les revenus d'un ou plusieurs moulins. ( Dans un périmètre donné, il obligeait les habitants à n'utiliser pour leur consommation que le moulin banal; il interdisait aux meuniers voisins de venir y "chasser" le client et empêchait la construction de moulins concurrents.). Il ne subsista plus que si son bénéficiaire n'était pas un ancien seigneur, ce qui advint surtout en Provence. Nombre de meunier furent donc exposés à la concurrence, à leur avantage ou à leur détriment.
La politique de subsistances de la période montagnard fut contraignante pour le meunier. La loi du 11 septembre 1793 décida qu'il ne serait plus payé qu'en argent, donc en assignats, et lui interdit le commerce des grains et des farines. Deux mois plus tard, la Convention, généralisant des décisions d'autorités locales, ordonna de ne pas retirer de la mouture plus de 15% de spn en volume ; ce qui donnait une farine plus abondante, mais fort médiocre. Ces mesures, peu appréciées des meuniers, ne furent que très partiellement appliquées car, même si les districts et les municipalités l'avaient tous voulu, il leur aurait été impossible d'excercer une surveillance constante sur l'ensemble des moulins.
Mais le meunier a en général tiré avantage de la Révolution. Celui qui exploitait son moulin en vertu d'une redevance seigneuriale moyennant versement d'une redevance a été libéré de celle-ci par l'abolition des droits féodaux. Beaucoup ont pu acheter comme bien national le moulin dont ils étaient locatiares, ou un autre."
<<<
[[Archives en ligne|Archives en ligne]]
[[Armorial du Pays d'Oc|http://www.vivies.com/index.php?title=Accueil]]
[[Geneanet|http://www.geneanet.org/]]
[[Base Roglo]]
[[Carte de Cassini|http://cassini.ehess.fr/cassini/fr/html/1_navigation.php]]
[[Histoire & Généalogie]]
/***
|Name|LoadTiddlersPlugin|
|Source|http://www.TiddlyTools.com/#LoadTiddlersPlugin|
|Documentation|http://www.TiddlyTools.com/#LoadTiddlersPluginInfo|
|Version|3.7.0|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides||
|Options|##Configuration|
|Description|macro for automated updates or one-click installations of tiddlers from remote sources|
!!!!!Documentation
>see [[LoadTiddlersPluginInfo]]
!!!!!Configuration
<<<
__password-protected server settings //(optional, if needed)//:__
>username: <<option txtRemoteUsername>> password: <<option txtRemotePassword>>
>{{{usage: <<option txtRemoteUsername>> <<option txtRemotePassword>>}}}
>''note: these settings are also used by [[ExternalTiddlersPlugin]] and [[ImportTiddlersPlugin]]''
<<<
!!!!!Revisions
<<<
2009.05.04 [3.7.0] read CSV file format
|please see [[LoadTiddlersPluginInfo]] for additional revision details|
2005.07.20 [1.0.0] Initial Release
<<<
!!!!!Code
***/
//{{{
version.extensions.LoadTiddlersPlugin= {major: 3, minor: 7, revision: 0, date: new Date(2008,5,4)};
config.macros.loadTiddlers = {
label: '',
tip: "add/update tiddlers from '%0'",
lockedTag: 'noReload', // if existing tiddler has this tag value, don't overwrite it, even if inbound tiddler is newer
askMsg: 'Please enter a local path/filename or a remote URL',
openMsg: 'Opening %0',
openErrMsg: 'Could not open %0 - error=%1',
readMsg: 'Read %0 bytes from %1',
foundMsg: 'Found %0 tiddlers in %1',
nochangeMsg: "'%0' is up-to-date... skipped.",
lockedMsg: "'%0' is tagged '%1'... skipped.",
skippedMsg: 'skipped (cancelled by user)',
loadedMsg: 'Loaded %0 of %1 tiddlers from %2',
reportTitle: 'ImportedTiddlers',
warning: "Warning!! Processing '%0' as a systemConfig (plugin) tiddler may produce unexpected results! Are you sure you want to proceed?",
handler: function(place,macroName,params) {
var label=(params[0] && params[0].substr(0,6)=='label:')?params.shift().substr(6):this.label;
var tip=(params[0] && params[0].substr(0,7)=='prompt:')?params.shift().substr(7):this.tip;
var filter='updates';
if (params[0] && (params[0]=='all' || params[0]=='new' || params[0]=='changes' || params[0]=='updates'
|| params[0].substr(0,8)=='tiddler:' || params[0].substr(0,4)=='tag:'))
filter=params.shift();
var src=params.shift(); if (!src || !src.length) return; // filename is required
var quiet=(params[0]=='quiet'); if (quiet) params.shift();
var ask=(params[0]=='confirm'); if (ask) params.shift();
var force=(params[0]=='force'); if (force) params.shift();
var init=(params[0]=='init'); if (init) params.shift();
var nodirty=(params[0]=='nodirty'); if (nodirty) params.shift();
var norefresh=(params[0]=='norefresh'); if (norefresh) params.shift();
var noreport=(params[0]=='noreport'); if (noreport) params.shift();
this.newTags=[]; if (params[0]) this.newTags=params; // any remaining params are used as 'autotags'
if (label.trim().length) {
// link triggers load tiddlers from another file/URL and then applies filtering rules to add/replace tiddlers in the store
createTiddlyButton(place,label.format([src.replace(/%20/g,' ')]),tip.format([src.replace(/%20/g,' ')]), function() {
if (src=='ask') src=prompt(this.askMsg);
config.macros.loadTiddlers.loadFile(src,config.macros.loadTiddlers.doImport,{quiet:quiet,ask:ask,filter:filter,force:force,init:init,noreport:noreport});
})
}
else {
// load tiddlers from another file/URL and then apply filtering rules to add/replace tiddlers in the store
if (src=='ask') src=prompt(this.askMsg);
config.macros.loadTiddlers.loadFile(src,config.macros.loadTiddlers.doImport,{quiet:quiet,ask:ask,filter:filter,force:force,init:init,nodirty:nodirty,norefresh:norefresh,noreport:noreport});
}
},
loadFile: function(src,callback,params) {
var quiet=params.quiet;
if (src==undefined || !src.length) return null; // filename is required
if (!quiet) clearMessage();
if (!quiet) displayMessage(this.openMsg.format([src.replace(/%20/g,' ')]));
// if working locally and src is not a URL, read from local filesystem
if (document.location.protocol=='file:' && src.substr(0,5)!='http:' && src.substr(0,5)!='file:') {
var txt=loadFile(src);
if (!txt) { // file didn't load, might be relative path.. try fixup
var pathPrefix=document.location.href; // get current document path and trim off filename
var slashpos=pathPrefix.lastIndexOf('/'); if (slashpos==-1) slashpos=pathPrefix.lastIndexOf('\\');
if (slashpos!=-1 && slashpos!=pathPrefix.length-1) pathPrefix=pathPrefix.substr(0,slashpos+1);
src=pathPrefix+src;
if (pathPrefix.substr(0,5)!='http:') src=getLocalPath(src);
var txt=loadFile(src);
}
if (!txt) { // file still didn't load, report error
if (!quiet) displayMessage(this.openErrMsg.format([src.replace(/%20/g,' '),'(unknown)']));
} else {
if (!quiet) displayMessage(this.readMsg.format([txt.length,src.replace(/%20/g,' ')]));
if (callback) callback(true,params,convertUTF8ToUnicode(txt),src,null);
}
// otherwise, use XMLHttpRequest to fetch document
} else {
var name=config.options.txtRemoteUsername; var pass=config.options.txtRemotePassword;
var x=doHttp('GET',src,null,null,name,pass,callback,params,null);
}
},
readTiddlersFromHTML: function(html) {
// for TW2.2+
if (TiddlyWiki.prototype.importTiddlyWiki!=undefined) {
var remoteStore=new TiddlyWiki();
remoteStore.importTiddlyWiki(html);
return remoteStore.getTiddlers('title');
}
},
readTiddlersFromCSV: function(CSV) {
var remoteStore=new TiddlyWiki();
var lines=CSV.split('\n'); var names=lines[0].split(','); CSV=lines.join('\n')
// ENCODE commas and newlines within quoted values
var comma='!~comma~!'; var commaRE=new RegExp(comma,'g');
var newline='!~newline~!'; var newlineRE=new RegExp(newline,'g');
CSV=CSV.replace(/\x22((?:[^\x22]|\x22\x22)*?)\x22/g,
function(x){ return x.substr(1,x.length-2).replace(/\,/g,comma).replace(/\n/g,newline); });
// PARSE lines
var lines=CSV.split('\n');
for (var i=1; i<lines.length; i++) { if (!lines[i].length) continue;
var values=lines[i].split(',');
// DECODE commas, newlines and doubled-quotes within quoted values
for (var v=0; v<values.length; v++)
values[v]=values[v].replace(commaRE,',').replace(newlineRE,'\n').replace(/\x22\x22/g,'\x22');
// EXTRACT tiddler values
var title=''; var text=''; var tags=[]; var fields={};
var created=null; var when=new Date(); var who=config.options.txtUserName;
for (var v=0; v<values.length; v++) { var val=values[v];
if (names[v]) switch(names[v].toLowerCase()) {
case 'title': title=val.replace(/\[\]\|/g,'_'); break;
case 'created': created=new Date(val); break;
case 'modified':when=new Date(val); break;
case 'modifier':who=val; break;
case 'text': text=val; break;
case 'tags': tags=val.readBracketedList(); break;
default: fields[names[v].toLowerCase()]=val; break;
}
}
// CREATE tiddler in temporary store
if (title.length) remoteStore.saveTiddler(title,title,text,who,when,tags,fields,true,created||when);
}
return remoteStore.getTiddlers('title');
},
doImport: function(status,params,html,src,xhr) {
var quiet=params.quiet;
var ask=params.ask;
var filter=params.filter;
var force=params.force;
var init=params.init;
var nodirty=params.nodirty;
var norefresh=params.norefresh;
var noreport=params.noreport;
var tiddlers = config.macros.loadTiddlers.readTiddlersFromHTML(html);
if (!tiddler||!tiddlers.length) tiddlers=config.macros.loadTiddlers.readTiddlersFromCSV(html);
var count=tiddlers?tiddlers.length:0;
var querypos=src.lastIndexOf('?'); if (querypos!=-1) src=src.substr(0,querypos);
if (!quiet) displayMessage(config.macros.loadTiddlers.foundMsg.format([count,src.replace(/%20/g,' ')]));
var wasDirty=store.isDirty();
store.suspendNotifications();
var count=0;
if (tiddlers) for (var t=0;t<tiddlers.length;t++) {
var inbound = tiddlers[t];
var theExisting = store.getTiddler(inbound.title);
if (inbound.title==config.macros.loadTiddlers.reportTitle)
continue; // skip 'ImportedTiddlers' history from the other document...
if (theExisting && theExisting.tags.contains(config.macros.loadTiddlers.lockedTag)) {
if (!quiet) displayMessage(config.macros.loadTiddlers.lockedMsg.format([theExisting.title,config.macros.loadTiddlers.lockedTag]));
continue; // skip existing tiddler if tagged with 'noReload'
}
// apply the all/new/changes/updates filter (if any)
if (filter && filter!='all') {
if ((filter=='new') && theExisting) // skip existing tiddlers
continue;
if ((filter=='changes') && !theExisting) // skip new tiddlers
continue;
if ((filter.substr(0,4)=='tag:') && inbound.tags.indexOf(filter.substr(4))==-1) // must match specific tag value
continue;
if ((filter.substr(0,8)=='tiddler:') && inbound.title!=filter.substr(8)) // must match specific tiddler name
continue;
if (!force && store.tiddlerExists(inbound.title) && ((theExisting.modified.getTime()-inbound.modified.getTime())>=0)) {
var msg=config.macros.loadTiddlers.nochangeMsg;
if (!quiet&&msg.length) displayMessage(msg.format([inbound.title]));
continue;
}
}
// get confirmation if required
if (ask && !confirm((theExisting?'Update':'Add')+" tiddler '"+inbound.title+"'\nfrom "+src.replace(/%20/g,' ')+'\n\nOK to proceed?'))
{ tiddlers[t].status=config.macros.loadTiddlers.skippedMsg; continue; }
// DO IT!
var tags=new Array().concat(inbound.tags,config.macros.loadTiddlers.newTags);
store.saveTiddler(inbound.title, inbound.title, inbound.text, inbound.modifier, inbound.modified, tags, inbound.fields, true, inbound.created);
store.fetchTiddler(inbound.title).created = inbound.created; // force creation date to imported value - needed for TW2.1.3 or earlier
tiddlers[t].status=theExisting?'updated':'added'
if (init && tags.contains('systemConfig') && !tags.contains('systemConfigDisable')) {
var ok=true;
if (ask||!quiet) ok=confirm(config.macros.loadTiddlers.warning.format([inbound.title]))
if (ok) { // run the plugin
try { window.eval(inbound); tiddlers[t].status+=' (plugin initialized)'; }
catch(ex) { displayMessage(config.messages.pluginError.format([exceptionText(ex)])); }
}
}
count++;
}
store.resumeNotifications();
if (count) {
// optionally: set/clear 'unsaved changes' flag, refresh page display, and generate a report
store.setDirty(wasDirty||!nodirty);
if (!norefresh) {
story.forEachTiddler(function(t,e){if(!story.isDirty(t))story.refreshTiddler(t,null,true)});
store.notifyAll();
}
if (!noreport) config.macros.loadTiddlers.report(src,tiddlers,count,quiet);
}
// always show final message when tiddlers were actually loaded
if (!quiet||count) displayMessage(config.macros.loadTiddlers.loadedMsg.format([count,tiddlers.length,src.replace(/%20/g,' ')]));
},
report: function(src,tiddlers,count,quiet) {
// format the new report content
var newText = 'On '+(new Date()).toLocaleString()+', ';
newText += config.options.txtUserName+' loaded '+count+' tiddlers ';
newText += 'from\n[['+src+'|'+src+']]:\n';
newText += '<<<\n';
for (var t=0; t<tiddlers.length; t++)
if (tiddlers[t].status)
newText += '#[['+tiddlers[t].title+']] - '+tiddlers[t].status+'\n';
newText += '<<<\n';
// get current report (if any)
var title=config.macros.loadTiddlers.reportTitle;
var currText='';
var theReport = store.getTiddler(title);
if (theReport) currText=((theReport.text!='')?'\n----\n':'')+theReport.text;
// update the ImportedTiddlers content and show the tiddler
store.saveTiddler(title, title, newText+currText, config.options.txtUserName, new Date(), theReport?theReport.tags:null, theReport?theReport.fields:null);
if (!quiet) { story.displayTiddler(null,title,1,null,null,false); story.refreshTiddler(title,1,true); }
}
}
//}}}
^^//René François MORTIER voit le jour le lundi 21 janvier 1788 à Sillé-le-Guillaume (72334).
Il est le fils légitime de Jean MORTIER, et de Françoise CHANTELOUP.
Il s'unit avec Marie Sophie DELAUMONT (1796-1858), la fille légitime de parents non connus.
Ils se marient le mercredi 30 avril 1823 à Meung-sur-Loire (45203).
René F. MORTIER est décédé le lundi 29 mars 1852, à l'âge de 64 ans, à Meung-sur-Loire (45203).//^^
[<img(12%,+)[images/voltigeur.jpg]]
Créés en 1804, les voltigeurs sont des compagnies d’élite comme les grenadiers.
Ils combattent en tirailleurs et doivent leur nom à leur spécialité : devant être transportés rapidement sur le lieu du combat, ils sont exercés à sauter en croupe derrière les cavaliers ou à suivre à pied des cavaliers marchant au trot.
En 1810 sont créés 3 régiments de voltigeurs dans la garde impériale. Il y aura jusqu’à 19 régiments de voltigeurs. Ils seront supprimés en 1814.
^^
| !Numéros d'enregistrement et signalement des sous-officiers et soldats| !Dates de l'arrivée au corps, et dernier domicile des recrues| !Numéros des bataillons ou escadrons, et des compagnies| !Grades, dates des nominations ; actions d'éclat et brevets d'honneur|!Dates et motifs des sorties du corps.| !Décès. Services antérieurs. Blessures, et campagnes de guerre|
|N° 5486 Mortier René François fils de Jean et de Françoise Chanteloup, né le 21 janvier 1788 à Sillé le Guillaume canton de Sillé département de la Sarthe, ''taille d'un mètre 56 centimètres, visage rond front petit et rond yeux roux nez petit bouche moyenne menton rond cheveux et sourcils noirs''|Arrivé au corps le 28 xbre an 1808 conscrit de l'an 1808 Sabotier N° 224 son domicile, à l’époque de son entrée au service, était à Sillé le Guillaume département de la Sarthe| |4e Baton 3e Comp '2e de Voltigrs n°162 (3e 3tre 1812)|a fait les campagnes de 1809 à la [[Grande armée|http://fr.wikipedia.org/wiki/Grande_Arm%C3%A9e_(Premier_Empire)]], 1810, 1811, 1812, 1813, 1814 aux armées de Portugal et des Pyrénées. Passé au 61e de ligne le 1er août 1814 sous le n° matricule 358 (2e de Voltigeurs n°44)|
//Source : registre matricule du 65e rgt de ligne, cote 21Yc544, département de l'armée de terre du château de Vincennes//
^^
<<<
//C'était une idée heureuse : les petits hommes opposés aux grands. Je disais aux voltigeurs : “ vous êtes des couyons : un grenadier vaut soixante voltigeurs. ” Je disais aux grenadiers : “ Vous n'êtes que de grands capons, bons pour manger, mais vivent les voltigeurs pour se battre ! ” Avec cela, on fait tuer tout le monde. Voilà la véritable éloquence militaire...(Napoléon)//
//les voltigeurs ont combattu mille fois plus que la Garde. Ils étaient toujours en tête et elle en réserve. Il ne se tirait pas un coup de fusil sans eux, et la Garde, qui prenait rarement part aux petits combats, donnait presque aussi rarement dans les batailles. Enfin, les voltigeurs étaient l'élite des corps et une partie de la Garde en était le rebut. Quiconque a vu la chose par ses yeux sait que beaucoup de colonels n'envoyaient à Paris que les hommes dont ils voulaient se défaire, tandis que les capitaines de voltigeurs n'admettaient dans leurs compagnies que des soldats d'un courage éprouvé.(Souvenirs du capitaine Desboeufs, p. 205)//
<<<
''Vice-Amiral''
<<<
^^//Vincent Alfred MOULAC voit le jour le vendredi 13 mai 1814 à Lorient (56100) - Morbihan.
Il est le fils légitime de [[Vincent Marie MOULAC|MOULAC Vincent Marie]], âgé de 36 ans et de Fanny LE MÊME, âgée de 18 ans.
Il s'unit avec Marie Aimée DE RABAUDY (1822-1884), la fille légitime de Michel Joseph Guillaume DE RABAUDY et de Marie Anne Suzanne DEVIMES.
Ils se marient le jeudi 28 avril 1842 à Brest (29200) - Finistère.
Vincent A. MOULAC est décédé le dimanche 27 août 1876, à l'âge de 62 ans, à Paris.//^^
<<<
<<<
Entre dans la Marine en 1828, Aspirant le 21 octobre 1829, il embarque sur le "GRIFFON" pour une campagne dans le Pacifique Sud, il passe sur la "FAVORITE" dans les mêmes eaux en décembre 1831. En mai 1832, il est sur l' "OISE", à la Station des côtes d'ALGÉRIE.
Enseigne de vaisseau le 6 janvier 1834, il fait une nouvelle campagne dans les mers du Sud en 1835 sur la "FLORE", la "SIRÈNE" et l' "ACTÉON". De mars 1836 à la fin 1838, il fait campagne dans l'océan Indien, il est notamment Second sur la "PRÉVOYANTE".
Lieutenant de vaisseau le 21 août 1839, il est sur le "NEPTUNE en Méditerranée (voir Théodore LE RAY, Cdt) et sur les côtes occidentales d'AFRIQUE. Il commande le "MOUSTIQUE" et la Station de GRANVILLE de 1843 à 1845. Il est Second sur le "CUVIER" à la Station du Lenvant en 1846, bâtiment détruit par un incendie le 25 janvier 1848, MOULAC se signale par son courage et dévouement.
Capitaine de frégate le 22 juillet 1848, il est Second sur le "JUPITER" en escadre d'évolutions. Il commande le "DAIM" et la Station de GRANVILLE en août 1852. En 1854 il commande le "SOUFFLEUR" en escadre de la Baltique et prend part au bombardement de BOMARSUD.
Capitaine de vaisseau le 2 décembre 1854, il est Second sur le "DUQUESNE" à BREST.
En septembre 1865, Chef du Bureau des mouvements de la flotte. En 1858, il commande l' "ULM" en escadre d'évolutions puis le "REDOUTABLE" et prend part aux opérations en Adriatique pendant la guerre d'ITALIE.
Commandeur de la Légion d'Honneur le 31 décembre 1859.
En novembre 1861, il commande le "BISSON" et la Division du littoral Nord chargée de la protection des pêches en Manche et en mer du Nord.
Contre-Amiral en janvier 1864, Membre de la Commission des phares en mai 1866; en décembre 1867. Commandant en chef la Division navale du Levant avec pavillon sur la "THÉMIS". En juillet 1870, il commande la Marine à DUNKERQUE. En décembre il commande la 3ème Division d'Infanterie de l'Armée du Nord et se distingue le 28 décembre au combat de PONT-NOYELLES. En février 1871, il est Major général de la flotte à ROCHEFORT puis Préfet maritime en octobre.En octobre 1874, Membre du Conseil des travaux de la Marine, en septembre 1875, Membre du Conseil d'Amirauté.
Vice-Amiral en mai 1876, il s'éteint le 27 août à PARIS.
Il est l'inspirateur du décret de juillet 1865 instituant les écoles de pilotage chargées de former les pilotes bretons.
<<<
{{right{^^__Liens Internet :__
[[Sa biographie par Ch. CUNAT|http://books.google.fr/books?id=LLoGAAAAQAAJ&pg=PA524&dq=moulac]]
[[Miasmes délétères à bord de la Melpomène|http://rives.revues.org/document508.html#tocto2]]^^}}}
[<img(30%,auto)[images/moulacxb4.jpg]]
^^//Vincent Marie MOULAC voit le jour le dimanche 22 mars 1778 à Lorient (56100) - Morbihan.
Il s'unit avec Fanny LE MÊME (1795-1877), 19 09 1795, la fille légitime de [[François Thomas LE MÊME]] et de Marie Cécile ROBIN.
Ils se marient le mercredi 23 janvier 1811 à Port-Louis.
Le 13 mai 1814 naît son fils [[Vincent Alfred MOULAC]].
Vincent M. MOULAC est décédé le mercredi 6 avril 1836, à l'âge de 58 ans, à Callao.//^^
^^// "... la voix du second capitaine Moulac se faisiat entendre. Jamais organe plus noble, jamais commandement plus précis, ne firent résonner un porte-voix ..."// Ch. Cunat. Le Revenant, commandant Potier, 24 Mai 1808, combat le navire portugais la //Conceçao//^^
<<<
... servit avec distinction, sur le corsaire le Revenant, comme second du fameux Surcouf.
<<<
{{center{[img(++,auto)[images/service_surcouf.jpg]]}}}
<<<
... Il se trouva là sous les ordres du brave Bouvet et de l'amiral Duperré , et participa, sur la Minerve , à la prise de trois vaisseaux de la compagnie des Indes. Il reçut le commandement du Ceylan, l'un de ces vaisseaux, lequel fit partie des bâtiments[>img(30%,auto)[images/gran-port.jpg]] ( la Bellone, la Minerve et le Victor) qui forcèrent la passe du [[Grand Port|http://fr.wikipedia.org/wiki/Bataille_de_Grand_Port]] à l'Ile- de-France.
Il prit une part glorieuse au beau fait d'armes qui mit le comble à la réputation de l'amiral Duperré, en contribuant à la prise et à la reddition des quatre frégates anglaises qui défendaient cette entrée. Il fut décoré de la croix de la Légion d'honneur à cette brillante affaire, dans laquelle il fut grièvement blessé.
<<<
<<<
[<img(25%,auto)[images/tage.jpg]]
... fit partie de l'escadre du [[Tage|http://fr.wikipedia.org/wiki/Combat_du_Tage]], commandée par l'amiral Roussin, qui franchit, sous le feu de l'ennemi, rentrée de ce fleuve, jusque-là réputée infranchissable. Ce fait d'armes est regardé par toutes les marines comme un des plus glorieux de l'histoire ; et le capitaine Moulac y fut nommé commandeur de la Légion d'honneur. Les vœux du général en chef et de tous les officiers de l'escadre appelaient une récompense plus éclatante.
<<<
<<<
... L'amiral Duperré en vue sans doute de lui aplanir les voies au grade de contre amiral le nomma commandant de la division des mers du Sud Ce fut en cette qualité que le 9 janvier 1835 il arbora son guidon sur la frégate la Flore ... à son arrivée à Valparaiso, il apprit qu'une révolution venait d'éclater au Pérou, et que le pavillon français y deviendrait pour nos nationaux un gage de sécurité ... La guerre civile, alors dans toute son intensité, fut pou lui une nouvelle occasion de faire éclater tout la noblesse de son âme ... Plus de cent cinquante femmes, enfants et vieillards durent à cette active bienveillance un asile sur la Flore ... sa mort, qui arriva le lendemain. Elle fut l'objet d'un deuil général : Anglais, Américains, Péruviens , tous s'empressèrent de témoigner le regret qu'ils ressentaient de la perte d'un homme dont le, nom est encore béni au Pérou, et que sa droiture, sa fermeté, son humanité y faisaient considérer comme le défenseur de tous les opprimés , l'arbitre des destinées du pays.
<<<
!''Histoires de familles''
<html><a href="javascript:void(0)" onclick="story.closeAllTiddlers();story.displayTiddlers(null,store.getTiddlerText('DefaultTiddlers').readBracketedList())"
><span title="Retour à la page d'accueil" style="cursor:pointer">Accueil</span></a></html>
@@display:none;<<tiddler ToggleRightSidebar>>@@
<<QOTD ImageAuHasard 60000>>
* <<search>>
<<slider chkTagContents [[Mise-à-jour]] 'Articles récents »' >>
<<slider chkTagContents [[Répartition géographique]] 'Répartition géographique »' 'Répartition géographique'>>
<<slider chkTagContents [[Liens]] 'Liens »' 'liens'>>
<!--{{{-->
<link rel='alternate' type='application/rss+xml' title='RSS' href='index.xml' />
<link rel="shortcut icon" href="img/favicon.ico">
<style type="text/css">#contentWrapper {display:none;}</style><div id="SplashScreen" style="border: 3px solid #ccc; display: block; text-align: center; width: 320px; margin: 100px auto; padding: 50px; color:#000; font-size: 28px; font-family:Tahoma; background-color:#eee;"><b>Histoires de familles</b> en cours de chargement<blink> ...</blink><br><br><span style="font-size: 14px; color:red;">Javascript nécessaire.</span></div>
<!--}}}-->
~~
<<<
!!!15 août 1685 - Bail du moulin de Girolle en la paroisse de Gironville à Paul Lecoq par Jacques Huché fermier du moulin - AD91 2E52/12
<<<
<<<
!!!1 février 1734 - Requête du Seigneur de Fleury contre les meuniers qui vont à la "quête au grains" dans les paroisses de Fleury et St Martin - AD77 427F37
"les nommés ... Etienne Lecocq meunié demeurent en la paroisse de Courance, Etienne Lecocq le jeune meunié demeurent en la paroisse de Dan(e)mois ... sont journelment et leurs garsons meuniés à la questes dans les dites paroisses de Fleury, St Martin et dépandence, au détriment de ... ses meuniers qui ce trouvent sens occupation et par ce moyen hors d'état de payer leur location ... pour voir dire que deffance leur seront faites de plus alavenir aller, ny envoyer, à la quette des bleds et autres grains ... qu'ils seront condamnés en chacun cent livres d'amande, domage, et intairest et aux dépens ..."
<<<
<<<
!!!18 Avril 1734 - Bail du grand moulin à eau de Danemois par la Dame de Courances à Paul Lecoq meunier du moulin neuf à Soisy sur Ecole en présence d'Etienne Lecoq - AD91 2E30/6
<<<
<<<
!!!6 décembre 1734 - Prisée du moulin de Danemois pour Etienne Lecoq (fils) sortant et Paul Lecoq entrant venant du Moulin Neuf à Soisy sur Ecole - AD 91 2E30/6
//Total prisée 760 livres 10 sols, Paul Lecoq s'engage à payer la somme de 300 livres 5 sols, dû à Etienne fils à Etienne père à Courances pour couvrir tout ou partie des dettes d'Etienne fils envers son père.//
<<<
<<<
!!!6 septembre 1737 - Bail du moulin de Choiseau à Etienne Lecoq (fils) par le seigneur de Fleury pour 6 à 9 ans à compter du 25 janvier 1737, pour la somme de 500 livres par an et 6 chapons ( gras et honnétes ) à Noël de chaque année - AD91 2E30/6
<<<
<<<
!!!8 janvier 1738 - Bail du moulin de Courance par la Dame de Courance à Etienne Lecoq (père) à compter de 1er Mars 1739 - AD91 2E30/7
//Bail de 9 ans pour 80 hectolitres de grains, 275 livres "en espéces d'argent" par année, 12 chapons, 12 cabards, et 2 gâteaux ( ou 40 sols d'argent)
Estienne Lecoq est cité comme meunier à Courances depuis "nombre d'années".//
<<<
~~
<<forEachTiddler
where
'tiddler.title.toUpperCase()&& ! tiddler.tags.containsAny(["excludeLists","systemConfig","TWServer", "CSS", "Brouillon"])'
sortBy
tiddler.modified
descending
write
'(index < 10) ? "* [["+tiddler.title+"]]\n" : ""'
>>
!Moulin de Dannemois
[<img(19%+,+)[images/moulin-dannemois.jpg]]
~~
//
<<<
!!_A_
!!Avocat en Parlement
!!_B_
!!Bordager
!!_C_
!!Capitaine corsaire : Le Même
!!Capitoul,
!!maître Chirurgien,
!!Conseiller au Parlement,
!!Cordonnier
!!_D_
!!Député : Auguis
!!_I_
!!Ingénieur du génie maritime : Antoine
!!_L_
!!Laboureur
!!_M_
!!Maître à danser : Le Tellier,
!!Maître d'école : Antoine
!!Maître éventailliste : Clerfeuille, Delioux de Savignac
!!Meunier : Lecoq, Desrez, Courtellemont
!!_N_
!!Notaire : Lecoq, Rousseau
!!Négociant
!!_O_
!!Officier de marine : Delioux de Savignac, Moulac, Rabaudy, Roy
!!_P_
!!Professeur de Mathématiques : Antoine
!!_T_
!!Tailleur d'habits : Langlois
!!_S_
!!Sabotier : Mortier
!!_V_
!!Vigneron
//
~~
<<<
/***
|Name|NestedSlidersPlugin|
|Source|http://www.TiddlyTools.com/#NestedSlidersPlugin|
|Version|2.3.2|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides|Slider.prototype.stop|
|Description|show content in nest-able 'slider' or 'floating' panels, without needing to create separate tiddlers for each panel|
!!!!!Configuration
<<<
Enable animation for slider panels
<<option chkFloatingSlidersAnimate>> allow sliders to animate when opening/closing
>(note: This setting is in //addition// to the general option for enabling/disabling animation effects:
><<option chkAnimate>> enable animations (entire document)
>For slider animation to occur, you must also allow animation in general.
Debugging messages for 'lazy sliders' deferred rendering:
<<option chkDebugLazySliderDefer>> show debugging alert when deferring slider rendering
<<option chkDebugLazySliderRender>> show debugging alert when deferred slider is actually rendered
<<<
!!!!!Usage
<<<
When installed, this plugin adds new wiki syntax for embedding 'slider' panels directly into tiddler content. Use {{{+++}}} and {{{===}}} to delimit the slider content. You can also 'nest' these sliders as deep as you like (see complex nesting example below), so that expandable 'tree-like' hierarchical displays can be created. This is most useful when converting existing in-line text content to create in-line annotations, footnotes, context-sensitive help, or other subordinate information displays.
Additional optional syntax elements let you specify
*default to open
*cookiename
*heading level
*floater (with optional CSS width value)
*transient display (clicking elsewhere closes panel)
*custom class/label/tooltip/accesskey
*alternate label/tooltip (displayed when panel is open)
*panelID (for later use with {{{<<DOM>>}}} macro. See [[DOMTweaksPlugin]])
*automatic blockquote style on panel
*deferred rendering of panel content
The complete syntax, using all options, is:
//{{{
++++(cookiename)!!!!!^width^*{{class{[label=key|tooltip][altlabel|alttooltip]}}}#panelID:>...
content goes here
===
//}}}
where:
* {{{+++}}} (or {{{++++}}}) and {{{===}}}<br>marks the start and end of the slider definition, respectively. When the extra {{{+}}} is used, the slider will be open when initially displayed.
* {{{(cookiename)}}}<br>saves the slider opened/closed state, and restores this state whenever the slider is re-rendered.
* {{{!}}} through {{{!!!!!}}}<br>displays the slider label using a formatted headline (Hn) style instead of a button/link style
* {{{^width^}}} (or just {{{^}}})<br>makes the slider 'float' on top of other content rather than shifting that content downward. 'width' must be a valid CSS value (e.g., "30em", "180px", "50%", etc.). If omitted, the default width is "auto" (i.e., fit to content)
* {{{"*"}}} //(without the quotes)//<br>denotes "transient display": when a click occurs elsewhere in the document, the slider/floating panel will be automatically closed. This is useful for creating 'pulldown menus' that automatically go away after they are used. //Note: using SHIFT-click on a slider label will open/close that slider without triggering the automatic closing of any transient slider panels that are currently displayed, permitting ''temporary'' display of several transient panels at once.//
* """{{class{[label=key|tooltip][altlabel|alttooltip]}}}"""<br>uses label/tooltip/accesskey. """{{class{...}}}""", """=key""", """|tooltip""" and """[altlabel|alttooltip]""" are optional. 'class' is any valid CSS class name, used to style the slider label text. 'key' must be a ''single letter only''. altlabel/alttooltip specifiy alternative label/tooltip for use when slider/floating panel is displayed.
* {{{#panelID:}}}<br>defines a unique DOM element ID that is assigned to the panel element used to display the slider content. This ID can then be used later to reposition the panel using the {{{<<DOM move id>>}}} macro (see [[DOMTweaksPlugin]]), or to access/modify the panel element through use of {{{document.getElementById(...)}}}) javascript code in a plugin or inline script.
* {{{">"}}} //(without the quotes)//<br>automatically adds blockquote formatting to slider content
* {{{"..."}}} //(without the quotes)//<br>defers rendering of closed sliders until the first time they are opened. //Note: deferred rendering may produce unexpected results in some cases. Use with care.//
//Note: to make slider definitions easier to read and recognize when editing a tiddler, newlines immediately following the {{{+++}}} 'start slider' or preceding the {{{===}}} 'end slider' sequence are automatically supressed so that excess whitespace is eliminated from the output.//
<<<
!!!!!Examples
<<<
simple in-line slider:
{{{
+++
content
===
}}}
+++
content
===
----
use a custom label and tooltip:
{{{
+++[label|tooltip]
content
===
}}}
+++[label|tooltip]
content
===
----
content automatically blockquoted:
{{{
+++>
content
===
}}}
+++>
content
===
----
all options combined //(default open, cookie, heading, sized floater, transient, class, label/tooltip/key, blockquoted, deferred)//
{{{
++++(testcookie)!!!^30em^*{{big{[label=Z|click or press Alt-Z to open]}}}>...
content
===
}}}
++++(testcookie)!!!^30em^*{{big{[label=Z|click or press Alt-Z to open]}}}>...
content
===
----
complex nesting example:
{{{
+++[get info...=I|click for information or press Alt-I]
put some general information here,
plus a floating panel with more specific info:
+++^10em^[view details...|click for details]
put some detail here, which could in turn contain a transient panel,
perhaps with a +++^25em^*[glossary definition]explaining technical terms===
===
===
}}}
+++[get info...=I|click for information or press Alt-I]
put some general information here,
plus a floating panel with more specific info:
+++^10em^[view details...|click for details]
put some detail here, which could in turn contain a transient panel,
perhaps with a +++^25em^*[glossary definition]explaining technical terms===
===
===
<<<
!!!!!Installation
<<<
import (or copy/paste) the following tiddlers into your document:
''NestedSlidersPlugin'' (tagged with <<tag systemConfig>>)
<<<
!!!!!Revision History
<<<
''2007.11.14 - 2.3.2'' in onClickNestedSlider(), prevent SHIFT-click events from opening a new, empty browser window by setting "cancelBubble=true" and calling "stopPropagation()". Note: SHIFT-click is still processed as a normal click (i.e., it toggles the slider panel display). Also, using SHIFT-click will prevent 'transient' sliders from being automatically closed when another slider is opened, allowing you to *temporarily* display several transient sliders at once.
''2007.07.26 - 2.3.1'' in document.onclick(), propagate return value from hijacked core click handler to consume OR bubble up click as needed. Fixes "IE click disease", whereby nearly every mouse click causes a page transition.
|please see [[NestedSlidersPluginHistory]] for additional revision details|
''2005.11.03 - 1.0.0'' initial public release
<<<
!!!!!Credits
<<<
This feature was implemented by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]] with initial research and suggestions from RodneyGomes, GeoffSlocock, and PaulPetterson.
<<<
!!!!!Code
***/
//{{{
version.extensions.nestedSliders = {major: 2, minor: 3, revision: 2, date: new Date(2007,11,14)};
//}}}
//{{{
// options for deferred rendering of sliders that are not initially displayed
if (config.options.chkDebugLazySliderDefer==undefined) config.options.chkDebugLazySliderDefer=false;
if (config.options.chkDebugLazySliderRender==undefined) config.options.chkDebugLazySliderRender=false;
if (config.options.chkFloatingSlidersAnimate==undefined) config.options.chkFloatingSlidersAnimate=false;
// default styles for 'floating' class
setStylesheet(".floatingPanel { position:absolute; z-index:10; padding:0.5em; margin:0em; \
background-color:#eee; color:#000; border:1px solid #000; text-align:left; }","floatingPanelStylesheet");
//}}}
//{{{
config.formatters.push( {
name: "nestedSliders",
match: "\\n?\\+{3}",
terminator: "\\s*\\={3}\\n?",
lookahead: "\\n?\\+{3}(\\+)?(\\([^\\)]*\\))?(\\!*)?(\\^(?:[^\\^\\*\\[\\>]*\\^)?)?(\\*)?(?:\\{\\{([\\w]+[\\s\\w]*)\\{)?(\\[[^\\]]*\\])?(\\[[^\\]]*\\])?(?:\\}{3})?(\\#[^:]*\\:)?(\\>)?(\\.\\.\\.)?\\s*",
handler: function(w)
{
lookaheadRegExp = new RegExp(this.lookahead,"mg");
lookaheadRegExp.lastIndex = w.matchStart;
var lookaheadMatch = lookaheadRegExp.exec(w.source)
if(lookaheadMatch && lookaheadMatch.index == w.matchStart)
{
// var defopen=lookaheadMatch[1]
// var cookiename=lookaheadMatch[2]
// var header=lookaheadMatch[3]
// var panelwidth=lookaheadMatch[4]
// var transient=lookaheadMatch[5]
// var class=lookaheadMatch[6]
// var label=lookaheadMatch[7]
// var openlabel=lookaheadMatch[8]
// var panelID=lookaheadMatch[9]
// var blockquote=lookaheadMatch[10]
// var deferred=lookaheadMatch[11]
// location for rendering button and panel
var place=w.output;
// default to closed, no cookie, no accesskey, no alternate text/tip
var show="none"; var cookie=""; var key="";
var closedtext=">"; var closedtip="";
var openedtext="<"; var openedtip="";
// extra "+", default to open
if (lookaheadMatch[1]) show="block";
// cookie, use saved open/closed state
if (lookaheadMatch[2]) {
cookie=lookaheadMatch[2].trim().slice(1,-1);
cookie="chkSlider"+cookie;
if (config.options[cookie]==undefined)
{ config.options[cookie] = (show=="block") }
show=config.options[cookie]?"block":"none";
}
// parse label/tooltip/accesskey: [label=X|tooltip]
if (lookaheadMatch[7]) {
var parts=lookaheadMatch[7].trim().slice(1,-1).split("|");
closedtext=parts.shift();
if (closedtext.substr(closedtext.length-2,1)=="=")
{ key=closedtext.substr(closedtext.length-1,1); closedtext=closedtext.slice(0,-2); }
openedtext=closedtext;
if (parts.length) closedtip=openedtip=parts.join("|");
else { closedtip="show "+closedtext; openedtip="hide "+closedtext; }
}
// parse alternate label/tooltip: [label|tooltip]
if (lookaheadMatch[8]) {
var parts=lookaheadMatch[8].trim().slice(1,-1).split("|");
openedtext=parts.shift();
if (parts.length) openedtip=parts.join("|");
else openedtip="hide "+openedtext;
}
var title=show=='block'?openedtext:closedtext;
var tooltip=show=='block'?openedtip:closedtip;
// create the button
if (lookaheadMatch[3]) { // use "Hn" header format instead of button/link
var lvl=(lookaheadMatch[3].length>6)?6:lookaheadMatch[3].length;
var btn = createTiddlyElement(createTiddlyElement(place,"h"+lvl,null,null,null),"a",null,lookaheadMatch[6],title);
btn.onclick=onClickNestedSlider;
btn.setAttribute("href","javascript:;");
btn.setAttribute("title",tooltip);
}
else
var btn = createTiddlyButton(place,title,tooltip,onClickNestedSlider,lookaheadMatch[6]);
btn.innerHTML=title; // enables use of HTML entities in label
// set extra button attributes
btn.setAttribute("closedtext",closedtext);
btn.setAttribute("closedtip",closedtip);
btn.setAttribute("openedtext",openedtext);
btn.setAttribute("openedtip",openedtip);
btn.sliderCookie = cookie; // save the cookiename (if any) in the button object
btn.defOpen=lookaheadMatch[1]!=null; // save default open/closed state (boolean)
btn.keyparam=key; // save the access key letter ("" if none)
if (key.length) {
btn.setAttribute("accessKey",key); // init access key
btn.onfocus=function(){this.setAttribute("accessKey",this.keyparam);}; // **reclaim** access key on focus
}
btn.onmouseover=function(event) // mouseover on button aligns floater position with button
{ if (window.adjustSliderPos) window.adjustSliderPos(this.parentNode,this,this.sliderPanel,this.sliderPanel.className); }
// create slider panel
var panelClass=lookaheadMatch[4]?"floatingPanel":"sliderPanel";
var panelID=lookaheadMatch[9]; if (panelID) panelID=panelID.slice(1,-1); // trim off delimiters
var panel=createTiddlyElement(place,"div",panelID,panelClass,null);
panel.button = btn; // so the slider panel know which button it belongs to
btn.sliderPanel=panel; // so the button knows which slider panel it belongs to
panel.defaultPanelWidth=(lookaheadMatch[4] && lookaheadMatch[4].length>2)?lookaheadMatch[4].slice(1,-1):"";
panel.setAttribute("transient",lookaheadMatch[5]=="*"?"true":"false");
panel.style.display = show;
panel.style.width=panel.defaultPanelWidth;
panel.onmouseover=function(event) // mouseover on panel aligns floater position with button
{ if (window.adjustSliderPos) window.adjustSliderPos(this.parentNode,this.button,this,this.className); }
// render slider (or defer until shown)
w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;
if ((show=="block")||!lookaheadMatch[11]) {
// render now if panel is supposed to be shown or NOT deferred rendering
w.subWikify(lookaheadMatch[10]?createTiddlyElement(panel,"blockquote"):panel,this.terminator);
// align floater position with button
if (window.adjustSliderPos) window.adjustSliderPos(place,btn,panel,panelClass);
}
else {
var src = w.source.substr(w.nextMatch);
var endpos=findMatchingDelimiter(src,"+++","===");
panel.setAttribute("raw",src.substr(0,endpos));
panel.setAttribute("blockquote",lookaheadMatch[10]?"true":"false");
panel.setAttribute("rendered","false");
w.nextMatch += endpos+3;
if (w.source.substr(w.nextMatch,1)=="\n") w.nextMatch++;
if (config.options.chkDebugLazySliderDefer) alert("deferred '"+title+"':\n\n"+panel.getAttribute("raw"));
}
}
}
}
)
// TBD: ignore 'quoted' delimiters (e.g., "{{{+++foo===}}}" isn't really a slider)
function findMatchingDelimiter(src,starttext,endtext) {
var startpos = 0;
var endpos = src.indexOf(endtext);
// check for nested delimiters
while (src.substring(startpos,endpos-1).indexOf(starttext)!=-1) {
// count number of nested 'starts'
var startcount=0;
var temp = src.substring(startpos,endpos-1);
var pos=temp.indexOf(starttext);
while (pos!=-1) { startcount++; pos=temp.indexOf(starttext,pos+starttext.length); }
// set up to check for additional 'starts' after adjusting endpos
startpos=endpos+endtext.length;
// find endpos for corresponding number of matching 'ends'
while (startcount && endpos!=-1) {
endpos = src.indexOf(endtext,endpos+endtext.length);
startcount--;
}
}
return (endpos==-1)?src.length:endpos;
}
//}}}
//{{{
window.onClickNestedSlider=function(e)
{
if (!e) var e = window.event;
var theTarget = resolveTarget(e);
var theLabel = theTarget.firstChild.data;
var theSlider = theTarget.sliderPanel
var isOpen = theSlider.style.display!="none";
// toggle label
theTarget.innerHTML=isOpen?theTarget.getAttribute("closedText"):theTarget.getAttribute("openedText");
// toggle tooltip
theTarget.setAttribute("title",isOpen?theTarget.getAttribute("closedTip"):theTarget.getAttribute("openedTip"));
// deferred rendering (if needed)
if (theSlider.getAttribute("rendered")=="false") {
if (config.options.chkDebugLazySliderRender)
alert("rendering '"+theLabel+"':\n\n"+theSlider.getAttribute("raw"));
var place=theSlider;
if (theSlider.getAttribute("blockquote")=="true")
place=createTiddlyElement(place,"blockquote");
wikify(theSlider.getAttribute("raw"),place);
theSlider.setAttribute("rendered","true");
}
// show/hide the slider
if(config.options.chkAnimate && (theSlider.className!='floatingPanel' || config.options.chkFloatingSlidersAnimate))
anim.startAnimating(new Slider(theSlider,!isOpen,e.shiftKey || e.altKey,"none"));
else
theSlider.style.display = isOpen ? "none" : "block";
// reset to default width (might have been changed via plugin code)
theSlider.style.width=theSlider.defaultPanelWidth;
// align floater panel position with target button
if (!isOpen && window.adjustSliderPos) window.adjustSliderPos(theSlider.parentNode,theTarget,theSlider,theSlider.className);
// if showing panel, set focus to first 'focus-able' element in panel
if (theSlider.style.display!="none") {
var ctrls=theSlider.getElementsByTagName("*");
for (var c=0; c<ctrls.length; c++) {
var t=ctrls[c].tagName.toLowerCase();
if ((t=="input" && ctrls[c].type!="hidden") || t=="textarea" || t=="select")
{ ctrls[c].focus(); break; }
}
}
var cookie=theTarget.sliderCookie;
if (cookie && cookie.length) {
config.options[cookie]=!isOpen;
if (config.options[cookie]!=theTarget.defOpen)
saveOptionCookie(cookie);
else { // remove cookie if slider is in default display state
var ex=new Date(); ex.setTime(ex.getTime()-1000);
document.cookie = cookie+"=novalue; path=/; expires="+ex.toGMTString();
}
}
// prevent SHIFT-CLICK from being processed by browser (opens blank window... yuck!)
// but allow plain click to bubble up to page background (to dismiss open popup, if any)
if (e.shiftKey) { e.cancelBubble=true; if (e.stopPropagation) e.stopPropagation(); }
return false;
}
//}}}
//{{{
// click in document background closes transient panels
document.nestedSliders_savedOnClick=document.onclick;
document.onclick=function(ev) { if (!ev) var ev=window.event; var target=resolveTarget(ev);
// call original click handler
if (document.nestedSliders_savedOnClick)
var retval=document.nestedSliders_savedOnClick.apply(this,arguments);
// if click was inside transient panel (or something contained by a transient panel)... leave it alone
var p=target;
while (p)
if ((p.className=="floatingPanel"||p.className=="sliderPanel")&&p.getAttribute("transient")=="true") break;
else p=p.parentNode;
if (p) return retval;
// otherwise, find and close all transient panels...
var all=document.all?document.all:document.getElementsByTagName("DIV");
for (var i=0; i<all.length; i++) {
// if it is not a transient panel, or the click was on the button that opened this panel, don't close it.
if (all[i].getAttribute("transient")!="true" || all[i].button==target) continue;
// otherwise, if the panel is currently visible, close it by clicking it's button
if (all[i].style.display!="none") window.onClickNestedSlider({target:all[i].button})
}
return retval;
};
//}}}
//{{{
// adjust floating panel position based on button position
if (window.adjustSliderPos==undefined) window.adjustSliderPos=function(place,btn,panel,panelClass) {
if (panelClass=="floatingPanel") {
var left=0;
var top=btn.offsetHeight;
if (place.style.position!="relative") {
var left=findPosX(btn);
var top=findPosY(btn)+btn.offsetHeight;
var p=place; while (p && p.className!='floatingPanel') p=p.parentNode;
if (p) { left-=findPosX(p); top-=findPosY(p); }
}
if (findPosX(btn)+panel.offsetWidth > getWindowWidth()) // adjust position to stay inside right window edge
left-=findPosX(btn)+panel.offsetWidth-getWindowWidth()+15; // add extra 15px 'fudge factor'
panel.style.left=left+"px"; panel.style.top=top+"px";
}
}
function getWindowWidth() {
if(document.width!=undefined)
return document.width; // moz (FF)
if(document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) )
return document.documentElement.clientWidth; // IE6
if(document.body && ( document.body.clientWidth || document.body.clientHeight ) )
return document.body.clientWidth; // IE4
if(window.innerWidth!=undefined)
return window.innerWidth; // IE - general
return 0; // unknown
}
//}}}
//{{{
// TW2.1 and earlier:
// hijack Slider animation handler 'stop' handler so overflow is visible after animation has completed
Slider.prototype.coreStop = Slider.prototype.stop;
Slider.prototype.stop = function()
{ this.coreStop.apply(this,arguments); this.element.style.overflow = "visible"; }
// TW2.2+
// hijack Morpher animation handler 'stop' handler so overflow is visible after animation has completed
if (version.major+.1*version.minor+.01*version.revision>=2.2) {
Morpher.prototype.coreStop = Morpher.prototype.stop;
Morpher.prototype.stop = function()
{ this.coreStop.apply(this,arguments); this.element.style.overflow = "visible"; }
}
//}}}
{{center{[img(++,auto)[images/Cartes_Occitanie.png]]}}}
<<<
[<img(6%,auto)[images/puybusque_b.jpg]]
Le cas des [[Puybusque|http://gw5.geneanet.org/index.php3?b=yml&lang=fr;pz=xx;nz=lecoq;ocz=0;m=N;v=de+PUYBUSQUE;t=A]] est unique à Toulouse. Ils ont exercé cinquante [[capitoulats|http://fr.wikipedia.org/wiki/Capitoul]] !
Tout permet de penser que la famille était issue de Pechbusque, dans la banlieue sud actuelle de Toulouse.
<<<
{{center{[img(++,auto)[images/capitoul.jpg]]}}}
<<<
[<img(6%,auto)[images/009_puybusque.jpg]]
La branche aînée, de Mauremont, part de Raimond Ier, qui fut capitoul en 1222 et 1230, et combattit aux côtés du comte Raimond VI dans toutes les grandes batailles de la croisade albigoise.
<<<
<<<
^^//Jeanne de PUYBUSQUE est née à une date inconnue.
Elle est la fille légitime de Raymond de PUYBUSQUE et de Quitterie de MIGLOS.
Elle s'unit avec Pierre d'HAUTPOUL (1525-), conseiller au parlement de Toulouse, le fils légitime de Georges d'HAUTPOUL et de Jeanne YSALGUIER de CLERMONT.
Ils se marient le lundi 20 septembre 1557.^^//<<<
<!--{{{-->
<!-- <div class='header' macro='gradient vert [[ColorPalette::GrisMacClar]] [[ColorPalette::GrisMacFosc]]'> -->
<div class='headerForeground'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
</div>
<div id='mainMenu' refresh='content' force='true' tiddler='MainMenu'></div>
<div id='sidebar'>
<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
</div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlersBar' refresh='none' ondblclick='config.macros.tiddlersBar.onTiddlersBarAction(event)'></div>
<div id='tiddlerDisplay'></div>
</div>
<!--}}}-->
<!--{{{-->
<!-- <div class='header' macro='gradient vert [[ColorPalette::GrisMacClar]] [[ColorPalette::GrisMacFosc]]'> -->
<div class='headerShadow'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
<div class='TopMenu' refresh='content' tiddler='TopMenu'></div>
</div>
<div class='headerForeground'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
</div>
<div id='mainMenu' refresh='content' force='true' tiddler='MainMenu'></div>
<div id='sidebar'>
<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
<!-- <div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div> -->
</div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlersBar' refresh='none' ondblclick='config.macros.tiddlersBar.onTiddlersBarAction(event)'></div>
<div id='tiddlerDisplay'></div>
</div>
<!--}}}-->
<!--{{{-->
<!-- <div class='header' macro='gradient vert [[ColorPalette::GrisMacClar]] [[ColorPalette::GrisMacFosc]]'> -->
<div class='headerShadow'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
<div class='headerForeground'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
</div>
<div id='mainMenu' refresh='content' force='true' tiddler='MainMenu'></div>
<div id='sidebar'>
<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
<!-- <div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div> -->
</div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlersBar' refresh='none' ondblclick='config.macros.tiddlersBar.onTiddlersBarAction(event)'></div>
<div id='tiddlerDisplay'></div>
</div>
<!--}}}-->
/***
|Name|QuoteOfTheDayPlugin|
|Source|http://www.TiddlyTools.com/#QuoteOfTheDayPlugin|
|Documentation|http://www.TiddlyTools.com/#QuoteOfTheDayPluginInfo|
|Version|1.4.1|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides||
|Description|Display a randomly selected "quote of the day" from a list defined in a separate tiddler|
!!!!!Documentation
>see [[QuoteOfTheDayPluginInfo]]
!!!!!Revisions
<<<
2008.03.21 [1.4.1] in showNextItem(), corrected handling for random selection so that //initial// index value will randomized correctly instead of always showing first item, even when randomizing. Thanks to Riccardo Gherardi for finding this.
| Please see [[QuoteOfTheDayPluginInfo]] for previous revision details |
2005.10.21 [1.0.0] Initial Release. Based on a suggestion by M.Russula
<<<
!!!!!Code
***/
//{{{
version.extensions.QuoteOfTheDayPlugin= {major: 1, minor: 4, revision: 1, date: new Date(2008,3,21)};
config.macros.QOTD = {
clickTooltip: "click to view another item",
timerTooltip: "auto-timer stopped... 'mouseout' to restart timer",
timerClickTooltip: "auto-timer stopped... click to view another item, or 'mouseout' to restart timer",
handler:
function(place,macroName,params) {
var tid=params.shift(); // source tiddler containing HR-separated quotes
var p=params.shift();
var click=true; // allow click for next item
var inline=false; // wrap in slider for animation effect
var random=true; // pick an item at random (default for "quote of the day" usage)
var folder=false; // use local filesystem folder list
var cookie=""; // default to no cookie
var next=0; // default to first item (or random item)
while (p) {
if (p.toLowerCase()=="noclick") var click=false;
if (p.toLowerCase()=="inline") var inline=true;
if (p.toLowerCase()=="norandom") var random=false;
if (p.toLowerCase().substr(0,7)=="cookie:") var cookie=p.substr(8);
if (!isNaN(p)) var delay=p;
p=params.shift();
}
if ((click||delay) && !inline) {
var panel = createTiddlyElement(null,"div",null,"sliderPanel");
panel.style.display="none";
place.appendChild(panel);
var here=createTiddlyElement(panel,click?"a":"span",null,"QOTD");
}
else
var here=createTiddlyElement(place,click?"a":"span",null,"QOTD");
here.id=(new Date()).convertToYYYYMMDDHHMMSSMMM()+Math.random().toString(); // unique ID
// get items from tiddler or file list
var list=store.getTiddlerText(tid,"");
if (!list||!list.length) { // not a tiddler... maybe an image directory?
var list=this.getImageFileList(tid);
if (!list.length) { // maybe relative path... fixup and try again
var h=document.location.href;
var p=getLocalPath(decodeURIComponent(h.substr(0,h.lastIndexOf("/")+1)));
var list=this.getImageFileList(p+tid);
}
}
if (!list||!list.length) return false; // no contents... nothing to display!
here.setAttribute("list",list);
if (delay) here.setAttribute("delay",delay);
here.setAttribute("random",random);
here.setAttribute("cookie",cookie);
if (click) {
here.title=this.clickTooltip
if (!inline) here.style.display="block";
here.setAttribute("href","javascript:;");
here.onclick=function(event)
{ config.macros.QOTD.showNextItem(this); }
}
if (config.options["txtQOTD_"+cookie]!=undefined) next=parseInt(config.options["txtQOTD_"+cookie]);
here.setAttribute("nextItem",next);
config.macros.QOTD.showNextItem(here);
if (delay) {
here.title=click?this.timerClickTooltip:this.timerTooltip
here.onmouseover=function(event)
{ clearTimeout(this.ticker); };
here.onmouseout=function(event)
{ this.ticker=setTimeout("config.macros.QOTD.tick('"+this.id+"')",this.getAttribute("delay")); };
here.ticker=setTimeout("config.macros.QOTD.tick('"+here.id+"')",delay);
}
},
tick: function(id) {
var here=document.getElementById(id); if (!here) return;
config.macros.QOTD.showNextItem(here);
here.ticker=setTimeout("config.macros.QOTD.tick('"+id+"')",here.getAttribute("delay"));
},
showNextItem:
function (here) {
// hide containing slider panel (if any)
var p=here.parentNode;
if (p.className=="sliderPanel") p.style.display = "none"
// get a new quote
var index=here.getAttribute("nextItem");
var items=here.getAttribute("list").split("\n----\n");
if (index<0||index>=items.length) index=0;
if (here.getAttribute("random")=="true") index=Math.floor(Math.random()*items.length);
var txt=items[index];
// re-render quote display element, and advance index counter
removeChildren(here); wikify(txt,here);
index++; here.setAttribute("nextItem",index);
var cookie=here.getAttribute("cookie");
if (cookie.length) {
config.options["txtQOTD_"+cookie]=index.toString();
saveOptionCookie("txtQOTD_"+cookie);
}
// redisplay slider panel (if any)
if (p.className=="sliderPanel") {
if(anim && config.options.chkAnimate)
anim.startAnimating(new Slider(p,true,false,"none"));
else p.style.display="block";
}
},
getImageFileList: function(cwd) { // returns HR-separated list of image files
function isImage(fn) {
var ext=fn.substr(fn.length-3,3).toLowerCase();
return ext=="jpg"||ext=="gif"||ext=="png";
}
var files=[];
if (config.browser.isIE) {
cwd=cwd.replace(/\//g,"\\");
// IE uses ActiveX to read filesystem info
var fso = new ActiveXObject("Scripting.FileSystemObject");
if(!fso.FolderExists(cwd)) return [];
var dir=fso.GetFolder(cwd);
for(var f=new Enumerator(dir.Files); !f.atEnd(); f.moveNext())
if (isImage(f.item().path)) files.push("[img[%0]]".format(["file:///"+f.item().path.replace(/\\/g,"/")]));
} else {
// FireFox (mozilla) uses "components" to read filesystem info
// get security access
if(!window.Components) return;
try { netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); }
catch(e) { alert(e.description?e.description:e.toString()); return []; }
// open/validate directory
var file=Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
try { file.initWithPath(cwd); } catch(e) { return []; }
if (!file.exists() || !file.isDirectory()) { return []; }
var folder=file.directoryEntries;
while (folder.hasMoreElements()) {
var f=folder.getNext().QueryInterface(Components.interfaces.nsILocalFile);
if (f instanceof Components.interfaces.nsILocalFile)
if (isImage(f.path)) files.push("[img[%0]]".format(["file:///"+f.path.replace(/\\/g,"/")]));
}
}
return files.join("\n----\n");
}
}
//}}}
''Capitaine de vaiseau''
~~//
Michel Joseph Guillaume de RABAUDY voit le jour le samedi 10 janvier 1784 à Amiens (80021).
Il est le fils légitime de François Marguerite de RABAUDY MONTOUSSIN et de Amable Aimée LATTIEZ de MERMONT.
Il s'unit avec Marie Anne Suzanne DEVIMES (1800-1865), la fille légitime de Jean-François DEVIMES et de Marie-Françoise-Elisabeth GRENIER.
Michel J. G. de RABAUDY est décédé le mercredi 19 juillet 1837, à l'âge de 53 ans, à Salamine.
//~~
<<<
Compagnon de mers de [[MOULAC Vincent Marie]], sa fille Marie Aimée épousera [[Vincent Alfred MOULAC|MOULAC Vincent Alfred]]
<<<
{{center{
<html>
<iframe frameborder="0" scrolling="no" style="border:0px" src="http://books.google.fr/books?id=krlCAAAAYAAJ&dq=de%20rabaudy%20officier%20marine&client=firefox-a&pg=PA279&output=embed" width=500 height=500></iframe>
</html>
}}}
[[de RABAUDI, de RABAUDY, de RABAUDY-MONTOUSSIN|http://gw5.geneanet.org/index.php3?b=yml&lang=fr&m=NG&t=N&pz=xx&nz=lecoq&ocz=0&n=de+rabaudy&x=0&y=0]] - [[Google Maps Montoussin|http://www.google.com/maps?source=uds&q=31430 Montoussin, Haute-Garonne, Midi-Pyrénées, France]]
<<<
{{center{[<img(++,auto)[images/Blason Rabaudy.jpg]]}}}
De RABAUDI, famille ancienne, originaire de Gênes (!), transplantée en Languedoc, vers le commencement du seizième siècle.
A l'époque ( 1270 ), Montoussin est un castel, c'est-à-dire un village fortifié avec protection, murs, fossés et portes. Au XVème siècle, la seigneurie de Montoussin revient aux Noé, qui la conserve jusqu'au XVIIème siècle où elle passe à la famille de Rabaudy. Au XVIIIème siècle, le territoire de Montoussin est l'objet d'un long procès de délimitation avec le territoire du Fousseret. Ce procès important touche surtout aux limites entre la Guyenne et le Languedoc.
La maison de Rabaudy était comptée au nombre des plus illustres de Toulouse, et la place de viguier - voir [[Viguier de Toulouse]] -, c’est-à-dire de vicaire du comte de Toulouse, fut toujours occupée par un de ses membres depuis 1597 jusqu’en 1749, époque de la suppression de cette charge.
Les viguiers ou vicaires des comtes de Toulouse étaient les représentants de ces princes en beaucoup de circonstances ; ils convoquaient et commandaient les troupes de la viguerie pour les chevauchées ; ils se saisissaient des malfaiteurs , veillaient à la garde du pays et des forteresses , recevaient le serment des magistrats et autres officiers ; enfin, ils jugeaient soit au criminel, soit au civil. On ignore l'époque de leur établissement dans le comté de Toulouse. Ils possédaient également, dans l'origine, les titres de Baillis , Grands- Baillis et Sénéchaux.
<<<
[[Carto globale]]
[[Carto 19 siécle]]
[[Asc. LECOQ Gâtinais|Carto Asc. LECOQ Gâtinais]]
<html><table width="96%" style="border:none;margin:1px;background:transparent;clear:both;"><iframe id="ifsample1" name="ifsample1" src="http://my.geneanet.org/carte/?source=yml" width="100%" height="600" scrolling="yes" frameborder="0" allowtransparency style="border:none;"></iframe></table></html>
/***
|Name|SetIconPlugin|
|Source|http://www.TiddlyTools.com/#SetIconPlugin|
|Documentation|http://www.TiddlyTools.com/#SetIconPluginInfo|
|Version|1.8.0|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.3|
|Type|plugin|
|Requires||
|Overrides||
|Options|##Configuration|
|Description|add an image to a toolbar, macro, or slider link|
!!!!!Documentation
>see [[SetIconPluginInfo]]
!!!!!Configuration
<<<
<<option chkIconsShowImage>> show images on links
<<option chkIconsShowText>> include link text with images
default image style: {{stretch{<<option txtIconsCSS>>}}}
<<<
!!!!!Revisions
<<<
2008.05.11 [1.8.0] added optional 'notext' value for iconpos to force text to be hidden for specific links
| see [[SetIconPluginInfo]] for additional revision details |
2008.05.09 [1.0.0] initial release (as inline script)
<<<
!!!!!Code
***/
//{{{
version.extensions.SetIconPlugin= {major: 1, minor: 8, revision: 0, date: new Date(2008,5,11)};
if (config.options.chkIconsShowImage===undefined)
config.options.chkIconsShowImage=true;
if (config.options.chkIconsShowText===undefined)
config.options.chkIconsShowText=true;
if (config.options.txtIconsCSS===undefined)
config.options.txtIconsCSS="vertical-align:middle;width:auto;height:auto";
config.macros.setIcon = {
handler: function(place,macroName,params,wikifier,paramString,tiddler) {
if (!config.options.chkIconsShowImage) return; // text-only - do nothing
if (!params[0]) return; // no image src specified - do nothing
// find nearest link element
var btn=place.lastChild; // look for sibling link
while (btn && btn.nodeName!="A") btn=btn.previousSibling;
if (!btn) { // look for child link
var links=place.getElementsByTagName("A");
if (links.length) btn=links[links.length-1];
}
if (!btn) { // look for parent link
var btn=place.parentNode.lastChild;
while (btn && btn.nodeName!="A") btn=btn.previousSibling;
}
if (!btn) { // look for cousin link
var links=place.parentNode.getElementsByTagName("A");
if (links.length) btn=links[links.length-1];
}
if (!btn) return; // can't find a link - do nothing
// set icon and command text/tip
var txt=btn.innerHTML;
var src=params[0]; // default to direct URL
if (config.macros.attach && config.macros.attach.isAttachment(src))
src=config.macros.attach.getAttachment(src); // retrieve attachment (if any)
var css=params[1]; if (!css||!css.length) css=config.options.txtIconsCSS;
var after=params[2]&¶ms[2].toUpperCase()=="RIGHT";
var notext=params[2]&¶ms[2].toUpperCase()=="NOTEXT";
btn.innerHTML="<img src='"+src+"' style='"+css+"'>";
if (config.options.chkIconsShowText && !notext)
btn.innerHTML=after?txt+btn.innerHTML:btn.innerHTML+txt;
else
btn.title=txt.toUpperCase()+": "+btn.title; // add text to tooltip
// adjust nested slider button text/tip
if (btn.getAttribute("closedtext")!=null) {
btn.setAttribute("closedtext",btn.innerHTML);
btn.setAttribute("openedtext",btn.innerHTML);
if (!config.options.chkIconsShowText || notext) {
btn.setAttribute("closedtip",txt.toUpperCase()+": "+btn.getAttribute("closedtip"));
btn.setAttribute("openedtip",txt.toUpperCase()+": "+btn.getAttribute("openedtip"));
}
}
}
};
//}}}
/%<<search>>%/<<closeAll>>/%<<permaview>>%/<<newTiddler>>/%<<newJournal "DD MMM YYYY" "journal">>%/<<saveChanges>><<slider chkSliderOptionsPanel OptionsPanel "options »" "Change TiddlyWiki advanced options">>
<<tabs txtMainTab "Timeline" "Timeline" TabTimeline "All" "All tiddlers" TabAll "Tags" "All tags" TabTags "More" "More lists" TabMore>>
/***
''Inspired by [[TiddlyPom|http://www.warwick.ac.uk/~tuspam/tiddlypom.html]]''
|Name|SplashScreenPlugin|
|Created by|SaqImtiaz|
|Location|http://tw.lewcid.org/#SplashScreenPlugin|
|Version|0.21 |
|Requires|~TW2.08+|
!Description:
Provides a simple splash screen that is visible while the TW is loading.
!Installation
Copy the source text of this tiddler to your TW in a new tiddler, tag it with systemConfig and save and reload. The SplashScreen will now be installed and will be visible the next time you reload your TW.
!Customizing
Once the SplashScreen has been installed and you have reloaded your TW, the splash screen html will be present in the MarkupPreHead tiddler. You can edit it and customize to your needs.
!History
* 20-07-06 : version 0.21, modified to hide contentWrapper while SplashScreen is displayed.
* 26-06-06 : version 0.2, first release
!Code
***/
//{{{
var old_lewcid_splash_restart=restart;
restart = function()
{ if (document.getElementById("SplashScreen"))
document.getElementById("SplashScreen").style.display = "none";
if (document.getElementById("contentWrapper"))
document.getElementById("contentWrapper").style.display = "block";
old_lewcid_splash_restart();
if (splashScreenInstall)
{if(config.options.chkAutoSave)
{saveChanges();}
displayMessage("TW SplashScreen has been installed, please save and refresh your TW.");
}
}
var oldText = store.getTiddlerText("MarkupPreHead");
if (oldText.indexOf("SplashScreen")==-1)
{var siteTitle = store.getTiddlerText("SiteTitle");
var splasher='\n\n<style type="text/css">#contentWrapper {display:none;}</style><div id="SplashScreen" style="border: 3px solid #ccc; display: block; text-align: center; width: 320px; margin: 100px auto; padding: 50px; color:#000; font-size: 28px; font-family:Tahoma; background-color:#eee;"><b>'+siteTitle +'</b> is loading<blink> ...</blink><br><br><span style="font-size: 14px; color:red;">Requires Javascript.</span></div>';
if (! store.tiddlerExists("MarkupPreHead"))
{var myTiddler = store.createTiddler("MarkupPreHead");}
else
{var myTiddler = store.getTiddler("MarkupPreHead");}
myTiddler.set(myTiddler.title,oldText+splasher,config.options.txtUserName,null,null);
store.setDirty(true);
var splashScreenInstall = true;
}
//}}}
/*{{{*/
body {background: url(img/background.jpg);}
div[tags~="systemConfig"].tiddler {background: url(img/background2.jpg);}
* html .tiddler { height:1%;}
#displayArea {margin:0em 13em 0em 16em;}
#contentWrapper {display:block;}
#splashScreen {display:none;}
#taggerDrpBtn {font-family: "Lucida Grande" verdana;
text-transform: uppercase;
font-size: .85em;
font-weight: bold;}
a:focus {outline:none;}
a {color: #eee;text-decoration:none;}
a img {border:0;}
a:hover {background-color:transparent; color:#F7C898;}
.externalLink{-moz-border-radius:1em;
text-decoration:none;
color: #c90;
}
.txtOptionInput {width: 11.5em;
font-family: "Lucida Grande" Tahoma, Arial;
font-size: 1em;
border: 1px solid transparent;
-moz-border-radius: 6px;
background: #fff url(img/lupa.gif) no-repeat top left;
padding-left: 2em;}
.tiddler {padding:0em 0em 0em 0em;
background-color: transparent;
margin-top: .6em;
-moz-border-radius: 4px;
margin-bottom: .5em;}
.tiddler img {background-color: #fff;
padding:6px;
margin: 8px;
background: url(img/trans25.png);
}
.tiddler hr {border-bottom: 1px dotted #ccc /*#F7C898*/ ;
border-top: none;}
.tiddler input {background: url(img/trans25.png);
color: #F7C898;
margin: .25em; padding: 0;
-moz-border-radius: 2px;
}
.tiddler .tagging {margin-left: 1em;}
.shadow .title {color:white;}
/***
extra small fonts for the tag cloud
***/
.wrappingClass{font-size:small;line-height: 1; color:#FFFFF9;}
body {font-size: .85em; font-family:arial,helvetica; margin:0; padding:0;}
h1,h2,h3,h4,h5,h6 {font-weight:normal; text-decoration:none; font-family: "Lucida Grande", Arial;
color: #F7c898; background:transparent;
}
h1,h2,h3 {padding-bottom:1px; margin-top:.25em;margin-bottom:0.25em;}
h4,h5,h6 {margin-top:1em;}
h1 {font-size:1.35em;}
h2 {font-size:1.3em;}
h3 {font-size:1.25em;}
h4 {font-size:1em;}
h5 {font-size:.9em;}
h1 {border: none;}
h2,h3 {border:none;}
br + h1, br + h2, br + h3 {margin-top: -.4em;}
ul+br+h1, ol+br+h1 {margin-top: -1em;}
ul+br+h2, ol+br+h1 {margin-top: -1em;}
ul+br+h3, ol+br+h1 {margin-top: -1em;}
li {padding-bottom: .35em;}
dd {margin-left: 1.5em;}
.tabset {padding:1em 0em 0em 0.5em; }
.tab, .viewer .tab {margin:0em 0em 0em 0.25em;
padding:2px;
font-family: "Lucida Grande", Arial;
font-size: .95em;
background: url(img/transblack25.png);}
.tabContents ul, .tabContents ol {margin:0; padding:0;}
.txtMainTab .tabContents li, wiewer .txtMainTab .tabContents li {list-style:none;color: #F7C898;}
.tabContents li.listLink, wiewer .tabContents li.listLink { margin-left:.75em;color: white;}
.tabSelected, .viewer .tabSelected {color:white;
border-left:1px solid white;
border-top:1px solid white;
border-right:1px solid white;
background: url(img/transblack25.png);
}
.tabUnselected, .viewer .tabUnselected {color:[[ColorPalette::Background]]; background: url(img/transblack25.png);}
.tabContents, .viewer .tabContents {color:white;
border:1px solid white;
padding:0.5em;
background: url(img/transblack25.png);}
.tabContents .button {border:0;}
.title { font-size:1.45em;
font-family: "Lucida Grande", Arial;
background: url(img/trans25.png);
color: white;
padding-left: .4em;
margin-top: 1px;}
.subtitle {font-size:0.45em;
font-family:"Lucida Grande", helvetica;
color: white;
float: right;
padding: 0.15em 0.6em 0.4em 0em;
text-align: right;}
.toolbar { text-align:right;
font-size:.95em;
padding-bottom: .3em;
padding-top: .3em;
background: url(img/toolbar50.png) ;
font-family: "Lucida Grande" verdana; arial}
.toolbar a { border: 1px solid transparent;color: #fff;}
.selected .toolbar a {color:#fff;}
.selected .toolbar a:hover {color:#000;}
* html .viewer pre {width:99%; padding:0 0 1em 0;}
.viewer {line-height:1.5em;
padding: .5em .5em .5em .8em;
font-family: "Lucida Grande", Tahoma;
font-size: 1.15em;
text-align: justify;
color: white;
background: url(img/transblack25.png);
}
.viewer .tiddlyLinkExisting {border-bottom: 1px dotted #F7C898;}
.button {margin:0 0.25em; padding:0 0.25em;
color: white;
border: 1px dotted #f7c898;}
.viewer .button:hover {background: none;color: #f7c898; border: 1px solid #f7c898;}
.viewer blockquote {line-height: 1.6em;
margin: .3em;
padding: .2em 1em .2em 1.5em;
background: url(img/trans10.png);
border: none;}
.viewer ul, .viewer ol {margin-left:0.5em; padding-left:1.5em; list-style-position: inside;}
.viewer li {text-align: left;}
.viewer table, table.twtable {border-collapse:collapse;
margin:0.8em 1.0em;
border: 1px solid white;
background: url(img/trans10.png)
}
.viewer th, .viewer td, .viewer tr,.viewer caption,.twtable th, .twtable td, .twtable tr,.twtable caption {padding:3px;}
table.listView {font-size:0.85em; margin:0.8em 1.0em;}
table.listView th, table.listView td, table.listView tr {padding:0px 3px 0px 3px;}
.viewer th, .viewer thead td, .twtable th, .twtable thead td {background:url(img/trans25.png);
border:1px solid white; color:[[ColorPalette::Background]];}
.viewer td, .viewer tr, .twtable td, .twtable tr {border:1px solid white;}
.viewer pre { padding:0.5em;
margin-left:0.5em;
font-size:1.4em;
line-height:1.4em; overflow:auto;
border:1px solid #F7C898;
background: url(img/trans10.png);
}
.viewer code {font-size:1.3em; line-height:1.4em;
color: #F7C898;
background: url(img/transblack25.png);}
.viewer .tabset {
font-family: "Lucida Grande", Arial;
font-size: 1.1em;
font-weight: bold;
margin: .3em;
border: none;}
.viewer .tabSelected {background: url(img/trans10.png);
margin: 0em 0em 0em 0.25em;
padding: .3em .5em .3em .5em;
}
.viewer .tabUnselected {background: none;
margin: 0em 0em 0em 0.25em;
padding: .3em .5em .3em .5em;}
.viewer .tabContents {background: url(img/trans10.png);}
.header {position:relative;}
.headerShadow {color:[[ColorPalette::Foreground]];
border-bottom: 1px solid #fff;
background-image: url(img/trans50.png);
position:relative; height: 52px;
padding: 0em 0em 0em 0em;
left:0px; top:0px;text-align: center;
}
.headerForeground {display:none; height: 52px; position:absolute;
padding:.3em 0em .1em .1em; left:0px; top:0px;
text-align: center;
background: url(img/trans25.png);}
.headerShadow a {font-weight:normal; color:[[ColorPalette::Foreground]];}
.headerForeground {color:[[ColorPalette::Background]];
border-bottom: 1px solid [[ColorPalette::BordeFosc]];}
.headerForeground a {font-weight:normal; color:[[ColorPalette::PrimaryPale]];}
.header a:hover {background:transparent;}
.siteTitle {font-weight: bold;}
.siteTitle, .siteSubtitle {font-size:1em;color: #000;font-family: "Lucida Grande", helvetica;
padding: .4em 0 .4em 0;
color: #fff;}
.TopMenu {font-family: "Lucida Grande", Arial;
font-size: .9em;
margin-top: .45em;
}
.TopMenu a { font-style:normal;
font-family: "Lucida Grande", Arial;
padding: .1em .5em .1em .5em;
-moz-border-radius: 4px;
border: 1px solid transparent;
background: url(img/trans10.png);
}
.TopMenu ul, .TopMenu li {display: inline;
padding-top: 0;}
.TopMenu img {vertical-align: text-bottom;}
.TopMenu a:hover { background: url(img/transblack25.png);
cursor: default;
color: white;
border-top: 1px solid #5d5d5d;
border-left: 1px solid #5d5d5d;
}
.TopMenu .button { border: 1px solid transparent;
}
.TopMenu input { width: 9em;
font-family: "Lucida Grande" Tahoma, Arial;
border: 1px solid transparent;
-moz-border-radius: 4px;
background: url(img/translupa50.png);
padding-left: 1.5em;}
.TopMenu a.tiddlyLinkNonExisting.shadow {font-weight:normal;}
#mainMenu {position:absolute;
left:0; width: 13.7em;top: 4em;
text-align:left;
line-height: .9em;
font-family: "Lucida Grande" Tahoma, Arial;
font-size: .85em;
margin-left: 1em;
color: white;
}
#mainMenu a { display: list-item;
list-style-type: none;
padding: .3em;
background: url(img/transblack10.png);
color: #fff;
/*-moz-border-radius: 3px;*/
cursor: default;
border: 1px solid transparent;
border-bottom: 1px dotted #F7C898;
text-decoration: none;}
#mainMenu .button {border: none;
font-weight: bold;
border: 1px solid transparent;
color: #f7c898;
font-weight: normal;}
#mainMenu a:hover {background: url(icons/ministar.png) right no-repeat;
border: 1px solid transparent;}
#mainMenu .sliderPanel {margin-top: .4em;padding-left: 1em; line-height: .6em;
}
#mainMenu .sliderPanel a {color: white;
font-size: 1em;
padding: 0.3;
text-decoration: none;}
#mainMenu blockquote {margin: .5em 0 0 1em; }
#mainMenu .tiddlyLinkExisting,
#mainMenu .tiddlyLinkNonExisting {font-weight:normal; font-style:normal;
}
#mainMenu .listTitle {font-size: 1em;
margin-top: 1em;padding: .25em 0 .2em 0;
background: url(img/transblack10.png);
color: #f7c898;
}
#mainMenu ul{ margin: 0; padding: 0;
background: url(img/transblack10.png);
line-height: 1em;
}
#mainMenu li {list-style-type: none;padding-left: 1em;line-height: 1.3em;}
#mainMenu li a {border-bottom: 1px dotted #F7C898;
background: none;}
#mainMenu li a:hover { border-bottom: 1px solid #F7C898;
border-top: 1px solid transparent;
border-left: 1px solid transparent;
border-right: 1px solid transparent;
}
#sidebar {display: none; position:absolute; right:8px; width:16em; font-size:.9em;}
#sidebarOptions {padding-top:1.3em;}
#sidebarOptions a {margin:0em 0.2em; padding:0.2em 0.3em; display:block;}
#sidebarOptions input {margin:0.4em 0.5em;}
#sidebarOptions .sliderPanel {margin-left:1em; padding:0.5em; font-size:.85em;}
#sidebarOptions .sliderPanel a {font-weight:bold; display:inline; padding:0;}
#sidebarOptions .sliderPanel input {margin:0 0 .3em 0;}
#sidebarTabs .tabContents {width:15em; overflow:hidden;}
.tabSelected{color:[[ColorPalette::PrimaryDark]];
background:[[ColorPalette::MenuBlau]];
border-left:1px solid [[ColorPalette::TertiaryLight]];
border-top:1px solid [[ColorPalette::TertiaryLight]];
border-right:1px solid [[ColorPalette::TertiaryLight]];
}
.tabUnselected {color:[[ColorPalette::Background]]; background:[[ColorPalette::TertiaryMid]];}
.tabContents {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::MenuBlau]]; border:1px solid [[ColorPalette::TertiaryLight]];}
.tabContents .button {border:0;}
.tagging {margin:0.5em 0.5em 0.5em 0; float:left; display:none;}
.isTag .tagging {display:block;}
.tagged { margin: -2.6em 0 0 0; /*beta*/
float:right;
font-family: "Lucida Grande", Arial;
right: 2em; /*beta*/
position:absolute; /*beta*/
}
.tagging ul, .tagged ul {list-style:none; margin:0.25em; padding:0;}
.tagClear {clear:both;}
.tagging, .tagged {border:1px solid #E2E2E1;
background: url(img/trans25.png);
font-size:0.8em; padding:0.25em;
}
.selected .tagging, .selected .tagged {background: url(img/trans25.png);
border:1px solid #E2E2E1;
}
.tagging .listTitle, .tagged .listTitle {display: none; color:white; /* BETA */}
.tagging .button, .tagged .button {border: none;
display:block;
font-weight: bold;
color: white;}
.annotation {display: none;}
#messageArea {position:fixed;
top:0em;
left: 1em;
width: 13.7em;
margin:0em;
padding:0.5em; z-index:2000; _position:absolute;
background: url(img/minitoolbar75.png) no-repeat;
border: none;
font-family: "Lucida Grande" arial;
font-size: .85em;
-moz-border-radius: 0 0 2px 2px;
}
.messageToolbar {display:block; text-align:right; padding:0.9em 0.2em 0.2em 0.2em}
#messageArea a {text-decoration:underline;color: #000;}
.tiddlerPopupButton {padding:0.2em 0.2em 0.2em 0.2em;}
.popupTiddler {position: absolute; z-index:300; padding:1em 1em 1em 1em; margin:0;
background:url(img/trans75.png); border:2px solid [[ColorPalette::TertiaryMid]];}
.popup {background:url(img/trans90.png);
color: #000;
border: 1px solid white;
position:absolute; z-index:300;
font-size:.85em;
font-family: "Lucida Grande" verdana;
padding:0; list-style:none; margin:0;}
.popup hr { color: [[ColorPalette::PrimaryDark]];
background:[[ColorPalette::PrimaryDark]];
border-bottom:1px;
}
.popup li { /*border-top: 1px solid white;*/
/*border-bottom: 1px solid white;*/
margin: .25em 0 .25em 0;
padding: 0;
/*background: url(img/trans75.png);*/}
.popup li a {display:block; padding:0.2em; font-weight:normal; cursor:pointer;
}
.popup li.disabled {color:[[ColorPalette::TertiaryMid]];}
.popup li a, .popup li a:visited {color:[[ColorPalette::Foreground]];
}
.popup li a:hover {background: [[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]];
}
.popup li a:active {background:[[ColorPalette::SecondaryPale]]; color:[[ColorPalette::Foreground]];
}
.popupHighlight {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
.listBreak div {border-bottom:1px solid #FF7B76;}
.popup .popupMessage {padding:0.4em;}
.popup hr {display:block; height:1px; width:auto; padding:0; margin:0.2em 0em;}
.popup li.disabled {padding:0.4em;}
.listBreak {font-size:1px; line-height:1px;}
.listBreak div {margin:2px 0;}
.popup th {color: #000;}
.highlight {background: url(img/transblack25.png);
border-bottom: 1px solid #007800;}
.marked {background: url(img/red50.png);
color: #FFF5AE;
/*padding: 0 .25em 0 .25em;*/ }
#backstageArea {background: #000;
color: white;
}
#backstagePanel {background: url(img/red50.png);
border-color: [[ColorPalette::Background]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]];
}
.wizard { background: url(img/transblack25.png);
border:1px solid white;
}
.wizard h1 {color:white; border:none;}
.wizard h2 {color:white; border:none;}
.wizardStep {background: url(img/transblack50.png);
color: white;
border:1px solid #000;}
.wizardFooter {background: none;}
.wizardFooter .status {background:[[ColorPalette::PrimaryDark]]; color:[[ColorPalette::Background]];}
.editor {font-size: 1.1em;}
.editor input, .editor textarea {display:block; font:inherit;}
.editorFooter {padding:0.25em 0em; font-size:.9em;}
.editorFooter .button {padding-top:0px; padding-bottom:0px;}
.editor input {background: url(img/trans75.png);
font-weight:bold;
border:none;
color: #000;}
.editor textarea {background: url(img/trans75.png);
width:100%;
border: none;
font-family: monospaced, "Courier New", helvetica;
font-size: .8em}
.editorFooter {color:#F7C898;}
[[StyleSheetShortcuts]]
/*}}}*/
/*{{{*/
body {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
a {color:[[ColorPalette::PrimaryMid]];}
a:hover {background-color:[[ColorPalette::PrimaryMid]]; color:[[ColorPalette::Background]];}
a img {border:0;}
h1,h2,h3,h4,h5,h6 {color:[[ColorPalette::SecondaryDark]]; background:transparent;}
h1 {border-bottom:2px solid [[ColorPalette::TertiaryLight]];}
h2,h3 {border-bottom:1px solid [[ColorPalette::TertiaryLight]];}
.button {color:[[ColorPalette::PrimaryDark]]; border:1px solid [[ColorPalette::Background]];}
.button:hover {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::SecondaryLight]]; border-color:[[ColorPalette::SecondaryMid]];}
.button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::SecondaryDark]];}
.header {background:[[ColorPalette::PrimaryMid]];}
.headerShadow {color:[[ColorPalette::Foreground]];}
.headerShadow a {font-weight:normal; color:[[ColorPalette::Foreground]];}
.headerForeground {color:[[ColorPalette::Background]];}
.headerForeground a {font-weight:normal; color:[[ColorPalette::PrimaryPale]];}
.tabSelected{color:[[ColorPalette::PrimaryDark]];
background:[[ColorPalette::TertiaryPale]];
border-left:1px solid [[ColorPalette::TertiaryLight]];
border-top:1px solid [[ColorPalette::TertiaryLight]];
border-right:1px solid [[ColorPalette::TertiaryLight]];
}
.tabUnselected {color:[[ColorPalette::Background]]; background:[[ColorPalette::TertiaryMid]];}
.tabContents {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::TertiaryPale]]; border:1px solid [[ColorPalette::TertiaryLight]];}
.tabContents .button {border:0;}
#sidebar {}
#sidebarOptions input {border:1px solid [[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel {background:[[ColorPalette::PrimaryPale]];}
#sidebarOptions .sliderPanel a {border:none;color:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:hover {color:[[ColorPalette::Background]]; background:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:active {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::Background]];}
.wizard {background:[[ColorPalette::PrimaryPale]]; border:1px solid [[ColorPalette::PrimaryMid]];}
.wizard h1 {color:[[ColorPalette::PrimaryDark]]; border:none;}
.wizard h2 {color:[[ColorPalette::Foreground]]; border:none;}
.wizardStep {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];
border:1px solid [[ColorPalette::PrimaryMid]];}
.wizardStep.wizardStepDone {background:[[ColorPalette::TertiaryLight]];}
.wizardFooter {background:[[ColorPalette::PrimaryPale]];}
.wizardFooter .status {background:[[ColorPalette::PrimaryDark]]; color:[[ColorPalette::Background]];}
.wizard .button {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryLight]]; border: 1px solid;
border-color:[[ColorPalette::SecondaryPale]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryPale]];}
.wizard .button:hover {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Background]];}
.wizard .button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::Foreground]]; border: 1px solid;
border-color:[[ColorPalette::PrimaryDark]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryDark]];}
.wizard .notChanged {background:transparent;}
.wizard .changedLocally {background:#80ff80;}
.wizard .changedServer {background:#8080ff;}
.wizard .changedBoth {background:#ff8080;}
.wizard .notFound {background:#ffff80;}
.wizard .putToServer {background:#ff80ff;}
.wizard .gotFromServer {background:#80ffff;}
#messageArea {border:1px solid [[ColorPalette::SecondaryMid]]; background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]];}
#messageArea .button {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::SecondaryPale]]; border:none;}
.popupTiddler {background:[[ColorPalette::TertiaryPale]]; border:2px solid [[ColorPalette::TertiaryMid]];}
.popup {background:[[ColorPalette::TertiaryPale]]; color:[[ColorPalette::TertiaryDark]]; border-left:1px solid [[ColorPalette::TertiaryMid]]; border-top:1px solid [[ColorPalette::TertiaryMid]]; border-right:2px solid [[ColorPalette::TertiaryDark]]; border-bottom:2px solid [[ColorPalette::TertiaryDark]];}
.popup hr {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::PrimaryDark]]; border-bottom:1px;}
.popup li.disabled {color:[[ColorPalette::TertiaryMid]];}
.popup li a, .popup li a:visited {color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:active {background:[[ColorPalette::SecondaryPale]]; color:[[ColorPalette::Foreground]]; border: none;}
.popupHighlight {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
.listBreak div {border-bottom:1px solid [[ColorPalette::TertiaryDark]];}
.tiddler .defaultCommand {font-weight:bold;}
.shadow .title {color:[[ColorPalette::TertiaryDark]];}
.title {color:[[ColorPalette::SecondaryDark]];}
.subtitle {color:[[ColorPalette::TertiaryDark]];}
.toolbar {color:[[ColorPalette::PrimaryMid]];}
.toolbar a {color:[[ColorPalette::TertiaryLight]];}
.selected .toolbar a {color:[[ColorPalette::TertiaryMid]];}
.selected .toolbar a:hover {color:[[ColorPalette::Foreground]];}
.tagging, .tagged {border:1px solid [[ColorPalette::TertiaryPale]]; background-color:[[ColorPalette::TertiaryPale]];}
.selected .tagging, .selected .tagged {background-color:[[ColorPalette::TertiaryLight]]; border:1px solid [[ColorPalette::TertiaryMid]];}
.tagging .listTitle, .tagged .listTitle {color:[[ColorPalette::PrimaryDark]];}
.tagging .button, .tagged .button {border:none;}
.footer {color:[[ColorPalette::TertiaryLight]];}
.selected .footer {color:[[ColorPalette::TertiaryMid]];}
.sparkline {background:[[ColorPalette::PrimaryPale]]; border:0;}
.sparktick {background:[[ColorPalette::PrimaryDark]];}
.error, .errorButton {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Error]];}
.warning {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryPale]];}
.lowlight {background:[[ColorPalette::TertiaryLight]];}
.zoomer {background:none; color:[[ColorPalette::TertiaryMid]]; border:3px solid [[ColorPalette::TertiaryMid]];}
.imageLink, #displayArea .imageLink {background:transparent;}
.annotation {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border:2px solid [[ColorPalette::SecondaryMid]];}
.viewer .listTitle {list-style-type:none; margin-left:-2em;}
.viewer .button {border:1px solid [[ColorPalette::SecondaryMid]];}
.viewer blockquote {border-left:3px solid [[ColorPalette::TertiaryDark]];}
.viewer table, table.twtable {border:2px solid [[ColorPalette::TertiaryDark]];}
.viewer th, .viewer thead td, .twtable th, .twtable thead td {background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::Background]];}
.viewer td, .viewer tr, .twtable td, .twtable tr {border:1px solid [[ColorPalette::TertiaryDark]];}
.viewer pre {border:1px solid [[ColorPalette::SecondaryLight]]; background:[[ColorPalette::SecondaryPale]];}
.viewer code {color:[[ColorPalette::SecondaryDark]];}
.viewer hr {border:0; border-top:dashed 1px [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::TertiaryDark]];}
.highlight, .marked {background:[[ColorPalette::SecondaryLight]];}
.editor input {border:1px solid [[ColorPalette::PrimaryMid]];}
.editor textarea {border:1px solid [[ColorPalette::PrimaryMid]]; width:100%;}
.editorFooter {color:[[ColorPalette::TertiaryMid]];}
#backstageArea {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::TertiaryMid]];}
#backstageArea a {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstageArea a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; }
#backstageArea a.backstageSelTab {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
#backstageButton a {background:none; color:[[ColorPalette::Background]]; border:none;}
#backstageButton a:hover {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstagePanel {background:[[ColorPalette::Background]]; border-color: [[ColorPalette::Background]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]];}
.backstagePanelFooter .button {border:none; color:[[ColorPalette::Background]];}
.backstagePanelFooter .button:hover {color:[[ColorPalette::Foreground]];}
#backstageCloak {background:[[ColorPalette::Foreground]]; opacity:0.6; filter:'alpha(opacity:60)';}
/*}}}*/
/*{{{*/
* html .tiddler {height:1%;}
body {font-size:.75em; font-family:arial,helvetica; margin:0; padding:0;}
h1,h2,h3,h4,h5,h6 {font-weight:bold; text-decoration:none;}
h1,h2,h3 {padding-bottom:1px; margin-top:1.2em;margin-bottom:0.3em;}
h4,h5,h6 {margin-top:1em;}
h1 {font-size:1.35em;}
h2 {font-size:1.25em;}
h3 {font-size:1.1em;}
h4 {font-size:1em;}
h5 {font-size:.9em;}
hr {height:1px;}
a {text-decoration:none;}
dt {font-weight:bold;}
ol {list-style-type:decimal;}
ol ol {list-style-type:lower-alpha;}
ol ol ol {list-style-type:lower-roman;}
ol ol ol ol {list-style-type:decimal;}
ol ol ol ol ol {list-style-type:lower-alpha;}
ol ol ol ol ol ol {list-style-type:lower-roman;}
ol ol ol ol ol ol ol {list-style-type:decimal;}
.txtOptionInput {width:11em;}
#contentWrapper .chkOptionInput {border:0;}
.externalLink {text-decoration:underline;}
.indent {margin-left:3em;}
.outdent {margin-left:3em; text-indent:-3em;}
code.escaped {white-space:nowrap;}
.tiddlyLinkExisting {font-weight:bold;}
.tiddlyLinkNonExisting {font-style:italic;}
/* the 'a' is required for IE, otherwise it renders the whole tiddler in bold */
a.tiddlyLinkNonExisting.shadow {font-weight:bold;}
#mainMenu .tiddlyLinkExisting,
#mainMenu .tiddlyLinkNonExisting,
#sidebarTabs .tiddlyLinkNonExisting {font-weight:normal; font-style:normal;}
#sidebarTabs .tiddlyLinkExisting {font-weight:bold; font-style:normal;}
.header {position:relative;}
.header a:hover {background:transparent;}
.headerShadow {position:relative; padding:4.5em 0em 1em 1em; left:-1px; top:-1px;}
.headerForeground {position:absolute; padding:4.5em 0em 1em 1em; left:0px; top:0px;}
.siteTitle {font-size:3em;}
.siteSubtitle {font-size:1.2em;}
#mainMenu {position:absolute; left:0; width:10em; text-align:right; line-height:1.6em; padding:1.5em 0.5em 0.5em 0.5em; font-size:1.1em;}
#sidebar {position:absolute; right:3px; width:16em; font-size:.9em;}
#sidebarOptions {padding-top:0.3em;}
#sidebarOptions a {margin:0em 0.2em; padding:0.2em 0.3em; display:block;}
#sidebarOptions input {margin:0.4em 0.5em;}
#sidebarOptions .sliderPanel {margin-left:1em; padding:0.5em; font-size:.85em;}
#sidebarOptions .sliderPanel a {font-weight:bold; display:inline; padding:0;}
#sidebarOptions .sliderPanel input {margin:0 0 .3em 0;}
#sidebarTabs .tabContents {width:15em; overflow:hidden;}
.wizard {padding:0.1em 1em 0em 2em;}
.wizard h1 {font-size:2em; font-weight:bold; background:none; padding:0em 0em 0em 0em; margin:0.4em 0em 0.2em 0em;}
.wizard h2 {font-size:1.2em; font-weight:bold; background:none; padding:0em 0em 0em 0em; margin:0.4em 0em 0.2em 0em;}
.wizardStep {padding:1em 1em 1em 1em;}
.wizard .button {margin:0.5em 0em 0em 0em; font-size:1.2em;}
.wizardFooter {padding:0.8em 0.4em 0.8em 0em;}
.wizardFooter .status {padding:0em 0.4em 0em 0.4em; margin-left:1em;}
.wizard .button {padding:0.1em 0.2em 0.1em 0.2em;}
#messageArea {position:fixed; top:2em; right:0em; margin:0.5em; padding:0.5em; z-index:2000; _position:absolute;}
.messageToolbar {display:block; text-align:right; padding:0.2em 0.2em 0.2em 0.2em;}
#messageArea a {text-decoration:underline;}
.tiddlerPopupButton {padding:0.2em 0.2em 0.2em 0.2em;}
.popupTiddler {position: absolute; z-index:300; padding:1em 1em 1em 1em; margin:0;}
.popup {position:absolute; z-index:300; font-size:.9em; padding:0; list-style:none; margin:0;}
.popup .popupMessage {padding:0.4em;}
.popup hr {display:block; height:1px; width:auto; padding:0; margin:0.2em 0em;}
.popup li.disabled {padding:0.4em;}
.popup li a {display:block; padding:0.4em; font-weight:normal; cursor:pointer;}
.listBreak {font-size:1px; line-height:1px;}
.listBreak div {margin:2px 0;}
.tabset {padding:1em 0em 0em 0.5em;}
.tab {margin:0em 0em 0em 0.25em; padding:2px;}
.tabContents {padding:0.5em;}
.tabContents ul, .tabContents ol {margin:0; padding:0;}
.txtMainTab .tabContents li {list-style:none;}
.tabContents li.listLink { margin-left:.75em;}
#contentWrapper {display:block;}
#splashScreen {display:none;}
#displayArea {margin:1em 17em 0em 14em;}
.toolbar {text-align:right; font-size:.9em;}
.tiddler {padding:1em 1em 0em 1em;}
.missing .viewer,.missing .title {font-style:italic;}
.title {font-size:1.6em; font-weight:bold;}
.missing .subtitle {display:none;}
.subtitle {font-size:1.1em;}
.tiddler .button {padding:0.2em 0.4em;}
.tagging {margin:0.5em 0.5em 0.5em 0; float:left; display:none;}
.isTag .tagging {display:block;}
.tagged {margin:0.5em; float:right;}
.tagging, .tagged {font-size:0.9em; padding:0.25em;}
.tagging ul, .tagged ul {list-style:none; margin:0.25em; padding:0;}
.tagClear {clear:both;}
.footer {font-size:.9em;}
.footer li {display:inline;}
.annotation {padding:0.5em; margin:0.5em;}
* html .viewer pre {width:99%; padding:0 0 1em 0;}
.viewer {line-height:1.4em; padding-top:0.5em;}
.viewer .button {margin:0em 0.25em; padding:0em 0.25em;}
.viewer blockquote {line-height:1.5em; padding-left:0.8em;margin-left:2.5em;}
.viewer ul, .viewer ol {margin-left:0.5em; padding-left:1.5em;}
.viewer table, table.twtable {border-collapse:collapse; margin:0.8em 1.0em;}
.viewer th, .viewer td, .viewer tr,.viewer caption,.twtable th, .twtable td, .twtable tr,.twtable caption {padding:3px;}
table.listView {font-size:0.85em; margin:0.8em 1.0em;}
table.listView th, table.listView td, table.listView tr {padding:0px 3px 0px 3px;}
.viewer pre {padding:0.5em; margin-left:0.5em; font-size:1.2em; line-height:1.4em; overflow:auto;}
.viewer code {font-size:1.2em; line-height:1.4em;}
.editor {font-size:1.1em;}
.editor input, .editor textarea {display:block; width:100%; font:inherit;}
.editorFooter {padding:0.25em 0em; font-size:.9em;}
.editorFooter .button {padding-top:0px; padding-bottom:0px;}
.fieldsetFix {border:0; padding:0; margin:1px 0px 1px 0px;}
.sparkline {line-height:1em;}
.sparktick {outline:0;}
.zoomer {font-size:1.1em; position:absolute; overflow:hidden;}
.zoomer div {padding:1em;}
* html #backstage {width:99%;}
* html #backstageArea {width:99%;}
#backstageArea {display:none; position:relative; overflow: hidden; z-index:150; padding:0.3em 0.5em 0.3em 0.5em;}
#backstageToolbar {position:relative;}
#backstageArea a {font-weight:bold; margin-left:0.5em; padding:0.3em 0.5em 0.3em 0.5em;}
#backstageButton {display:none; position:absolute; z-index:175; top:0em; right:0em;}
#backstageButton a {padding:0.1em 0.4em 0.1em 0.4em; margin:0.1em 0.1em 0.1em 0.1em;}
#backstage {position:relative; width:100%; z-index:50;}
#backstagePanel {display:none; z-index:100; position:absolute; width:90%; margin:0em 3em 0em 3em; padding:1em 1em 1em 1em;}
.backstagePanelFooter {padding-top:0.2em; float:right;}
.backstagePanelFooter a {padding:0.2em 0.4em 0.2em 0.4em;}
#backstageCloak {display:none; z-index:20; position:absolute; width:100%; height:100px;}
.whenBackstage {display:none;}
.backstageVisible .whenBackstage {display:block;}
/*}}}*/
/*{{{*/
@media print {
#mainMenu, .TopMenu, #sidebar, #messageArea, #tiddlersBar, .toolbar, #backstageButton, #backstageArea {display: none ! important;}
#displayArea {margin: 1em 9em 0em 1em;}
/* Fixes a feature in Firefox 1.5.0.2 where print preview displays the noscript content */
.tagged {background-image: none; padding: 0; position: absolute;}
noscript {display:none;}
}
/*}}}*/
/***
|Name|StyleSheetShortcuts|
|Source|http://www.TiddlyTools.com/#StyleSheetShortcuts|
|Version||
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|CSS|
|Requires||
|Overrides||
|Description|'convenience' classes for common formatting, alignment, boxes, tables, etc.|
These 'style tweaks' can be easily included in other stylesheet tiddler so they can share a baseline look-and-feel that can then be customized to create a wide variety of 'flavors'.
***/
/*{{{*/
/* text alignments */
.left
{ display:block;text-align:left; }
.center
{ display:block;text-align:center; }
.center table
{ margin:auto !important; }
.right
{ display:block;text-align:right; }
.justify
{ display:block;text-align:justify; }
.indent
{ display:block;margin:0;padding:0;border:0;margin-left:2em; }
.floatleft
{ float:left; }
.floatright
{ float:right; }
.valignTop, .valignTop table, .valignTop tbody, .valignTop th, .valignTop tr, .valignTop td
{ vertical-align:top; }
.valignBottom, .valignBottom table, .valignBottom tbody, .valignBottom th, .valignBottom tr, .valignBottom td
{ vertical-align:bottom; }
.clear
{ clear:both; }
.wrap
{ white-space:normal; }
.nowrap
{ white-space:nowrap; }
.hidden
{ display:none; }
.show
{ display:inline !important; }
.span
{ display:span; }
.block
{ display:block; }
.relative
{ position:relative; }
.absolute
{ position:absolute; }
/* font sizes */
.big
{ font-size:14pt;line-height:120% }
.medium
{ font-size:12pt;line-height:120% }
.normal
{ font-size:9pt;line-height:120% }
.small
{ font-size:8pt;line-height:120% }
.fine
{ font-size:7pt;line-height:120% }
.tiny
{ font-size:6pt;line-height:120% }
.larger
{ font-size:120%; }
.smaller
{ font-size:80%; }
/* font styles */
.bold
{ font-weight:bold; }
.italic
{ font-style:italic; }
.underline
{ text-decoration:underline; }
/* plain list items (no bullets or indent) */
.nobullets li { list-style-type: none; margin-left:-2em; }
/* multi-column tiddler content (not supported in Internet Explorer) */
.twocolumns { display:block;
-moz-column-count:2; -moz-column-gap:1em; -moz-column-width:50%; /* FireFox */
-webkit-column-count:2; -webkit-column-gap:1em; -webkit-column-width:50%; /* Safari */
column-count:2; column-gap:1em; column-width:50%; /* Opera */
}
.threecolumns { display:block;
-moz-column-count:3; -moz-column-gap:1em; -moz-column-width:33%; /* FireFox */
-webkit-column-count:3; -webkit-column-gap:1em; -webkit-column-width:33%; /* Safari */
column-count:3; column-gap:1em; column-width:33%; /* Opera */
}
.fourcolumns { display:block;
-moz-column-count:4; -moz-column-gap:1em; -moz-column-width:25%; /* FireFox */
-webkit-column-count:4; -webkit-column-gap:1em; -webkit-column-width:25%; /* Safari */
column-count:4; column-gap:1em; column-width:25%; /* Opera */
}
/* show/hide browser-specific content for InternetExplorer vs. non-IE ("moz") browsers */
*[class="ieOnly"]
{ display:none; } /* hide in moz (uses CSS selector) */
* html .mozOnly, *:first-child+html .mozOnly
{ display: none; } /* hide in IE (uses IE6/IE7 CSS hacks) */
/* borderless tables */
.borderless, .borderless table, .borderless td, .borderless tr, .borderless th, .borderless tbody
{ border:0 !important; margin:0 !important; padding:0 !important; }
.widetable, .widetable table
{ width:100%; }
/* thumbnail images (fixed-sized scaled images) */
.thumbnail img { height:5em !important; }
/* stretchable images (auto-size to fit tiddler) */
.stretch img { width:95%; }
/* grouped content */
.outline
{ display:block; padding:1em; -moz-border-radius:1em;-webkit-border-radius:1em; border:1px solid; }
.menubox
{ display:block; padding:1em; -moz-border-radius:1em;-webkit-border-radius:1em; border:1px solid; background:#fff; color:#000; }
.menubox .button, .menubox .tiddlyLinkExisting, .menubox .tiddlyLinkNonExisting
{ color:#009 !important; }
.groupbox
{ display:block; padding:1em; -moz-border-radius:1em;-webkit-border-radius:1em; border:1px solid; background:#ffe; color:#000; }
.groupbox a, .groupbox .button, .groupbox .tiddlyLinkExisting, .groupbox .tiddlyLinkNonExisting
{ color:#009 !important; }
.groupbox code
{ color:#333 !important; }
.borderleft
{ margin:0;padding:0;border:0;margin-left:1em; border-left:1px dotted; padding-left:.5em; }
.borderright
{ margin:0;padding:0;border:0;margin-right:1em; border-right:1px dotted; padding-right:.5em; }
.borderbottom
{ margin:0;padding:1px 0;border:0;border-bottom:1px dotted; margin-bottom:1px; padding-bottom:1px; }
.bordertop
{ margin:0;padding:0;border:0;border-top:1px dotted; margin-top:1px; padding-top:1px; }
/* scrolled content */
.scrollbars { overflow:auto; }
.height10em { height:10em; }
.height15em { height:15em; }
.height20em { height:20em; }
.height25em { height:25em; }
.height30em { height:30em; }
.height35em { height:35em; }
.height40em { height:40em; }
/* compact form */
.smallform
{ white-space:nowrap; }
.smallform input, .smallform textarea, .smallform button, .smallform checkbox, .smallform radio, .smallform select
{ font-size:8pt; }
/* stretchable edit fields and textareas (auto-size to fit tiddler) */
.stretch input { width:99%; }
.stretch textarea { width:99%; }
/* compact input fields (limited to a few characters for entering percentages and other small values) */
.onechar input { width:1em; }
.twochar input { width:2em; }
.threechar input { width:3em; }
.fourchar input { width:4em; }
.fivechar input { width:5em; }
/* text colors */
.white { color:#fff !important }
.gray { color:#999 !important }
.black { color:#000 !important }
.red { color:#f66 !important }
.green { color:#0c0 !important }
.blue { color:#99f !important }
/* rollover highlighting */
.mouseover
{color:[[ColorPalette::TertiaryLight]] !important;}
.mouseover a
{color:[[ColorPalette::TertiaryLight]] !important;}
.selected .mouseover
{color:[[ColorPalette::Foreground]] !important;}
.selected .mouseover .button, .selected .mouseover a
{color:[[ColorPalette::PrimaryDark]] !important;}
/* rollover zoom text */
.zoomover
{ font-size:80% !important; }
.selected .zoomover
{ font-size:100% !important; }
/* [[ColorPalette]] text colors */
.Background { color:[[ColorPalette::Background]]; }
.Foreground { color:[[ColorPalette::Foreground]]; }
.PrimaryPale { color:[[ColorPalette::PrimaryPale]]; }
.PrimaryLight { color:[[ColorPalette::PrimaryLight]]; }
.PrimaryMid { color:[[ColorPalette::PrimaryMid]]; }
.PrimaryDark { color:[[ColorPalette::PrimaryDark]]; }
.SecondaryPale { color:[[ColorPalette::SecondaryPale]]; }
.SecondaryLight { color:[[ColorPalette::SecondaryLight]];}
.SecondaryMid { color:[[ColorPalette::SecondaryMid]]; }
.SecondaryDark { color:[[ColorPalette::SecondaryDark]]; }
.TertiaryPale { color:[[ColorPalette::TertiaryPale]]; }
.TertiaryLight { color:[[ColorPalette::TertiaryLight]]; }
.TertiaryMid { color:[[ColorPalette::TertiaryMid]]; }
.TertiaryDark { color:[[ColorPalette::TertiaryDark]]; }
.Error { color:[[ColorPalette::Error]]; }
/* [[ColorPalette]] background colors */
.BGBackground { background-color:[[ColorPalette::Background]]; }
.BGForeground { background-color:[[ColorPalette::Foreground]]; }
.BGPrimaryPale { background-color:[[ColorPalette::PrimaryPale]]; }
.BGPrimaryLight { background-color:[[ColorPalette::PrimaryLight]]; }
.BGPrimaryMid { background-color:[[ColorPalette::PrimaryMid]]; }
.BGPrimaryDark { background-color:[[ColorPalette::PrimaryDark]]; }
.BGSecondaryPale { background-color:[[ColorPalette::SecondaryPale]]; }
.BGSecondaryLight { background-color:[[ColorPalette::SecondaryLight]]; }
.BGSecondaryMid { background-color:[[ColorPalette::SecondaryMid]]; }
.BGSecondaryDark { background-color:[[ColorPalette::SecondaryDark]]; }
.BGTertiaryPale { background-color:[[ColorPalette::TertiaryPale]]; }
.BGTertiaryLight { background-color:[[ColorPalette::TertiaryLight]]; }
.BGTertiaryMid { background-color:[[ColorPalette::TertiaryMid]]; }
.BGTertiaryDark { background-color:[[ColorPalette::TertiaryDark]]; }
.BGError { background-color:[[ColorPalette::Error]]; }
/*}}}*/
/*{{{*/
#tiddlersBar {/*background: url(img/trans10.png) top left;*/
text-align: center;
margin-top: .2em;
line-height: 1.4em;
/*-moz-border-radius: 6px 6px 0 0;*/
padding: .3em 0 .2em 0;}
#tiddlersBar .button {border: 0; color: #ddd;}
#tiddlersBar .button:hover {color: white;
background: none;
}
#tiddlersBar .tab {white-space:nowrap; border: none;
/*background: url(img/backheader.jpg);*/
/*border: 1px solid transparent;*/
}
#tiddlersBar .tabSelected {background: url(icons/ministar.png) left no-repeat;
/*background: none;*/
color: white;
border: 1px solid transparent; /*#F7C898;*/
-moz-border-radius: 4px 4px 4px 4px;
padding-left: 1.1em;
}
#tiddlersBar .tabButton {color: transparent;
padding-left: .8em;
background: url(icons/close.png) right no-repeat;
/*display: none;*/}
#tiddlersBar .tabUnselected {
background: url(icons/ministarbn.png) left no-repeat;
padding-left: 1.1em;
border: 1px solid transparent;}
#tiddlersBar .tabUnselected .tabButton {background: url(icons/closebn.png) right no-repeat;}
.tabUnselected .tabButton, .tabSelected .tabButton {padding : 0 2px 0 2px}
.tiddler, .tabContents {border: 1px solid white;
-moz-border-radius: 4px 4px 4px 4px;}
/*}}}*/
[[de THEZAN|http://gw5.geneanet.org/index.php3?b=yml&lang=fr&m=NG&t=N&n=thezan&x=0&y=0]]
<<<
^^//Isabeau de THEZAN est née à une date non connue.
Elle est la fille légitime de Charles de THEZAN et de Antoinette de MONTMETTON.
Elle s'unit avec Pierre de RABAUDY (1600-), conseiller au Parlement de Toulouse, le fils légitime de Nicolas de RABAUDY et de Catherine de LA BARRIERE.
Ce couple aura un enfant :
- Nicolas né en 1627.
Ils se marient le lundi 14 septembre 1626 à Saint-Geniès-de-Fontedit (34258).//^^
<<<
{{center{[img(++,auto)[images/thezan.png]]}}}
2008/06/17: CSS mantenance. Tiddlers affected: StyleSheet
/***
|Name|TagCloudPlugin|
|Source|http://www.TiddlyTools.com/#TagCloudPlugin|
|Version|1.2.0|
|Author|Eric Shulman|
|Original Author|Clint Checketts|
|License|unknown|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides||
|Description|present a 'cloud' of tags using proportional font display|
!Usage
<<<
{{{<<tagCloud>>}}}
> show all tags in the document
{{{<<tagCloud tag tag tag...>>}}}
> show all tags except those listed as parameters
{{{<<tagCloud =tagvalue>>}}}
> show only tags that are themselves tagged with the indicated tag value (i.e., ~TagglyTagging usage)
<<<
!Examples
<<<
{{{<<tagCloud>>}}}
<<tagCloud>>
----
{{{<<tagCloud =package>>}}}
<<tagCloud =package>>
<<<
!Revisions
<<<
2008.09.05 [1.2.0] ELS: added '=tagname' parameter to include only tags that are themselves tagged with the specified value (i.e., ~TagglyTagging usage)
2008.07.03 [1.1.0] ELS: added 'segments' property to macro object. Extensive code cleanup
<<<
!Code
***/
//{{{
version.extensions.TagCloudPlugin= {major: 1, minor: 2 , revision: 0, date: new Date(2008,9,5)};
//Created by Clint Checketts, contributions by Jonny Leroy and Eric Shulman
config.shadowTiddlers.TagCloud="<<tagCloud>>";
setStylesheet("\
.tagCloud span{height: 3.5em;margin: 3px;}\
.tagCloud1{font-size: 70%;}\
.tagCloud2{font-size: 85%;}\
.tagCloud3{font-size: 100%;}\
.tagCloud4{font-size: 120%;}\
.tagCloud5{font-size: 140%;}\
.tagCloud6{font-size: 160%;}\
",
"tagCloudsStyles");
config.macros.tagCloud = {
noTags: "No tag cloud created because there are no tags.",
tooltip: "%1 tiddlers tagged with '%0'",
segments: 5,
handler: function(place,macroName,params) {
var tags=store.getTags();
if (params.length) {
if (params[0].substr(0,1)=="=") {
// include only specifically tagged tags
var tagged=store.getTaggedTiddlers(params[0].substr(1));
for (var t=0; t<tagged.length; t++)
tagged[t]=tagged[t].title;
for (var t=0; t<tags.length; t++)
if (!tagged.contains(tags[t][0])) tags[t][0]="";
} else {
// include all tags except those listed as params
for (var t=0; t<tags.length; t++)
if (params.contains(tags[t][0])) tags[t][0]="";
}
}
// get maximum number of tags to calculate tagCloud segment sizes
var mostTags=0;
for (var t=0; t<tags.length; t++) if (tags[t][0].length > 0)
if (tags[t][1]>mostTags) mostTags=tags[t][1];
var tagSegment=mostTags/config.macros.tagCloud.segments;
// output
var tagCloudWrapper = createTiddlyElement(place,"div",null,"tagCloud",null);
if(!tags.length)
createTiddlyElement(tagCloudWrapper,"span",null,null,this.noTags);
else for (var t=0; t<tags.length; t++) if (tags[t][0].length > 0){
tagCloudWrapper.appendChild(document.createTextNode(" "));
var theTag = createTiddlyButton(tagCloudWrapper,
tags[t][0],this.tooltip.format(tags[t]),onClickTag,
"tagCloudtag tagCloud" + (Math.round(tags[t][1]/tagSegment)+1));
theTag.setAttribute("tag",tags[t][0]);
}
}
};
//}}}
{{tagcloudClass{<<tagCloud systemConfig excludeLists TWServer>>}}}
/***
|''Name:''|~TaggerPlugin|
|''Version:''|1.0.1 (2006-06-01)|
|''Source:''|http://tw.lewcid.org//#TaggerPlugin|
|''Author:''|SaqImtiaz|
|''Description:''|Provides a drop down listing current tiddler tags, and allowing toggling of tags.|
|''Documentation:''|[[TaggerPluginDocumentation]]|
|''Source Code:''|[[TaggerPluginSource]]|
|''~TiddlyWiki:''|Version 2.0.8 or better|
***/
// /%
config.tagger={defaults:{label:"Tags: ",tooltip:"Manage tiddler tags",taglist:"true",excludeTags:"",notags:"tiddler has no tags",aretags:"current tiddler tags:",toggletext:"add tags:"}};config.macros.tagger={};config.macros.tagger.arrow=(document.all?"▼":"▾");config.macros.tagger.handler=function(_1,_2,_3,_4,_5,_6){var _7=config.tagger.defaults;var _8=_5.parseParams("tagman",null,true);var _9=((_8[0].label)&&(_8[0].label[0])!=".")?_8[0].label[0]+this.arrow:_7.label+this.arrow;var _a=((_8[0].tooltip)&&(_8[0].tooltip[0])!=".")?_8[0].tooltip[0]:_7.tooltip;var _b=((_8[0].taglist)&&(_8[0].taglist[0])!=".")?_8[0].taglist[0]:_7.taglist;var _c=((_8[0].exclude)&&(_8[0].exclude[0])!=".")?(_8[0].exclude[0]).readBracketedList():_7.excludeTags.readBracketedList();if((_8[0].source)&&(_8[0].source[0])!="."){var _d=_8[0].source[0];}if(_d&&!store.getTiddler(_d)){return false;}var _e=function(e){if(!e){var e=window.event;}var _11=Popup.create(this);var _12=store.getTags();var _13=new Array();for(var i=0;i<_12.length;i++){_13.push(_12[i][0]);}if(_d){var _15=store.getTiddler(_d);_13=_15.tags.sort();}var _16=_6.tags.sort();var _17=function(_18,_19,_1a){var sp=createTiddlyElement(createTiddlyElement(_11,"li"),"span",null,"tagger");var _1c=createTiddlyButton(sp,_18,_1a+" '"+_19+"'",taggerOnToggle,"button","toggleButton");_1c.setAttribute("tiddler",_6.title);_1c.setAttribute("tag",_19);insertSpacer(sp);if(window.createTagButton_orig_mptw){createTagButton_orig_mptw(sp,_19)}else{createTagButton(sp,_19);}};createTiddlyElement(_11,"li",null,"listTitle",(_6.tags.length==0?_7.notags:_7.aretags));for(var t=0;t<_16.length;t++){_17("[x]",_16[t],"remove tag ");}createTiddlyElement(createTiddlyElement(_11,"li"),"hr");if(_b!="false"){createTiddlyElement(_11,"li",null,"listTitle",_7.toggletext);for(var i=0;i<_13.length;i++){if(!_6.tags.contains(_13[i])&&!_c.contains(_13[i])){_17("[ ]",_13[i],"add tag ");}}createTiddlyElement(createTiddlyElement(_11,"li"),"hr");}var _1f=createTiddlyButton(createTiddlyElement(_11,"li"),("Create new tag"),null,taggerOnToggle);_1f.setAttribute("tiddler",_6.title);if(_d){_1f.setAttribute("source",_d);}Popup.show(_11,false);e.cancelBubble=true;if(e.stopPropagation){e.stopPropagation();}return (false);};createTiddlyButton(_1,_9,_a,_e,"button","taggerDrpBtn");};window.taggerOnToggle=function(e){var tag=this.getAttribute("tag");var _22=this.getAttribute("tiddler");var _23=store.getTiddler(_22);if(!tag){var _24=prompt("Enter new tag:","");if(_24!=""&&_24!=null){var tag=_24;if(this.getAttribute("source")){var _26=store.getTiddler(this.getAttribute("source"));_26.tags.pushUnique(_24);}}else{return false;}}if(!_23||!_23.tags){store.saveTiddler(_22,_22,"",config.options.txtUserName,new Date(),tag);}else{if(_23.tags.find(tag)==null){_23.tags.push(tag);}else{if(!_24){_23.tags.splice(_23.tags.find(tag),1);}}store.saveTiddler(_23.title,_23.title,_23.text,_23.modifier,_23.modified,_23.tags);}story.refreshTiddler(_22,null,true);if(config.options.chkAutoSave){saveChanges();}return false;};setStylesheet(".tagger a.button {font-weight: bold;display:inline; padding:0px;}\n"+".tagger #toggleButton {padding-left:2px; padding-right:2px; margin-right:1px; font-size:110%;}\n"+"#nestedtagger {background:#2E5ADF; border: 1px solid #0331BF;}\n"+".popup .listTitle {color:#000;}\n"+"","TaggerStyles");window.lewcidTiddlerSwapTag=function(_27,_28,_29){for(var i=0;i<_27.tags.length;i++){if(_27.tags[i]==_28){_27.tags[i]=_29;return true;}}return false;};window.lewcidRenameTag=function(e){var tag=this.getAttribute("tag");var _2d=prompt("Rename tag '"+tag+"' to:",tag);if((_2d==tag)||(_2d==null)){return false;}if(store.tiddlerExists(_2d)){if(confirm(config.messages.overwriteWarning.format([_2d.toString()]))){story.closeTiddler(_2d,false,false);}else{return null;}}tagged=store.getTaggedTiddlers(tag);if(tagged.length!=0){for(var j=0;j<tagged.length;j++){lewcidTiddlerSwapTag(tagged[j],tag,_2d);}}if(store.tiddlerExists(tag)){store.saveTiddler(tag,_2d);}if(document.getElementById("tiddler"+tag)){var _2f=document.getElementById(story.idPrefix+tag);var _30=story.positionTiddler(_2f);var _31=document.getElementById(story.container);story.closeTiddler(tag,false,false);story.createTiddler(_31,_30,_2d,null);story.saveTiddler(_2d);}if(config.options.chkAutoSave){saveChanges();}return false;};window.onClickTag=function(e){if(!e){var e=window.event;}var _34=resolveTarget(e);var _35=(!isNested(_34));if((Popup.stack.length>1)&&(_35==true)){Popup.removeFrom(1);}else{if(Popup.stack.length>0&&_35==false){Popup.removeFrom(0);}}var _36=(_35==false)?"popup":"nestedtagger";var _37=createTiddlyElement(document.body,"ol",_36,"popup",null);Popup.stack.push({root:this,popup:_37});var tag=this.getAttribute("tag");var _39=this.getAttribute("tiddler");if(_37&&tag){var _3a=store.getTaggedTiddlers(tag);var _3b=[];var li,r;for(r=0;r<_3a.length;r++){if(_3a[r].title!=_39){_3b.push(_3a[r].title);}}var _3d=config.views.wikified.tag;if(_3b.length>0){var _3e=createTiddlyButton(createTiddlyElement(_37,"li"),_3d.openAllText.format([tag]),_3d.openAllTooltip,onClickTagOpenAll);_3e.setAttribute("tag",tag);createTiddlyElement(createTiddlyElement(_37,"li"),"hr");for(r=0;r<_3b.length;r++){createTiddlyLink(createTiddlyElement(_37,"li"),_3b[r],true);}}else{createTiddlyText(createTiddlyElement(_37,"li",null,"disabled"),_3d.popupNone.format([tag]));}createTiddlyElement(createTiddlyElement(_37,"li"),"hr");var h=createTiddlyLink(createTiddlyElement(_37,"li"),tag,false);createTiddlyText(h,_3d.openTag.format([tag]));createTiddlyElement(createTiddlyElement(_37,"li"),"hr");var _40=createTiddlyButton(createTiddlyElement(_37,"li"),("Rename tag '"+tag+"'"),null,lewcidRenameTag);_40.setAttribute("tag",tag);}Popup.show(_37,false);e.cancelBubble=true;if(e.stopPropagation){e.stopPropagation();}return (false);};if(!window.isNested){window.isNested=function(e){while(e!=null){var _42=document.getElementById("contentWrapper");if(_42==e){return true;}e=e.parentNode;}return false;};}config.shadowTiddlers.TaggerPluginDocumentation="The documentation is available [[here.|http://tw.lewcid.org/#TaggerPluginDocumentation]]";config.shadowTiddlers.TaggerPluginSource="The uncompressed source code is available [[here.|http://tw.lewcid.org/#TaggerPluginSource]]";
// %/
config.macros.tagging.label="%0";
/***
|''Name:''|TiddlersBarPlugin|
|''Description:''|A bar to switch between tiddlers through tabs (like browser tabs bar).|
|''Version:''|1.2.5|
|''Date:''|Jan 18,2008|
|''Source:''|http://visualtw.ouvaton.org/VisualTW.html|
|''Author:''|Pascal Collin|
|''License:''|[[BSD open source license|License]]|
|''~CoreVersion:''|2.1.0|
|''Browser:''|Firefox 2.0; InternetExplorer 6.0, others|
!Demos
On [[homepage|http://visualtw.ouvaton.org/VisualTW.html]], open several tiddlers to use the tabs bar.
!Installation
#import this tiddler from [[homepage|http://visualtw.ouvaton.org/VisualTW.html]] (tagged as systemConfig)
#save and reload
#''if you're using a custom [[PageTemplate]]'', add {{{<div id='tiddlersBar' refresh='none' ondblclick='config.macros.tiddlersBar.onTiddlersBarAction(event)'></div>}}} before {{{<div id='tiddlerDisplay'></div>}}}
#optionally, adjust StyleSheetTiddlersBar
!Tips
*Doubleclick on the tiddlers bar (where there is no tab) create a new tiddler.
*Tabs include a button to close {{{x}}} or save {{{!}}} their tiddler.
*By default, click on the current tab close all others tiddlers.
!Configuration options
<<option chkDisableTabsBar>> Disable the tabs bar (to print, by example).
<<option chkHideTabsBarWhenSingleTab >> Automatically hide the tabs bar when only one tiddler is displayed.
<<option txtSelectedTiddlerTabButton>> ''selected'' tab command button.
<<option txtPreviousTabKey>> previous tab access key.
<<option txtNextTabKey>> next tab access key.
!Code
***/
//{{{
config.options.chkDisableTabsBar = config.options.chkDisableTabsBar ? config.options.chkDisableTabsBar : false;
config.options.chkHideTabsBarWhenSingleTab = config.options.chkHideTabsBarWhenSingleTab ? config.options.chkHideTabsBarWhenSingleTab : false;
config.options.txtSelectedTiddlerTabButton = config.options.txtSelectedTiddlerTabButton ? config.options.txtSelectedTiddlerTabButton : "closeOthers";
config.options.txtPreviousTabKey = config.options.txtPreviousTabKey ? config.options.txtPreviousTabKey : "";
config.options.txtNextTabKey = config.options.txtNextTabKey ? config.options.txtNextTabKey : "";
config.macros.tiddlersBar = {
tooltip : "see ",
tooltipClose : "click here to close this tab",
tooltipSave : "click here to save this tab",
promptRename : "Enter tiddler new name",
currentTiddler : "",
previousState : false,
previousKey : config.options.txtPreviousTabKey,
nextKey : config.options.txtNextTabKey,
tabsAnimationSource : null, //use document.getElementById("tiddlerDisplay") if you need animation on tab switching.
handler: function(place,macroName,params) {
var previous = null;
if (config.macros.tiddlersBar.isShown())
story.forEachTiddler(function(title,e){
if (title==config.macros.tiddlersBar.currentTiddler){
var d = createTiddlyElement(null,"span",null,"tab tabSelected");
config.macros.tiddlersBar.createActiveTabButton(d,title);
if (previous && config.macros.tiddlersBar.previousKey) previous.setAttribute("accessKey",config.macros.tiddlersBar.nextKey);
previous = "active";
}
else {
var d = createTiddlyElement(place,"span",null,"tab tabUnselected");
var btn = createTiddlyButton(d,title,config.macros.tiddlersBar.tooltip + title,config.macros.tiddlersBar.onSelectTab);
btn.setAttribute("tiddler", title);
if (previous=="active" && config.macros.tiddlersBar.nextKey) btn.setAttribute("accessKey",config.macros.tiddlersBar.previousKey);
previous=btn;
}
var isDirty =story.isDirty(title);
var c = createTiddlyButton(d,isDirty ?"!":"x",isDirty?config.macros.tiddlersBar.tooltipSave:config.macros.tiddlersBar.tooltipClose, isDirty ? config.macros.tiddlersBar.onTabSave : config.macros.tiddlersBar.onTabClose,"tabButton");
c.setAttribute("tiddler", title);
if (place.childNodes) {
place.insertBefore(document.createTextNode(" "),place.firstChild); // to allow break line here when many tiddlers are open
place.insertBefore(d,place.firstChild);
}
else place.appendChild(d);
})
},
refresh: function(place,params){
removeChildren(place);
config.macros.tiddlersBar.handler(place,"tiddlersBar",params);
if (config.macros.tiddlersBar.previousState!=config.macros.tiddlersBar.isShown()) {
story.refreshAllTiddlers();
if (config.macros.tiddlersBar.previousState) story.forEachTiddler(function(t,e){e.style.display="";});
config.macros.tiddlersBar.previousState = !config.macros.tiddlersBar.previousState;
}
},
isShown : function(){
if (config.options.chkDisableTabsBar) return false;
if (!config.options.chkHideTabsBarWhenSingleTab) return true;
var cpt=0;
story.forEachTiddler(function(){cpt++});
return (cpt>1);
},
selectNextTab : function(){ //used when the current tab is closed (to select another tab)
var previous="";
story.forEachTiddler(function(title){
if (!config.macros.tiddlersBar.currentTiddler) {
story.displayTiddler(null,title);
return;
}
if (title==config.macros.tiddlersBar.currentTiddler) {
if (previous) {
story.displayTiddler(null,previous);
return;
}
else config.macros.tiddlersBar.currentTiddler=""; // so next tab will be selected
}
else previous=title;
});
},
onSelectTab : function(e){
var t = this.getAttribute("tiddler");
if (t) story.displayTiddler(null,t);
return false;
},
onTabClose : function(e){
var t = this.getAttribute("tiddler");
if (t) {
if(story.hasChanges(t) && !readOnly) {
if(!confirm(config.commands.cancelTiddler.warning.format([t])))
return false;
}
story.closeTiddler(t);
}
return false;
},
onTabSave : function(e) {
var t = this.getAttribute("tiddler");
if (!e) e=window.event;
if (t) config.commands.saveTiddler.handler(e,null,t);
return false;
},
onSelectedTabButtonClick : function(event,src,title) {
var t = this.getAttribute("tiddler");
if (!event) event=window.event;
if (t && config.options.txtSelectedTiddlerTabButton && config.commands[config.options.txtSelectedTiddlerTabButton])
config.commands[config.options.txtSelectedTiddlerTabButton].handler(event, src, t);
return false;
},
onTiddlersBarAction: function(event) {
var source = event.target ? event.target.id : event.srcElement.id; // FF uses target and IE uses srcElement;
if (source=="tiddlersBar") story.displayTiddler(null,'New Tiddler',DEFAULT_EDIT_TEMPLATE,false,null,null);
},
createActiveTabButton : function(place,title) {
if (config.options.txtSelectedTiddlerTabButton && config.commands[config.options.txtSelectedTiddlerTabButton]) {
var btn = createTiddlyButton(place, title, config.commands[config.options.txtSelectedTiddlerTabButton].tooltip ,config.macros.tiddlersBar.onSelectedTabButtonClick);
btn.setAttribute("tiddler", title);
}
else
createTiddlyText(place,title);
}
}
story.coreCloseTiddler = story.coreCloseTiddler? story.coreCloseTiddler : story.closeTiddler;
story.coreDisplayTiddler = story.coreDisplayTiddler ? story.coreDisplayTiddler : story.displayTiddler;
story.closeTiddler = function(title,animate,unused) {
if (title==config.macros.tiddlersBar.currentTiddler)
config.macros.tiddlersBar.selectNextTab();
story.coreCloseTiddler(title,false,unused); //disable animation to get it closed before calling tiddlersBar.refresh
var e=document.getElementById("tiddlersBar");
if (e) config.macros.tiddlersBar.refresh(e,null);
}
story.displayTiddler = function(srcElement,tiddler,template,animate,unused,customFields,toggle){
story.coreDisplayTiddler(config.macros.tiddlersBar.tabsAnimationSource,tiddler,template,animate,unused,customFields,toggle);
var title = (tiddler instanceof Tiddler)? tiddler.title : tiddler;
if (config.macros.tiddlersBar.isShown()) {
story.forEachTiddler(function(t,e){
if (t!=title) e.style.display="none";
else e.style.display="";
})
config.macros.tiddlersBar.currentTiddler=title;
}
var e=document.getElementById("tiddlersBar");
if (e) config.macros.tiddlersBar.refresh(e,null);
}
var coreRefreshPageTemplate = coreRefreshPageTemplate ? coreRefreshPageTemplate : refreshPageTemplate;
refreshPageTemplate = function(title) {
coreRefreshPageTemplate(title);
if (config.macros.tiddlersBar) config.macros.tiddlersBar.refresh(document.getElementById("tiddlersBar"));
}
ensureVisible=function (e) {return 0} //disable bottom scrolling (not useful now)
config.shadowTiddlers.StyleSheetTiddlersBar = "/*{{{*/\n";
config.shadowTiddlers.StyleSheetTiddlersBar += "#tiddlersBar .button {border:0}\n";
config.shadowTiddlers.StyleSheetTiddlersBar += "#tiddlersBar .tab {white-space:nowrap}\n";
config.shadowTiddlers.StyleSheetTiddlersBar += "#tiddlersBar {padding : 1em 0.5em 2px 0.5em}\n";
config.shadowTiddlers.StyleSheetTiddlersBar += ".tabUnselected .tabButton, .tabSelected .tabButton {padding : 0 2px 0 2px; margin: 0 0 0 4px;}\n";
config.shadowTiddlers.StyleSheetTiddlersBar += ".tiddler, .tabContents {border:1px [[ColorPalette::TertiaryPale]] solid;}\n";
config.shadowTiddlers.StyleSheetTiddlersBar +="/*}}}*/";
store.addNotification("StyleSheetTiddlersBar", refreshStyles);
config.refreshers.none = function(){return true;}
config.shadowTiddlers.PageTemplate=config.shadowTiddlers.PageTemplate.replace(/<div id='tiddlerDisplay'><\/div>/m,"<div id='tiddlersBar' refresh='none' ondblclick='config.macros.tiddlersBar.onTiddlersBarAction(event)'></div>\n<div id='tiddlerDisplay'></div>");
//}}}
/***
|''Name:''|TiddlyLightBox|
|''Date:''|Jan 1, 2006|
|''Version:''|1.0 beta|
|''Author:''|Saq Imtiaz|
|''Location:''|http://tw.lewcid.org/#TiddlyLightBoxPlugin|
|''Documentation:''|http://tw.lewcid.org/#TiddlyLightBoxDocs|
|''License:''|[[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|''Based on:''|DC3.LightBox<br>Light Box Gone Wild <br>Ibox|
!!Code
***/
//{{{
config.macros.imagebox ={};
config.macros.imagebox.handler = function (place,macroName,params,wikifier,paramString,tiddler)
{
var e = place.lastChild;
e.onclick = function(){TiddlyLightBox.initBox('image',this,params[1],params[2],params[0]);return false;};
}
config.macros.divbox ={};
config.macros.divbox.handler = function (place,macroName,params,wikifier,paramString,tiddler)
{
if (params[0]!=".")
createTiddlyButton(place,params[0],params[0],function(){TiddlyLightBox.initBox('html',params[1],params[3],params[4],params[2]);return false;});
else
{
var e = place.lastChild;
e.onclick = function(){TiddlyLightBox.initBox('html',params[1],params[3],params[4],params[2]);return false;};
}
}
config.macros.tiddlerbox ={}
config.macros.tiddlerbox.handler = function (place,macroName,params,wikifier,paramString,tiddler)
{
config.macros.divbox.handler(place,macroName,[params[0],"tiddler:"+params[1],params[2],params[3],params[4]]);
return false;
}
store.addNotification("TiddlyLightBoxStyles",refreshStyles);
if (!window.TiddlyLightBox)
window.TiddlyLightBox = {};
var loadingImage = "indicator.gif";
window.TiddlyLightBox =
{
_curBox: null, // [sentinel]
lightBoxHtml : '<div id="lightBoxOverlay" onclick="TiddlyLightBox.hideBox()" style="display:none"></div><div id="lightboxprogress" style="display:none;"><img src=\''+loadingImage+'\' alt=\'loading\' style="width:128px;height:128px;"></div><div class="lightBox" id="lightBox" style="display:none"><div id="lightBoxContent"></div><div id="lightBoxTitle">This is a title</div><div id="lightBoxClose"><a href:"#" onclick="TiddlyLightBox.hideBox();return false;">Click to close</a></div></div>',
createBoxWrapper : function()
{
var wrapper = createTiddlyElement(document.getElementsByTagName("body")[0],"div","tiddlyLightBoxWrapper");
wrapper.innerHTML = this.lightBoxHtml;
},
initBox : function(contentType,url,w,h,text)
{
if (this._curBox)
return;
this.showProgress();
this.hideSelects("hidden");
this.showBg();
this._curBox = true;
this.sizeTheBox(contentType,w,h);
if (contentType == 'image')
this.showImage(url,text);
else if (contentType == 'html')
this.showHtml(url,text);
return false;
},
sizeTheBox : function(contentType,w,h)
{
var box = document.getElementById("lightBoxContent");
if (w && isNaN(parseInt(w)))
{
addClass(box,w);
}
else if (w ||h || contentType == 'html')
{
box.style.width = w? w+ "px" : "450px";
box.style.height = h? h+ "px" : "280px";
if (contentType=='image')
setStylesheet("#lightBoxContent img{height:100%;width:100%;}","lightBoxImageSizeHack");
}
},
showProgress : function()
{
var progress = document.getElementById("lightboxprogress");
progress.style.display='';
this._center(progress);
},
hideProgress: function()
{
var progress = document.getElementById("lightboxprogress");
progress.style.display='none';
},
//this function lifted from Lightbox Gone Wild
hideSelects: function(visibility)
{
var selects = document.getElementsByTagName('select');
for(i = 0; i < selects.length; i++)
{
selects[i].style.visibility = visibility;
}
},
showBg: function()
{
var overlay = document.getElementById('lightBoxOverlay');
if (config.browser.isIE)
{
overlay.style.height = Math.max(document.documentElement.scrollHeight,document.documentElement.offsetHeight);
overlay.style.width = document.documentElement.scrollWidth;
}
overlay.style.display = 'block';
},
showImage: function (url,text)
{
imgPreloader = new Image();
imgPreloader.onload = function ()
{
var lb = document.getElementById("lightBoxContent");
lb.innerHTML = "<img src="+url+">";
lb.onclick = function(){TiddlyLightBox.hideBox();return false;};
TiddlyLightBox.posBox(text);
};
imgPreloader.src = url;
},
showHtml : function(theID,text)
{
var lb = document.getElementById("lightBoxContent");
if (theID.indexOf("tiddler:")==-1)
lb.innerHTML = document.getElementById(theID).innerHTML;
else
{
wikify(store.getTiddlerText(theID.replace("tiddler:","")),lb);
lb.className='tiddler';
}
lb.style.overflow = "auto";
this.posBox(text);
},
posBox: function(text)
{
this.setTitle(text);
this.hideProgress();
var lb = document.getElementById("lightBox");
lb.style.display = "";
lb.style.visibilty = "hidden";
lb.style.position = "absolute";
this._center(lb);
if(!TiddlyLightBox._curBox) return;
lb.style.visibility = "visible";
lb.style.display = "block";
},
setTitle: function(text)
{
document.getElementById("lightBoxTitle").innerHTML= (text==undefined)? '': text;
},
_center: function(lb)
{
var lbSize = new TiddlyLightBox.getElementSize(lb);
lb.style.left = (Math.round(findWindowWidth()/2) - (lbSize.width /2) + findScrollX())+'px';
lb.style.top = (Math.round(findWindowHeight()/2) - (lbSize.height /2) + findScrollY())+'px';
},
//this function lifted from Ibox
getElementSize : function(elem)
{
this.width = elem.offsetWidth || elem.style.pixelWidth;
this.height = elem.offsetHeight || elem.style.pixelHeight;
},
hideBox: function()
{
if(!this._curBox)
return;
document.getElementById("tiddlyLightBoxWrapper").innerHTML= this.lightBoxHtml;
setStylesheet("","lightBoxImageSizeHack");
this._curBox = null;
return false;
}
}
TiddlyLightBox.createBoxWrapper();
Story.prototype.findContainingTiddler = function(e)
{
while(e && (!hasClass(e,"tiddler") || !e.getAttribute("tiddler")))
e = e.parentNode;
return(e);
}
config.shadowTiddlers.TiddlyLightBoxStyles="/*{{{*/\n#lightBoxOverlay {\n position:absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n z-index: 90; \n background-color: #000;\n -moz-opacity: 0.75;\n opacity: .75;\n filter: alpha(opacity=75);\n}\n#lightBoxOverlay[id]{ \n position: fixed;\n}\n\n#lightboxprogress { \n margin:0;padding:0;\n position: absolute;\n z-index:95;\n}\n\ndiv.lightBox {\n background: #fff;\n color: #fff;\n border: 4px solid #525252;\npadding:20px 20px 25px 20px; position:absolute; z-index:99;\n}\n\n#lightBoxClose {text-align:right; color:#000; font-size:1.0em; position:absolute; bottom:6px; right:20px;}\n#lightBoxClose a{color:#666; border-bottom:1px solid #666;cursor:pointer;}\n#lightBoxClose a:hover {color:#111; border-bottom:1px solid #666; cursor:pointer; background:transparent;}\n\n#lightBoxContent {border:1px solid #525252;color:#000; background:#fff;}\n#lightBox .tiddler {background:#fff;}\n\n#lightBoxContent img {border:0;margin:0;padding:0;display:block;cursor:pointer;}\n\n#lightBoxTitle {padding:0px; font-weight:bold; position:absolute; left:20px;bottom:6px; font-size:1.1em; color:#000;}\n\n/*}}}*/";
//}}}
![[TiddlyWikiGlass]]
|TW Glass version|1.5|
|Tested on Windows XP|Firefox 3.0.11|
|Tested on Mac OS X 10.5.7|Firefox 3.0.11 and Safari 4.0|
|Integrated by|Lluís Sasplugas (el noi) elnoi.ad@gmail.com|
|Web |http://dl.getdropbox.com/u/55061/TW/TW.html|
|Information & updates |[[TW Glass News|TWGlassNews]] - [[TW Glass Updates Log|TWGlassUpdates]]|
/%
|Name|ToggleRightSidebar|
|Source|http://www.TiddlyTools.com/#ToggleRightSidebar|
|Version|2.0.0|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|script|
|Requires|InlineJavascriptPlugin|
|Overrides||
|Description|show/hide right sidebar (MainMenu)|
Usage: <<tiddler ToggleRightSidebar with: "label">>
Config settings:
config.options.chkShowRightSidebar (true)
config.options.txtToggleRightSideBarLabelShow (◄)
config.options.txtToggleRightSideBarLabelHide (►)
%/<script label="$1" title="show/hide right sidebar content">
var co=config.options;
if (co.chkShowRightSidebar=='undefined') co.chkShowRightSidebar=true;
co.chkShowRightSidebar=!co.chkShowRightSidebar;
var sb=document.getElementById('sidebar'); if (!sb) return;
sb.style.display=co.chkShowRightSidebar?'block':'none';
document.getElementById('displayArea').style.marginRight=co.chkShowRightSidebar?'':'1em';
saveOptionCookie('chkShowRightSidebar');
var labelShow=co.txtToggleRightSideBarLabelShow||'◄';
var labelHide=co.txtToggleRightSideBarLabelHide||'►';
if (typeof(place)!='undefined' && '$1'=='$'+'1') {
place.innerHTML=co.chkShowRightSidebar?labelHide:labelShow;
place.title=(co.chkShowRightSidebar?'hide':'show')+' right sidebar';
}
var sm=document.getElementById('storyMenu'); if (sm) config.refreshers.content(sm);
</script><script>
var co=config.options;
if (co.chkShowRightSidebar=='undefined') co.chkShowRightSidebar=true;
var sb=document.getElementById('sidebar'); if (!sb) return;
sb.style.display=co.chkShowRightSidebar?'block':'none';
document.getElementById('displayArea').style.marginRight=co.chkShowRightSidebar?'':'1em';
if ('$1'=='$'+'1') {
var labelShow=co.txtToggleRightSideBarLabelShow||'◄';
var labelHide=co.txtToggleRightSideBarLabelHide||'►';
place.lastChild.innerHTML=co.chkShowRightSidebar?labelHide:labelShow;
place.lastChild.title=(co.chkShowRightSidebar?'hide':'show')+' right sidebar';
}
</script>
|~ViewToolbar|closeTiddler +editTiddler editHtml deleteTiddler references > fields closeOthers syncing permalink jump|
|~EditToolbar|+saveTiddler -cancelTiddler|
* <<search>>
* {{span{<<saveChanges>><<setIcon icons/save.png "" notext>>}}}
* {{span{<<newTiddler>><<setIcon icons/new.png "" notext>>}}}
* {{span{<<newJournal>><<setIcon icons/journal.png "" notext>>}}}
* {{span{<<closeAll>><<setIcon icons/closeall.png "" notext>>}}}
* [img[icons/separa.png]]
* [img[icons/house.png][GettingStarted]]
* [img[Options|icons/options.png][SideBarOptions]]
* [img[Tabs|icons/tabs.png][SideBarTabs]]
* [img[Timeline|icons/clock.png][TabTimeline]]
* [img[All|icons/all.png][TabAll]]
* [img[Tags|icons/tag.png][TabTags]]
* [img[More|icons/more.png][TabMore]]
* [img[icons/separa.png]]
* <<tiddler Updater>>
{{span{<<loadTiddlers "label:Update" "tag:TWServer" http://dl.getdropbox.com/u/55061/TW/TWServer.html confirm noreport>><<setIcon icons/update.png "" notext>>}}}
<<<
{{center{[<img(8%,auto)[images/nicolas_voisins.jpg]]}}}
Nicolas de Voisins
//capitoul 1503-1504, capitoul 1524-1525
chevalier, baron de Blagnac, écuyer, seigneur d’Aussonne//
<<<
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::ViewToolbar]]'><span style="padding-right:2em;" macro='tagger'></div>
<div class='title' macro='view title'><span class='subtitle'><span macro='view modifier link'></span>, <span macro='view modified date'></span> <br>
(<span macro='message views.wikified.createdPrompt'></span> <span macro='view created date'></span>)
</span></div>
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
<!--}}}-->
{{center{[img(50%,auto)[images/viguier.jpg]]}}}
<<<
[<img(auto,auto)[images/bls_ysalguier.jpg]]
Ces [[Ysalguier|http://gw5.geneanet.org/index.php3?b=yml&lang=fr&m=NG&t=N&pz=xx&nz=lecoq&ocz=0&n=ysalguier&x=0&y=0]] avaient commencé à faire figure à Toulouse dans les dernières années du treizième siècle. C'étaient à l'origine des gens de finance.
Raymond Ysalguier, qui parvint au consulat en 1295, tenait une maison de change. Onze ans après, il fut chargé, avec deux autres bourgeois de Toulouse, d'une opération importante par les commissaires du roi Philippe le Bel pour l'expulsion et la spoliation des Juifs. Sous le règne de Charles IV, les domaines confisqués ayant été mis en vente, les Ysalguier achetèrent le cimetière des Juifs et un certain nombre de maisons sur l'emplacement desquelles ils édifièrent leur hôtel.
<<<
<<<
Avec la fortune, ils arrivèrent à la noblesse, à la haute culture, aux charges militaires, aux emplois de cour, aux brillantes alliances. L'un d'entre eux figure en 1355 parmi les mainteneurs du gay savoir, et le rédacteur de las Leys d'amors, Guilhem Molinier, célèbre les mérites du valeureux, plaisant et gai Monsieur Barthélémy Ysalguier, loyal et hardi chevalier, soutien du gai savoir.
<<<
<<<
Les Ysalguier se battirent bravement dans la guerre de Cent ans, prirent place dans le conseil de gouvernement du duc d'Anjou; ils sont cités à la prise de Tartas, l'un d'eux a été gouverneur de Bazas, un autre sénéchal de Bigorre ; ils sont entrés, par mariages, dans les plus illustres maisons de France, les comtes de l'Isle-Jourdain, les Hunaud de Lanta, les Foix-Rabat, les Terride, les Rochecliouard-Faudoas, et ils ont donné sa première femme à Biaise Monluc. Les terres et seigneuries qui sont demeurées entre leurs mains pendant près de deux siècles sont nombreuses et considérables : Auterive, Pinsaguel, Fourquevaux, Glermont, Odars, Trébons, Gastelnau-d'Estrétefonds et bien d'autres flefs. Puis, vers les premières années du seizième siècle, la famille, dont les possessions allaient se morcelant de plus en plus, cesse de jouer un rôle historique, se perd en divers rameaux très disséminés, et finit par disparaître complètement de Toulouse, après avoir rempli la contrée de ses armoiries et de son nom.
<<<
//Académie des sciences, inscriptions et belles-lettres de Toulouse Mémoires (Volume 4, Series 9)//
/***
|''Name:''|YourSearchPlugin|
|''Version:''|2.1.4 (2008-10-28)|
|''Source:''|http://tiddlywiki.abego-software.de/#YourSearchPlugin|
|''Author:''|UdoBorkowski (ub [at] abego-software [dot] de)|
|''Licence:''|[[BSD open source license (abego Software)|http://www.abego-software.de/legal/apl-v10.html]]|
|''Copyright:''|© 2005-2008 [[abego Software|http://www.abego-software.de]]|
|''~CoreVersion:''|2.1.0|
|''Community:''|[[del.icio.us|http://del.icio.us/post?url=http://tiddlywiki.abego-software.de/index.html%23YourSearchPlugin]]|
|''Browser:''|Firefox 1.0.4+; Firefox 1.5; ~InternetExplorer 6.0|
!About YourSearch
YourSearch gives you a bunch of new features to simplify and speed up your daily searches in TiddlyWiki. It seamlessly integrates into the standard TiddlyWiki search: just start typing into the 'search' field and explore!
For more information see [[Help|YourSearch Help]].
!Compatibility
This plugin requires TiddlyWiki 2.1.
Check the [[archive|http://tiddlywiki.abego-software.de/archive]] for ~YourSearchPlugins supporting older versions of TiddlyWiki.
!Revision history
* v2.1.4 (2008-10-28)
** Fixed problem when searching texts containing "not","and","or" without quoting the searched text. Thanks to el noi and Walter Schell for reporting.
** Support diacritic characters in searched text, i.e. searching for "cafe" will also find "café" etc.
* v2.1.3 (2008-04-16)
** Fixed problem with Firefox3. Thanks to Andreas Hoefler for reporting.
* v2.1.2 (2008-03-17)
** Bug: on IE (6.0) the first letter is dropped from the search string. Thanks to Kashgarinn and Nick Padfield for reporting.
* v2.1.1 (2007-03-11)
** Extend "New tiddler" feature: Ctrl-Return invokes the "new tiddler" feature (create tiddler based on search text)
** Extend "New tiddler" feature: tiddler's text and tags may also be specified (see abego.parseNewTiddlerCommandLine)
** Support searching for URLs (like http://www.example.com)
** Provided extended public API (abego.YourSearch.getFoundTiddlers/getQuery/onShowResult)
** Clear MessageBox when search field gets focus (so the box no longer hides the search field)
** Reset search result when TiddlyWiki is changed
** Fix function abego.BoolExp
* v2.1.0 (2006-10-12)
** Release version with TiddlyWiki 2.1 support
*** Support (Extended) Field search
*** Support parenthesis in Boolean Search
*** Support direct regular expression input
*** Support JavaScript Expressions for filtering
*** "new tiddler" feature (create tiddler based on search text)
* v2.0.2 (2006-02-13)
** Bugfix for Firefox 1.5.0.1 related to the "Show prefix" checkbox. Thanks to Ted Pavlic for reporting and to BramChen for fixing.
** Internal
*** Make "JSLint" conform
* v2.0.1 (2006-02-05)
** Support "Exact Word Match" (use '=' to prefix word)
** Support default filter settings (when no filter flags are given in search term)
** Rework on the "less than 3 chars search text" feature (thanks to EricShulman)
** Better support SinglePageMode when doing "Open all tiddlers" (thanks to EricShulman)
** Support Firefox 1.5.0.1
** Bug: Fixed a hilite bug in "classic search mode" (thanks to EricShulman)
* v2.0.0 (2006-01-16)
** Add User Interface
* v1.0.1 (2006-01-06)
** Support TiddlyWiki 2.0
* v1.0.0 (2005-12-28)
** initial version
!Source Code
***/
//{{{
//============================================================================
//============================================================================
// YourSearchPlugin
//============================================================================
//============================================================================
// Ensure that the Plugin is only installed once.
//
if (!version.extensions.YourSearchPlugin) {
version.extensions.YourSearchPlugin = {
major: 2, minor: 1, revision: 4,
source: "http://tiddlywiki.abego-software.de/#YourSearchPlugin",
licence: "[[BSD open source license (abego Software)|http://www.abego-software.de/legal/apl-v10.html]]",
copyright: "Copyright (c) abego Software GmbH, 2005-2008 (www.abego-software.de)"
};
if (!window.abego) window.abego = {};
// define the Array forEach when not yet defined (e.g. by Mozilla)
if (!Array.forEach) {
Array.forEach = function(obj, callback, thisObj) {
for (var i = 0,len = obj.length; i < len; i++)
callback.call(thisObj, obj[i], i, obj);
};
Array.prototype.forEach = function(callback, thisObj) {
for (var i = 0,len = this.length; i < len; i++)
callback.call(thisObj, this[i], i, this);
};
}
abego.toInt = function(s, defaultValue) {
if (!s) return defaultValue;
var n = parseInt(s);
return (n == NaN) ? defaultValue : n;
};
abego.createEllipsis = function(place) {
var e = createTiddlyElement(place,"span");
e.innerHTML = "…";
};
//#concept Object
//
abego.shallowCopy = function(object) {
if (!object)
return object;
var result = {};
for (var n in object)
result[n] = object[n];
return result;
};
// Returns a shallow copy of the options, or a new, empty object if options is null/undefined.
//
// @param options [may be null/undefined]
//
//#concept Object, Options
//#import abego.shallowCopy
//
abego.copyOptions = function(options) {
return !options ? {} : abego.shallowCopy(options);
};
//#import abego.define-namespace
// returns the number of occurances of s in the text
abego.countStrings = function(text, s) {
if (!s)
return 0;
var len = s.length;
var n = 0;
var lastIndex = 0;
while (1) {
var i = text.indexOf(s, lastIndex);
if (i < 0)
return n;
n++;
lastIndex = i+len;
}
return n;
};// Returns the content of the first "braced" text {...}
// Also takes care of nested braces
//
// Returns undefined when no braced text is found or it is not properly nested
//
// @param [optional] when defined and a braced text is found lastIndexRef.lastIndex will contain the index of the char following the (final) closing brace on return.
//
abego.getBracedText = function(text, offset,lastIndexRef) {
if (!offset) offset = 0;
var re = /\{([^\}]*)\}/gm;
re.lastIndex = offset;
var m = re.exec(text);
if (m) {
// The matching stopped at the first closing brace.
// But if the matched text contains opening braces
// this is not the final closing brace.
// Handle this case specially, find the "corresponding" closing brace
var s = m[1];
var nExtraOpenBrace = abego.countStrings(s,"{");
if (!nExtraOpenBrace) {
if (lastIndexRef)
lastIndexRef.lastIndex = re.lastIndex;
// simple case: no nested braces
return s;
}
// special case: "nested braces"
var len = text.length;
for (var i = re.lastIndex; i < len && nExtraOpenBrace; i++) {
var c = text.charAt(i);
if (c == "{")
nExtraOpenBrace++;
else if (c == "}")
nExtraOpenBrace--;
}
if (!nExtraOpenBrace) {
// found the corresponding "}".
if (lastIndexRef)
lastIndexRef.lastIndex = i-1;
return text.substring(m.index+1, i-1);
}
}
// no return means: return undefined;
};
// Returns an array with those items from the array that pass the given test
//
// @param test an one-arg boolean function that returns true when the item should be added.
// @param testObj [optional] the receiver for the test function (global if undefined or null)
// @param result [optional] an array. When define the selected items are added to this array, otherwise a new array is used.
//
//#import Array.prototype.forEach
//
abego.select = function(array,test,testObj,result) {
if (!result) result = [];
array.forEach(function(t) {
if (test.call(testObj,t))
result.push(t);
});
return result;
};
// A portable way to "consume an event"
//
// (Uses "stopPropagation" and "preventDefault", but will also "cancelBubble",
// even though this is a "non-standard method" , just in case).
//
abego.consumeEvent = function(e) {
if (e.stopPropagation) e.stopPropagation();
if (e.preventDefault) e.preventDefault();
e.cancelBubble = true;
e.returnValue = true;
};
// Returns a string with all characters in reText that have "diacritic" variations
// changed to regular expressions that also include these diacritics.
//
// E.g. the character "A" is also matched by Umlaut-A, A-with-grave, A-with-acute etc.
//
abego.expandToDiacritics = function(reText) {
if (!reText)
return reText;
reText = reText.replace(/A/g,"[A\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6]");
reText = reText.replace(/C/g,"[C\u00C7]");
reText = reText.replace(/E/g,"[E\u00C8\u00C9\u00CA\u00CB]");
reText = reText.replace(/I/g,"[I\u00CC\u00CD\u00CE\u00CF]");
reText = reText.replace(/N/g,"[N\u00D1]");
reText = reText.replace(/O/g,"[O\u00D2\u00D3\u00D4\u00D5\u00D6\u00D8]");
reText = reText.replace(/U/g,"[U\u00D9\u00DA\u00DB\u00DC]");
reText = reText.replace(/Y/g,"[Y\u00DD]");
reText = reText.replace(/ss/g,"(?:ss|\u00DF)");
reText = reText.replace(/a/g,"[a\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5]");
reText = reText.replace(/c/g,"[c\u00E7]");
reText = reText.replace(/e/g,"[e\u00E8\u00E9\u00EA\u00EB]");
reText = reText.replace(/i/g,"[i\u00EC\u00ED\u00EE\u00EF]");
reText = reText.replace(/n/g,"[n\u00F1]");
reText = reText.replace(/o/g,"[o\u00F2\u00F3\u00F4\u00F5\u00F6\u00F8]");
reText = reText.replace(/u/g,"[u\u00F9\u00FA\u00FB\u00FC]");
reText = reText.replace(/y/g,"[y\u00FD\u00FF]");
return reText;
}
// Class abego.TiddlerFilterTerm =================================================================
//
// Used to check if a tiddler contains a given text.
//
// A list of fields (standard and/or extended) may be specified to restrict the search to certain fields.
//
// When no explicit fields are given the fields defined by defaultFields are checked, plus all extended
// fields (when options.withExtendedFields is true).
//
// @param options [may be null/undefined]
// options.fields @seeParam abego.MultiFieldRegExpTester.fields
// options.withExtendedFields @seeParam abego.MultiFieldRegExpTester.withExtendedFields
// options.caseSensitive [Default: false]
// options.fullWordMatch [Default: false]
// options.textIsRegExp [Default: false] when true the given text is already a regExp
//
//#import abego.MultiFieldRegExpTester
//
abego.TiddlerFilterTerm = function(text,options) {
if (!options) options = {};
var reText = text;
if (!options.textIsRegExp) {
reText = text.escapeRegExp();
if (options.fullWordMatch)
reText = "\\b"+reText+"\\b";
}
reText = abego.expandToDiacritics(reText);
var regExp = new RegExp(reText, "m"+(options.caseSensitive ? "" : "i"));
this.tester = new abego.MultiFieldRegExpTester(regExp, options.fields, options.withExtendedFields);
}
abego.TiddlerFilterTerm.prototype.test = function(tiddler) {
return this.tester.test(tiddler);
}
// Recognize a string like
// "Some Title. Some content text #Tag1 #Tag2 Tag3"
// with the tags and the text being optional.
// Also the period at the end of the title is optional when no content text is specified)
//
// Returns the result in an object with properties "title" and "params",
// with "params" following the parseParams format, containing the "tag" and "text" arguments.
//
abego.parseNewTiddlerCommandLine = function(s) {
var m = /(.*?)\.(?:\s+|$)([^#]*)(#.*)?/.exec(s);
if (!m)
m = /([^#]*)()(#.*)?/.exec(s);
if (m) {
var r;
if (m[3]) {
var s2 = m[3].replace(/#/g,"");
r = s2.parseParams("tag");
} else
r = [[]];
// add the text parameter
var text = m[2]?m[2].trim():"";
r.push({name: "text", value: text});
r[0].text = [text];
return {title: m[1].trim(), params: r};
} else
return {title: s.trim(),params: [[]]};
}
// options.defaultFields [@seeOptionDefault abego.TiddlerFilterTerm.fields] fields to check when no fields are explicitly specified in queryText.
// options.withExtendedFields [@seeOptionDefault abego.TiddlerFilterTerm.withExtendedFields] when true and no fields are explicitly specified in queryText also the extended fields are considered (in addition to the ones in defaultFields).
// @seeOptions abego.TiddlerFilterTerm (-fields -fullWordMatch -withExtendedFields)
//
//#import abego.getBracedText
//#import abego.copyOptions
//#import abego.TiddlerFilterTerm
//
abego.parseTiddlerFilterTerm = function(queryText,offset,options) {
// group 1: {...} (JavaScript expression)
// group 2: '=' (full word match (optional))
// group 3: [!%#] (field selection short cuts)
// group 4: fieldName ':'
// group 5: String literal "..."
// group 6: RegExp literal /.../
// group 7: scheme '://' nonSpaceChars
// group 8: word
var re = /\s*(?:(?:\{([^\}]*)\})|(?:(=)|([#%!])|(?:(\w+)\s*\:(?!\/\/))|(?:(?:("(?:(?:\\")|[^"])+")|(?:\/((?:(?:\\\/)|[^\/])+)\/)|(\w+\:\/\/[^\s]+)|([^\s\)\-\"]+)))))/mg; // " <- The syntax highlighting of my editors gets confused without this quote
var shortCuts = {'!':'title','%':'text','#':'tags'};
var fieldNames = {};
var fullWordMatch;
re.lastIndex = offset;
while (1) {
var i = re.lastIndex;
var m = re.exec(queryText);
if (!m || m.index != i)
throw "Word or String literal expected";
if (m[1]) {
var lastIndexRef = {};
var code = abego.getBracedText(queryText,0,lastIndexRef);
if (!code)
throw "Invalid {...} syntax";
var f = Function("tiddler","return ("+code+");");
return {func: f,
lastIndex:lastIndexRef.lastIndex,
markRE: null};
}
if (m[2])
fullWordMatch = true;
else if (m[3])
fieldNames[shortCuts[m[3]]] = 1;
else if (m[4])
fieldNames[m[4]] = 1;
else {
var textIsRegExp = m[6];
var text = m[5] ? window.eval(m[5]) : m[6] ? m[6] : m[7] ? m[7] : m[8];
var options = abego.copyOptions(options);
options.fullWordMatch = fullWordMatch;
options.textIsRegExp = textIsRegExp;
var fields = [];
for (var n in fieldNames)
fields.push(n);
if (fields.length == 0) {
options.fields = options.defaultFields;
} else {
options.fields = fields;
options.withExtendedFields = false;
}
var term = new abego.TiddlerFilterTerm(text,options);
var markREText = textIsRegExp ? text : text.escapeRegExp();
if (markREText && fullWordMatch)
markREText = "\\b"+markREText+"\\b";
markREText = abego.expandToDiacritics(markREText);
return {func: function(tiddler) {return term.test(tiddler);},
lastIndex:re.lastIndex,
markRE: markREText ? "(?:"+markREText+")" : null};
}
}
};
// Class abego.BoolExp =================================================================
//
// Allows the execution/evaluation of a boolean expression, according to this syntax:
//
// boolExpression : unaryExpression (("AND"|"OR"|"&&"|"||")? unaryExpression)*
// ;
//
// unaryExpression : ("not"|"-")? primaryExpression
// ;
//
// primaryExpression : "(" boolExpression ")"
// | Term
// ;
//
// For flexibility the Term syntax is defined by a separate parse function.
//
// Notice that there is no precedence between "AND" and "OR" operators, i.e. they are evaluated from left to right.
//
// To evaluate the expression in a given context use code like this:
//
// var be = new abego.BoolExp(s, termParseFunc);
// var result = be.exec(context);
//
// @param s the text defining the expression
// @param parseTermFunc a Function(text,offset,options) that parses the text starting at offset for a "Term" and returns an object with properties {func: Function(context), lastIndex: ...}. func is the function to be used to evaluate the term in the given context.
// @param options [may be null/undefined] (is also passed to the parseTermFunc)
// options.defaultOperationIs_OR [Default: false] When true the concatenation of unaryExpressions (without an operator) is interpreted as an "OR", otherwise as an "AND".
// options.caseSensitive [default: false]
//
abego.BoolExp = function(s, parseTermFunc, options) {
this.s = s;
var defaultOperationIs_OR = options && options.defaultOperationIs_OR;
var reStart = /\s*(?:(\-|(?:\bnot\b))|(\())/gi; // group 1: NOT, group2 "("
var reCloseParenthesis = /\s*\)/g; // match )
var reAndOr = /\s*(?:((?:\band\b)|\&\&)|((?:\bor\b)|\|\|))/gi; // group 1: AND, group 2: OR
var reNonWhiteSpace = /\s*[^\)\s]/g;
var reNot_Parenthesis = /\s*(\-|(?:\bnot\b))?(\s*\()?/gi;
var parseBoolExpression; //#Pre-declare function name to avoid problem with "shrinkSafe"
var parseUnaryExpression = function(offset) {
reNot_Parenthesis.lastIndex = offset;
var m = reNot_Parenthesis.exec(s);
var negate;
var result;
if (m && m.index == offset) {
offset += m[0].length;
negate = m[1];
if (m[2]) {
// case: (...)
var e = parseBoolExpression(offset);
reCloseParenthesis.lastIndex = e.lastIndex;
if (!reCloseParenthesis.exec(s))
throw "Missing ')'";
result = {func: e.func, lastIndex: reCloseParenthesis.lastIndex, markRE: e.markRE};
}
}
if (!result)
result = parseTermFunc(s,offset,options);
if (negate) {
result.func = (function(f){return function(context) {return !f(context);}})(result.func);
// don't mark patterns that are negated
// (This is essential since the marking may also be used to calculate "ranks". If we
// would also count the negated matches (i.e. that should not exist) the rank may get too high)
result.markRE = null;
}
return result;
};
parseBoolExpression = function(offset) {
var result = parseUnaryExpression(offset);
while (1) {
var l = result.lastIndex;
reAndOr.lastIndex = l;
var m = reAndOr.exec(s);
var isOrCase;
var nextExp;
if (m && m.index == l) {
isOrCase = !m[1];
nextExp = parseUnaryExpression(reAndOr.lastIndex);
} else {
// no "AND" or "OR" found.
// Maybe it is a concatenations of parseUnaryExpression without operators
try {
nextExp = parseUnaryExpression(l);
} catch (e) {
// no unary expression follows. We are done
return result;
}
isOrCase = defaultOperationIs_OR;
}
result.func = (function(func1, func2, isOrCase) {
return isOrCase
? function(context) {return func1(context) || func2(context);}
: function(context) {return func1(context) && func2(context);};
})(result.func,nextExp.func,isOrCase);
result.lastIndex = nextExp.lastIndex;
if (!result.markRE)
result.markRE = nextExp.markRE;
else if (nextExp.markRE)
result.markRE = result.markRE + "|" + nextExp.markRE;
}
};
var expr = parseBoolExpression(0);
this.evalFunc = expr.func;
if (expr.markRE)
this.markRegExp = new RegExp(expr.markRE, options.caseSensitive ? "mg" : "img");
}
abego.BoolExp.prototype.exec = function() {
return this.evalFunc.apply(this,arguments);
};
abego.BoolExp.prototype.getMarkRegExp = function() {
return this.markRegExp;
};
abego.BoolExp.prototype.toString = function() {
return this.s;
};
// Class abego.MultiFieldRegExpTester ==================================================================
//
// @param fields [optional; Default: ["title","text","tags"]] array of names of fields to be considered
// @param withExtendedFields [optional; Default: false] when true also extended fields are considered (in addition to the ones given in 'fields')
//
abego.MultiFieldRegExpTester = function(re, fields, withExtendedFields) {
this.re = re;
this.fields = fields ? fields : ["title","text","tags"];
this.withExtendedFields = withExtendedFields;
}
// Returns the name of the first field found that value succeeds the given test,
// or null when no such field is found
//
abego.MultiFieldRegExpTester.prototype.test = function(tiddler) {
var re = this.re;
// Check the fields explicitly specified
for (var i = 0; i < this.fields.length; i++) {
var s = store.getValue(tiddler, this.fields[i]);
if (typeof s == "string" && re.test(s))
return this.fields[i];
}
// Check the extended fields (if required)
if (this.withExtendedFields)
return store.forEachField(
tiddler,
function(tiddler, fieldName, value) {
return typeof value == "string" && re.test(value)?fieldName:null;
}, true);
return null;
}
// Class abego.TiddlerQuery ==================================================================
//
//#import abego.select
//#import abego.MultiFieldRegExpTester
//
abego.TiddlerQuery = function(queryText,caseSensitive,useRegExp,defaultFields,withExtendedFields) {
if (useRegExp) {
this.regExp = new RegExp(queryText, caseSensitive ? "mg" : "img");
this.tester = new abego.MultiFieldRegExpTester(this.regExp, defaultFields, withExtendedFields);
} else {
this.expr = new abego.BoolExp(
queryText,
abego.parseTiddlerFilterTerm, {
defaultFields: defaultFields,
caseSensitive: caseSensitive,
withExtendedFields: withExtendedFields});
}
this.getQueryText = function() {
return queryText;
};
this.getUseRegExp = function() {
return useRegExp;
};
this.getCaseSensitive = function() {
return caseSensitive;
};
this.getDefaultFields = function() {
return defaultFields;
};
this.getWithExtendedFields = function() {
return withExtendedFields;
};
}
// Returns true iff the query includes the given tiddler
//
// @param tiddler [may be null/undefined]
//
abego.TiddlerQuery.prototype.test = function(tiddler) {
if (!tiddler) return false;
if (this.regExp) {
return this.tester.test(tiddler);
}
return this.expr.exec(tiddler);
};
// Returns an array with those tiddlers from the tiddlers array that match the query.
//
abego.TiddlerQuery.prototype.filter = function(tiddlers) {
return abego.select(tiddlers,this.test,this);
};
abego.TiddlerQuery.prototype.getMarkRegExp = function() {
if (this.regExp) {
// Only use the regExp for marking when it does not match the empty string.
return "".search(this.regExp) >= 0 ? null : this.regExp;
}
return this.expr.getMarkRegExp();
};
abego.TiddlerQuery.prototype.toString = function() {
return (this.regExp ? this.regExp : this.expr).toString();
};
// Class abego.PageWiseRenderer ================================================
//
// Subclass or instance must implement getItemsPerPage function;
// They should also implement onPageChanged and refresh the container of the
// PageWiseRenderer on that event.
//
//#import abego.toInt
//
abego.PageWiseRenderer = function() {
this.firstIndexOnPage = 0; // The index of the first item of the lastResults list displayed on the search result page
};
merge(abego.PageWiseRenderer.prototype, {
setItems: function(items) {
this.items = items;
this.setFirstIndexOnPage(0);
},
// Maximum number of pages listed in the navigation bar (before or after the current page)
//
getMaxPagesInNavigation: function() {
return 10;
},
getItemsCount: function(items) {
return this.items ? this.items.length : 0;
},
getCurrentPageIndex: function() {
return Math.floor(this.firstIndexOnPage / this.getItemsPerPage());
},
getLastPageIndex: function() {
return Math.floor((this.getItemsCount()-1) / this.getItemsPerPage())
},
setFirstIndexOnPage: function(index) {
this.firstIndexOnPage = Math.min(Math.max(0, index), this.getItemsCount()-1);
},
getFirstIndexOnPage: function() {
// Ensure that the firstIndexOnPage is really a page start.
// This may have become violated when getItemsPerPage has changed,
// (e.g. when switching between previewText and simple mode.)
this.firstIndexOnPage = Math.floor(this.firstIndexOnPage / this.getItemsPerPage()) * this.getItemsPerPage();
return this.firstIndexOnPage;
},
getLastIndexOnPage: function() {
return Math.min(this.getFirstIndexOnPage()+this.getItemsPerPage()-1, this.getItemsCount()-1);
},
onPageChanged: function(pageIndex,oldPageIndex) {
},
renderPage: function(itemRenderer) {
if (itemRenderer.beginRendering)
itemRenderer.beginRendering(this);
try {
// When there are items found add them to the result page (pagewise)
if (this.getItemsCount()) {
// Add the items of the current page
var lastIndex = this.getLastIndexOnPage();
var iInPage = -1;
for (var i=this.getFirstIndexOnPage(); i <= lastIndex; i++) {
iInPage++;
itemRenderer.render(this,this.items[i],i,iInPage);
}
}
} finally {
if (itemRenderer.endRendering)
itemRenderer.endRendering(this);
}
},
addPageNavigation: function(place) {
if (!this.getItemsCount()) return;
var self = this;
var onNaviButtonClick = function(e) {
if (!e) var e = window.event;
abego.consumeEvent(e);
var pageIndex = abego.toInt(this.getAttribute("page"),0);
var oldPageIndex = self.getCurrentPageIndex();
if (pageIndex == oldPageIndex)
return;
var index = pageIndex * self.getItemsPerPage();
self.setFirstIndexOnPage(index);
self.onPageChanged(pageIndex,oldPageIndex);
};
var button;
var currentPageIndex = this.getCurrentPageIndex();
var lastPageIndex = this.getLastPageIndex();
if (currentPageIndex > 0) {
button = createTiddlyButton(place, "Previous", "Go to previous page (Shortcut: Alt-'<')", onNaviButtonClick, "prev");
button.setAttribute("page",(currentPageIndex-1).toString());
button.setAttribute("accessKey","<");
}
for (var i = -this.getMaxPagesInNavigation(); i < this.getMaxPagesInNavigation(); i++) {
var pageIndex = currentPageIndex+i;
if (pageIndex < 0) continue;
if (pageIndex > lastPageIndex) break;
var pageNo = (i+currentPageIndex+1).toString();
var buttonClass = pageIndex == currentPageIndex ? "currentPage" : "otherPage";
button = createTiddlyButton(place, pageNo, "Go to page %0".format([pageNo]), onNaviButtonClick, buttonClass);
button.setAttribute("page",(pageIndex).toString());
}
if (currentPageIndex < lastPageIndex) {
button = createTiddlyButton(place, "Next", "Go to next page (Shortcut: Alt-'>')", onNaviButtonClick, "next");
button.setAttribute("page",(currentPageIndex+1).toString());
button.setAttribute("accessKey",">");
}
}
});
// Class abego.LimitedTextRenderer ===========================================================
//
// Renders a given text, ensuring that a given limit of number of characters
// is not exceeded.
//
// A "markRegExp" may be specified. Substring matching this regular expression
// ("matched strings") are rendered with the class "marked".
//
// if the given text is longer than the limit the matched strings are preferred
// to be included in the rendered text (with some leading and trailing "context text").
//
// Example:
// var renderer = new abego.LimitedTextRenderer();
//
// var place = ... // a DOM element that should contain the rendered (limited) text
// var s = "This is another 'Hello World' example, as saying 'Hello' is always nice. So let's say it again: >Hello!<";
// var maxLen = 50;
// var markRE = /hello/gi;
// renderer.render(place,s,maxLen,markRE);
//
//#import abego.createEllipsis
//
abego.LimitedTextRenderer = function() {
var minMatchWithContextSize = 40;
var maxMovementForWordCorrection = 4; // When a "match" context starts or end on a word the context borders may be changed to at most this amount to include or exclude the word.
//----------------------------------------------------------------------------
//
// Ranges
//
// Objects with a "start" and "end" property (not a specific class).
//
// In a corresponding "Ranges array" these objects are sorted by their start
// and no Range object intersects/touches any other in the array.
//
//----------------------------------------------------------------------------
// Adds the Range [startIndex,endIndex[ to the ranges, ensuring that the Ranges
// in the array are sorted by their start and no Range object
// intersects/touches any other in the array (i.e. possibly the new Range is
// "merged" with existing ranges)
//
// @param ranges array of Range objects
//
var addRange = function(ranges, startIndex, endIndex) {
var n = ranges.length;
// When there are no ranges in ranges, just add it.
if (n == 0) {
ranges.push({start: startIndex, end: endIndex});
return;
}
var i = 0;
for (; i < n; i++) {
var range = ranges[i];
// find the first range that intersects or "touches" [startIndex, endIndex[
if (range.start <= endIndex && startIndex <= range.end) {
// Found.
var r;
// find the first range behind the new range that does not interfere
var rIndex = i+1;
for (; rIndex < n; rIndex++) {
r = ranges[rIndex];
if (r.start > endIndex || startIndex > range.end) {
break;
}
}
// Replace the ranges i to rIndex-1 with the union of the new range with these ranges.
var unionStart = startIndex;
var unionEnd = endIndex;
for (var j = i; j < rIndex; j++) {
r = ranges[j];
unionStart = Math.min(unionStart, r.start);
unionEnd = Math.max(unionEnd, r.end);
}
ranges.splice(i, rIndex-i, {start: unionStart, end: unionEnd});
return;
}
// if we found a range R that is right of the new range there is no
// intersection and we can insert the new range before R.
if (range.start > endIndex) {
break;
}
}
// When we are here the new range does not interfere with any range in ranges and
// i is the index of the first range right to it (or ranges.length, when the new range
// becomes the right most range).
ranges.splice(i, 0, {start: startIndex, end: endIndex});
};
// Returns the total size of all Ranges in ranges
//
var getTotalRangesSize = function(ranges) {
var totalRangeSize = 0;
for (var i=0; i < ranges.length; i++) {
var range = ranges[i];
totalRangeSize += range.end-range.start;
}
return totalRangeSize;
};
//----------------------------------------------------------------------------
var isWordChar = function(c) {
return (c >= "a" && c <= "z") || (c >= "A" && c <= "Z") || c == "_";
};
// Returns the bounds of the word in s around offset as a {start: , end:} object.
//
// Returns null when the char at offset is not a word char.
//
var getWordBounds = function(s, offset) {
// Handle the "offset is not in word" case
if (!isWordChar(s[offset])) return null;
for (var i = offset-1; i >= 0 && isWordChar(s[i]); i--)
{/*empty*/}
var startIndex = i+1;
var n = s.length;
for (i = offset+1; i < n && isWordChar(s[i]); i++)
{/*empty*/}
return {start: startIndex, end: i};
};
var moveToWordBorder = function(s, offset, isStartOffset) {
var wordBounds;
if (isStartOffset) {
wordBounds = getWordBounds(s, offset);
} else {
if (offset <= 0) return offset;
wordBounds = getWordBounds(s, offset-1);
}
if (!wordBounds) return offset;
if (isStartOffset) {
if (wordBounds.start >= offset-maxMovementForWordCorrection) return wordBounds.start;
if (wordBounds.end <= offset+maxMovementForWordCorrection) return wordBounds.end;
} else {
if (wordBounds.end <= offset+maxMovementForWordCorrection) return wordBounds.end;
if (wordBounds.start >= offset-maxMovementForWordCorrection) return wordBounds.start;
}
return offset;
};
// Splits s into a sequence of "matched" and "unmatched" substrings, using the
// matchRegExp to do the matching.
//
// Returns an array of objects with a "text" property containing the substring text.
// Substrings that are "matches" also contain a boolean "isMatch" property set to true.
//
// @param matchRegExp [may be null] when null no matching is performed and the returned
// array just contains one item with s as its text
//
var getTextAndMatchArray = function(s, matchRegExp) {
var result = [];
if (matchRegExp) {
var startIndex = 0;
var n = s.length;
var currentLen = 0;
do {
matchRegExp.lastIndex = startIndex;
var match = matchRegExp.exec(s);
if (match) {
if (startIndex < match.index) {
var t = s.substring(startIndex, match.index);
result.push({text:t});
}
result.push({text:match[0], isMatch:true});
startIndex = match.index + match[0].length;
} else {
result.push({text: s.substr(startIndex)});
break;
}
} while (true);
} else {
result.push({text: s});
}
return result;
};
var getMatchedTextCount = function(textAndMatches) {
var result = 0;
for (var i=0; i < textAndMatches.length; i++) {
if (textAndMatches[i].isMatch) {
result++;
}
}
return result;
};
var getContextRangeAround = function(s, startIndex, endIndex, matchCount, maxLen) {
// Partition the available space into equal sized areas for each match and one
// for the text start.
// But the size should not go below a certain limit
var size = Math.max(Math.floor(maxLen/(matchCount+1)), minMatchWithContextSize);
// Substract the size of the range to get the size of the context.
var contextSize = Math.max(size-(endIndex-startIndex), 0);
// Two thirds of the context should be before the match, one third after.
var contextEnd = Math.min(Math.floor(endIndex+contextSize/3), s.length);
var contextStart = Math.max(contextEnd - size, 0);
// If the contextStart/End is inside a word and the end of the word is
// close move the pointers accordingly to make the text more readable.
contextStart = moveToWordBorder(s, contextStart, true);
contextEnd = moveToWordBorder(s, contextEnd, false);
return {start: contextStart, end: contextEnd};
};
// Get all ranges around matched substrings with their contexts
//
var getMatchedTextWithContextRanges = function(textAndMatches, s, maxLen) {
var ranges = [];
var matchCount = getMatchedTextCount(textAndMatches);
var pos = 0;
for (var i=0; i < textAndMatches.length; i++) {
var t = textAndMatches[i];
var text = t.text;
if (t.isMatch) {
var range = getContextRangeAround(s, pos, pos+text.length, matchCount, maxLen);
addRange(ranges, range.start, range.end);
}
pos += text.length;
}
return ranges;
};
var fillUpRanges = function(s, ranges, maxLen) {
var remainingLen = maxLen - getTotalRangesSize(ranges);
while (remainingLen > 0) {
if (ranges.length == 0) {
// No matches added yet. Make one large range.
addRange(ranges, 0, moveToWordBorder(s, maxLen, false));
return;
} else {
var range = ranges[0];
var startIndex;
var maxEndIndex;
if (range.start == 0) {
// The first range already starts at the beginning of the string.
// When there is a second range fill to the next range start or to the maxLen.
startIndex = range.end;
if (ranges.length > 1) {
maxEndIndex = ranges[1].start;
} else {
// Only one range. Add a range after that with the complete remaining len
// (corrected to "beautify" the output)
addRange(ranges, startIndex, moveToWordBorder(s, startIndex+remainingLen, false));
return;
}
} else {
// There is unused space between the start of the text and the first range.
startIndex = 0;
maxEndIndex = range.start;
}
var endIndex = Math.min(maxEndIndex, startIndex+remainingLen);
addRange(ranges, startIndex, endIndex);
remainingLen -= (endIndex-startIndex);
}
}
};
// Write the given ranges of s, using textAndMatches for marking portions of the text.
//
var writeRanges = function(place, s, textAndMatches, ranges, maxLen) {
if (ranges.length == 0) return;
// Processes the text between startIndex and endIndex of the textAndMatches
// "writes" them (as DOM elements) at the given place, possibly as "marked" text.
//
// When endIndex is not the end of the full text an ellisis is appended.
//
var writeTextAndMatchRange = function(place, s, textAndMatches, startIndex, endIndex) {
var t;
var text;
// find the first text item to write
var pos = 0;
var i = 0;
var offset = 0;
for (;i < textAndMatches.length; i++) {
t = textAndMatches[i];
text = t.text;
if (startIndex < pos+text.length) {
offset = startIndex - pos;
break;
}
pos += text.length;
}
var remainingLen = endIndex - startIndex;
for (; i < textAndMatches.length && remainingLen > 0; i++) {
t = textAndMatches[i];
text = t.text.substr(offset);
offset = 0;
if (text.length > remainingLen) text = text.substr(0,remainingLen);
if (t.isMatch) {
createTiddlyElement(place,"span",null,"marked",text);
} else {
createTiddlyText(place, text);
}
remainingLen -= text.length;
}
if (endIndex < s.length) {
abego.createEllipsis(place);
}
};
// When the first range is not at the start of the text write an ellipsis("...")
// (Ellipses between ranges are written in the writeTextAndMatchRange method)
if (ranges[0].start > 0) abego.createEllipsis(place);
var remainingLen = maxLen;
for (var i = 0; i < ranges.length && remainingLen > 0; i++) {
var range = ranges[i];
var len = Math.min(range.end - range.start, remainingLen);
writeTextAndMatchRange(place, s, textAndMatches, range.start, range.start+len);
remainingLen -= len;
}
};
this.render = function(place,s,maxLen,markRegExp) {
if (s.length < maxLen) maxLen = s.length;
var textAndMatches = getTextAndMatchArray(s, markRegExp);
var ranges = getMatchedTextWithContextRanges(textAndMatches, s, maxLen);
// When the maxLen is not yet reached add more ranges
// starting from the beginning until either maxLen or
// the end of the string is reached.
fillUpRanges(s, ranges, maxLen);
writeRanges(place, s, textAndMatches, ranges, maxLen);
};
};
(function() {
function alertAndThrow(msg) {
alert(msg);
throw msg;
};
if (version.major < 2 || (version.major == 2 && version.minor < 1))
alertAndThrow("YourSearchPlugin requires TiddlyWiki 2.1 or newer.\n\nCheck the archive for YourSearch plugins\nsupporting older versions of TiddlyWiki.\n\nArchive: http://tiddlywiki.abego-software.de/archive");
abego.YourSearch = {};
//----------------------------------------------------------------------------
// The Search Core
//----------------------------------------------------------------------------
// Model Variables
var lastResults; // Array of tiddlers that matched the last search
var lastQuery; // The last Search query (TiddlerQuery)
var setLastResults = function(array) {
lastResults = array;
};
var getLastResults = function() {
return lastResults ? lastResults : [];
};
var getLastResultsCount = function() {
return lastResults ? lastResults.length : 0;
};
// Standard Ranking Weights
var matchInTitleWeight = 4;
var precisionInTitleWeight = 10;
var matchInTagsWeight = 2;
var getMatchCount = function(s, re) {
var m = s.match(re);
return m ? m.length : 0;
};
var standardRankFunction = function(tiddler, query) {
// Count the matches in the title and the tags
var markRE = query.getMarkRegExp();
if (!markRE) return 1;
var matchesInTitle = tiddler.title.match(markRE);
var nMatchesInTitle = matchesInTitle ? matchesInTitle.length : 0;
var nMatchesInTags = getMatchCount(tiddler.getTags(), markRE);
// Calculate the "precision" of the matches in the title as the ratio of
// the length of the matches to the total length of the title.
var lengthOfMatchesInTitle = matchesInTitle ? matchesInTitle.join("").length : 0;
var precisionInTitle = tiddler.title.length > 0 ? lengthOfMatchesInTitle/tiddler.title.length : 0;
// calculate a weighted score
var rank= nMatchesInTitle * matchInTitleWeight
+ nMatchesInTags * matchInTagsWeight
+ precisionInTitle * precisionInTitleWeight
+ 1;
return rank;
};
// @return Tiddler[]
//
var findMatches = function(store, searchText,caseSensitive,useRegExp,sortField,excludeTag) {
lastQuery = null;
var candidates = store.reverseLookup("tags",excludeTag,false);
try {
var defaultFields = [];
if (config.options.chkSearchInTitle) defaultFields.push("title");
if (config.options.chkSearchInText) defaultFields.push("text");
if (config.options.chkSearchInTags) defaultFields.push("tags");
lastQuery = new abego.TiddlerQuery(
searchText,caseSensitive, useRegExp,defaultFields,config.options.chkSearchExtendedFields);
} catch (e) {
// when an invalid query is given no tiddlers are matched
return [];
}
var results = lastQuery.filter(candidates);
// Rank the results
var rankFunction = abego.YourSearch.getRankFunction();
for (var i = 0; i < results.length; i++) {
var tiddler = results[i];
var rank = rankFunction(tiddler, lastQuery);
// Add the rank information to the tiddler.
// This is used during the sorting, but it may also
// be used in the result, e.g. to display some "relevance"
// information in the result
tiddler.searchRank = rank;
}
// sort the result, taking care of the rank and the sortField
if(!sortField) {
sortField = "title";
}
var sortFunction = function (a,b) {
var searchRankDiff = a.searchRank - b.searchRank;
if (searchRankDiff == 0) {
if (a[sortField] == b[sortField]) {
return(0);
} else {
return (a[sortField] < b[sortField]) ? -1 : +1;
}
} else {
return (searchRankDiff > 0) ? -1 : +1;
}
};
results.sort(sortFunction);
return results;
};
//----------------------------------------------------------------------------
// The Search UI (Result page)
//----------------------------------------------------------------------------
// Visual appearance of the result page
var maxCharsInTitle = 80;
var maxCharsInTags = 50;
var maxCharsInText = 250;
var maxCharsInField = 50;
var itemsPerPageDefault = 25; // Default maximum number of items on one search result page
var itemsPerPageWithPreviewDefault = 10; // Default maximum number of items on one search result page when PreviewText is on
// DOM IDs
var yourSearchResultID = "yourSearchResult";
var yourSearchResultItemsID = "yourSearchResultItems";
var lastSearchText; // The last search text, as passed to findMatches
var resultElement; // The (popup) DOM element containing the search result [may be null]
var searchInputField; // The "search" input field
var searchButton; // The "search" button
var lastNewTiddlerButton;
var initStylesheet = function() {
if (version.extensions.YourSearchPlugin.styleSheetInited)
return;
version.extensions.YourSearchPlugin.styleSheetInited = true;
setStylesheet(store.getTiddlerText("YourSearchStyleSheet"),"yourSearch");
}
var isResultOpen = function() {
return resultElement != null && resultElement.parentNode == document.body;
};
var closeResult = function() {
if (isResultOpen()) {
document.body.removeChild(resultElement);
}
};
// Closes the Search Result window and displays the tiddler
// defined by the "tiddlyLink" attribute of this element
//
var closeResultAndDisplayTiddler = function(e)
{
closeResult();
var title = this.getAttribute("tiddlyLink");
if(title) {
var withHilite = this.getAttribute("withHilite");
var oldHighlightHack = highlightHack;
if (withHilite && withHilite=="true" && lastQuery) {
highlightHack = lastQuery.getMarkRegExp();
}
story.displayTiddler(this,title);
highlightHack = oldHighlightHack;
}
return(false);
};
// Adjusts the resultElement's size and position, relative to the search input field.
//
var adjustResultPositionAndSize = function() {
if (!searchInputField) return;
var root = searchInputField;
// Position the result below the root and resize it if necessary.
var rootLeft = findPosX(root);
var rootTop = findPosY(root);
var rootHeight = root.offsetHeight;
var popupLeft = rootLeft;
var popupTop = rootTop + rootHeight;
// Make sure the result is not wider than the window
var winWidth = findWindowWidth();
if (winWidth < resultElement.offsetWidth) {
resultElement.style.width = (winWidth - 100)+"px";
winWidth = findWindowWidth();
}
// Ensure that the left and right of the result are not
// clipped by the window. Move it to the left or right, if necessary.
var popupWidth = resultElement.offsetWidth;
if(popupLeft + popupWidth > winWidth)
popupLeft = winWidth - popupWidth-30;
if (popupLeft < 0) popupLeft = 0;
// Do the actual moving
resultElement.style.left = popupLeft + "px";
resultElement.style.top = popupTop + "px";
resultElement.style.display = "block";
};
var scrollVisible = function() {
// Scroll the window to make the result page (and the search Input field) visible.
if (resultElement) window.scrollTo(0,ensureVisible(resultElement));
if (searchInputField) window.scrollTo(0,ensureVisible(searchInputField));
};
// Makes sure the result page has a good size and position and visible
// (may scroll the window)
//
var ensureResultIsDisplayedNicely = function() {
adjustResultPositionAndSize();
scrollVisible();
};
var indexInPage; // The index (in the current page) of the tiddler currently rendered.
var currentTiddler; // While rendering the page the tiddler that is currently rendered.
var pager = new abego.PageWiseRenderer();
var MyItemRenderer = function(parent) {
// Load the template how to display the items that represent a found tiddler
this.itemHtml = store.getTiddlerText("YourSearchItemTemplate");
if (!this.itemHtml) alertAndThrow("YourSearchItemTemplate not found");
// Locate the node that shall contain the list of found tiddlers
this.place = document.getElementById(yourSearchResultItemsID);
if(!this.place)
this.place = createTiddlyElement(parent,"div",yourSearchResultItemsID);
};
merge(MyItemRenderer.prototype,{
render: function(pager,object,index,indexOnPage) {
// Define global variables, referenced by macros during applyHtmlMacros
indexInPage = indexOnPage;
currentTiddler = object;
var item = createTiddlyElement(this.place,"div",null, "yourSearchItem");
item.innerHTML = this.itemHtml;
applyHtmlMacros(item,null);
refreshElements(item,null);
},
endRendering: function(pager) {
// The currentTiddler must only be defined while rendering the found tiddlers
currentTiddler = null;
}
});
// Refreshes the content of the result with the current search result
// of the selected page.
//
// Assumes that the result is already open.
//
var refreshResult = function() {
if (!resultElement || !searchInputField) return;
// Load the template for the YourSearchResult
var html = store.getTiddlerText("YourSearchResultTemplate");
if (!html) html = "<b>Tiddler YourSearchResultTemplate not found</b>";
resultElement.innerHTML = html;
// Expand the template macros etc.
applyHtmlMacros(resultElement,null);
refreshElements(resultElement,null);
var itemRenderer = new MyItemRenderer(resultElement);
pager.renderPage(itemRenderer);
ensureResultIsDisplayedNicely();
};
pager.getItemsPerPage = function() {
var n = (config.options.chkPreviewText)
? abego.toInt(config.options.txtItemsPerPageWithPreview, itemsPerPageWithPreviewDefault)
: abego.toInt(config.options.txtItemsPerPage, itemsPerPageDefault);
return (n > 0) ? n : 1;
};
pager.onPageChanged = function() {
refreshResult();
};
var reopenResultIfApplicable = function() {
if (searchInputField == null || !config.options.chkUseYourSearch) return;
if ((searchInputField.value == lastSearchText) && lastSearchText && !isResultOpen()) {
// For speedup we check re-use the previously created resultElement, if possible.
if (resultElement && (resultElement.parentNode != document.body)) {
document.body.appendChild(resultElement);
ensureResultIsDisplayedNicely();
} else {
abego.YourSearch.onShowResult(true);
}
}
};
var invalidateResult = function() {
closeResult();
resultElement = null;
lastSearchText = null;
};
//-------------------------------------------------------------------------
// Close the search result page when the user clicks on the document
// (and not into the searchInputField, on the search button or in the result)
// or presses the ESC key
// Returns true if e is either self or a descendant (child, grandchild,...) of self.
//
// @param self DOM:Element
// @param e DOM:Element or null
//
var isDescendantOrSelf = function(self, e) {
while (e != null) {
if (self == e) return true;
e = e.parentNode;
}
return false;
};
var onDocumentClick = function(e) {
if (e.target == searchInputField) return;
if (e.target == searchButton) return;
if (resultElement && isDescendantOrSelf(resultElement, e.target)) return;
closeResult();
};
var onDocumentKeyup = function(e) {
// Close the search result page when the user presses "ESC"
if (e.keyCode == 27) closeResult();
};
addEvent(document,"click",onDocumentClick);
addEvent(document,"keyup",onDocumentKeyup);
// Our Search Macro Hijack Function ==========================================
// Helper
var myStorySearch = function(text,useCaseSensitive,useRegExp)
{
lastSearchText = text;
setLastResults(findMatches(store, text,useCaseSensitive,useRegExp,"title","excludeSearch"));
abego.YourSearch.onShowResult();
};
var myMacroSearchHandler = function(place,macroName,params,wikifier,paramString,tiddler)
{
initStylesheet();
lastSearchText = "";
var searchTimeout = null;
var doSearch = function(txt)
{
if (config.options.chkUseYourSearch)
myStorySearch(txt.value,config.options.chkCaseSensitiveSearch,config.options.chkRegExpSearch);
else
story.search(txt.value,config.options.chkCaseSensitiveSearch,config.options.chkRegExpSearch);
lastSearchText = txt.value;
};
var clickHandler = function(e)
{
doSearch(searchInputField);
return false;
};
var keyHandler = function(e)
{
if (!e) var e = window.event;
searchInputField = this;
switch(e.keyCode)
{
case 13:
if (e.ctrlKey && lastNewTiddlerButton && isResultOpen())
lastNewTiddlerButton.onclick.apply(lastNewTiddlerButton,[e]);
else
doSearch(this);
break;
case 27:
// When the result is open, close it,
// otherwise clear the content of the input field
if (isResultOpen()) {
closeResult();
} else {
this.value = "";
clearMessage();
}
break;
}
if (String.fromCharCode(e.keyCode) == this.accessKey || e.altKey)
{
reopenResultIfApplicable();
}
if(this.value.length<3 && searchTimeout) clearTimeout(searchTimeout);
if(this.value.length > 2)
{
if (this.value != lastSearchText)
{
if (!config.options.chkUseYourSearch || config.options.chkSearchAsYouType)
{
if(searchTimeout)
clearTimeout(searchTimeout);
var txt = this;
searchTimeout = setTimeout(function() {doSearch(txt);},500);
}
}
else
{
if(searchTimeout)
clearTimeout(searchTimeout);
}
};
if (this.value.length == 0)
{
closeResult();
}
};
var focusHandler = function(e)
{
this.select();
clearMessage();
reopenResultIfApplicable();
};
var args = paramString.parseParams("list",null,true);
var buttonAtRight = getFlag(args, "buttonAtRight");
var sizeTextbox = getParam(args, "sizeTextbox", this.sizeTextbox);
var btn;
if (!buttonAtRight)
btn = createTiddlyButton(place,this.label,this.prompt,clickHandler);
var txt = createTiddlyElement(place,"input",null,null,null);
if(params[0])
txt.value = params[0];
txt.onkeyup = keyHandler;
txt.onfocus = focusHandler;
txt.setAttribute("size",sizeTextbox);
txt.setAttribute("accessKey",this.accessKey);
txt.setAttribute("autocomplete","off");
if(config.browser.isSafari)
{
txt.setAttribute("type","search");
txt.setAttribute("results","5");
}
else
txt.setAttribute("type","text");
if (buttonAtRight)
btn = createTiddlyButton(place,this.label,this.prompt,clickHandler);
searchInputField = txt;
searchButton = btn;
};
//----------------------------------------------------------------------------
// Support for Macros
//----------------------------------------------------------------------------
var openAllFoundTiddlers = function() {
closeResult();
var results = getLastResults();
var n = results.length;
if (n) {
var titles=[];
for(var i = 0; i<n; i++)
titles.push(results[i].title);
story.displayTiddlers(null,titles);
}
};
var createOptionWithRefresh = function(place, optionParams, wikifier,tiddler) {
invokeMacro(place,"option",optionParams,wikifier,tiddler);
// The option macro appended the component at the end of the place.
var elem = place.lastChild;
var oldOnClick = elem.onclick;
elem.onclick = function(e) {
var result = oldOnClick.apply(this, arguments);
refreshResult();
return result;
};
return elem;
};
var removeTextDecoration = function(s) {
var removeThis = ["''", "{{{", "}}}", "//", "<<<", "/***", "***/"];
var reText = "";
for (var i = 0; i < removeThis.length; i++) {
if (i != 0) reText += "|";
reText += "("+removeThis[i].escapeRegExp()+")";
}
return s.replace(new RegExp(reText, "mg"), "").trim();
};
// Returns the "shortcut number" of the currentTiddler.
// I.e. When the user presses Alt-n the given tiddler is opened/display.
//
// @return 0-9 or -1 when no number is defined
//
var getShortCutNumber = function() {
var i = indexInPage;
return (i >= 0 && i <= 9)
? (i < 9 ? (i+1) : 0)
: -1;
};
var limitedTextRenderer = new abego.LimitedTextRenderer();
var renderLimitedText = function(place, s, maxLen) {
limitedTextRenderer.render(place,s,maxLen,lastQuery.getMarkRegExp())
}
// When any tiddler are changed reset the result.
//
var oldTiddlyWikiSaveTiddler = TiddlyWiki.prototype.saveTiddler;
TiddlyWiki.prototype.saveTiddler = function(title,newTitle,newBody,modifier,modified,tags,fields) {
oldTiddlyWikiSaveTiddler.apply(this, arguments);
invalidateResult();
};
var oldTiddlyWikiRemoveTiddler = TiddlyWiki.prototype.removeTiddler;
TiddlyWiki.prototype.removeTiddler = function(title) {
oldTiddlyWikiRemoveTiddler.apply(this, arguments);
invalidateResult();
};
//----------------------------------------------------------------------------
// Macros
//----------------------------------------------------------------------------
// ====Macro yourSearch ================================================
config.macros.yourSearch = {
// Standard Properties
label: "yourSearch",
prompt: "Gives access to the current/last YourSearch result",
handler: function(place,macroName,params,wikifier,paramString,tiddler) {
if (params.length == 0) return;
var name = params[0];
var func = config.macros.yourSearch.funcs[name];
if (func) func(place,macroName,params,wikifier,paramString,tiddler);
},
tests: {
"true" : function() {return true;},
"false" : function() {return false;},
"found" : function() {return getLastResultsCount() > 0;},
"previewText" : function() {return config.options.chkPreviewText;}
},
funcs: {
itemRange: function(place) {
if (getLastResultsCount()) {
var lastIndex = pager.getLastIndexOnPage();
var s = "%0 - %1".format([pager.getFirstIndexOnPage()+1,lastIndex+1]);
createTiddlyText(place, s);
}
},
count: function(place) {
createTiddlyText(place, getLastResultsCount().toString());
},
query: function(place) {
if (lastQuery) {
createTiddlyText(place, lastQuery.toString());
}
},
version: function(place) {
var t = "YourSearch %0.%1.%2".format(
[version.extensions.YourSearchPlugin.major,
version.extensions.YourSearchPlugin.minor,
version.extensions.YourSearchPlugin.revision]);
var e = createTiddlyElement(place, "a");
e.setAttribute("href", "http://tiddlywiki.abego-software.de/#YourSearchPlugin");
e.innerHTML = '<font color="black" face="Arial, Helvetica, sans-serif">'+t+'<font>';
},
copyright: function(place) {
var e = createTiddlyElement(place, "a");
e.setAttribute("href", "http://www.abego-software.de");
e.innerHTML = '<font color="white" face="Arial, Helvetica, sans-serif">© 2005-2008 <b><font color="white">abego</font></b> Software<font>';
},
newTiddlerButton: function(place) {
if (lastQuery) {
var r = abego.parseNewTiddlerCommandLine(lastQuery.getQueryText());
var btn = config.macros.newTiddler.createNewTiddlerButton(place,r.title,r.params,"new tiddler","Create a new tiddler based on search text. (Shortcut: Ctrl-Enter; Separators: '.', '#')",null,"text");
// Close the result before the new tiddler is created.
var oldOnClick = btn.onclick;
btn.onclick = function() {
closeResult();
oldOnClick.apply(this,arguments);
}
lastNewTiddlerButton = btn;
}
},
linkButton: function(place,macroName,params,wikifier,paramString,tiddler) {
if (params < 2) return;
var tiddlyLink = params[1];
var text = params < 3 ? tiddlyLink : params[2];
var tooltip = params < 4 ? text : params[3];
var accessKey = params < 5 ? null : params[4];
var btn = createTiddlyButton(place,text,tooltip,closeResultAndDisplayTiddler,null,null, accessKey);
btn.setAttribute("tiddlyLink",tiddlyLink);
},
closeButton: function(place,macroName,params,wikifier,paramString,tiddler) {
var button = createTiddlyButton(place, "close", "Close the Search Results (Shortcut: ESC)", closeResult);
},
openAllButton: function(place,macroName,params,wikifier,paramString,tiddler) {
var n = getLastResultsCount();
if (n == 0) return;
var title = n == 1 ? "open tiddler" : "open all %0 tiddlers".format([n]);
var button = createTiddlyButton(place, title, "Open all found tiddlers (Shortcut: Alt-O)", openAllFoundTiddlers);
button.setAttribute("accessKey","O");
},
naviBar: function(place,macroName,params,wikifier,paramString,tiddler) {
pager.addPageNavigation(place);
},
"if": function(place,macroName,params,wikifier,paramString,tiddler) {
if (params.length < 2) return;
var testName = params[1];
var negate = (testName == "not");
if (negate) {
if (params.length < 3) return;
testName = params[2];
}
var test = config.macros.yourSearch.tests[testName];
var showIt = false;
try {
if (test) {
showIt = test(place,macroName,params,wikifier,paramString,tiddler) != negate;
} else {
// When no predefined test is specified try to evaluate it as a JavaScript expression.
showIt = (!eval(testName)) == negate;
}
} catch (ex) {
}
if (!showIt) {
place.style.display="none";
}
},
chkPreviewText: function(place,macroName,params,wikifier,paramString,tiddler) {
var optionParams = params.slice(1).join(" ");
var elem = createOptionWithRefresh(place, "chkPreviewText", wikifier,tiddler);
elem.setAttribute("accessKey", "P");
elem.title = "Show text preview of found tiddlers (Shortcut: Alt-P)";
return elem;
}
}
};
// ====Macro foundTiddler ================================================
config.macros.foundTiddler = {
// Standard Properties
label: "foundTiddler",
prompt: "Provides information on the tiddler currently processed on the YourSearch result page",
handler: function(place,macroName,params,wikifier,paramString,tiddler) {
var name = params[0];
var func = config.macros.foundTiddler.funcs[name];
if (func) func(place,macroName,params,wikifier,paramString,tiddler);
},
funcs: {
title: function(place,macroName,params,wikifier,paramString,tiddler) {
if (!currentTiddler) return;
var shortcutNumber = getShortCutNumber();
var tooltip = shortcutNumber >= 0
? "Open tiddler (Shortcut: Alt-%0)".format([shortcutNumber.toString()])
: "Open tiddler";
var btn = createTiddlyButton(place,null,tooltip,closeResultAndDisplayTiddler,null);
btn.setAttribute("tiddlyLink",currentTiddler.title);
btn.setAttribute("withHilite","true");
renderLimitedText(btn, currentTiddler.title, maxCharsInTitle);
if (shortcutNumber >= 0) {
btn.setAttribute("accessKey",shortcutNumber.toString());
}
},
tags: function(place,macroName,params,wikifier,paramString,tiddler) {
if (!currentTiddler) return;
renderLimitedText(place, currentTiddler.getTags(), maxCharsInTags);
},
text: function(place,macroName,params,wikifier,paramString,tiddler) {
if (!currentTiddler) return;
renderLimitedText(place, removeTextDecoration(currentTiddler.text), maxCharsInText);
},
field: function(place,macroName,params,wikifier,paramString,tiddler) {
if (!currentTiddler) return;
var name = params[1];
var len = params.length > 2 ? abego.toInt(params[2],maxCharsInField) : maxCharsInField;
var v = store.getValue(currentTiddler,name);
if (v)
renderLimitedText(place, removeTextDecoration(v), len);
},
// Renders the "shortcut number" of the current tiddler, to indicate to the user
// what number to "Alt-press" to open the tiddler.
//
number: function(place,macroName,params,wikifier,paramString,tiddler) {
var numberToDisplay = getShortCutNumber();
if (numberToDisplay >= 0) {
var text = "%0)".format([numberToDisplay.toString()]);
createTiddlyElement(place,"span",null,"shortcutNumber",text);
}
}
}
};
//----------------------------------------------------------------------------
// Configuration Stuff
//----------------------------------------------------------------------------
var opts = {chkUseYourSearch:true,
chkPreviewText:true,
chkSearchAsYouType:true,
chkSearchInTitle:true,
chkSearchInText:true,
chkSearchInTags:true,
chkSearchExtendedFields:true,
txtItemsPerPage:itemsPerPageDefault,
txtItemsPerPageWithPreview:itemsPerPageWithPreviewDefault};
for (var n in opts)
if (config.options[n] == undefined) config.options[n] = opts[n];
//----------------------------------------------------------------------------
// Shadow Tiddlers
//----------------------------------------------------------------------------
config.shadowTiddlers.AdvancedOptions += "\n<<option chkUseYourSearch>> Use 'Your Search' //([[more options|YourSearch Options]]) ([[help|YourSearch Help]])// ";
config.shadowTiddlers["YourSearch Help"] =
"!Field Search\nWith the Field Search you can restrict your search to certain fields of a tiddler, e.g"+
" only search the tags or only the titles. The general form is //fieldname//'':''//textToSearch// (e."+
"g. {{{title:intro}}}). In addition one-character shortcuts are also supported for the standard field"+
"s {{{title}}}, {{{text}}} and {{{tags}}}:\n|!What you want|!What you type|!Example|\n|Search ''titles "+
"only''|start word with ''!''|{{{!jonny}}} (shortcut for {{{title:jonny}}})|\n|Search ''contents/text "+
"only''|start word with ''%''|{{{%football}}} (shortcut for {{{text:football}}})|\n|Search ''tags only"+
"''|start word with ''#''|{{{#Plugin}}} (shortcut for {{{tags:Plugin}}})|\n\nUsing this feature you may"+
" also search the extended fields (\"Metadata\") introduced with TiddlyWiki 2.1, e.g. use {{{priority:1"+
"}}} to find all tiddlers with the priority field set to \"1\".\n\nYou may search a word in more than one"+
" field. E.g. {{{!#Plugin}}} (or {{{title:tags:Plugin}}} in the \"long form\") finds tiddlers containin"+
"g \"Plugin\" either in the title or in the tags (but does not look for \"Plugin\" in the text). \n\n!Boole"+
"an Search\nThe Boolean Search is useful when searching for multiple words.\n|!What you want|!What you "+
"type|!Example|\n|''All words'' must exist|List of words|{{{jonny jeremy}}} (or {{{jonny and jeremy}}}"+
")|\n|''At least one word'' must exist|Separate words by ''or''|{{{jonny or jeremy}}}|\n|A word ''must "+
"not exist''|Start word with ''-''|{{{-jonny}}} (or {{{not jonny}}})|\n\n''Note:'' When you specify two"+
" words, separated with a space, YourSearch finds all tiddlers that contain both words, but not neces"+
"sarily next to each other. If you want to find a sequence of word, e.g. '{{{John Brown}}}', you need"+
" to put the words into quotes. I.e. you type: {{{\"john brown\"}}}.\n\nUsing parenthesis you may change "+
"the default \"left to right\" evaluation of the boolean search. E.g. {{{not (jonny or jeremy)}}} finds"+
" all tiddlers that contain neither \"jonny\" nor \"jeremy. In contrast to this {{{not jonny or jeremy}}"+
"} (i.e. without parenthesis) finds all tiddlers that either don't contain \"jonny\" or that contain \"j"+
"eremy\".\n\n!'Exact Word' Search\nBy default a search result all matches that 'contain' the searched tex"+
"t. E.g. if you search for {{{Task}}} you will get all tiddlers containing 'Task', but also '~Complet"+
"edTask', '~TaskForce' etc.\n\nIf you only want to get the tiddlers that contain 'exactly the word' you"+
" need to prefix it with a '='. E.g. typing '=Task' will find the tiddlers that contain the word 'Tas"+
"k', ignoring words that just contain 'Task' as a substring.\n\n!~CaseSensitiveSearch and ~RegExpSearch"+
"\nThe standard search options ~CaseSensitiveSearch and ~RegExpSearch are fully supported by YourSearc"+
"h. However when ''~RegExpSearch'' is on Filtered and Boolean Search are disabled.\n\nIn addition you m"+
"ay do a \"regular expression\" search even with the ''~RegExpSearch'' set to false by directly enterin"+
"g the regular expression into the search field, framed with {{{/.../}}}. \n\nExample: {{{/m[ae][iy]er/"+
"}}} will find all tiddlers that contain either \"maier\", \"mayer\", \"meier\" or \"meyer\".\n\n!~JavaScript E"+
"xpression Filtering\nIf you are familiar with JavaScript programming and know some TiddlyWiki interna"+
"ls you may also use JavaScript expression for the search. Just enter a JavaScript boolean expression"+
" into the search field, framed with {{{ { ... } }}}. In the code refer to the variable tiddler and e"+
"valuate to {{{true}}} when the given tiddler should be included in the result. \n\nExample: {{{ { tidd"+
"ler.modified > new Date(\"Jul 4, 2005\")} }}} returns all tiddler modified after July 4th, 2005.\n\n!Com"+
"bined Search\nYou are free to combine the various search options. \n\n''Examples''\n|!What you type|!Res"+
"ult|\n|{{{!jonny !jeremy -%football}}}|all tiddlers with both {{{jonny}}} and {{{jeremy}}} in its tit"+
"les, but no {{{football}}} in content.|\n|{{{#=Task}}}|All tiddlers tagged with 'Task' (the exact wor"+
"d). Tags named '~CompletedTask', '~TaskForce' etc. are not considered.|\n\n!Access Keys\nYou are encour"+
"aged to use the access keys (also called \"shortcut\" keys) for the most frequently used operations. F"+
"or quick reference these shortcuts are also mentioned in the tooltip for the various buttons etc.\n\n|"+
"!Key|!Operation|\n|{{{Alt-F}}}|''The most important keystroke'': It moves the cursor to the search in"+
"put field so you can directly start typing your query. Pressing {{{Alt-F}}} will also display the pr"+
"evious search result. This way you can quickly display multiple tiddlers using \"Press {{{Alt-F}}}. S"+
"elect tiddler.\" sequences.|\n|{{{ESC}}}|Closes the [[YourSearch Result]]. When the [[YourSearch Resul"+
"t]] is already closed and the cursor is in the search input field the field's content is cleared so "+
"you start a new query.|\n|{{{Alt-1}}}, {{{Alt-2}}},... |Pressing these keys opens the first, second e"+
"tc. tiddler from the result list.|\n|{{{Alt-O}}}|Opens all found tiddlers.|\n|{{{Alt-P}}}|Toggles the "+
"'Preview Text' mode.|\n|{{{Alt-'<'}}}, {{{Alt-'>'}}}|Displays the previous or next page in the [[Your"+
"Search Result]].|\n|{{{Return}}}|When you have turned off the 'as you type' search mode pressing the "+
"{{{Return}}} key actually starts the search (as does pressing the 'search' button).|\n\n//If some of t"+
"hese shortcuts don't work for you check your browser if you have other extensions installed that alr"+
"eady \"use\" these shortcuts.//";
config.shadowTiddlers["YourSearch Options"] =
"|>|!YourSearch Options|\n|>|<<option chkUseYourSearch>> Use 'Your Search'|\n|!|<<option chkPreviewText"+
">> Show Text Preview|\n|!|<<option chkSearchAsYouType>> 'Search As You Type' Mode (No RETURN required"+
" to start search)|\n|!|Default Search Filter:<<option chkSearchInTitle>>Title ('!') <<option chk"+
"SearchInText>>Text ('%') <<option chkSearchInTags>>Tags ('#') <<option chkSearchExtendedFiel"+
"ds>>Extended Fields<html><br><font size=\"-2\">The fields of a tiddlers that are searched when you don"+
"'t explicitly specify a filter in the search text <br>(Explictly specify fields using one or more '!"+
"', '%', '#' or 'fieldname:' prefix before the word/text to find).</font></html>|\n|!|Number of items "+
"on search result page: <<option txtItemsPerPage>>|\n|!|Number of items on search result page with pre"+
"view text: <<option txtItemsPerPageWithPreview>>|\n";
config.shadowTiddlers["YourSearchStyleSheet"] =
"/***\n!~YourSearchResult Stylesheet\n***/\n/*{{{*/\n.yourSearchResult {\n\tposition: absolute;\n\twidth: 800"+
"px;\n\n\tpadding: 0.2em;\n\tlist-style: none;\n\tmargin: 0;\n\n\tbackground: #ffd;\n\tborder: 1px solid DarkGra"+
"y;\n}\n\n/*}}}*/\n/***\n!!Summary Section\n***/\n/*{{{*/\n.yourSearchResult .summary {\n\tborder-bottom-width:"+
" thin;\n\tborder-bottom-style: solid;\n\tborder-bottom-color: #999999;\n\tpadding-bottom: 4px;\n}\n\n.yourSea"+
"rchRange, .yourSearchCount, .yourSearchQuery {\n\tfont-weight: bold;\n}\n\n.yourSearchResult .summary ."+
"button {\n\tfont-size: 10px;\n\n\tpadding-left: 0.3em;\n\tpadding-right: 0.3em;\n}\n\n.yourSearchResult .summa"+
"ry .chkBoxLabel {\n\tfont-size: 10px;\n\n\tpadding-right: 0.3em;\n}\n\n/*}}}*/\n/***\n!!Items Area\n***/\n/*{{{*"+
"/\n.yourSearchResult .marked {\n\tbackground: none;\n\tfont-weight: bold;\n}\n\n.yourSearchItem {\n\tmargin-to"+
"p: 2px;\n}\n\n.yourSearchNumber {\n\tcolor: #808080;\n}\n\n\n.yourSearchTags {\n\tcolor: #008000;\n}\n\n.yourSearc"+
"hText {\n\tcolor: #808080;\n\tmargin-bottom: 6px;\n}\n\n/*}}}*/\n/***\n!!Footer\n***/\n/*{{{*/\n.yourSearchFoote"+
"r {\n\tmargin-top: 8px;\n\tborder-top-width: thin;\n\tborder-top-style: solid;\n\tborder-top-color: #999999;"+
"\n}\n\n.yourSearchFooter a:hover{\n\tbackground: none;\n\tcolor: none;\n}\n/*}}}*/\n/***\n!!Navigation Bar\n***/"+
"\n/*{{{*/\n.yourSearchNaviBar a {\n\tfont-size: 16px;\n\tmargin-left: 4px;\n\tmargin-right: 4px;\n\tcolor: bla"+
"ck;\n\ttext-decoration: underline;\n}\n\n.yourSearchNaviBar a:hover {\n\tbackground-color: none;\n}\n\n.yourSe"+
"archNaviBar .prev {\n\tfont-weight: bold;\n\tcolor: blue;\n}\n\n.yourSearchNaviBar .currentPage {\n\tcolor: #"+
"FF0000;\n\tfont-weight: bold;\n\ttext-decoration: none;\n}\n\n.yourSearchNaviBar .next {\n\tfont-weight: bold"+
";\n\tcolor: blue;\n}\n/*}}}*/\n";
config.shadowTiddlers["YourSearchResultTemplate"] =
"<!--\n{{{\n-->\n<span macro=\"yourSearch if found\">\n<!-- The Summary Header ============================"+
"================ -->\n<table class=\"summary\" border=\"0\" width=\"100%\" cellspacing=\"0\" cellpadding=\"0\">"+
"<tbody>\n <tr>\n\t<td align=\"left\">\n\t\tYourSearch Result <span class=\"yourSearchRange\" macro=\"yourSearc"+
"h itemRange\"></span>\n\t\t of <span class=\"yourSearchCount\" macro=\"yourSearch count\"></span>\n"+
"\t\tfor <span class=\"yourSearchQuery\" macro=\"yourSearch query\"></span>\n\t</td>\n\t<td class=\"yourSea"+
"rchButtons\" align=\"right\">\n\t\t<span macro=\"yourSearch chkPreviewText\"></span><span class=\"chkBoxLabel"+
"\">preview text</span>\n\t\t<span macro=\"yourSearch newTiddlerButton\"></span>\n\t\t<span macro=\"yourSearch openAllButton\"></span>\n\t\t<span macro=\"yourSearch lin"+
"kButton 'YourSearch Options' options 'Configure YourSearch'\"></span>\n\t\t<span macro=\"yourSearch linkB"+
"utton 'YourSearch Help' help 'Get help how to use YourSearch'\"></span>\n\t\t<span macro=\"yourSearch clo"+
"seButton\"></span>\n\t</td>\n </tr>\n</tbody></table>\n\n<!-- The List of Found Tiddlers ================="+
"=========================== -->\n<div id=\"yourSearchResultItems\" itemsPerPage=\"25\" itemsPerPageWithPr"+
"eview=\"10\"></div>\n\n<!-- The Footer (with the Navigation) ==========================================="+
"= -->\n<table class=\"yourSearchFooter\" border=\"0\" width=\"100%\" cellspacing=\"0\" cellpadding=\"0\"><tbody"+
">\n <tr>\n\t<td align=\"left\">\n\t\tResult page: <span class=\"yourSearchNaviBar\" macro=\"yourSearch naviBar"+
"\"></span>\n\t</td>\n\t<td align=\"right\"><span macro=\"yourSearch version\"></span>, <span macro=\"yourSearc"+
"h copyright\"></span>\n\t</td>\n </tr>\n</tbody></table>\n<!-- end of the 'tiddlers found' case ========="+
"================================== -->\n</span>\n\n\n<!-- The \"No tiddlers found\" case ================="+
"========================== -->\n<span macro=\"yourSearch if not found\">\n<table class=\"summary\" border="+
"\"0\" width=\"100%\" cellspacing=\"0\" cellpadding=\"0\"><tbody>\n <tr>\n\t<td align=\"left\">\n\t\tYourSearch Resu"+
"lt: No tiddlers found for <span class=\"yourSearchQuery\" macro=\"yourSearch query\"></span>.\n\t</td>\n\t<t"+
"d class=\"yourSearchButtons\" align=\"right\">\n\t\t<span macro=\"yourSearch newTiddlerButton\"></span>\n\t\t<span macro=\"yourSearch linkButton 'YourSearch Options'"+
" options 'Configure YourSearch'\"></span>\n\t\t<span macro=\"yourSearch linkButton 'YourSearch Help' help"+
" 'Get help how to use YourSearch'\"></span>\n\t\t<span macro=\"yourSearch closeButton\"></span>\n\t</td>\n <"+
"/tr>\n</tbody></table>\n</span>\n\n\n<!--\n}}}\n-->\n";
config.shadowTiddlers["YourSearchItemTemplate"] =
"<!--\n{{{\n-->\n<span class='yourSearchNumber' macro='foundTiddler number'></span>\n<span class='yourSea"+
"rchTitle' macro='foundTiddler title'/></span> - \n<span class='yourSearchTags' macro='found"+
"Tiddler field tags 50'/></span>\n<span macro=\"yourSearch if previewText\"><div class='yourSearchText' macro='fo"+
"undTiddler field text 250'/></div></span>\n<!--\n}}}\n-->";
config.shadowTiddlers["YourSearch"] = "<<tiddler [[YourSearch Help]]>>";
config.shadowTiddlers["YourSearch Result"] = "The popup-like window displaying the result of a YourSearch query.";
//----------------------------------------------------------------------------
// Install YourSearch
//----------------------------------------------------------------------------
// Overwrite the TiddlyWiki search handler and verify after a while
// that nobody else has overwritten it.
config.macros.search.handler = myMacroSearchHandler;
var checkForOtherHijacker = function() {
// Check that still our search handler is installed
if (config.macros.search.handler != myMacroSearchHandler) {
alert(
"Message from YourSearchPlugin:\n\n\nAnother plugin has disabled the 'Your Search' features.\n\n\nYou may "+
"disable the other plugin or change the load order of \nthe plugins (by changing the names of the tidd"+
"lers)\nto enable the 'Your Search' features.");
}
};
setTimeout(checkForOtherHijacker, 5000);
// === Public API =================================
abego.YourSearch.getStandardRankFunction = function() {
return standardRankFunction;
};
abego.YourSearch.getRankFunction = function() {
return abego.YourSearch.getStandardRankFunction();
};
abego.YourSearch.getCurrentTiddler = function() {
return currentTiddler;
};
abego.YourSearch.closeResult = function() {
closeResult();
};
// Returns an array of tiddlers that matched the last search
abego.YourSearch.getFoundTiddlers = function() {
return lastResults;
};
// The last Search query (TiddlerQuery), or null
abego.YourSearch.getQuery = function() {
return lastQuery;
};
abego.YourSearch.onShowResult = function(useOldResult) {
highlightHack = lastQuery ? lastQuery.getMarkRegExp() : null;
if (!useOldResult)
pager.setItems(getLastResults());
if (!resultElement) {
resultElement = createTiddlyElement(document.body,"div",yourSearchResultID,"yourSearchResult");
} else if (resultElement.parentNode != document.body) {
document.body.appendChild(resultElement);
}
refreshResult();
highlightHack = null;
};
})();
} // of "install only once"
// Used Globals (for JSLint) ==============
// ... JavaScript Core
/*global alert,clearTimeout,confirm */
// ... TiddlyWiki Core
/*global Tiddler, applyHtmlMacros, clearMessage, createTiddlyElement, createTiddlyButton, createTiddlyText, ensureVisible ,findPosX, highlightHack, findPosY,findWindowWidth, invokeMacro, saveChanges, refreshElements, story */
//}}}
/***
!Licence and Copyright
Copyright (c) abego Software ~GmbH, 2005-2008 ([[www.abego-software.de|http://www.abego-software.de]])
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
Neither the name of abego Software nor the names of its contributors may be
used to endorse or promote products derived from this software without specific
prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
DAMAGE.
***/
/***
!~YourSearchResult Stylesheet
***/
/*{{{*/
.yourSearchResult {
position: absolute;
width: 800px;
padding: 0.2em;
list-style: none;
margin: 0;
background: url(img/background2.jpg);
border: 1px solid white;
-moz-border-radius: 6px;
color: white;
font-family: "Lucida Grande" Verdana;
}
.yourSearchResult .button, .yourSearchResult .shortcutNumber {color: white;
border: 1px solid transparent;
background: transparent;
}
.yourSearchResult .shortcutNumber {display: none;}
/*}}}*/
/***
!!Summary Section
***/
/*{{{*/
.yourSearchResult .summary {
border-bottom-width: thin;
border-bottom-style: solid;
border-bottom-color: #999999;
padding-bottom: 4px;
color: white;
font-size: .9em;}
.yourSearchRange, .yourSearchCount, .yourSearchQuery {
font-weight: bold;
}
.yourSearchResult .summary .button {
font-size: 10px;
color: white;
padding-left: 0.3em;
padding-right: 0.3em;
}
.yourSearchResult .summary .chkBoxLabel {
font-size: 10px;
padding-right: 0.3em;
}
/*}}}*/
/***
!!Items Area
***/
/*{{{*/
.yourSearchResult .marked {
background: none;
color: #f7c898;
border: none;}
.yourSearchItem {
margin-top: 2px;
margin-bottom: 3px;
background: url(img/trans10.png);
font-weight: bold; /* LLST */
-moz-border-radius: 4px;
border: 1px solid transparent; /* #CFE8CF; */
font-size: .95em;
}
.yourSearchItem .button {border-bottom: 1px dotted #F7C898;
}
.yourSearchNumber {
color: #000;
font-weight: bold;
}
.yourSearchTags {
color: white;
font-weight: normal;
}
.yourSearchText .marked{ /* LLST */
color: #F7C898;
border: none;
}
.yourSearchText {
color: white;
margin-top: .5em;
margin-bottom: 5px;
font-weight: normal;
font-size: .9em;
margin-left: 1.2em;
}
/*}}}*/
/***
!!Footer
***/
/*{{{*/
.yourSearchFooter {
margin-top: 8px;
border-top-width: thin;
border-top-style: solid;
border-top-color: #999999;
}
.yourSearchFooter a {background: url(img/trans25.png);}
.yourSearchFooter a:hover{
background: url(img/trans50.png);
color: white;
}
/*}}}*/
/***
!!Navigation Bar
***/
/*{{{*/
.yourSearchNaviBar a {
font-size: 14px;
margin-left: 4px;
margin-right: 4px;
color: black;
text-decoration: underline;
}
.yourSearchNaviBar a:hover {
background-color: none;
}
.yourSearchNaviBar .prev {
font-weight: bold;
/*color: blue;*/
}
.yourSearchNaviBar .currentPage {
color: white;
font-weight: bold;
text-decoration: none;
}
.yourSearchNaviBar .next {
font-weight: bold;
/*color: blue;*/
}
/*}}}*/
config.options.chkShowRightSidebar=false;