Welcome to TiddlyWiki created by Jeremy Ruston; Copyright © 2004-2007 Jeremy Ruston, Copyright © 2007-2011 UnaMesa Association
https://picasaweb.google.com/105898452618087093313/PISTOLOGIEFULL?authkey=Gv1sRgCM6e2bjGuoHuMg#5703799362001729490
https://picasaweb.google.com/105898452618087093313/1994_pistologie?authkey=Gv1sRgCPrgjPjR6J_ZlAE#5703818423083302562
<<tiddler PicasaJqueryincl>>
https://picasaweb.google.com/105898452618087093313/1994_RamasseFeuilles?authkey=Gv1sRgCILkosOFsYeiHw#5705983027103951506
https://picasaweb.google.com/105898452618087093313/1994_RamasseFeuilles?authkey=Gv1sRgCILkosOFsYeiHw
<<twyp player video:"[[DK_Iselp|http://www.youtube.com/v/grHmQ1zNXog]]" width:400 height:300 notitle>>
<<tiddler PicasaJqueryincl>>
https://picasaweb.google.com/105898452618087093313/1996_AK37#5644045265946118898
https://picasaweb.google.com/patacycliste/1996_AK37
gallery AK 37 Antwerpen, june 1995
<<tiddler PicasaJqueryincl>>
[img[alt_text|http://goo.gl/v0hEx]]
@@bgcolor(#99cc66):1995 20 ex? (épuisé)@@
[img[alt_text|http://goo.gl/i11QP]]
|Title|Es gibt kein Komfort|
|Serie|Lp10 Meringue - Oostende |
|dimensions|20 X 15 cm|
|Year|2005|
|techn.|fabric + typo focop. |
|Ex.|20 ex.?|
[img[alt_text|http://goo.gl/IpvXX]]
@@bgcolor(#3399ff):1995? / 20 ex. (épuisé)@@
https://picasaweb.google.com/105898452618087093313/1995_TaisToiEtTravaille?authkey=Gv1sRgCLfM4aC0uKyIeA#5706389953838887506
^^//"~Tais-Toi et Travaille !"// ~Dialogist-Kantor Galerie Vincenz Sala (Bruxelles), 1995 40X60 100ex.^^
Exposition-inauguration de l'ex galerie berlinoise VINCENZ SALA dirigée par Helmut BAUER à Bruxelles en 1995 et première collaboration DK avec l'imprimerie Marcador à Anderlecht / Bruxelles ( Affiche typo 40X60cm 100 ex.)
Il y avait entre autre choses un texte tamponné à la main dont les 2 parties se faisaient face de mur à mur. Il s'agissait d'une suite ininterrompue d'expressions mixtes/bilingues comprenant à chaque fois les termes WERK ou TRAVAIL.
{{{
part a
DIEMANISEENGOEDEWERKERUNTRAVAILDELICATLECHAPEAUDEGEOTROUVETOUTWERKENISGEZONDCHACUNFAITCOMMEILL'ENTENDUNTRAVAILCOMMEUNAUTREDIENIETWERKTZALNIETETENABOIREETAMANGERTRAVAILLERENS'AMUSANTHETWERKEERLEGGENERISVEELWERKAANDEWINKELTRAVAILLERCOMMEUNEBËTEREUZENWERKTRAVAILLERLEBOISPRODUITSOUVENTDESFENTESWORKZHOLICLAFIEVREDUTRAVAILERREURLAFIEVRELETRAVAILLEWERKVROUWKILOJOULE
part b
GEENWERKHEBBENUNTRAVAILBIENFAITWERKHANDENLEMONDEDUTRAVAILALLEZAUTRAVAILLEONROBERTLIESKEHETWERKVANDETIJDUNTEMPSPOURRIREUNTEMPSPOURTRAVAILLERWERKENALSEENPAARDTRAVAILLERD'ARRACHEPIEDWERKTUIGTRAVAILLERPOURRIENBOTERHAMMENNAARBINNENWERKENJENEMESOUVIENSPLUSDUNOMDUTYPEQUIAFAITCETRAVAILWERKONGEVALUNEMONTAGNEDETRAVAILERWERKVANMAKENWERKLOOSWERKMETHODETRAVAILLERLESLANGUESTRAVAILLEETTAISTOIINT'ZWARTWERKENPASOPDATGEUNIETOVERWERKTTRAVAILLERPARCIPARLAKUNSTWERK
}}}
https://picasaweb.google.com/105898452618087093313/1995_TaisToiEtTravaille?authkey=Gv1sRgCLfM4aC0uKyIeA
<<tiddler PicasaJqueryincl>>
https://picasaweb.google.com/105898452618087093313/1993_LP3?authkey=Gv1sRgCIn9iJDv5tKcbg#5706899232932717618
<<tiddler PicasaJqueryincl>>
[img[alt_text|http://goo.gl/zgrOn]]
@@bgcolor(#ccff99):2000 / Ou bien Ou bien 25 ex.@@
[img(400px,auto)[degage bleu-blanc 2001|http://goo.gl/HkZ9O]]
@@bgcolor(#ffcccc):^^ DEGAGE (serie), bleu-blanc, bois-peinture / DK 2001 ^^@@
https://picasaweb.google.com/105898452618087093313/2002_maisonDuPeuple#5706386646635916994
^^affiche officielle Maison du Peuple 2002^^
[<img[archives AW|http://www.andrewwebb.org/uploads/9/8/0/2/980237/1255226_orig.jpg]]
The exhibition "No More Patacycliste Anymore" organized by ~Dialogist-Kantor was part of the larger show "Mobiles" curated by Denis Gielen. It took place in the 'Maison Du Peuple' of St. Gillis, Bruxelles, from 4th to the 19th of May, 2002. Permanence Bureau du Port 2002 / ~Post-Patacycliste Situation "La Maison du Peuple" Parvis de ~Saint-Gilles/ Exposition MOBILES (cur.Denis Gielen) .Listing mural des artistes (tableau noir) et journal des interventions (panneaux colorés).
https://picasaweb.google.com/105898452618087093313/2002_maisonDuPeuple#5660884929135622482 ~~Andrew Webb performing HAIR PEACE at //"No More Patacycliste Anymore"//, Maison du Peuple ~Saint-Gilles, 2002~~
<<tiddler PicasaJqueryincl>>
[img(auto,350px)[alt_text|http://bit.ly/fJfeRR]][img(auto,350px)[alt_text|http://bit.ly/eQ4bSE]][img(auto,650px)[alt_text|http://goo.gl/gpqeC]]
https://picasaweb.google.com/105898452618087093313/2004_Pistologie
<<tiddler PicasaJqueryincl>>
[img[alt_text|http://bit.ly/mNxDmu]]
http://www.troisieme-etage.org/
[img(auto,240px)[alt_text|http://bit.ly/hyAgbn]][img(auto,240px)[alt_text|http://goo.gl/tuo6H]]
https://picasaweb.google.com/105898452618087093313/2005_pistologie
<<tiddler PicasaJqueryincl>>
[img[alt_text|http://bit.ly/gsCmg5]]
https://picasaweb.google.com/105898452618087093313/Mercelis#5711947601598789538
A Vollevox invitation in Petit Théatre Mercelis / 2005
https://picasaweb.google.com/105898452618087093313/Mercelis
<<tiddler PicasaJqueryincl>>
<html>
<div id="container1"><span style= "font-size: 16pt ; color: fuchsia ; background-color: #FFFFFF ; " > </span></div>
</html>
<script> jQuery("#container1").pwi({
username: 'patacycliste',
maxResults: 4,
thumbSize: 200,
thumbCrop: 1,
mode: 'album',
album: 'Soleil',
keyword: '',
albumTitle: 'Le Soleil /Group \Dialogist-Kantor+Kurt Ryslavy 2005\'',
showSlideshowLink: false,
showAlbumDescription: true,
});
</script>
@@bgcolor(#000000):aujourd'hui @@11 novembre 2005 @@bgcolor(#000000):nous
accueillons
l'ami-artiste @@et peintre du dimanche
kurt Ryslavy
@@bgcolor(#000000):récemment @@évadé de la mer des biscuits
@@bgcolor(#000000):compagne de Russie@@
@@bgcolor(#000000):en cette occasion
nous adressons une pensée
toute particulière
à la@@ mémoire
du seul-doigt-inconnu
@@bgcolor(#000000):mais une pensée prudente, oui,
car @@aujourd'hui @@bgcolor(#000000):11 novembre 2005
plus encore
qu"aucun jour ,@@
la beauté est pleine de balles
@@bgcolor(#000000):et que
plus encore qu'aucune autre aucune,@@
la belle @@bgcolor(#000000):se disputera
dans@@ l'urgence et l'obligation
@@bgcolor(#000000):d'@@une manche perdue
~~Fait à Bruxelles / sous invitation de Marc Rossignol et Laetitia Yalon pour le " 11" au Soleil~~
D-K
[img[alt_text|http://bit.ly/fcigGE]]
https://picasaweb.google.com/105898452618087093313/BoxCox2006
..something like a 'body double' show
<<tiddler PicasaJqueryincl>>
[img(auto,260px)[alt_text|http://bit.ly/gQJvOt]][img(auto,260px)[alt_text|http://bit.ly/gSEePF]]
https://picasaweb.google.com/105898452618087093313/2006_pistologie
<<tiddler PicasaJqueryincl>>
https://picasaweb.google.com/105898452618087093313/TYPOSDKDIV#5650680602568892530
^^Typo for first Dialogist-Kantor Saint-Martin action in ccjf Brussels (11-11-2006)^^
https://picasaweb.google.com/105898452618087093313/StMartin
''ST. ART.. VAN D..K'' est un anagramme allégé de //~Saint-Martin Van dijk//.
~~__notes__ : - Saint-Martin sur son cheval découpe son pardessus - pard-essus = paard(cheval-nederlands)-essus - St.art = Saint Art +St.art = St. aart = queue (de cheval) ned. + typo [[DADA n'est pas mort "Prenez garde a votre pardessus" (Breton)|http://sdrc.lib.uiowa.edu/dada/litterature/17/pages/12.htm]] - -syntagme anagramme de //gymnaste//
(a suivre ..)~~
<<tiddler PicasaJqueryincl>>
https://picasaweb.google.com/105898452618087093313/Staalkaart20060602#5701167730517188082
https://picasaweb.google.com/105898452618087093313/Staalkaart20060602
<<tiddler PicasaJqueryincl>>
[<img(250px+,auto)[Think Undercover 2006|http://goo.gl/Tl22N]]
extra ( sic) extra (city) anvers 2006 ~Dialogist-Kantor visiting
a huge group show on a horse in an old warehouse
in Antwerp harbour
[img[alt_text|http://bit.ly/dbFCZR]]
<html>
<div id="container1"><span style= "font-size: 16pt ; color: fuchsia ; background-color: #FFFFFF ; " > </span></div>
</html>
<script> jQuery("#container1").pwi({
username: 'patacycliste',
maxResults: 8,
thumbSize: 100,
thumbCrop: 1,
mode: 'keyword',
album: 'Luanda',
keyword: 'luanda2007',
albumTitle: 'First Triennal de Luanda /Dialogist-Kantor\'',
showSlideshowLink: false,
showAlbumDescription: true,
});
</script>
https://picasaweb.google.com/100409303345295140705/DkDocsTest?authkey=Gv1sRgCMGC6rnBlpb0tgE#5126775384308468354
https://picasaweb.google.com/105898452618087093313/TYPOSDKDIV#5607335304690716786
Heinrich Obst 14/09/2007 Antwerpen
~Dialogist-Kantor ?
One day, after receiving an emergency-call from TG of Mondia l-Pix I found myself walking down the isle (or alleyway if you wish) with an unknown man of Mediterranean allure who eyed me as suspiciously as I was eyeing him.... this person turned out to be the other half of Kantor, or was it Dialogist... or was it the original half of Dialogist that was visiting Kantor? Convergence of circumstances made sure that no-one ever came to know which was which, how come, or even why....
The original emergency, grave that it might have been, was quickly dispensed of and then strange things started to happen... through small self-printed invitations meetings were being called for a select group of privileged friends to attend what were to be known as ‘laboratoires patacyclites’ at various haunts, mostly dilapidated and seemingly derelict sites around the centre of the capital of Europe…you had to be there personally to even begin to glimpse a certain development in this haphazard configuration of chance encounters, but soon these rendez-vouzes became essential for the lucky few who were privy to them and before long word spread and the crowd grew thicker…. Time to do some sort of organizing…Lo and behold: before the thought even was uttered, ~Dialogist-Kantor found a form of permanent address above a speleo-fanatic in the rue Malibran, with above it’s door the letters ‘EVA’ – what more simple name for a complex situation…which was getting even more frenetic as the ‘laboratoires’ began to chase each other while the next pata-conceptualists were lining up outside the door and the telephone (yes, in those days…) was glowing hot… it was too good to be true and after highlights such as ‘zomeruniversita-songfestival’ the landlord started getting nervous and gave the ~Dialogist-Kantor a certain reasonable time to clear out…
What to do with this entity that had become home to so many free and floating spirits? Wither which way were they to go? How could this all stop in its tracks, now that they had got going? Chance came to the rescue once more: the workshop along the alleyway leading to TG’s (former, now TG’s & CM’s ) apartment availed itself and so, just in the nick of time, the ‘Bureau Du Port’ was born. It did not take long for the entourage to acclimatize to the new surroundings, and even though slightly smaller, the tradition of ‘laboratoires’ continued under the auspices of alternate participants…though they were nevermore to be deemed as such, the same spirit prevailed…The ‘Bureau Du Port’ had become a sort of land-locked extension of what had become an away-day for the patacyclistes at Ostend;- Every ~Easter-Monday they would converge from various parts of the country to celebrate the tides on the beach an invariably find a haunt in which to exasperate the black-baked associate Hioco, specialist in Pistologie and long time advocate of the ~Dialogist-Kantor…and set the coastal city straight on what is really crooked…
Notwithstanding these regular excesses, ~Dialogist-Kantor held sway in the most difficult tempests and drowning doldrums to provide a haven for the disenchanted professionals which made up the greater part of the entourage by now…Those that decided that anything but freedom mattered left for good, their friends remained to keep on keeping on even though nothing would ever be the same…only the spirit could be continued and replenished time & time again by the ~Dialogist-Kantor in the Bureau Du Port.
At the new haunt offspring Teo, conceived in Eva, took up some of the attention as a new generation grew up around the antics of the old patacyclist fogies that pranced around and pretended to be interested in football and skateboarding in the alleyway first described…The wild years of all-night discussions at the Café des Arts or the Supra Brailly became a wistful memory, the reorganization of organizations was taking it’s toll on the participants and the whole thing began to look like a questionable enterprise without a prize…Where was this long-drawn conversation leading to? What had been gleaned from the endless exchanges over the years? Where were the results?
Aforementioned is a definite result, the ongoing interchange is a result, the simmering aftermath is a result, the combination of intellectual, personal, artistic and subjective interpretations is the result, the bits of paper, the spots on the floor, the overpainted walls and the clogged toilet as well as the graffiti on the wall is the result, the mentions in pamphlets, booklets & catalogues, the memory in letters and conversations, the gossip and the back-biting, the cheery postcards and the withering plants, the deflated football and the nocturnal ring from the doorbell, the broken glass, the empty bottle the loose shoelace and the paper hat are all results.
In trying to put ~Dialogist-Kantor into a readable nutshell, all sorts of associations come up and are considered, but in the end there is no way to put a handle on it, no way to define the circumstances which lead to or became what is known as ~Dialogist-Kantor… Though I might here have a tendency to identify the two-part description with the two friends involved, the fact of the matter is that it is about a synaptic space between these friends, and not only their relationship but their relations with all the outside entities which make up themselves, let alone their own individuality. On the one hand it’s ‘simple comme bonjour’, on the other hand it’s difficult to put your finger on and it shuns all attempts at definition, it’s a fifty-fifty balancing act…
Let us say that the ~Dialogist-Kantor is a most public manifestation, a generous ouverture of what makes people coincide with each other as an example for others,- a model which is neither perfect nor exemplary, perfunctory or given,- always in flux, always in question, but a beacon in the lives we all live with the ups & downs, the sideways-glances the sighs and the fist on the table… the closest version of a reinte®gration of art into life which I have ever come across. (see LJA#1 1988)*
~Dialogist-Kantor is an institution which is on the kitchen table, next to the potatoes and in the knot of you boot-laces on a winter’s night, it is a corporation that accompanies you along the boulevard after you’ve missed the last bus; it is the pantheon of troubles you drag home after the festival of fears and it’s the light-hearted butterfly that descends on your croissant on a bright breakfast morning.
I wouldn’t want to miss it for the world.
Yours,
Heinrich Obst
(* La Jeune Avrill, Zeitschrift für Haustiere; occasional inexistent publication)
<<tiddler PicasaJqueryincl>>
https://picasaweb.google.com/105898452618087093313/2007_pistologie#5593647192030997106
<<twyp player video:"[[Lisa Hannigan - I Don't Know|http://www.youtube.com/v/RAcQnMIZJss]]" width:400 height:300 notitle>>
https://picasaweb.google.com/105898452618087093313/2007_pistologie#5596466030329390834
<<tiddler PicasaJqueryincl>>
[img[alt_text|http://goo.gl/semfm]]
[img(400px,auto)[a sole flag|http://bit.ly/dTHtVc][http://bit.ly/dTHtVc]]
https://picasaweb.google.com/105898452618087093313/ASoleFlag#5544008595541293522
|Title|A Sole Flag|
|Serie|Miete Strom Holz (3)|
|dimensions|100 X 80 cm|
|Year|2008|
|techn.|feutre synthétique couleurs fuschia et brun |
|Ex.|20 ex.|
<<tiddler PicasaJqueryincl>>
[img(500px,auto)[alt_text|http://bit.ly/ahEjmY]]
|titre|Faudra qu'on en discute demain matin|
|artists|Julien Celdran, Nolwenn Dequiedt, ~Dialogist-Kantor, Lise Duclaux, Jérôme Giller, Emmanuel Tête et ~Jean-Philippe Convert|
|galerie|Galerie Interface, 12 rue chancelier de l’hospital - 21000 Dijon|
|year|2008|
|place|Dijon, France|
|Links|http://www.interface-art.com http://www.interface-art.com/spip/spip.php?article150 http://www.dijonart.com/Faudra-qu-on-en-discute-demain.html |
<<tiddler [[http://patacycliste.tiddlyspot.com/proxy/dk500.tiddlyspot.com/#HitMe]]>>
links
[[VICTIM DESIGN EVENT AT MARTIN VAN BLERK GALLERY|http://www.flickr.com/photos/33445469@N04/3116431358/in/photostream/]]
http://trendbeheer.com/2008/12/05/victim-design-martin-van-blerk-galerij/
http://www.bloggen.be/victimdesign/
https://picasaweb.google.com/105898452618087093313/2008_VictimDesign?authkey=Gv1sRgCMD71s2VmZOKFA
<<tiddler PicasaJqueryincl>>
[img(auto,350px)[alt_text|http://bit.ly/glHxJY]][img(auto,350px)[alt_text|http://bit.ly/g2L5D1]]
https://picasaweb.google.com/105898452618087093313/2008_Pistologie
<<tiddler PicasaJqueryincl>>
https://picasaweb.google.com/105898452618087093313/2008_SouvenirDeLaMer
Edition de 20 typos sur cartes postales représentant des vues de la mer du Nord. Vendues 2 € pieces pour se payer un toile facture de Kurt Ryslavy au Palais des ~Beaux-Arts, Bruxelles 2008.
__Texte:__
{{{
40 ans après:
Souvenir de la Mer de,
van Broodthaers à, aan
~Dialogist-Kantor
1968-2008
}}}
cfr.« Broodthaers de Bezetting » communiqué
~~40 ans après l’occupation du PBA et de la création du Musée d’Art Moderne/ Département des Aigles par Broodthaers chez lui, rue de la Pépinière à Bruxelles, le PBA/PSK organise samedi 27 sept.-08 une party-drink commémorative avec fausse occupation, débats, performances etc. etc.
Ce jour là Kurt Ryslavy artiste et marchand de vin invité mettra en vente lors de sa performance prévue à 20h30 des bouteilles de vin et quelques tableaux au prix de 35€ (5€/bouteille + 30€/tableau).
Le D-K , grand amateur du travail de M. Ryslavy , propose, en vue d’acquérir une des toiles,
20 cartes postales typographiées au prix de 2 € pièce avec le texte : 40 ans après:
Souvenir de la Mer de,
van Broodthaers à, aan
~Dialogist-Kantor
1968-2008
~~
<<tiddler PicasaJqueryincl>>
https://picasaweb.google.com/105898452618087093313/SpendAPennyPOTHEAD#5678700083588472386
[<img(400px, auto)[alt_text|http://bit.ly/d6Ve4p]]
https://picasaweb.google.com/105898452618087093313/SpendAPennyPOTHEAD
[<img(250px,auto)[alt_text|http://bit.ly/912uCQ]]
|Title|Spend a Penny, Pothead|
|Serie|Miete Strom Holz (1)|
|Year|2008|
|Ex.|21 @@bgcolor(#cc0000):color(#fff):font-size(9px):sold out@@|
<<tiddler PicasaJqueryincl>>
[img(500px,auto)[alt_text|http://bit.ly/bE7Y9O]]
[img(500px,auto)[alt_text|http://bit.ly/aHBktW]]
[img(500px,auto)[alt_text|http://bit.ly/cVecdC]]
[img(500px,auto)[alt_text|http://bit.ly/c76bLP]]
|titre|Victim Design|
|artists|/Harry Heirmans /Guy Rombouts /Tuire Lampila /Walter Swennen /Chris Gillis /Tina Schott /Nick Hullegie /Hans Wuyts /Kurt Ryslavy /Rufus /~Dialogist-Kantor (Toni & Carlos) /Andreas Klotz /Merlin chien cheng hou /Joseph Jessen /Jan Dietvorst /Alexandra Crouwers /Philippe Chasseur /Danny Devos /Lode Geens /Vaast Colson /Jurgen Voordeckers /Lieven Segers /Kati Heck /Philippe Van Wolputte /Koen Boyden /Céline Felga /Dennis Tyfus /Thomas Thys /Kevin Apetown /Marc Rossignol /Gert Thierens /Jonatan Leung Hoi Yat /Jan De Pooter /Goele De Bruyn /Ito Takashi /Phil Bloom /Lisa Jeannin /Rolf Schuurmans /Geoffrey de Beer /René Duinkerken /Wout Vercammen /Maria Joana Fernandes /Arjen Nelissen |
|galerie|Martin Van Blerk Gallery, Mechelsesteenweg 26, Antwerp|
|year|2008|
|place|Antwerp, Belgium|
|Links|http://www.bloggen.be/victimdesign/ http://weaponofbeauty.wordpress.com/2008/12/06/victim-design/ |
https://picasaweb.google.com/105898452618087093313/Multiples#5678704226512596530
|Title|A Sole Flag|
|Serie|Miete Strom Holz (2)|
|dimensions|20X30cm|
|Year|2008|
|techn.|photo + box |
|Ex.|15 ex.|
<<tiddler PicasaJqueryincl>>
Sunday, 20 December 2009
Oh the weather outside was frightful on the day of
'Everything is Possibly Possible' and indeed everything possible occurred. A snowstorm came to Belgium on 20 December 2009 making it beautiful outside and impossible for some to attended the event with featured artists
~Dialogist-Kantor (Toni Geirlandt and Carlo Montalvo)
who installed a series of text and print based material and presented three actions at MACHINE. The first action "Two Artist in the Snow" a direct reaction to the weather outside took place with two large black felt hats occasionally used by ~Dialogist-Kantor while standing at attention allowing those in attendance to throw snowballs at the artists, which was a chance suggestion by someone in the audience. As with most ~Dialogist-Kantor projects this opened up the possibility of creating art out of immediate thought and reaction/action. More of a sense of taking it away from the artists themselves and leaving it to ones own interpretation of what takes place. "Two Artist in the Snow was a good lead into the next action "In Advance / Sans Provision"which had Toni Geirlandt masked with a green and red painted stick taking instructions given to her by Carlo Montalvo on where to locate and knock down a collapsable chair of the same colours as the stick. MACHINE saw some politics aspect to this work but garner that ~Dialogist-Kantor ideas still apply this to childlike amusement and the presentation of an idea. This piece also got the most reaction by the attendance and lead to constructive conversations among the audience about what is taking place in the Belgian Vanguard today. The final action "Mano A Mano" a collaboration with Theo Montalvo (son of the artists) and Chris Straetling of Bureau Gruzemayer took place with ~Dialogist-Kantor gripping each other at mid-arms length and having Theo Montalvo placed strips of plaster around each arm to form an shape that would be a memento of the action. Chris Strateling in white paper jumper read a text by ~Dialogist-Kantor related to their piece "~Tais-Toi et Travaille" and then proceeded to install a large clear plastic sheet with read tape that partially covered the artist. Strateling then open a wicker picnic basket and poured on top of the sheet a large amount of fresh walnuts that then fell with complete randomness to the floor around the table where the third action started and where ~Dialogist-Kantor were still standing waiting for the plaster to dry. Strateling refereed to this action with walnuts as a humorist response to a statement made during WWII during a response to a call for surrender of someone shouting "NUTS!". Once dry Theo Montalvo proceed with directions from ~Dialogist-Kantor on how to slightly cut the plaster so that with some tension they could release themselves from the work and thereby leave an impression of the process involved. The process got more involved when Dirk Gondry (MACHINE), MACHINE member Bart Vanreusel and Theo Montalvo created a human ladder to install the finished piece.
The evening carried on with food, drink and music and although many couldn't make it out and with two hour train delays MACHINE was again a great afternoon of presenting new ideas to a new audience. MACHINE would like to thank ~Dialogist-Kantor for there time and effort towards this project and look forward to working together again in the future. Special thanks to ~Dialogist-Kantor for their contribution of posters and the object from "Everything is Possibly Possible' to the MACHINE archive.
<html>
<style type="text/css">
#mach
{
background-color:#b0c4de;
font-family:lucida console
}
</style>
<div id="mach">
<br>
On behalf of MACHINE (vzw) I would like to invite you to have a presentation of your work at our space in Gent, Belgium. The event would include an artist social in your honor, a presentation and/or talk about your work followed by a light dinner.
<br><br>
MACHINE is a non-profit project for contemporary ideas in the arts, including experimental practices. Our mission is to cultivate creative potential by presenting contemporary work from young, emerging and under-recognized talent in various art disciplines in partnership with members and the broader community, maintaining a level of excellence in showcasing contemporary work and talent, as well as sales of art work and public events.
<br><br>
Our next event is on Sunday 20 December with 'Everything is Possibly Possible'. The featured artists for this event are Dialogist-Kantor. We would like to invite you as our guest to this event which includes entrance, food, drinks.
<br><br>
For more information on MACHINE please visit our blog at http://machinevzw.blogspot.com/ Looking forward to hearing from you.
<br><br>
Best
<br><br>
O. Rynell Cash<br>
Coordinator<br>
MACHINE
<br><br>
</div>
</html>
https://picasaweb.google.com/105898452618087093313/Machine3Dec2009#5701872404372452738
https://picasaweb.google.com/105898452618087093313/Machine3Dec2009#5701871419549444354
<<tiddler PicasaJqueryincl>>
[img(500px,auto)[alt_text|http://bit.ly/9rOgvK]]
|bgcolor(#bbbbaa):titre|Feuille,Bouteille,Ein Vogel (le titre solution/à l'envers) |
|bgcolor(#bbbbaa):lieu|Composite #7 / La Bellone - Bruxelles|
|bgcolor(#bbbbaa):date|2009|
|bgcolor(#bbbbaa):artists|LL,Heinrich Obst, Serge Paternoster, Marc Rossignol, Kurt Ryslavy, Laetitia Yalon, DK|
|bgcolor(#bbbbaa):type|performance|
|bgcolor(#bbbbaa):link|http://www.bellone.be/fr/ressources/details/plays/530117|
<<twyp player video:"[[bellone|http://www.youtube.com/v/fng_uh1INkE]]" width:500 height:350 notitle>>
[img[extra bowling dk|http://goo.gl/1wH06]]
[img(50px,auto)[Laurent COURTENS|http://goo.gl/SGczc]]
<<<
BOWLING EN ROUE LIBRE / Laurent COURTENS
<<<
Le couple d’artistes DIALOGIST-KANTOR (Toni Geirlandt et Carlos Montalvo) conduit depuis 1992 une activité prolifique faite de petites choses sans importance et, surtout, sans prétention. C’est un bouquet de poignées de mains prises dans la pâte pour former plus tard un collier, sorte de grigri gardant l’empreinte des rencontres. C’est une Bamba où le traditionnel baiser est remplacé par l’échange d’un masque burlesque en forme de citrouille boudeuse^^1^^ . Ce sont les Laboratoires Patacyclistes, réunions d’une journée organisées entre 1992 et 1999, notamment dans l’ancien magasin E.V.A. Malibran, à Ixelles.
Rencontres sans intention ni programme précis qui conduisent à de modestes performances improvisées et à la colonisation éphémère de l’espace par un artiste invité. L’en-tête des “labos” doit plus à la passion de Carlos Montalvo pour le cyclisme qu’à l’héritage du Collège Pataphysique. La boutade vaut pour hommage et rappelle par la bande que la science de l’imaginaire fondée par Jarry entend avant tout ne rien prendre au sérieux. De ces assemblées, dont la Pils constitue assurément l’un des ferments les plus fertiles, demeure encore la Section Pistologie, réunion annuelle tenue à Ostende tous les lundis de Pâques, organisée en collaboration avec le boulanger local Hioco (d’où l’appellation “pistologie”, de pistolet –ce petit pain rond ainsi baptisé en Belgique-) et le Bureau Gruzemayer d’Anvers, anciennement Factor 44.
À cette occasion, qualifiée du “pire et plus amusant hommage à James Ensor aujourd’hui” ^^2^^, chaque participant apporte - ou non - objets et idées, appropriés et utilisés - ou non - par les convives. On se réunit dans un bistrot, on boit des coups, on discute, on rit. Puis, on sort en cortège jusqu’à la plage et certains s’essaient à des actions improvisées ou préméditées. Cette année, Chris Straetling, alias Heini Obst, bêtement assis sur le sable et ficelé dans une combinaison blanche, a prétendu se dresser, voire décoller, à l’aide d’un cerf-volant de fortune (blanc lui aussi) et du soutien énergique de quelques comparses. Ça n’a pas marché. Il avait “mangé trop de chocolat”, il est resté collé^^3^^ . Hioco a tenté de faire des sculptures en plâtre bleu en s’outillant des cornets en plastique lui servant à monter la crème fraîche. Ça n’a pas marché. Fidèle parmi les fidèles, Laetitia Yalon avait apporté de petites affichettes estampillées “sable au repos” (elle avait lu sur une pancarte l’inscription jardinière “pelouse au repos”). Nombreux les ont arborées. Dialogist-Kantor, pour sa part, avait conçu des brassards PARASIT, thème approximativement respecté de l’année. D’autres bandeaux portaient l’inscription “O-St. Éric”, hommage à Éric Stenmans, aficionado patacycliste décédé cette année, dont l’apport consistait à assister, rire et raconter de nombreuses blagues. L’épitaphe peut se lire “Ô Saint Éric” ou localiser le saint homme à Ostende. Jeu de mots, voire de lettres, dans la plus pure tradition ensorienne. Celle d’autres grands joueurs également, dont Duchamp, Ben, Filliou et, tant qu’à parler de marée, pourquoi pas Devos.
Think it / print it
Pour essayer de clore ce panorama de l’entreprise patacycliste, on se doit de mentionner le Bureau du Port, section de l’atelier accueillant, entre 2000 et 2007, des expositions d’invités, artistes reconnus, inconnus, accidentels ou occasionnels. Amis en tout cas.
Et encore la production d’affiches diffusées par la poste : En Fanfare ! entre 1992 et 1999, suivi de FREEWHEEL (“roue libre” pour rester dans le vélo), à partir de 2000. Bricolé à la presse typographique et à la photocopieuse, En Fanfare! affirme une forte présence graphique dans une composition en pleine page, vivante et colorée. Sous-titré “Sporting XPRMTL contre toulbazaar” le fanzine peut aussi se lire “enfant – phare”. Il combine les ressources de l’illustration à celle de formules souvent concises, toujours cocasses et ouvertes : “FLAC !” (n°11, octobre 1993), “lapin poulette” (n°18, février 1998), “eendoos- metgaatjesuneboîteavecdestrous” (à lire plusieurs fois à haute et intelligible voix..., n°27, décembre 1996), “Courage!” (n°28, janvier 1997), “1 question 100 réponses” (n°39, février 1999)... Ce sont des “idées en l’air”, un champ de possibilités, confectionné dans la joie du travail en duo, diffusé dans le plaisir du don et des échanges qui s’ensuivent.
Successeur d’En Fanfare!, FREEWHEEL prend la forme d’une Une de journal associant dans ses casses des informations aussi capitales que des données biographiques sur une danseuse du Moulin Rouge ou l’édition de la liste des éclipses de lunes et de soleil par Dover Publications. C’est une sorte de bloc-notes, de fourre-tout, permettant d’envoyer des petits messages, librement interprétés par les correspondants.
Tenter le strike
Foisonnante activité donc, brolodrome traversé par le désir d’inventer des instants, de créer des rencontres, d’offrir des possibles, de générer des collaborations informelles. “On ne sait pas se passer de faire certaines choses, nous dit Carlos, comme être avec des gens, les inviter, imprimer” ^^4^^. C’est là le seul programme, qui s’inscrit dans les actes, l’émission de propositions qui s’enchaînent, se renouvellent, se prolongent, se partagent. Les lieux de prédilection de ce partage sont les bistrots, les fêtes, l’atelier ouvert, les appartements – galeries, la rue ou, plus simplement, la table où s’agglomèrent les bonnes volontés, autour d’un petit café ou d’une bonne chopine (minimum!).
Art à pleine vie donc, évoquant la filiation Dada – Fluxus, mais de manière moins offensive, moins dramatisée, plus évidente. Comme si l’idée selon laquelle “l’art se fait où tu habites, là où on est” (Filliou) pouvait désormais s’épanouir en toute simplicité ^^5^^. C’est dire si la démarche prédispose assez peu à la production “d’œuvres muséales”. Pourtant, lorsque le MAC’s invite les “dialoguistes” à exposer au Grand-Hornu pour la troisième édition du cabinet d’amateurs, l’offre est acceptée avec grand plaisir. C’est que le duo ne nourrit aucune hostilité à l’égard des institutions et que la collaboration se nourrit de complicités prometteuses. Avec la direction, mais aussi la documentaliste, l’équipe technique et les futurs guides^^6^^ . Condition nécessaire, mais non suffisante. Reste à poser la question de la forme: une batterie de performances ? Une plate-forme d’actions ? Un maxi Bureau du Port ? Non, on ne trame pas au musée le miracle qui s’opère dans l’indétermination de lieux indécis et confidentiels. Une rétrospective n’est pas plus adaptée. Tout au plus une évocation du parcours, un jeu de pistes, un itinéraire non balisé. Sous forme de références textuelles, de titres, de formules tissant un labyrinthe, une arborescence de signes à parcourir, à articuler, à lier et délier. Des mots et des idées disposés en vrac, sans structure ni hiérarchie, comme pour contrarier toute possibilité de structuration analytique et propulser la lecture dans une pensée intuitive qui recycle continuellement pensées et objets dans de nouvelles associations. Où l’on croise encore des références assumées mais non recherchées, et singulièrement Filliou qui pose gestes, sentences et ustensiles comme des “pistes de décollage pour la pensée”, dans un paysage aérien, ouvert aux libres cheminements, sans corridors de conduite, sans catégories closes.
Orientation finalement retenue, mais sous une forme ludique et vivante: un bowling artisanal de quinze mètres de long dont la piste, posée sur des palettes, est constituée de quarante panneaux peints comme autant de références au parcours de Dialogist-Kantor. Titres, typographies, sentences, blagues, fragments de calendrier forment cet archipel offert à l’errance poétique autant qu’à la pratique du jeu de quilles. Parcours donc mis à plat plutôt qu’érigé en monument. Une démystification qui n’est pas pour autant négation. Le dispositif autorise un double usage: l’exercice de la sociabilité et celui de la lecture, le jeu de boules et le jeu de mots, le partage d’une bière (une buvette est espérée) et l’échange de vues. Une nouvelle édition du FREEWHEEL punaisée au mur devrait inciter au décryptage du tableau. Mais surtout, l’exposition est conçue comme complémentaire à l’édition d’un catalogue comportant un inventaire courageusement compulsé par Céline Ganty, responsable du centre de documentation ^^7^^.
Comme l’exposition, cette édition porte ce titre lisible sur l’un des panneaux de la piste de bowling: L’art du lendemain, probable pied de nez au mythe avant-gardiste, mais surtout désir de projeter une possibilité, d’annoncer qu’une proposition est faite et qu’elle demeure à vivre. Une occasion aussi de rappeler qu’il est toujours bon de remettre au lendemain ce qui peut être fait aujourd’hui. Histoire de ne pas rater une tablée ou une rencontre. “Il y a si peu à faire, disait encore Filliou, et tant de temps pour le faire”. Inversion de valeurs partagée par notre duo et traduite ironiquement dans ce Niveau de l’art servant à prendre les mensurations des convives à un vernissage (action En pure perte II dans le cadre de l’exposition faudra qu’on en discute demain matin, Galerie Interface, Dijon, 2008). Absurde étalonnage qui fait pourtant le sel de la quotidienne course aux médailles. Les patacyclistes sont quant à eux définitivement hors-concours et préfèreront nous convier à une partie de boules dans une arrière-salle. Et pourquoi pas au musée...
Laurent Courtens
L’art même # 43, 2009 / 3
~~1.Performance dans le cadre de la soirée Ultros Exemos. La Bamba Night(Mare) organisée par Dennis Tyfus au Scheld’apen d’Anvers le 28.02.09. Sur mefeedia : http://www.mefeedia.com/entry/dialogist-kantor-patacyclist- la-bamba/16274797
2.[[http://patacycliste.tiddlyspot.com/Pistologie|http://goo.gl/lrIlv]]
3.Vidéo sur http://patacycliste.tiddlyspot.com/
4.Entrevue avec les artistes, 07.04.09
5.Sur Filliou, voir entre autres Robert Filliou, cat., Paris, Éditions du Centre Georges Pompidou, 1991 et Robert Filliou, Génie sans talent, cat., Villeneuve-d’Ascq, Musée d’art moderne Lille Métropole, 2003.
6.Denis Gielen, directeur des publications du MAC’s, suit le travail de Dialogist-Kantor depuis les premières œuvres. Voir Denis Gielen, “Dialogist-Kantor et patacyclistes. Un air de zwanze !”, l’art même n°11, 4/ 2001.
7.Dialogist-Kantor. L’art du lendemain, Musée des arts contemporains au Grand-Hornu, Collection “Cabinet d’amateurs”, n°3 “, textes de Laurent Busine, Denis Gielen et Marc Rossignol, documentation et inventaire des oeuvres par Céline Ganty. 96 pages, 2009.~~
https://picasaweb.google.com/105898452618087093313/2009_macsBoudoirDK?authkey=Gv1sRgCJ-sj5fZiP-RfQ#5706298802687710850 ^^~Dialogist-Kantor, L'art du Lendemain (Section Archives), 2009. MAC's Musée des Arts Contemporains /~Grand-Hornu^^
!!Section Archives
Petite chambre-boudoir comprenant un ensemble dépareillé de restes, affiches et objets DK depuis 1992. Située à droite de l'entrée avant d'accéder à la salle du //Bowling//, l'accès était barré par une corde tirée entre les chambranles de la porte obligeant les visiteurs à se pencher pour y regarder de plus près.
https://picasaweb.google.com/105898452618087093313/2009_macsBoudoirDK?authkey=Gv1sRgCJ-sj5fZiP-RfQ
<<tiddler PicasaJqueryincl>>
[img(400px+,auto)[alt_text|http://bit.ly/chfVMO]]
|...|Dialogist- Kantor |
|title|"L'art du lendemain" Cabinet d'Amateur #3 |
|date|Du 17 mai au 30 août 2009 |
|map|MAC's Site du ~Grand-Hornu Rue ~Sainte-Louise, 82 B-7301 Hornu Belgique |
|links|http://www.mac-s.be/|
!!LES TRÈS RICHES HEURES DU PATACYCLISME
!!!1992-1999 ? 2002…..
https://picasaweb.google.com/105898452618087093313/DKdiv#5645124958706330130
« Cette occupation nous donne souvent l’occasion de conversations pénétrantes et plaisantes et nous permet de passer ensemble utilement et agréablement la soirée. » écrit à propos des cabinets d’amateurs, Cornélis Ploos van Amstel, artiste hollandais du 18ème siècle .
À la fin du 20ème siècle, sont apparus des « cabinets d’amateurs » un peu particuliers à Anvers et Bruxelles en interaction permanente « L’intérêt de ces initiatives était que les visiteurs pouvaient être créatifs. L’adage de Beuys, «Jeder Mensch ein künstler» était ravivé. Dans différentes manifestations, on sentait l’esprit de Fluxus : l’art n’est pas un produit fini, mais le processus qu’il développe… » écrit Anny De Decker dans sa contribution à Redactionele Machinaties rondom een INEXISTENT revue FIFTY/FIFTY tot & met AK-37 poging tot chronologie 1986-1996 par Chris Straetling.
C. Straetling est aussi l’initiateur et l’activateur de ce lieu, de la galerie Inexistent et des réunions FIFTY/FIFTY. Dans le livre, il écrit, « C’est alors le premier LABORATOIRE PATACYCLISTE, c’est sous ce nom que l’on connaît l’activité du couple Toni Geirlandt et Carlos Montalvo, qu’on appellera un peu plus tard, Dialogist-Kantor. Commence alors un merveilleux parcours qui demande de plus amples explications… Je peux en brosser une esquisse pour montrer combien il est difficile de démêler les relations enchevêtrées qu’ils ont liées avec les réunions FIFTY/FIFTY. J’ose prétendre que les laboratoires ont entretenu le principe des réunions 50-50… Le laboratoire a aussi son organe, le « EN FANFARE » sous-titré : « Sporting xprmtl contre toulbazar »
Cette publication sur A3 compte 39 numéros, en parallèle aux vingt-cinq LABORATOIRE PATACYCLISTE, avec au début, pour éditeur, Hans Castafiore, (encore un nom d’emprunt). Sur le numéro 1, on peut lire «Voici la montagne sonore du paratonnerre. Airance froufrou d’une queue de billard.», Dada n’est pas loin, et le lapsus révélateur est typique.
On trouve dans l’ouvrage de Chris Straetling, alias Heinrich Obst, Luxus Criminaliteit, l’épopée des associations libres sans but, d’artistes alternatifs à Anvers. - “MERDE ” DISAIT LA REINE, “SI J’ÉTAIS ROI J’EN AURAIS UNE PAIRE» - titre une exposition de Toni Geirlandt, à Inexistent, en 1988, après Anne Véronica Janssens et avant Ria Pacquée. Elle montre une installation associant petites sculptures, projections de diapositives et impression photographique sur toile.
FIFTY/FIFTY est un concept proche du principe d’équivalence de Robert Filliou, bien fait = mal fait. Filliou écrit : « Je m'intéresse aux genres de performances artistiques, depuis quelques années, qui idéalement changent ou changeraient l'environnement dans lequel nous vivons, le changeraient dans le sens du non-sens ou disons idéalement dans le bon sens du non-sens. C'est ce que j'appelle, des propositions artistiques qui sont adressées à tout le monde, selon le principe général que l'art c'est ce qui rend la vie plus intéressante que l'art» (sans titre-sans tête. 1983)
Les réunions FIFTY/FIFTY, dont l’éminence grise est Wout Vercammen, un des premiers performeurs belges (1965), installent un dialogue autour et par l’art, ce dialogue dérive vers l’installation et la performance comme - LA CANONISATION DE VINCENT VAN GOGH - en 1989. On rencontre, dans ces réunions parmi les plus connus, Guillaume Bijl, Monica Droste, Bernd Lohaus, Guy Rombouts, Laetitia Yallon, alias Titania Altezze, l’égérie des groupes autant d’Anvers que de Bruxelles …
En 1990, sur une casemate, du toit d’un immeuble industriel d’Anderlecht, C. Straetling place une plaque de cuivre où est gravé très officiellement European theatre of opérations OFFICE OF THE INTERIOR . C’est sa participation dans l’expo « Please do disturb » (ce titre est inscrit dans le sens interdit qui illustre l’affiche de Jean de La Fontaine) où exposent aussi T. Geirlandt, et bien d’autres futurs complices. À Inexistent, Angel Vergara a créé son premier « café del Año », un bistrot où le tarif est peinture, direct sur le mur.
Septembre 1991, T. Geirlandt expose au Goethe Institut, l’affiche montre Toni les yeux bandés d'un foulard blanc qui effleure le sol avec un bâton face à Ulrike Grossarth qui fait de même, c'est une photo, noir et blanc, pleine page, avec le titre de l'expo imprimé en rouge : « ni vu ni connu »
En 1992 T.Geirlandt et C.Montalvo (D-K) organisent le 1er LABORATOIRE PATACYCLISTE (LP1) dans l’appartement atelier de Carlos. Toni va faire graver, au cutter, un tampon LABORATOIRE PATACYCLISTE par un artisan ambulant en Indonésie. C’est à Djodjakarta aussi qu’ils trouvent le mot (Post) Kantor.
Le genre humain n’est composé que de patacyclistes, les laboratoires distinguent, ceux qui ne s’ignorent pas comme tel, de ceux qui s’ignorent ainsi, sans que ceux-là se tiennent pour supérieurs à ceux-ci. Au sein des laboratoires, chacun dispose d’une large autonomie opératoire. D-K encadre chaque labo, d’affiches, d’imprimés et de certificats divers qui constituent à eux seuls une production très pertinente. Les laboratoires n’ont pas besoin d’être pour être.
En 1993, les LABORATOIRE PATACYCLISTE (LP) vagabondent dans Bruxelles, avec les participations de (LP2), Patrice Verhofstadt, (LP3) Jef Lambrecht artiste de Inexistent et journaliste à la VRT, (LP4) Jean-Luc Paquet, (LP5) Michèle Barley.
En 1994, c’est le premier rendez-vous du lundi de Pâques en connexion avec Hioco, le boulanger artiste d’Ostende. Les fiers canons du D-K vous mijotent un Pâques - Pasen pas très chocolat alors ménagez-vous on déménage ! Le (LP 6) est intitulé - LES GRANDS BRULÉS -. “Les artistes travaillent dans plein de public» dirait C.Straetling qui est aussi programmateur à Radio Centraal. La bande d’artistes de Bruxelles et d’Anvers (merdre syndicate écrit D-K, dans newsfrom ubuworld) va performer au milieu des badauds avec l’umour sans h de Jacques Vaché. Ces workshops se répèteront de lundi de Pâques en lundi de Pâques. Ce sont des hommages indirects à James Ensor.
Le LABORATOIRE PATACYCLISTE s’installe, alors, rue Malibran à Ixelles, dans un magasin dont il conserve le nom « E.V.A ». Il ouvre avec le (LP7), - NIGHTINGALE -.
Dialogist-Kantor (D-K) expose à Alicante, où il va faire imprimer un poème : MANO À MANO, DE HANDDRUK, SIMPLE COMME BONJOUR… ce poème évoque une performance qu’il présente au LP12.
(Le LP8) - SOMER UNIVERSITA - est plus collectif dans l’esprit FIFTY/FIFTY et s’y succèdent des performances visuelles et musicales, comme l’interprétation d’un arrangement de Kurt Schwitter’s, « Doppelmoppel» par C.Straetling, alias Valentine Commerce, et Harry Heirmans à l’accordéon. Ce titre enchantera T.Geirlandt et C.Montalvo qui l’utiliseront pour des doubles autoportraits photographiques, comme sur la page d’accueil du site D-K. “Notre vie est un voyage - dans l’hiver et dans la nuit - nous cherchons notre passage… sur le passage de quelques personnes à travers une assez courte unité de temps. Les arts seront des bouleversements de situation ou rien.» Guy Debord c’est un extrait des « hurlements en faveur de Sade » qui seront lus en 95, sur les ondes de Radio Centraal, dans une réunion FIFTY/FIFTY, avec la participation de la division blindée patacycliste.
En 1995, le EN FANFARE 19 : sur un échantillon de papier peint, est imprimé un tambour qui salue la naissance de Teo Mingus, le fils de T. Geirlandt et de C. Montalvo. L’autobiographie est intégrée à leur travail comme chez Mike Kelley.
D-K expose à la Galerie Vincenz Sala de Helmut Bauer, qui a déménagé le nom, de la Potsdammerstrasse de Berlin à Bruxelles. Il défend la conception de l’art de Nelson Goodman : quand y-a-t-il art, plutôt que, qu'est-ce que l’art.
H. Bauer écrit : Dialogist-Kantor engage et met en scène un dialogue relancé par des laboratoires patacycliste et des envois postaux, les EN FANFARE . L’exposition - TAIS-TOI ET TRAVAILLE ! - interrompt le dialogue et entreprend une lecture de ses résidus esthétiques.
D-K installe le - BUREAU DES REKLAMATIONS - chez Sussuta Boe, galerie de Fernando Alvim, le post exotic artiste, qui a créé « Camouflage », le premier centre d'art contemporain africain en Europe, initiateur et directeur de la Triennale de Luanda, où il invitera D-K en 2007.
L’affiche du - BUREAU DES REKLAMATIONS - montre une œuvre : une bouteille remplie d’aiguilles de sapin : - ELLE ENTERRE DES SAPINS – cette action s’est répétée, en 1994,1995, 1996, 1997, 1998,...2008… tooombeu la neiiigeuu. (un sapin ça pine et une pine ça peint). Lors du dernier remplissage de bouteille en 2009, T.Geirlandt a peint, avec des sapins, un oiseau sur un mur de la Maison de la Bellone à Bruxelles. Au Japon, le pin sort vainqueur des assauts du vent et de la tempête, il symbolise les hommes qui ont su résister aux rumeurs et garder intacte leur pensée.
Les Laboratoires, de la rue Malibran, se terminent en beauté par les laboratoires 13 et 14. Le (LP13) s’immerge dans la brocante de la rue Malibran, son titre est - NO RECLAME -. Patrice Verhofstadt y vend des cacahuètes qu’il dore sur place, (tous identiques, tous différents)…
L’affiche illustre la page d’accueil de leur site http://patacycliste.be. À cette occasion des photos sont prises, qui feront le fond d’affiche du LP 23, une de ces photos montre Frédéric Tolmatcheff , debout, entouré par la foule de la brocante, avec une pancarte de carton au cou où il a écrit « OCCASION PRIX À NÉGOCIER ».
En 1996, le (LP14) est intitulé - FERMÈ / GESLOTEN 24H/ 24U -. Pendant 22 jours, 22 artistes se relayeront pour occuper les vitrines d’ E.V.A Malibran. Michel Clerbois illustrera le flyer du BUREAU DU PORT 30 (2006) avec l’affiche du LP 14. S’en est fini de la rue Malibran, les EN FANFARE sont maintenant édités par BDP, soit le Bureau du Port, le surnom du futur atelier de D-K.
À AK37, le nouveau lieu de Chris Straetling, à Anvers, ils réinstallent la proposition D-K du LP14. Des boîtes d’ - ARCHIVES MÈNAGÈRES - sont exposées dans les vitrines. Ces boîtes contiennent des choses dont ils ne parviennent pas à se séparer, comme les négatifs de l’école de photo… ; archéologie intime, mais aussi archéologie populaire. D-K questionne la responsabilité historique de l’individu.
Désormais les laboratoires vont migrer d’Ostende, pour respirer de l’art (LP 15) - R -, à la forêt de soignes (LP16) - PROMENADE ROSSIGNOL -, et enfin à Berlin - DAS SOUVENIR OUI – (LP 17), chez une amie d’Helmut Bauer, Ulla Hahn, compagne de P. Verhofstadt. 43 artistes sont nommés sur l’affiche, le montage de l’exposition fut donc ardu. Dès l’ouverture se succèdent des performances. T. Geirlandt, femme d’aujourd’hui, et C. Montalvo, homme de main, plâtrent, à cette occasion, leur poignée de main, simple comme bonjour.
C’est à cette époque que commencent les aventures du FACTOR 44, le nouvel espace, fondé par Chris Straetling et Harry Heirmans à Anvers. Ils décident d’organiser des réunions artistiques tous les derniers mercredis du mois et font réaliser un cachet à cette fin.
Anne Buckingham invite D-K à participer dans une exposition collective - THE POSSIBILITY OF THE SPIRIT - autour des écrits de Paul Buckingham 1949-1986.
En 1997 (LP18) – ZEEKOFFERSALLON - : Les Pistologies à Ostende sont toujours l’occasion de performances presque improvisées aux atmosphères presque aléatoires, mais propices comme des ready-made temporels où le spectacle s’écoule dans le non-spectacle.
(LP19) - TISCHE,TABLE,TAFEL- laboratoire postal, une édition d’un poster en collaboration avec des artistes de Berlin, Cologne, Stuttgart, Bruxelles, Anvers.
(LP20) - POST DIGESTIVE TRIBUNE - Bruxelles. Le principe de ce LP s’inspire du Speakers ’ Corner de Hyde Park à Londres (espace voué aux assemblées spontanées et à la libre parole). D-K toujours occupé à réactiver le passé, a tapissé avec des anciennes affiches des LP, un mur du Bureau du Port. Devant ce mur un Speakers’ Corner où se suivent différentes interventions. D-K performe avec un os de jambon peint, en référence à Martin Kippenberger, cité dans le EN FANFARE 31. Une photo du public émerveillé servira pour le LP22 à Dudelange (Luxembourg) on y reconnaît entre autres Gast Bouschet, l’artiste qui représentera le Luxembourg à la Biennale de Venise en 2009, et initiateur du LP 22.
En octobre D-K expose avec P. verhofstadt et M. Rossignol au FACTOR 44. T. Geirlandt coud sur les vêtements des visiteurs, une nominette « stockrotatie DIALOGIST-KANTOR 1997 », et établit la liste des personnes qu’elle a cousues. Le EN FANFARE 31 publié à cette occasion, dresse un inventaire d’œuvres, la première citée - BONNE NUIT BEO - évoque leur oiseau qui parle.
Dans le livre qu’il consacre à la vie du FACTOR 44 et des jours fixes 1996 - 2006, C. Straetling joint à l’article sur cette expo, le texte en français de Denis Gielen dans la revue L’art même - DIALOGIST-KANTOR ET PATACYCLISTES UN AIR DE ZWANZE –
En novembre, H. Heirmans, a construit dans le FACTOR 44, un petit théâtre à la machinerie sophistiquée comme une boîte à malice pour – FRISETTE PART EN VACANCE – une pantomime burlesque, pour le plaisir des yeux, par De Koninklijke Toneelvereniging Factorium avec entre autres C. Straetling, H. Heirmans, C. Montalvo alias Frisette. Dans ces bandes d’amis, les appellations sont en mutation continue, comme la vie, comme les mots, comme les idées.
D-K, P. Verhofstadt, M. Rossignol exposent dans les vitrines devant la HAUS DES LEHRERS (parlement régional) à Berlin Est. D-K montre la technologie utilisée pour - ELLE ENTERRE DES SAPINS - P. Verhofstadt installe dans un autre «aquarium» une maquette en carton du Titanic ; lors du démontage, il l’offrira à un gamin de passage qui l’admirait.
En 1998, à Ostende. (LP21) - HIPPOCAMPITECA INTERNAZIONAL – une photo du LP18 de l’année précédente, illustre l’affiche et montre une bande de copains assis sur le sable : l’un déclame, l’autre porte un loup, quatre autres rient de bon cœur, un bon échantillon de l’ambiance des LP.
Quelque temps après le (LP22) - SONORA MACHINE – Dudelange (Luxembourg). Deux musiciens classiques, à l’aide de poubelles curver de tailles différentes, interprètent scrupuleusement une partition pour percussions ; bien d’autres machines sonores suivent.
Le (LP23) - DOPLOKAAL – est organisé, un dimanche, en collaboration avec PLUS TOT / TE LAAT, un autre collectif d’artistes animé par Axel Claes. Il se déroule dans le bureau de pointage de Saint-Josse, devant lequel Djos Janssens déroule le tapis rouge. Sur l’enveloppe de l’invitation, D-K a imprimé en grand : DISPENSE. Ce fut une belle après-midi de performances et de projections vidéo.
Au Palau Comtal de Cocentaina, à Alicante, D-K performe et expose. C’est la première apparition du niveau de l’art, NIVELL DE L’ART : cette action évoluera dans le temps. À – JOUR DE GLOIRE – (1999) en orange, avec W. Swennen… Elle est filmée en 2008, à Dijon, où ils ont été invités par Troisième-Étage, de Nolwenn Dequiedt et Jérôme Giller; en 2009, le niveau de l’art est un multiple en toile cirée. La bande de tissu de un mètre est accrochée à un mètre du sol, et D-K l’utilise avec fantaisie comme toise pour les hommes et les femmes présents.
D-K participe à de nombreuses collectives au FACTOR 44, avec entre autres un nouveau complice Britannique, Andrew Webb. Le premier dialogue, entre A.W et C. Montalvo, porte sur les différences entre le patacyclisme et la pataphysique. Alfred Jarry aimait tellement sa bicyclette, Clément Luxe, qu’il aurait peut-être dû dire patacyclisme plutôt que pataphysique.
En 1999 (LP24) - CASINO – se déroule au milieu d’une foire d’art, au Kursaal d’Ostende.
En juin (LP25) - EAT THAT CHICKEN – le dernier laboratoire va sur les ondes de Radio Campus & Radio Centraal (Brussel/ Antwerpen) pour une belle - SONORA MACHINE –. Le dernier EN FANFARE (n° 39) est diffusé : 1 question 100 réponses. (En 2002 sera édité le n°1 de FREEWHEEL. Les FREEWHEEL espèrent aussi atteindre le n°39)
« APRES QUELQUE TEMPS LES SONORITÉS DU PU BLIQUE RECOM MANCE CE SOIR CE SOIR ON BLRUL LE TOUTE CE SOIR LABORATOIRE PATACYCLISTE «1992-1999» – «LIQUIDÉ» c’est le texte du faire-part, imprimé en orange sur carton.
D-K part à Genève, avec le FACTOR 44, à l’invitation de Tony Morgan à un festival d’imprimés. Les imprimés maison de D-K sont exécutés avec une pression exagérée, ce sont presque des bas-reliefs.
Peu après, ils exposent au FACTOR 44 - LE JOUR DE GLOIRE -. Ils y activent aussi deux œuvres chapeaux, POOR HOMME et POOR FEMME, d’un diamètre d’un mètre et réalisent pour cette exposition, un fusil africain, composé d’une crosse en bois grossièrement taillée et d’un tube de métal, le tout emballé dans de la jute. L’ensemble est étiqueté d’un coté : «Ik heb vrienden over heel de wereld» et de l’autre : « j’ai des amis dans le monde entier » le texte de ces étiquettes a été découpé dans la même bande dessinée. Cette œuvre illustrera le C.P (central patacycliste) édité à l’occasion de l’expo D-K à la Maison du Peuple, de Saint-Gilles (Bruxelles) en 2002. D-K montre aussi un collier de «bonjour», empreintes de poignées de main en forme de «chips»…
En 2000, c’est la première expo du BUREAU DU PORT (B.D.P). : - PAUVRE MONSIEUR - par D-K. Le flyer cite : Je me suis civilement enfoncé deux doigts dans la gorge pauvre monsieur et ai vomi sur sa moquette avant de me retrouver dans la rue. Nicolas Bouvier, extrait de LE POISSON-SCORPION P 52. Apparaissent alors des gravures sur bois, de leur mainate et le grand zéro rouge de l’affiche pour la Maison du Peuple 2002.
Les B.D.P. reprennent les activités monographiques des LP. B.D.P.2 – élégance - avec P Verhofstadt, B.D.P.3 - Réunion des Objects - H. Heirmans, B.D.P.4 - The Line Of Saved - Andrew Webb (qui partagera avec D-K son expo -BOX+COX- chez Annie Gentils en 2006) B.D.P.5 – Keukendelirium - Missus Lamby et Heini Obst, B.D.P.6 - Pas touch - Jean de la Fontaine, B.D.P.8 - cpt boulanger – Hioco, - B.D.P.9 - Le poids de l’art, l'art du poids - M. Rossignol, B.D.P.10 - Gentille Nanouche - Nanouche peint directement sur les murs en février 2002.
Les POOR SUNDAY, (B.D.P. 7, 14 et 31) prolongent le dialogue réactif des laboratoires collectifs. En 2001, Andrew Webb, P. Verhofstadt , H Obst, Lieve Lambrecht, alias ll et D-K, performent. T. Geirlandt et C. Montalvo coiffés de POOR FEMME et POOR HOMME, assis aux extrémités d’une longue table, tapent à la machine, les noms des visiteurs sur un certificat de désobéissance : ANCH’IO SONO « DISUBBIDIENZA PURA » (en réaction à la mort d’un manifestant au sommet de Gênes). Les Poor Sunday deviendront Fumoir - Rookzaal (irréductible anticonformisme).
À Ostende, la réunion à lieu au Fort Napoléon. Hioco, alias l’association de malfaiteurs, alias Pistologie, prépare un gâteau vert avec une pancarte, de massepain et chocolat, où il est écrit : interdit de marcher sur la pelouse. L’affiche montre une photo de l’an passé : le casino au fond, notre fanfare les pieds dans l’eau, avec L. Yalon, Ria Paquée…porteurs de grands drapeaux.
En août 2001, les bandes du FACTOR et du LP vont exposer et performer à La Haye, chez un autre collectif, QUARTAIR, ils remettront cela, pour la CULTUURNACHT 2003.
En 2002,- NO MORE PATACYCLISTE ANYMORE - dans le cadre de l’exposition mobile à la Maison du Peuple à Saint-Gilles, un grand zéro au dessus d’une liste infinie de noms, tous, petits. Un grand podium au milieu d’une salle, à l’avant une sculpture d’Andrew Webb, après, un agglomérat d’œuvres, d’auteurs différents, façon Merzbau, qui préfigure le «Victim Design» organisé par H. Heirmans, Rufus, Chris Gillis) en 2008, le décor est planté pour une série de performances. Kiekerbiche place au sol un chemin de peluches de nombrils et habillé en ménagère, il s’empresse de l’aspirer…Sur un des C.P édités alors, il est écrit, au-dessus des 54 noms des membres du personnel : courage fuyons !
Les arts commencent, s’élargissent et disparaissent parce que les hommes dépassent le monde des expressions officielles et les festivals de sa pauvreté. Guy Debord.
- No réklame –, souligne le dilemme de la visibilité pour un artiste. T. Geirlandt et C. Montalvo sont plus des artistes de la nécessité que de la notoriété. C’est dans l’urgence de l’art qu’ils travaillent dans un esprit proche de Thomas Hirschhorn. Ce dernier à propos du musée précaire Albinet dit : « Poser la question de "Ce qu'il manque", c'était donner la possibilité que quelqu'un réponde: "il manque de l'art de la poésie, de la philosophie". "Pour démontrer que l'art n'est pas seulement patrimoine, richesse partagée et histoire commune, mais qu'il est autonome, qu'il peut agir et possède une force active-hier comme aujourd'hui." ».
Avec une grande solidarité, ils activent l’art en petit comité, à la frontière de l’intime et du public, sans exclusive. On dit de l’occultation pataphysique, qu’elle fut l’ultime fermeture au monde et aux marchands du temple, en même temps qu’elle est extension au monde. Loin du marché de l’art, D-K a développé un réseau d’amitié artistique, jusqu'à Luanda, (2007) et Pori en Finlande, (2008)
D-K chasse les coïncidences : Spoerri, nom de l’inventeur de l’aspirine et de l’artiste cher à leur cœur. (Freewheel nº 6). D-K cultive un penchant certain pour le lapsus révélateur «journal d’a bord age» (Freewheel nº 2), les jeux de mots bilingues « nu et maintenant ».
D-K fabrique des décalages spatio-temporels avec les photos d’hier pour les évènements à venir. Plutôt que courir après la mode, D-K exhume en archéologue passionné des restes de culture populaire.
Avec D-K, tout est identifié, surnommé à l’infini. Les critères d’usage pour l’art sont systématiquement bouleversés : l’identité de l’auteur (surnoms), l’authenticité (l’affiche ou l’expo, la performance ou son pauvre résidu) et l’unicité de l’œuvre (les imprimés).
Les laboratoires ne sont pas des mises en scène, mais plutôt des mises en doute, que D-K orchestre, avec autodérision : pauvre nous, on s’en fout. D-K accumule les modes opératoires autant que les pseudo. D-K et les laboratoires patacyclistes collectionnent les lieux de travail : du bord de mer aux ondes radio, ils bouleversent les usages habituels des échanges artistiques, artistes et public sont émetteurs d’art. Leurs performances et les événements que D-K organise fluctuent entre l’art et la vie.» Les laboratoires «c’étaient des instants privilégiés, après être passé par tous les degrés d’une anxieuse curiosité, «Bartlebooth atteignait alors une sorte d’état second, une stase, une espèce d’hébétude tout asiatique, peut-être analogue à celle que recherche le tireur à l’arc : un oubli profond du corps et du but à atteindre» «Cette impression de grâce durait parfois plusieurs minutes et Bartlebooth avait alors la sensation d’être un voyant : il percevait tout,il comprenait tout…». «La vie mode d’emploi Georges Perec»
Toute opération de D-K est une mise en abîme, les amis et les artistes, les imprimés et les éditions, les activations et les performances, les lieux, les dates et les noms, tout est interconnecté. Il constitue autour de chaque chose, une exégèse sans fin et pourrait aboutir à une exégèse de rien. Si D-K parodie les entreprises de mystification, c’est pour dégager l’art de son moule et le vivre. Sur l’affiche de leur exposition, l’île du travail D-K cite Mary Poppins : «Avant tout, il faudrait que je vous dise une chose, je n’explique jamais rien.»
La fin du travail ou la certitude du doute. (Freewheel nº 5 et 6).
Marc Rossignol
//^^texte inclu dans le catalogue édité par le Mac's a l'occasion de l'exposition ' L'art du lendemain' de Dialogist-Kantor^^//
~~
Robert Filliou, éditions et multiples (les presses du réel)
Thomas Hirschhorn, avant propos Yvan Chapuis, entretien avec Guillaume Dessange. Ouvrage publié à l’occasion du projet du musée précaire Albinet réalisé à l’invitation des laboratoires d’Aubervilliers, édition Xavier Barral 2005~~
<<tiddler PicasaJqueryincl>>
[img[alt_text|http://bit.ly/dKWqTj]]
[img(auto,290px)[alt_text|http://bit.ly/gu48bF]][img(auto,290px)[alt_text|http://bit.ly/fmPq2z]]
[img(500px,auto)[alt_text|http://lh3.ggpht.com/_a4sdrWnGaJY/TZXNedCAz6I/AAAAAAAABuE/fdirqJ_5BTo/IMG_0193.JPG]]
https://picasaweb.google.com/105898452618087093313/2009pistParasit
<<tiddler PicasaJqueryincl>>
[img(400px,auto)[rouge2009|http://bit.ly/f1WHkm]]
<html>
<div id="container1"><span style= "font-size: 16pt ; color: fuchsia ; background-color: #FFFFFF ; " > </span></div>
</html>
<script> jQuery("#container1").pwi({
username: 'patacycliste',
maxResults: 5,
thumbSize: 80,
thumbCrop: 1,
mode: 'album',
album: '2009rouge',
keyword: '',
albumTitle: 'C21 2009 /Group \Rouge\'',
showSlideshowLink: false,
showAlbumDescription: true,
});
</script>
|link|http://www.lalibre.be/culture/arts-visuels/article/534136/couleur-impact-garanti.html|
|artists|Marc Rossignol, Djos Janssens, Dialogist-Kantor, Michel Couturier|
|gallery|CO21 Bruxelles|
|date|2009|
finissage on Rouge exh. by DK and +
[img[couleur impact garanti|http://goo.gl/IdGpi]]
|external links |[[1|http://goo.gl/CeKKR]] [[2|http://goo.gl/6NJjb]] [[3|http://goo.gl/QjNG6]] |
|more info |[[2009_Rouge CO21|2009_Rouge]] |
[img(350px,auto)[invroubaix|http://bit.ly/eoc3C4]]
|bgcolor(#bbbbaa):titre|Trouble-Fait |
|bgcolor(#bbbbaa):lieu|Chez Rita / Roubaix|
|bgcolor(#bbbbaa):date|18-19 et 20 octobre 2009|
|bgcolor(#bbbbaa):artists|Julien Celdran, Nolwenn Dequiedt, Lise Duclaux, Jerôme Giller, Dialogist-Kantor, Bernard Mulliez et Emmanuel Tête|
|bgcolor(#bbbbaa):type|mixte|
|bgcolor(#bbbbaa):links|http://librairiedesartistes.free.fr/ http://liseduclaux.be/blog/?p=93 http://www.emmanueltete.eu/trouble-fait |
|more|[[UN PIED DANS LE JARDIN DE MIEL|http://www.6870.be/spip.php?article726]] de Bernard Mulliez|
https://picasaweb.google.com/105898452618087093313/2009chezrita
<<tiddler PicasaJqueryincl>>
[img(500px+, auto)[alt_text|http://lh5.ggpht.com/_a4sdrWnGaJY/TMWVezhgCII/AAAAAAAAAdE/_brEj5SzlUo/s640/PBAcanvasDKcardoso.jpg]]
@@bgcolor(#ccff00):^^photo: Guy Cardoso^^@@
2nd public viewing of the Bowling alley in Bozar Brussels
<html>
<div id="container1"><span style= "font-size: 16pt ; color: fuchsia ; background-color: #FFFFFF ; " > </span></div>
</html>
<script> jQuery("#container1").pwi({
username: 'patacycliste',
maxResults: 8,
thumbSize: 100,
thumbCrop: 1,
mode: 'keyword',
album: 'cherryrona',
keyword: 'cherry',
albumTitle: 'Cherry Invitational /Gallerie Les Contemporains \ 2010\'',
showSlideshowLink: false,
showAlbumDescription: true,
});
</script>
https://picasaweb.google.com/105898452618087093313/DKdiv#5645133721968535074
^^manu tête belomor canal diapo^^
[img(auto,250px)[alt_text|http://bit.ly/dTj9ZG]][img(auto,250px)[alt_text|http://bit.ly/gp5ePR]]
https://picasaweb.google.com/105898452618087093313/2010_pistologie
<<tiddler PicasaJqueryincl>>
[img(500px,auto)[alt_text|http://bit.ly/cXGN99]]
@@bgcolor(#99ee00):Ici Prince et princesse tout le monde montre ses fesses@@
|Title|Ici Prince et Princesse|
|dimensions|27x40x7 cm|
|Year|2010|
|techn.|beer carboard cut |
|Ex.|27 ex.|
Bernard Villers :Rose, c'est la vie 2010
Group exhibition at ~CO21( http://co21.net ) gallery, Brussels
''« Je déclarais aimer toutes les couleurs. Et pourtant, j’employais peu le rose… Mais, m’y voilà plongé maintenant. Et me voilà ravi par tant de nuances et tant de différences. Je découvre une infinité de roses, des plus tendres aux plus kitsch : vieux rose, ocre rose, chair rose, joue rose, rose-thé, rose bonbon, rose Barbie, rose Tiepolo, rose quinacridone, rose permanent, rose tyrien… Les roses des roses, le rose des fermes roses, le rose des ballets roses, des flamants roses, des crevettes roses… Alors, je peins, j’aquarelle, barbouille, mélange, projette, collecte, accumule des roses et ne pouvant les rencontrer tous, j’invite à cette orgie quelques dizaines d’ami(e)s artistes. »''
Bernard Villers, novembre 2009
Liste des artistes invités par Bernard Villers :
marianne berenhaut, lucile bertrand, marcel berlanger, caroline balthazar, robby comblain, leo copers, luk coelberghs, jeanine cohen, michel couturier, werner cuvelier, lieve d’hondt, dialogist kantor, edith dekyndt, jo dustin, nathalie dekorte, juan d’oultremont, daniel dutrieux, michel françois, filip francis, bernard gaube, alain geronnez, fernanda gomez, roel goussey, felix hannaert, louise herlemont, brigitte hoornaert, sophie honnof, bernard hubot, aïda kazarian, ann veronica janssens, michel leonardi, jacques lizène, daniel locus, jacqueline mesmaeker, patricia et marie-france martin, michel moffarts, jean-françois octave, els opsomer, anne penders, kurt ryslavy, marc rossignol, walter swennen, francis schmetz, rainer tappeser, pierre toby, kris van de giessen, cécile vandernoot, filip van snick, angel vergara, pieter vermersch, jacques vilet, monica von rautenstrauch, bern wery
[img[dialogist-kantor rose c'est la vie|http://bit.ly/idlxzA]]
^^@@bgcolor(#ff9999):~Dialogist-Kantor //"Elle enterre des sapins"// 2010 (rose)@@^^
<html>
<div id="container1"> </div>
</html>
<script>
jQuery("#container1").pwi({
username: 'patacycliste',
mode: 'albums',
albums: ["Argos5050"],
albumThumbSize: 500
});
</script>
<html>
<a href="http://www.flickr.com/photos/argosarts/5078087038/" title="Salon5 - Emilio Lopéz-Menchero - 1 de ARGOS centre for art and media, sur Flickr"><img src="http://farm5.static.flickr.com/4056/5078087038_1e3b4b1e84.jpg" width="500" height="333" alt="Salon5 - Emilio Lopéz-Menchero - 1" /></a>
</html>
@@font-size(24px):"Saint- Martin a donné la moitié de son manteau à un pauvre: comme ça, ils ont eu froid tous les deux."@@
(Jacques Prévert / 1900-1977)
//..Fifty-Fifty was the name of a series of artists’ reunions which took place in the late eighties//
[img(500px+,auto)[http://is.gd/fJ3G3]]
[img(500px,auto)[http://bit.ly/dKs5Gf]]
|curator|Emilio López -Menchero via Argos|
|date / period|10-10-2010 11:00 - 17:00|
|Info|[[Argos:Salon5|http://bit.ly/aWmd51]]|
|description|Fifty-Fifty was the name of a series of artists’ reunions which took place in the late eighties and early nineties at the Antwerp gallery Inexistent (1986-1996). The magazine they wanted to launch never appeared, but it did inspire a wide range of spontaneous art initiatives. After Inexistent disappeared, the story of Factor44 began in Antwerp. Meanwhile, in Brussels, the spirit of Fifty-Fifty was kept alive by the association Dialogist-Kantor, and in 1992 the Laboratoires Patacyclistes were launched. All this and more inspired Brussels-based artist Emilio López-Menchero (1960) to travel across time in Brussels and Antwerp, haunted by those spirits which, twenty years earlier, had haunted the late-night Fifty-Fifty reunions.|
|links|''St.Martin'' : http://www.jstor.org/stable/pdfplus/868076.pdf Van Dyck's St. Martin at Windsor and at Saventhem The Burlington Magazine for Connoisseurs Vol. 77, No. 449 (Aug., 1940), pp. 36-39+41-42 ''Gruzemayer'': http://home.scarlet.be/gruzemayer/FiftyRev.html|
<<tiddler [[Niveau de l'Art de la ville de Neuchâtel]]>>
[img(500px+,auto)[cOLLAGE_SUMMERLAB|http://bit.ly/9gPviF]]
[img(500px,auto)[affiche_SUMMERLAB|http://bit.ly/94zJWZ]]
|Title|HYPERATIVITY SUMMERLAB 2010 |
|Dates|23.07 to 08.08 2010|
|artists|Constance Allen, Iván Argote, Julien Baillod, Massimiliano Baldassarri, Sully Balmassière, Anthony Bannwart, Kyung Roh Bannwart, Nino Baumgartner, Fabian Boschung, Sarah Burger, Nikolaj Cyon, Dialogist-Kantor, Fabianna de Barros, Quynh Dong, Emmanuel Paxon Dupasquier, Ivan Ebel, Al Fadhil, Cris Faria, Donya Feki, Fred Fischer, Vianney Fivel, Emanuel Geisser, Samson Guyomard, François Jaques, Markus Kummer, LapTopRadio (Constance Allen, Laetitica Bëch, Paola Carbone, Jonathan Frigeri, Renaud Loda, Laurent Schmid, Roman Urodoskikh, Martina-Sofie Wildberger), Beat Lippert, Renaud Loda, Florent Meng, Ceel Mogami de Haas, Julie Morel, Jon Merz, Collectif P4 (Marjorie Kapelusz, Sonia Kacem, Mickaël Lianza, Éric Philippoz), Isabel Rohner, Ricardo Rozo, Anna Katharina Scheidegger, Manuel Schmalstieg, Laurent Schmid, Tobias Spichtig, Tassilo Tesche, Julian Thompson, Jean-Thomas Vannotti, Sébastien Verdon|
|Curators|Daniel Suter,Marks Blond Project R.f.z.K,Arthur de Pury,CAN & Massimiliano Baldassarri|
|url|[[le centre d'art neuchâtel|http://bit.ly/bqHKVU]]|
[img(500px,auto)[WHY LOOK AT THINGS UPSDE DOWN|http://bit.ly/dsMniH]]
^^@@bgcolor(#99cccc):photo Djos Janssens@@^^
[img(257px,auto)[article claude lorent|http://bit.ly/gfObrs]]
"WHY LOOK AT THINGS UPSDE DOWN" 7 oktober 2010 at Galerie Martin van Blerk
mechelsesteenweg, 28
2018 antwerpen
[<img(257px+,auto)[http://goo.gl/hzYg]]
|Titre|"Why look at things upside down?"|
|incl. |Dialogist Kantor, Djos Janssens, Annick Nölle, Gauthier Pierson, Marc Rossignol,Olivier Stevenart, Yoann van Parijs|
|Dates|8 octobre au 30 novembre 2010|
|Lieu|Galerie Martin van Blerk mechelsesteenweg, 28|
[img[article claude lorent|http://goo.gl/6URYQ]]
included by DK in [[2011_Vagabondages (Pori, Finland)|2011_Vagabondages (Pori, Finland)]]
[img(400px+,auto)[Foll time a lot by DK|http://bit.ly/lWjGLT]]
[img(350px,auto)[alt_text|http://bit.ly/lk4jtB]]
[img[Admiral Crash|http://bit.ly/k668Ew]]
~~Dialogist-Kantor participation in Vagabondages Group Show - Pori / Finland~~
<html>
<div id="container1"><span style= "font-size: 16pt ; color: fuchsia ; background-color: #FFFFFF ; " > </span></div>
</html>
<script> jQuery("#container1").pwi({
username: 'patacycliste',
maxResults: 15,
thumbSize: 90,
thumbCrop: 1,
mode: 'keyword',
album: '2011_pori',
keyword: 'DKpori2011',
albumTitle: 'Admiral Crash/+Full Time A Lot\ Vagabondages 2011 Pori\'',
showSlideshowLink: false,
showAlbumDescription: true,
});
</script>
https://picasaweb.google.com/105898452618087093313/2011_ISELP#5678690611797776930
https://picasaweb.google.com/105898452618087093313/TYPOSDKDIV#5651086951853074610
^^"Entre pas cher et gratuit" a DK fantasy programmed on sept 22, 2011 @ ISELP, Bruxelles^^
[[VIDEO AVAILABLE HERE|2011_Iselp Entre pas cher et gratuit (video)]]
<<tiddler [[2011_Iselp Entre pas cher et gratuit (video)]]>>
https://picasaweb.google.com/105898452618087093313/2011_ISELP#5659223534115922610
https://picasaweb.google.com/105898452618087093313/2011_ISELP
<<tiddler PicasaJqueryincl>>
^^©photos Daniel Locus^^
<<twyp player video:"[[DK_Iselp|http://www.youtube.com/v/YODpRuNv5ec]]" width:400 height:300 notitle>>
"Entre pas cher et gratuit" by Dialogist-Kantor
réalisation: Emmanuel Toé
© ISELP sept.2011
DIALOGIST KANTOR: NI VELL NI BEL NI BABEL
La pareja de artistas conceptuales que forman Dialogist Kantor surgió hace casi veinte años en el seno de un heterogéneo y ecléctico ambiente artístico de la ciudad de Bruselas donde la evocación y la presencia del espíritu del movimiento Fluxus, el dadaísmo, el subrealismo y el patafisismo no hacían sino crecer, evolucionar y enriquecerse de todas las intuiciones plásticas, objetuales y conceptuales que se abrían paso entre un número de artistas vitalistas, desencantados de las propuestas institucionales y académicas bendecidas, cada vez con más oportunismo o simple cinismo, por las cátedras universitarias, los museos de arte contemporáneo y los críticos de arte autoreferenciándose crípticamente en las previsibles publicaciones especializadas.
Compuesto por la artista visual y fotógrafa Toni Geirlandt (Gante) y por el artista plástico Carlos Montalvo (Avilés), asentado en Bruselas desde muy niño, ambos coincidieron en los mismos ambientes artísticos alternativos y en parecidos postulados estéticos que les permitieron aunar discurso y vivencias personales para convertirse en unos auténticos activistas de la cultura del encuentro y de la colaboración creativa (poesía visual, performance, arte objetual...) tanto en su ciudad, Bruselas, como en otras ciudades del centro y del norte europeos (Gante, Mons, Amberes, Rótterdam, Berlín, Ginebra...). La arriesgada puesta en escena de su obra a partir de elementos cotidianos -insignificantes a los ojos del ciudadano “común”, pero convertidos en fetiche de significación y de implicación perceptiva y emocional en las manos de los dos artistas, demiurgos y maestros de ceremonia de lo nimio, de lo azaroso o de lo aparentemente cotidiano- ha dado como resultado su elección consecutiva en las dos últimas trienales de arte contemporáneo de Luanda (Angola), representando a Bélgica o la más reciente exposición antológica en el museo de arte contemporáneo de Mons (Bélgica).
Con la exposición “Nivel ni Bell ni Babel” que han presentado en la galería Charpa de Valencia Dialogist Kantor será la primera vez que exponen en una galería española, en 1995 protagonizaron un taller-exposición en los cursos de verano de la sede universitaria de Alicante en Cocentaina y en estos momentos gozan de un importante consideración como artistas consolidados, tanto a nivel centroeuropeo como a nivel más internacional, y que tienen muncho que decir en el ámbito del arte conceptual y patafísico de la paradoja y de la participación y alumbramiento del hecho excepcional, singular y creativo.
A partir de elementos encontrados en el centro de la ciudad, muebles, fragmentos de mobiliario desechado, tablas, ventanas incompletas, etc. los dos artistas “patafísicos” o “patacilistas” en relación a sus famosos laboratoires patacyclistes” han construido un espacio simbólico y mental donde los objetos encontrados (les “objets trouvé” de Marcel Duchamp) les sirven de soporte para ejecutar un ejercicio de deconstrucción y de reconstrucción de significado, de referencia, de empatia o de simbolización para ser compartido con el espectador. Han introducido un lenguaje simple, que pertenece al sentido común, como es el de situar el “nivel” del arte, en este caso, a partir de una línea en el espacio vacío de la pared en la que se midieron muchos de los espectadores-participantes en el performance del día de la inauguración, y en la que se fijaba con una ralla la altura de los presentes, con sus nombres, en referencia al nivel que los artistas habían prefijado con una línea. Esta líneas en rojo reaparece pintada en muchos de los objetos amontonados o separados, cual esculturas abstractas, entre el espacio resignificado por los objetos allí expuestos. Ni vel ni bell ni babel nos introduce así en la convicción de qué el arte no es sino una potencial capacidad del indivíduo por inventarse radicalmente la realidad, despojándose enérgicamente de los paradigmas y estereotipos ambientales y culturales que nos ofrece el entorno inmediato, la educación, la cultura, la religión, el lenguaje, los masmédia... y son precisamente algunos individuos los que ejercitan esa capacidad de reinvención llevando su intuición al territorio de la vida, al territorio de la práctica y de la puesta en escena de “esas otras maneras de nombrar a y de actuar en la realidad cotidiana”, sus puestas en escena no son sino la vertebración de un discurso sugerido y denotado por el fruto de su observación “ocurrente” de lo cotidiano, llevando esta observación a la creación “singular” y única de un momento compartido en su taller, en la galería de arte, en un bar, en cualquier lugar donde se ilumina una acción que adquiere significado y que se comparte, la resultante de todo dicho proceso “intangible” puede ser un cartel, un poema, la elaboración de un mural o la inmortalizción de un saludo entre dos manos, congelado en una escayola que lo atrapa.
En definitiva estamos hablando de una puesta en escena objetual, de un discuso de lo efímero e intangible congelado a través d ela mirada “iniciada” y sensible de un tipo de espectador interactivo y predispuesto a dejarse envolver por una artmósfera no común y repleta de guiños hacia la deconstrucción dadaísta y “patrafísica”. La inauguración fue todo un acontecimiento de la “butade” denominada “nivel de perseverancia”.
Josep lluis Peris
[img(400px,auto)[galeria CHARPA/ Dialogist-Kantor|http://bit.ly/hBCji7]]
@@bgcolor(#cccc00):^^Nivell Ni bell Ni Babel / Dialogist-Kantor / Galeria CHARPA, Valencia ( Opening 4 March 2011 )^^@@
<html>
<p class="big"> Galeria Charpa , Tapineria 11 VALENCIA</p>
</html>
https://picasaweb.google.com/105898452618087093313/GaleriaCharpa
<<tiddler PicasaJqueryincl>>
[img(450px,auto)[ha ha ah ah Avelgem|http://bit.ly/kmQNqd]]
<html>
<div id="container1"><span style= "font-size: 16pt ; color: fuchsia ; background-color: #FFFFFF ; " > </span></div>
</html>
<script> jQuery("#container1").pwi({
username: 'patacycliste',
maxResults: 9,
thumbSize: 120,
thumbCrop: 1,
mode: 'keyword',
album: '2011_avelgempori',
keyword: 'avelgem2011',
albumTitle: 'pre-prep pori 2011 \Avelgem (Bel) 2011\'',
showSlideshowLink: false,
showAlbumDescription: true,
});
</script>
https://picasaweb.google.com/105898452618087093313/Multiples#5641944540980642066
https://picasaweb.google.com/105898452618087093313/Multiples#5641944620665827426
https://picasaweb.google.com/105898452618087093313/Multiples#5641944601579359378
https://picasaweb.google.com/105898452618087093313/Multiples#5641944640334202258
@@color(#3399ff):
edition typo sur carte postale découpe maison /50 ex. numérotés@@
<<tiddler PicasaJqueryincl>>
[img[fotos © Daniel Locus|http://bit.ly/iLMFzg]]
~~Ostende 2011 Pistologie Post patacycliste 'OURAGAN'~~
@@bgcolor(#ccffff):~~fotos © Daniel Locus Ostende Ouragan 2011~~@@
https://picasaweb.google.com/105898452618087093313/PISTOLOGIEFULL?authkey=Gv1sRgCM6e2bjGuoHuMg#5703799605204885602
[[QR Code|http://goo.gl/GnpAF.qr]]
[img[tw ouragan|http://goo.gl/ZE4UO]]
more info fb/ http://on.fb.me/hLjHNM
<<tiddler PicasaJqueryincl>>
[img(430px,auto)[alt_text|http://janvirtanen.fi/kulttuuritoimi/taidemuseo/tyopaja/content/images/large/_MG_1452.jpg]]
Pori Museum FINLAND -Vagabondages 2011 (workshop at Pori taidemuseo - photo © Jan virtanen)
''LINK'' ''http://t.co/XR7lZYq ''
[img(430px,auto)[satakunnan kansa|http://bit.ly/iYIIix][http://bit.ly/iYIIix]]
@@color(#ff3333):[[full size|http://bit.ly/iYIIix]]@@
[img(400px,auto)[fotos J.Virtanen|http://bit.ly/kBWYHg]]
~~Pori, Finland 29.04.2011- 06.05.2011© fotos Jan Virtanen http://on.fb.me/lOykCt~~
[img(400px,auto)[alt_text|http://bit.ly/iMB4RR]]
@@bgcolor(#aaaaaa):^^a few days before / boat stockholm - turku^^@@
<<tiddler [[2011_Fool Time A Lot ( Pori / Finland )]]>>
!!SAVAT ATLAS PISTOLOGIE 2012
@@bgcolor(#99ccff):MEETING@@ Monday / Lundi / maandag ''09/04/2012'' 14:00 Zeedijk 10 (Kaffee+) OSTENDE
''__train schedule__ / Bruxelles-midi 12:02 - Ostende 13:18''
https://picasaweb.google.com/105898452618087093313/2012_pistologie?authkey=Gv1sRgCLT80dfLnYz2fg#5726053596801925730
<<tiddler PicasaJqueryincl>>
/***
|''Name:''|AccordionMenuPlugin|
|''Description:''|Turn an unordered list into an accordion style menu|
|''Author:''|Saq Imtiaz ( lewcid@gmail.com )|
|''Source:''|http://tw.lewcid.org/#AccordionMenuPlugin|
|''Code Repository:''|http://tw.lewcid.org/svn/plugins|
|''Version:''|2.0|
|''Date:''|03/11/2007|
|''License:''|[[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]]|
|''~CoreVersion:''|2.2.5|
!!Usage:
* put {{{<<accordion>>}}} on the line after your unordered list
!!Customizing:
* customize the css via the shadow tiddler StyleSheetAccordionMenuPlugin
* or give the list a custom class by passing the classes as parameters to the macro.
** Eg: {{{<<accordion ClassName1 ClassName2>>}}}
!!Examples:
*[[AccordionMenuPluginDemo]]
***/
// /%
//!BEGIN-PLUGIN-CODE
config.macros.accordion={
dropchar : " \u00BB",
handler : function(place,macroName,params,wikifier,paramString,tiddler){
list = findRelated(place.lastChild,"UL","tagName","previousSibling");
if (!list)
return;
addClass(list,"accordion");
if (params.length){
addClass(list,paramString);
}
this.fixLinks(list.childNodes);
},
fixLinks : function(els){
for (var i=0; i<els.length; i++){
if(els[i].tagName.toLowerCase()=="li"){
var link = findRelated(els[i].firstChild,"A","tagName","nextSibling");
if(!link){
var ih = els[i].firstChild.data;
els[i].removeChild(els[i].firstChild);
link = createTiddlyElement(null,"a",null,null,ih+this.dropchar,{href:"javascript:;"});
els[i].insertBefore(link,els[i].firstChild);
}
else{
link.firstChild.data = link.firstChild.data + this.dropchar;
removeClass(link,"tiddlyLinkNonExisting");
}
link.onclick = this.show;
}
}
},
show : function(e){
var list = this.parentNode.parentNode;
var els = list.childNodes;
for (var i=0; i<els.length; i++){
removeClass(els[i],"accordion-active");
}
addClass(this.parentNode,"accordion-active");
}
};
config.shadowTiddlers["StyleSheetAccordionMenuPlugin"] = "/*{{{*/\n"+
"ul.accordion, ul.accordion li, ul.accordion li ul {margin:0; padding:0; list-style-type:none;text-align:left;}\n"+
"ul.accordion li ul {display:none;}\n"+
"ul.accordion li.accordion-active ul {display:block;}\n"+
"\n"+
"ul.accordion li.accordion-active a {cursor:default;}\n"+
"ul.accordion li.accordion-active ul li a{cursor:pointer;}\n"+
"\n"+
"ul.accordion a {display:block; padding:0.5em;}\n"+
"ul.accordion li a.tiddlyLink, ul.accordion li a.tiddlyLinkNonExisting, ul.accordion li a {font-weight:bold;}\n"+
"ul.accordion li a {background:#0066aa; color:#FFF; border-bottom:1px solid #fff;}\n"+
"ul.accordion li.accordion-active a, ul.accordion li a:hover {background:#00558F;color:#FFF;}\n"+
"\n"+
"ul.accordion li ul li{display:inline-block;overflow:hidden;}\n"+
"ul.accordion li.accordion-active ul li {background:#eff3fa; color:#000; padding:0em;}\n"+
"ul.accordion li.accordion-active ul li div {padding:1em 1.5em; background:#eff3fa;}\n"+
"ul.accordion li.accordion-active ul a{background:#eff3fa; color:#000; padding:0.5em 0.5em 0.5em 1.0em;border:none;}\n"+
"ul.accordion li.accordion-active ul a:hover {background:#e0e8f5; color:#000;}\n" +
"/*}}}*/";
store.addNotification("StyleSheetAccordionMenuPlugin",refreshStyles);
//!END-PLUGIN-CODE
// %/
https://picasaweb.google.com/105898452618087093313/AFFICHESDKDIV?authkey=Gv1sRgCMTY1vbhmsu0qQE
<<tiddler PicasaJqueryincl>>
https://picasaweb.google.com/105898452618087093313/BDPdiv#5701597288771265202
<<tiddler PicasaJqueryincl>>
https://picasaweb.google.com/105898452618087093313/BDP02ElegancePatriceVerhofstadt#5701596657496684466
https://picasaweb.google.com/105898452618087093313/BDP02ElegancePatriceVerhofstadt
<<tiddler PicasaJqueryincl>>
https://picasaweb.google.com/105898452618087093313/BDPdiv#5706338210835255554
<<tiddler PicasaJqueryincl>>
https://picasaweb.google.com/105898452618087093313/BDPdiv?authkey=Gv1sRgCLmty6CZz7ryrgE#5662188830270890290
First AW solo at Bureau du Port / Bruxelles in oct. 2000
<<tiddler PicasaJqueryincl>>
https://picasaweb.google.com/105898452618087093313/BDPdiv#5706381984462904610
^^~BDP11 "//Personel, ingredien, horaire, autre//", Permance Maison du Peuple, 2002^^
Le Bureau du Port transformé en agence de Recrutement du futur exercice de groupe [["No More Patacycliste Anymore / Maison du Peuple"|2002_No More Patacycliste]]. Machines à écrire, tableau noir, table, nappes, bières, musique.
<<tiddler PicasaJqueryincl>>
https://picasaweb.google.com/105898452618087093313/BDPdiv#5706340770772868802
^^~BDP12 « LES ARCHIVES PERDUES DE L’UNIVERS AMNESIQUE ILLUSTRE » Luc Van Tichel, septembre 2002^^
<<tiddler PicasaJqueryincl>>
https://picasaweb.google.com/105898452618087093313/BDPprints#5701583381400782562
Aujourd'hui il est très difficile de trouver un croissant satisfaisant deux règles, l'une -ou lune- avoir la forme d'un croissant, deux -ou l'autre- gout et texture. Pour cette raison là nous n'avons pas mangé de croissant pendant l'exposition de Andrew Webb Gentleman of Manners. Ostia ! Une demi-lune pour l'un(e) et l'autre. Il nous encercle avec ses jeux de mots coupés en deux, a deux il faut toujours un x, et l'on encercle le x pour montrer un point sur un plan , un plan de ville par exemple pour trouver la rue du Croissant, Halvemaanstraat à Forest. Dans la forest on trouve des arbres, il y en a trois ,three en anglais, des x-mas trees dans la forest. The needless forest puisque un des arbres de x-mas was chopped and the "apprentice piece II " because ~Dialogist-Kantor and AW made the same action , without knowing it from each other, by putting the needles of the x-mas trees in bottles. We find them in the workshop near the exhibition of modern art as well the "erection"piece ( de la pine sans aucun doute) of Rufus, which unfortunately was stolen, and as Rufus formely drew a red line on the wall in the exhibition area as a sign to find back his work of art, AW placed a cross on the same place. Une croix pour pointer l'endroit, une pointe, a pin, un arbre de pin, une aiguille de pin, une aiguille comme les drawning-pins ( duimspijkers) pour accrocher les dessins sur les murs, des bouteilles pleines d'aiguilles de pin , une bouteilles pleine de drawning pins. Et maintenant allons ouvrir une bonne bouteille à la santé de Andrew, dont on croise le drapeau avec la croix de St.Andrew qui pend à l'entrée . Oh! You're drunk ? No i'm not crossed.
https://picasaweb.google.com/105898452618087093313/BDP29AWWaxing2005
<<tiddler PicasaJqueryincl>>
[img(500px+,auto)[alt_text|http://bit.ly/cNqAfv]]
[img(500px+,auto)[alt_text|http://bit.ly/acQ11N]]
'The ~London-Galleries-Therapy', Kurt Ryslavy exhibition Bureau du Port, Brussels, 2005
‘True Marchand du Vin / The ~London-Galleries-Therapy’, prospectus / brochure, Bureau du Port / De Wijn / Le Vin, Brussels, 2005,
preface, ‘Woodland, Mountain, Desert, Arctic and Marine Geology, Organic, Climate and Weather Merchandise, Services and Personnel’, ©, Copyright, Douglas Park, 2005 (also, 15 of the 45 photographic credits)
http://www.ryslavy.com/textsforGRfr01/textsforGRfr01textUber/Douglas_Park.html
served as, “introductory talk”, Kurt Ryslavy, 'The ~London-Galleries-Therapy' exhibition reception / event, Bureau du Port, Brussels, 2005
'The ~London-Galleries-Therapy', DVD video, Toni Geirlandt and Jos de Gruyter, Brussels, 2005 - ‘07
From [[Douglas Park / Facebook|http://on.fb.me/8XtVae]]
https://picasaweb.google.com/105898452618087093313/BDP30Ryslavy2005
<<tiddler PicasaJqueryincl>>
Bureau du Port 32/ Piotr Osuszkiewicz "Stringomania" in may 2006.
More documentation on [[Piotr Osuszkiewicz website |http://www.mediamatik.be/labo/artpo/interactive_installation_03.php]]
{{cola{
[img(200px+,auto)[alt_text|http://goo.gl/FNRyp]]
}}}{{colb{
<html><iframe width=250px height=250px frameborder=0 src=http://www.mediamatik.be/labo/artpo/instinter03.swf></iframe></html>
}}}
{{clearx{}}}
[img(500px,auto)[Bureau du Port Piotr Osuszkiewicz "Stringomania" in may 2006|http://i.min.us/ickmuS.jpg]]
@@bgcolor(#ccffff):^^© Piotr Osuszkiewicz^^@@
[img[alt_text|http://goo.gl/nEL2Q]]
[img[alt_text|http://bit.ly/e3GzzK]]
https://picasaweb.google.com/105898452618087093313/BDPdiv#5572861888260524898
<<tiddler PicasaJqueryincl>>
[img(430px,auto)[alt_text|http://goo.gl/DGJij]]
~~Oberbaumbrücke BERLIN 2011 / @@bgcolor(#ccc):schwierige Passage mit dem Fahrrad. zwei junge Männer auf Liegestuhl. Straße geschnitten und ein grauer Himmel. sind 30 Sekunden für das Bild. Görlitzer Park besuchen, kommen wir @@/ passage difficile à vélo, deux jeunes gens sur transat chemin coupé puis un ciel gris , reste 30 sec pour la photo rendez-vous Görlitzer Park on arrive T TM CC~~
<<breadcrumbs [[<html><hr></html>]] [[<br>]]>>
<<cloud systemConfig excludeLists Script macros pluginInfo Transclusion excludeSearch CSS Stylesheet tests PWI >>
/***
|Name|BreadcrumbsPlugin|
|Author|Eric Shulman|
|Source|http://www.TiddlyTools.com/#BreadcrumbsPlugin|
|Documentation|http://www.TiddlyTools.com/#BreadcrumbsPluginInfo|
|Version|2.1.2|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|list/jump to tiddlers viewed during this session plus "back" button/macro|
This plugin provides a list of links to all tiddlers opened during the session, creating a "trail of breadcrumbs" from one tiddler to the next, allowing you to quickly navigate to any previously viewed tiddler, or select 'home' to reset the display to the initial set of tiddlers that were open at the start of the session (i.e., when the document was loaded into the browser).
!!!!!Documentation
<<<
see [[BreadcrumbsPluginInfo]]
<<<
!!!!!Configuration
<<<
<<option chkCreateDefaultBreadcrumbs>> automatically create breadcrumbs display (if needed)
<<option chkShowBreadcrumbs>> show/hide breadcrumbs display
<<option chkReorderBreadcrumbs>> re-order breadcrumbs when visiting a previously viewed tiddler
<<option chkBreadcrumbsHideHomeLink>> omit 'Home' link from breadcrumbs display
<<option chkBreadcrumbsSave>> prompt to save breadcrumbs when 'Home' link is pressed
<<option chkShowStartupBreadcrumbs>> show breadcrumbs for 'startup' tiddlers
<<option chkBreadcrumbsReverse>> show breadcrumbs in reverse order (most recent first)
<<option chkBreadcrumbsLimit>> limit breadcrumbs display to {{twochar{<<option txtBreadcrumbsLimit>>}}} items
<<option chkBreadcrumbsLimitOpenTiddlers>> limit open tiddlers to {{twochar{<<option txtBreadcrumbsLimitOpenTiddlers>>}}} items
<<<
!!!!!Revisions
<<<
2009.10.19 [2.1.2] code reduction
| Please see [[BreadcrumbsPluginInfo]] for previous revision details |
2006.02.01 [1.0.0] initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.BreadcrumbsPlugin= {major: 2, minor: 1, revision: 2, date: new Date(2009,10,19)};
var defaults={
chkShowBreadcrumbs: true,
chkReorderBreadcrumbs: true,
chkCreateDefaultBreadcrumbs: true,
chkShowStartupBreadcrumbs: true,
chkBreadcrumbsReverse: false,
chkBreadcrumbsLimit: true,
txtBreadcrumbsLimit: 5,
chkBreadcrumbsLimitOpenTiddlers:false,
txtBreadcrumbsLimitOpenTiddlers:3,
chkBreadcrumbsHideHomeLink: true,
chkBreadcrumbsSave: false,
txtBreadcrumbsHomeSeparator: ' | ',
txtBreadcrumbsCrumbSeparator: ' > '
};
for (var id in defaults) if (config.options[id]===undefined)
config.options[id]=defaults[id];
config.macros.breadcrumbs = {
crumbs: [], // the list of current breadcrumbs
askMsg: "Save current breadcrumbs before clearing?\n"
+"Press OK to save, or CANCEL to continue without saving.",
saveMsg: 'Enter the name of a tiddler in which to save the current breadcrumbs',
saveTitle: 'SavedBreadcrumbs',
handler: function(place,macroName,params,wikifier,paramString,tiddler) {
var area=createTiddlyElement(place,"span",null,"breadCrumbs",null);
area.setAttribute("homeSep",params[0]||config.options.txtBreadcrumbsHomeSeparator);
area.setAttribute("crumbSep",params[1]||config.options.txtBreadcrumbsCrumbSeparator);
this.render(area);
},
add: function (title) {
var thisCrumb = title;
var ind = this.crumbs.indexOf(thisCrumb);
if(ind === -1)
this.crumbs.push(thisCrumb);
else if (config.options.chkReorderBreadcrumbs)
this.crumbs.push(this.crumbs.splice(ind,1)[0]); // reorder crumbs
else
this.crumbs=this.crumbs.slice(0,ind+1); // trim crumbs
if (config.options.chkBreadcrumbsLimitOpenTiddlers)
this.limitOpenTiddlers();
this.refresh();
return false;
},
getAreas: function() {
var crumbAreas=[];
// find all DIVs with classname=="breadCrumbs"
var all=document.getElementsByTagName("*");
for (var i=0; i<all.length; i++)
try{ if (hasClass(all[i],"breadCrumbs")) crumbAreas.push(all[i]); } catch(e) {;}
// or, find single DIV w/fixed ID (backward compatibility)
var byID=document.getElementById("breadCrumbs")
if (byID && !hasClass(byID,"breadCrumbs")) crumbAreas.push(byID);
if (!crumbAreas.length && config.options.chkCreateDefaultBreadcrumbs) {
// no crumbs display... create one
var defaultArea = createTiddlyElement(null,"span",null,"breadCrumbs",null);
defaultArea.style.display= "none";
var targetArea= document.getElementById("tiddlerDisplay");
targetArea.parentNode.insertBefore(defaultArea,targetArea);
crumbAreas.push(defaultArea);
}
return crumbAreas;
},
refresh: function() {
var crumbAreas=this.getAreas();
for (var i=0; i<crumbAreas.length; i++) {
crumbAreas[i].style.display = config.options.chkShowBreadcrumbs?"block":"none";
removeChildren(crumbAreas[i]);
this.render(crumbAreas[i]);
}
},
render: function(here) {
var co=config.options; var out=""
if (!co.chkBreadcrumbsHideHomeLink) {
createTiddlyButton(here,"Home",null,this.home,"tiddlyLink tiddlyLinkExisting");
out+=here.getAttribute("homeSep")||config.options.txtBreadcrumbsHomeSeparator;
}
for (c=0; c<this.crumbs.length; c++) // remove non-existing tiddlers from crumbs
if (!store.tiddlerExists(this.crumbs[c]) && !store.isShadowTiddler(this.crumbs[c]))
this.crumbs.splice(c,1);
var count=this.crumbs.length;
if (co.chkBreadcrumbsLimit && co.txtBreadcrumbsLimit<count) count=co.txtBreadcrumbsLimit;
var list=[];
for (c=this.crumbs.length-count; c<this.crumbs.length; c++) list.push('[['+this.crumbs[c]+']]');
if (co.chkBreadcrumbsReverse) list.reverse();
out+=list.join(here.getAttribute("crumbSep")||config.options.txtBreadcrumbsCrumbSeparator);
wikify(out,here);
},
home: function() {
var cmb=config.macros.breadcrumbs;
if (config.options.chkBreadcrumbsSave && confirm(cmb.askMsg)) cmb.saveCrumbs();
story.closeAllTiddlers(); restart();
cmb.crumbs = []; var crumbAreas=cmb.getAreas();
for (var i=0; i<crumbAreas.length; i++) crumbAreas[i].style.display = "none";
return false;
},
saveCrumbs: function() {
var tid=prompt(this.saveMsg,this.saveTitle); if (!tid||!tid.length) return; // cancelled by user
var t=store.getTiddler(tid);
if(t && !confirm(config.messages.overwriteWarning.format([tid]))) return;
var who=config.options.txtUserName;
var when=new Date();
var text='[['+this.crumbs.join(']]\n[[')+']]';
var tags=t?t.tags:[]; tags.pushUnique('story');
var fields=t?t.fields:{};
store.saveTiddler(tid,tid,text,who,when,tags,fields);
story.displayTiddler(null,tid);
story.refreshTiddler(tid,null,true);
displayMessage(tid+' has been '+(t?'updated':'created'));
},
limitOpenTiddlers: function() {
var limit=config.options.txtBreadcrumbsLimitOpenTiddlers; if (limit<1) limit=1;
for (c=this.crumbs.length-1; c>=0; c--) {
var tid=this.crumbs[c];
var elem=document.getElementById(story.idPrefix+tid);
if (elem) { // tiddler is displayed
if (limit <=0) { // display limit has been reached
if (elem.getAttribute("dirty")=="true") { // tiddler is being edited
var msg= "'"+tid+"' is currently being edited.\n\n"
+"Press OK to save and close this tiddler\n"
+"or press Cancel to leave it opened";
if (confirm(msg)) {
story.saveTiddler(tid);
story.closeTiddler(tid);
}
}
else story.closeTiddler(this.crumbs[c]);
}
limit--;
}
}
}
};
//}}}
// // PreviousTiddler ('back') command and macro
//{{{
config.commands.previousTiddler = {
text: 'back',
tooltip: 'view the previous tiddler',
handler: function(event,src,title) {
var here=story.findContainingTiddler(src); if (!here) return;
var crumbs=config.macros.breadcrumbs.crumbs;
if (crumbs.length<2) config.macros.breadcrumbs.home();
else story.displayTiddler(here,crumbs[crumbs.length-2]);
return false;
}
};
config.macros.previousTiddler= {
label: 'back',
prompt: 'view the previous tiddler',
handler: function(place,macroName,params,wikifier,paramString,tiddler) {
var label=params.shift(); if (!label) label=this.label;
var prompt=params.shift(); if (!prompt) prompt=this.prompt;
createTiddlyButton(place,label,prompt,function(ev){
return config.commands.previousTiddler.handler(ev,this)
});
}
}
//}}}
// // HIJACKS
//{{{
// update crumbs when a tiddler is displayed
if (Story.prototype.breadCrumbs_coreDisplayTiddler==undefined)
Story.prototype.breadCrumbs_coreDisplayTiddler=Story.prototype.displayTiddler;
Story.prototype.displayTiddler = function(srcElement,tiddler) {
var title=(tiddler instanceof Tiddler)?tiddler.title:tiddler;
this.breadCrumbs_coreDisplayTiddler.apply(this,arguments);
if (!startingUp || config.options.chkShowStartupBreadcrumbs)
config.macros.breadcrumbs.add(title);
}
// update crumbs when a tiddler is deleted
if (TiddlyWiki.prototype.breadCrumbs_coreRemoveTiddler==undefined)
TiddlyWiki.prototype.breadCrumbs_coreRemoveTiddler=TiddlyWiki.prototype.removeTiddler;
TiddlyWiki.prototype.removeTiddler= function() {
this.breadCrumbs_coreRemoveTiddler.apply(this,arguments);
config.macros.breadcrumbs.refresh();
}
//}}}
/***
|Name|BreadcrumbsPluginInfo|
|Author|Eric Shulman|
|Source|http://www.TiddlyTools.com/#BreadcrumbsPlugin|
|Documentation|http://www.TiddlyTools.com/#BreadcrumbsPluginInfo|
|Version|2.1.2|
|License|[[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Description|Documentation for BreadcrumbsPlugin|
This plugin provides a list of links to all tiddlers opened during the session, creating a "trail of breadcrumbs" from one tiddler to the next, allowing you to quickly navigate to any previously viewed tiddler, or select 'home' to reset the display to the initial set of tiddlers that were open at the start of the session (i.e., when the document was loaded into the browser).
!!!!!Usage
<<<
syntax:
{{{
<<breadcrumbs homeSeparator crumbSeparator>>
}}}
By default, the breadcrumbs are displayed as a continuous, //horizontal// word-wrapped line of text, using default character sequences for ''homeSeparator'' (" | ") and ''crumbSeparator'' (" > "). The //optional// ''homeSeparator'' and ''crumbSeparator'' macro parameters allow you to specify alternative separators. For example, to display the breadcrumbs //vertically// (in a stack, rather than a row), set the separator values to use {{{[[<br>]]}}}... and, to display a horizontal line as the home separator, use {{{[[<html><hr></html>]]}}}.
<<<
!!!!!Examples:
<<<
{{{
<<breadcrumbs>>
}}}
<<breadcrumbs>>
{{{
<<breadcrumbs [[<html><hr></html>]] [[<br>]]>>
}}}
<<breadcrumbs [[<html><hr></html>]] [[<br>]]>>
<<<
!!!!!Customization
<<<
Using CSS and a few of the plugin configuration options (see below), you can make the breadcrumbs display resemble browser tabs by adding the following to your [[StyleSheet]]:
{{{
.breadCrumbs { border-bottom:1px solid; }
.breadCrumbs a {
border: 1px solid; padding: 0px 1em;
-moz-border-radius-topleft:.5em; -moz-border-radius-topright:.5em;
-webkit-border-top-left-radius:.5em; -webkit-border-top-right-radius:.5em;
}
}}}
and this in [[ConfigTweaks]] (tagged with systemConfig, of course):
{{{
config.options.chkShowStartupBreadcrumbs=true;
config.options.chkBreadcrumbsLimitOpenTiddlers=true;
config.options.txtBreadcrumbsLimitOpenTiddlers=1;
config.macros.breadcrumbs.homeSeparator=" ";
config.macros.breadcrumbs.crumbSeparator=" ";
}}}
<<<
!!!!!Configuration
<<<
__''display placement:''__
<<option chkCreateDefaultBreadcrumbs>> automatically create breadcrumbs display (if needed)
{{{<<option chkCreateDefaultBreadcrumbs>>}}}
>By default, the plugin automatically creates the "breadCrumbs" display element at the top of the story column, just above the tiddlerDisplay area. To manually control the display and placement of the breadcrumbs display, you can define a DIV with class="breadCrumbs" in a custom [[PageTemplate]] or embed the {{{<<breadcrumbs>>}}} macro in specific tiddler content.
>
>For example, to add the breadcrumbs below the mainMenu, change this:
{{{
<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>
}}}
>to:
{{{
<div id='mainMenu'>
<div refresh='content' tiddler='MainMenu'></div>
<div id='breadCrumbs' class='breadCrumbs'></div>
</div>
}}}
>You can also block automatic creation of the breadcrumbs display by setting
{{{
config.options.chkCreateDefaultBreadcrumbs=false;
}}}
>in a [[CookieJar]]/[[ConfigTweaks]] plugin tiddler.
__''other settings:''__
<<option chkShowBreadcrumbs>> show/hide breadcrumbs display
{{{<<option chkShowBreadcrumbs>>}}}
>This checkbox toggles the visibility of the breadcrumbs display. However, the display is not updated until the next crumb is added (or a previous crumb is clicked on). For immediate effect, the [[ToggleBreadcrumbs]] script uses [[InlineJavascriptPlugin]] to synchronize the checkbox setting and the breadcrumbs display.
<<option chkReorderBreadcrumbs>> re-order breadcrumbs when visiting a previously viewed tiddler
{{{<<option chkReorderBreadcrumbs>>}}}
>When visiting a previously viewed tiddler, the title of the most-recently displayed tiddler is simply moved to the end of the list and individual breadcrumbs are not removed from the list unless the underlying tiddler is deleted. When ''re-ordering'' is disabled, the breadcrumbs list is ''trimmed'' so that all crumbs following that tiddler are removed from the list.
<<option chkBreadcrumbsHideHomeLink>> omit 'Home' link from breadcrumbs display
{{{<<option chkBreadcrumbsHideHomeLink>>}}}
>Enabling this option suppresses the automatic display of the "Home" link (and home separator). To manually add the home link elsewhere in your document, use the following HTML:
{{{
<html><a href="javascript:;" onclick="config.macros.breadcrumbs.home()">home</a></html>
}}}
<<option chkBreadcrumbsSave>> prompt to save breadcrumbs when 'Home' link is pressed
{{{<<option chkBreadcrumbsSave>>}}}
>Whenever you press the 'home' button, you can be prompted to save the current breadcrumbs in a tiddler as a space-separated list of tiddler links (default title="SavedBreadcrumbs").
<<option chkShowStartupBreadcrumbs>> show breadcrumbs for 'startup' tiddlers
{{{<<option chkShowStartupBreadcrumbs>>}}}
>Breadcrumbs are usually only added for tiddlers that are opened after the document has been loaded, and not for tiddlers displayed during initial startup (e.g., [[DefaultTiddlers]]). Enabling this option displays breadcrumbs for all viewed tiddlers, regardless of when they are opened.
<<option chkBreadcrumbsReverse>> show breadcrumbs in reverse order
{{{<<option chkBreadcrumbsReverse>>}}}
>As tiddlers are displayed, breadcrumbs are usually added to the //end// of the list. Enabling this option displays breadcrumbs in reverse order, so that the most recently visited tiddlers are listed first.
<<option chkBreadcrumbsLimit>> limit breadcrumbs display to {{twochar{<<option txtBreadcrumbsLimit>>}}} items
{{{<<option chkBreadcrumbsLimit>>}}} and {{{<<option txtBreadcrumbsLimit>>}}}
>By default, breadcrumbs are displayed for all tiddlers that have been visited (unless the list is being 'trimmed' by disabling the chkReorderBreadcrumbs option above). Enabling this option limits the display of the list to a maximum specified number of breadcrumbs.
<<option chkBreadcrumbsLimitOpenTiddlers>> limit open tiddlers to {{twochar{<<option txtBreadcrumbsLimitOpenTiddlers>>}}} items
{{{<<option chkBreadcrumbsLimitOpenTiddlers>>}}} and {{{<<option txtBreadcrumbsLimitOpenTiddlers>>}}}
>By default, tiddlers remain open (e.g., displayed in the story column) until you explicitly close them. When this option is enabled, only the most recently opened tiddlers will remain open: ''any tiddlers in excess of the specified limit are automatically closed.'' //Note: for 'data safety', if a tiddler is being edited, you will be asked for permission to "save-and-close" that tiddler or leave it open (even if that would exceed the specified limit).//
<<<
!!!!!Revisions
<<<
2009.10.19 2.1.2 code reduction
2009.03.22 2.1.0 added 'save breadcrumbs to tiddler' feature
2008.05.01 2.0.0 added 'limit open tiddlers' feature (with safety check for tiddler in edit mode)
2008.04.06 1.9.1 corrected 'limit' logic so that //last// N crumbs are shown instead of //first// N crumbs. Also, added chkBreadcrumbsHideHomeLink
2008.04.04 1.9.0 added chkBreadcrumbsReverse and chk/txtBreadcrumbsLimit
2008.03.29 1.8.4 in displayTiddler(), get title from tiddler object (if needed). Fixes errors caused when calling function passes a tiddler *object* instead of a tiddler *title*
2008.03.24 1.8.3 include shadow tiddlers in breadcrumbs list. Also changed settings so that "reordering" breadcrumbs is the default, instead of "trimming" the list
2007.12.04 [*.*.*] update for TW2.3.0: replaced deprecated core functions, regexps, and macros
2007.10.26 1.8.2 documentation cleanup
2007.10.18 1.8.1 in GetAreas(), use try/catch to avoid "Bad NPObject as private data" fatal error caused when embedded QuickTime player element is accessed by hasClass() function.
2007.10.02 1.8.0 major documentation and code cleanup. Moved config.breadCrumbs.* to config.macros.breadcrumbs.* to consolidate objects. Also, fixed homeSeparator and crumbSeparator default handling.
2007.10.02 1.7.0 added config.options.chkShowStartupBreadcrumbs option
2007.09.16 1.6.1 in getAreas(), removed errant use of 'place' (was causing fatal error when creating default breadcrumbs display element). Also, added chkCreateDefaultBreadcrumbs configuration setting to enable/disable automatic creation of a default breadcrumbs display.
2007.09.16 1.6.0 re-wrote refresh() to enable multiple display instances, by finding elements with "breadCrumbs" classname. Fallback to fixed ID (="breadCrumbs") is still used for backward-compatibility. move rendering code from refresh() to separate render() function, and added definition for {{{<<breadCrumbs>>}}} macro to support embedding breadcrumbs displays in tiddler content.
2007.09.15 [1.5.9.1] updated documentation
2007.09.15 1.5.9 defined homeSeparator (" | ") and crumbSeparator (" > ") as object properties so that they can be redefined as desired for different layouts (e.g., using 'newline' for the crumbSeparator will arrange crumbs in a column rather than a row.
2007.06.21 [1.5.8.1] in home(), return false to prevent IE from attempting to navigate away...
2007.05.26 1.5.8 added support for {{{<<option chkReorderBreadcrumbs>>}}} to toggle trim vs. re-order behavior when visiting previously viewed tiddlers
2007.05.25 1.5.7 added support for {{{<<option chkShowBreadcrumbs>>}}} to toggle //display// of breadcrumbs
2007.05.24 1.5.6 in refresh(), remove non-existing tiddler titles from crumb list. Also, hijack removeTiddler() so crumbs can be updated after tiddler is deleted.
2007.04.11 1.5.5 added optional params to previousTiddler macro handler() to allow alternative label and tooltip text (instead of default "back")
2007.03.02 1.5.4 in refresh(), for TW2.2, look for "storyDisplay" instead of "tiddlerDisplay" but keep fallback to "tiddlerDisplay" for TW2.1 or earlier
2007.02.24 1.5.3 changed from hijack of onClickTiddlerLink to hijack of displayTiddler() so that ALL displayed tiddlers are recorded in the crumbs, including programmatically displayed tiddlers opened by macros, scripts, etc., (such as [[GotoPlugin]], among many others) in addition to those opened by clicks on links.
2007.02.24 [1.5.2.0] eliminated global space clutter by moving function and data declarations so they are contained inside config.breadCrumbs object.
2007.02.06 1.5.1 added "previousTiddler" macro (for use in sidebar)
2007.02.05 1.5.0 added "previousTiddler" toolbar command (aka, "back")
2006.08.04 [1.4.0.1] change spaces to tabs
2006.08.04 1.4.0 modified from 1.4.0 distro: in refresh(), set {{{display:none/block}}} instead of {{{visibility:hidden/visible}}}. In home(), check for valid crumbArea before setting style.
2006.08.02 1.4.0 Fixed bug, the redefined onClickTiddlerLink_orig_breadCrumbs works incorrectly on IE
2006.07.20 1.3.0 Runs compatibly with TW 2.1.0 (rev #403+)
2006.02.07 1.2.0 change global array breadCrumbs to config.breadCrumbs by Eric's suggestion
2006.02.04 1.1.0 JSLint checked
2006.02.01 1.0.0 initial release
<<<
https://picasaweb.google.com/105898452618087093313/BDPprints
<<tiddler PicasaJqueryincl>>
https://picasaweb.google.com/105898452618087093313/BDPCOMPLET?authkey=Gv1sRgCPWDuv-p1OLMOA#5706329520768844930 ^^Luc Van Tichel "//LES ARCHIVES PERDUES DE L’UNIVERS AMNESIQUE ILLUSTRE//", BDP 12, septembre 2002^^
<<tiddler PicasaJqueryincl>>
<<forEachTiddler
where
'tiddler.tags.contains("HistoriDKfull")'
sortBy
'tiddler.title.toUpperCase()'
write '" [["+tiddler.title+" ]] \"view ["+tiddler.title+"]\" [["+tiddler.title+"]] "'
begin '"<<tabs txtMyAutoTab "'
end '">"+">"'
none '"//No tiddler tagged with \"HistoriDK\"//"'
>>
/*{{{*/
/*
ColorBox Core Style:
The following CSS is consistent between example themes and should not be altered.
*/
#colorbox, #cboxOverlay, #cboxWrapper{position:absolute; top:0; left:0; z-index:9999; overflow:hidden;}
#cboxOverlay{position:fixed; width:100%; height:100%;}
#cboxMiddleLeft, #cboxBottomLeft{clear:left;}
#cboxContent{position:relative;}
#cboxLoadedContent{overflow:auto;}
#cboxTitle{margin:0;}
#cboxLoadingOverlay, #cboxLoadingGraphic{position:absolute; top:0; left:0; width:100%;}
#cboxPrevious, #cboxNext, #cboxClose, #cboxSlideshow{cursor:pointer;}
.cboxPhoto{float:left; margin:auto; border:0; display:block;}
.cboxIframe{width:100%; height:100%; display:block; border:0;}
/*
User Style:
Change the following styles to modify the appearance of ColorBox. They are
ordered & tabbed in a way that represents the nesting of the generated HTML.
*/
#cboxOverlay{background:#aaa;}
#colorbox{}
#cboxContent{margin-top:32px; overflow:visible;}
.cboxIframe{background:#fff;}
#cboxError{padding:50px; border:1px solid #ccc;}
#cboxLoadedContent{background:#000; padding:1px;}
#cboxLoadingGraphic{background:url(http://museum.99k.org/colorbox/images/loading.gif) no-repeat center center;}
#cboxLoadingOverlay{background:#000;}
#cboxTitle{position:absolute; top:-22px; left:0; color:#000;}
#cboxCurrent{position:absolute; top:-22px; right:205px; text-indent:-9999px;}
#cboxSlideshow, #cboxPrevious, #cboxNext, #cboxClose{text-indent:-9999px; width:20px; height:20px; position:absolute; top:-20px; background:url(http://museum.99k.org/colorbox/images/controls.png) no-repeat 0 0;}
#cboxPrevious{background-position:0px 0px; right:44px;}
#cboxPrevious:hover{background-position:0px -25px;}
#cboxNext{background-position:-25px 0px; right:22px;}
#cboxNext:hover{background-position:-25px -25px;}
#cboxClose{background-position:-50px 0px; right:0;}
#cboxClose:hover{background-position:-50px -25px;}
.cboxSlideshow_on #cboxPrevious, .cboxSlideshow_off #cboxPrevious{right:66px;}
.cboxSlideshow_on #cboxSlideshow{background-position:-75px -25px; right:44px;}
.cboxSlideshow_on #cboxSlideshow:hover{background-position:-100px -25px;}
.cboxSlideshow_off #cboxSlideshow{background-position:-100px 0px; right:44px;}
.cboxSlideshow_off #cboxSlideshow:hover{background-position:-75px -25px;}
/*}}}*/
<script>
jQuery(".iframe").colorbox({iframe:true, width:"75%", height:"75%"});
</script>
/*{{{*/
Background: #FFF
Foreground: #000
PrimaryPale: #FFF
PrimaryLight: #FFF
PrimaryMid: #000
PrimaryDark: #000
SecondaryPale: #FFF
SecondaryLight: #FFF
SecondaryMid: #000
SecondaryDark: #000
TertiaryPale: #FFF
TertiaryLight: #FFF
TertiaryMid: #000
TertiaryDark: #000
Error: #b3ff80
/*}}}*/
http://coloredlinks.tiddlyspot.com/#Welcome
<<tiddler Show with: {{
var f=true,v,s='',t,ti,ts=store.getTaggedTiddlers('ColoredLinksLegacy');
for(t=0;t<ts.length;t++){
ti=ts[t].title;
v=store.getTiddlerText(ti+'::Version');
s+=(f?'':'\n')+'* [['+v+'|'+ti+']]';
f=false;
}
ti="ColoredLinksPlugin";
s+=(f?'':'\n')+'*[['+store.getTiddlerText(ti+'::Version')+'|'+ti+']]';
s;}}>>
/***
|''Name''|ColoredLinksPlugin|
|''Description''|adds color to tiddlyLinks depending on the tag assigned to the corresponding tiddler|
|''Version''|1.0.3 (2010-09-30)|
|''Type''|plugin|
|''Author''|[[TobiasBeer]]|
|''Source''|http://ColoredLinks.tiddlyspot.com|
|''Documentation''|http://ColoredLinks.tiddlyspot.com/#Welcome|
|''License''|[[Creative Commons Attribution-Share Alike 3.0|http://creativecommons.org/licenses/by-sa/3.0/]]|
!Code
***/
//{{{
config.extensions.coloredLinks={
colorTags:true,
colorTitles:true,
titleSelector:'div.title',
excludeTagged:'noColor',
color:function(btn,title,takeTitle){
var bd,c=config.options,e=btn,f,l='',t,ta,ti='',tg;
if(takeTitle)ti=title;
else{
do{
ti=e&&e.getAttribute?e.getAttribute('tiddler'):null;
l=ti?e:l;
e=e.parentNode;
}while(e);
ti=l?l.getAttribute('tiddler'):'';
}
t=store.getTiddler(ti);
if(t&&t.tags.containsAny(this.excludeTagged.readBracketedList()))return;
t=store.getTiddler(title);
//check tiddler tags
if(t&&t.tags){
ta=0;
while(!tg&&ta<t.tags.length){
f=store.getValue(t.tags[ta],'tagcolor');
tg=f?t.tags[ta]:'';
ta++;
}
if(!tg)tg=t.tags[0]; //none? -> take first
}
//none found ?-> check tiddler itself
f=f?f:store.getValue(title,'tagcolor');
//when tags to be colored, take title
if(!tg&&this.colorTags&&f)tg=title;
if(f){
f=f.replace(/\s*;\s*/g,'","').replace(/\s*:\s*/g,'":"').trim();
if(f.substr(f.length-2,2)==',"')f=f.substr(0,f.length-2);
f='{"'+f+'}';
jQuery(btn).css(jQuery.parseJSON(f)).addClass('coloredLink');
}
//always assign firsttag accordingly
if(tg)jQuery(btn).attr('firsttag',tg);
}
}
createTiddlyLink_COLOR = createTiddlyLink;
createTiddlyLink = function(place,title,includeText,className,isStatic,linkedFromTiddler,noToggle){
var b = createTiddlyLink_COLOR.apply(this,arguments);
config.extensions.coloredLinks.color(b,title);
return b;
}
createTagButton_COLOR=createTagButton;
createTagButton = function (place,tag,excludeTiddler,title,tooltip){
var b = createTagButton_COLOR.apply(this,arguments);
addClass(b,store.getTaggedTiddlers(tag).length>0?'hastags':'hasnotags');
config.extensions.coloredLinks.color(b,tag);
return b;
}
config.macros.allTags.handler_COLOR = config.macros.allTags.handler;
config.macros.allTags.handler = function(place,macroName,params){
config.macros.allTags.handler_COLOR.apply(this,arguments);
jQuery('.button, .tiddlyLink', place).each(function(i) {
var btn=jQuery(this),title=btn.attr('tiddlyLink');
if(!title&&btn.hasClass('hastags')||btn.hasClass('hasnotags'))title=btn.attr('tag');
if(title)config.extensions.coloredLinks.color(this,title);
});
};
Story.prototype.refreshTiddler_COLOR=Story.prototype.refreshTiddler;
Story.prototype.refreshTiddler = function(title,template,force,customFields,defaultText){
var el = Story.prototype.refreshTiddler_COLOR.apply(this,arguments),
c=config.extensions.coloredLinks;
if(!title)alert('foo');
if(c.colorTitles)c.color(jQuery(el).find(c.titleSelector)[0],title,true);
return el;
};
//}}}
#future###make action###mark as a future action######-
#queued###queue###put this action into the task queue######-
#next###make next###mark as next action item######-
#done###set done###mark action as done######-
#waiting###set waiting###mark action as waiting######-
#tmorow###tomorrow###mark action as tomorrow######-
1 high###1###set priority to high######-
2 medium###2###set priority to medium######-
3 low###3###set priority to low######-
/%
!INFO
|''Name''|CycleTags|
|''Version''|1.0.0|
|''Author''|Tobias Beer|
|''~CoreVersion''|2.5|
|''Type''|transclusion|
|''Source''|http://coloredlinks.tiddlyspot.com/#CycleTags|
|''Documentation''|http://coloredlinks.tiddlyspot.com/#CycleTagsInfo|
|''License''|[[Creative Commons Attribution-Share Alike 3.0|http://creativecommons.org/licenses/by-sa/3.0/]]|
|''Description''|allows to cycle through a defined list of tags|
''Usage:'' {{{<<tiddler CycleTags with: TagList Tiddler>>}}}
| !Parameter | !Required | !Info h|
|~TagList|yes|refers to a tiddler with a defined list of tags see [[CycleTagsInfo]]|
|Tiddler|no|when defined, sets the tags on the specified tiddler instead of the one calling the script|
!END%/<<tiddler {{
var cfg={
refreshTids:'TaskOverview CycleTagsInfo',
txtSet:"set '%0'",
txtTip:"assign '%0' to this tiddler",
txtRemove:"remove tag '%0'",
errTid:'@@color:red;invalid tiddler reference for [[cycleTags]]@@',
errList:'@@color:red;invalid taglist@@'
}
var btn,d,cls,cTid,def='$1',e=place,fresh,i,l,lns,nuBtn,nxt,out='',rBtn,tid='$2',tag,tip,txt;
if('$1'=='$'+'1')out='CycleTags##INFO';
window.runOnce=!window.runOnce;
if(window.runOnce){
do{
cTid=e&&e.getAttribute?e.getAttribute('tiddler'):null;
l=cTid?e:l;
e=e.parentNode;
}while(e);
cTid=l?store.getTiddler(l.getAttribute('tiddler')):null;
if(tid=='$'+'2')tid=cTid;
else{
if(tid=='')tid=cTid;else tid=store.getTiddler(tid);
if(!tid)out=cfg.errTid;
}
fresh='$3'=='$'+'3'?'':'$3 ';
if(!store.getTiddler(def))out=cfg.errList;
if(!out&&tid){
lns=store.getTiddlerText(def).split("\n");
nxt=-1;i=0;rmv="";
while (nxt<0 && i<lns.length){ //find current
var d=lns[i].split('###');
if(tid.tags.contains(d[0])){ //found
nxt=i+1;rmv=d[0];
}
i++;
}
i>=lns.length?nxt=0:nxt=i;
d=lns[nxt].split('###');
tag=d[0];
txt=d[1]?d[1]:cfg.txtSet.format([tag]);
tip=d[2]?d[2]:cfg.txtTip.format([tag]);
cls=d[3]?d[3]:'';
rBtn=d[4]?d[4]:'';
nuBtn=function(txt,tip,cls,add){
var t,tg;
btn=createTiddlyButton(place,txt,tip,
function(){
var ti=this.getAttribute('tid'),
rmv=this.getAttribute('rmv'),
add=this.getAttribute('add'),
r,rs=this.getAttribute('refresh').readBracketedList();
rs.pushUnique(ti);
if(add){
//replace tag, instead of adding it to the end
t=store.fetchTiddler(ti);
if(t){
var tg = t.tags.indexOf(rmv);
if(tg!=-1)t.tags[tg]=add;
else t.tags.unshift(add); //add to beginning
t.changed();
t.incChangeCount();
store.notify(ti,true);
store.setDirty(true);
}
}else store.setTiddlerTag(ti,0,rmv);
for(r=0;r<rs.length;r++)story.refreshTiddler(rs[r],null,true);
},cls);
if(add)btn.setAttribute('add',add);
btn.setAttribute('rmv',rmv);
btn.setAttribute('tid',tid.title);
btn.setAttribute('refresh',fresh+cfg.refreshTids+' [['+cTid.title+']]');
}
if(rmv&&rBtn)nuBtn(rBtn,cfg.txtRemove.format([rmv]),cls,false);
nuBtn(txt,tip,cls,tag);
}
}
out;}}>>
CycleTags is a transclusion that I wrote with the help of [[Eric Schulman|http://www.tiddlytools.com]]. It allows you to cycle through a list of tags, successively assigning these tags while removing the "last state".
!Installation
Get CycleTags from this TiddlyWiki and, if you need to, CycleAction as a template for defining your custom "tag cycle" ...explanations below.
!Configuration
To use it, transclude CycleTags like so:
example: {{{<<tiddler CycleTags with: CycleAction>>}}} results in <<tiddler CycleTags with: CycleAction>>
in general: {{{<<tiddler cycleTags with: TagDefinitionTiddler NameOfTaggedTiddler RefreshTids>>}}}
The parameters following the {{{with:}}} statement are:
|Parameter|Required?|Comment|h
|{{{TagDefinitionTiddler}}} | yes |a tiddler or section containing a valid definition list for the tags to be included|
|{{{NameOfTaggedTiddler}}}| no |name of the tiddler for which you want to cycle trough the tags, default is the current tiddler|
|{{{RefreshTids}}}| no |bracketedList of tiddlers to be refreshed upon change|
!The tag definition tiddler
You always need one of those. Set it up the following way, each line representing a state of your @@color:darkblue;tag cycle@@:
{{{
tag1Name###button1Text###button1Tooltip###button1Class###button1Remove
tag2Name###button2Text###button2Tooltip###button2Class###button2Remove
...
}}}
|Parameter|Required?|Comment|h
|tagName| yes |the name of the tag|
|buttonText| no |the text for the button displayed when this tag is to be set|
|buttonTooltip| no |tooltip for the button displayed when this tag is to be set|
|buttonClass| no |css class(es) assigned to the button|
|buttonRemove| no |any text you put here will display an additional @@border:1px solid #db4;padding:0px 3px;-@@ button to remove the current tag|
!An example
You find a simple task status switch in the toolbar at the top of each tiddler that uses the tiddler [[CycleAction]] as its definition:
@@display:block;padding:7px;margin-left:10px;margin-top:10px;background-color:#FFC;border:1px solid #FE8;<<tiddler CycleAction>>@@
A corresponding toolbar section in the [[ViewTemplate]] might look like:
{{{
<div class='toolbar'>
<span macro='tiddler CycleTags with: CycleAction'></span>
...
}}}
<<tiddler TaskOverview>>
!Revisions
| !Version | !Change Notes |h
|1.0.0|- complete reqrite as a transclusion<br>- now replaces the tag in a tiddlers tag array or adds it to the beginning|
|0.1.2|- Fixed error (again in button handler) where [[task overview]] wouldn't update on changes. |
|0.1.1|- Fixed js error on button handler. |
|0.1.0|- Let's call this the first official release. I just inverted the removeButton functionality, so please adopt to it ;o) |
<<tiddler Dialogist-Kantor>>
<<tiddler Dialogist-Kantor>>
<html>
<img class="map" src="http://lh4.ggpht.com/-RGIcCfi9wlk/TxgSzFnXVAI/AAAAAAAADMs/--Utva0mEcI/s640/dk%2525201992-2012.gif" usemap="#usa">
<map name="usa">
<area shape="poly" alt="DK" title="" coords="45,263,20,230,42,224,32,197,52,182,85,187,85,194,98,193,100,222,119,227,91,265,85,253,63,274,57,262" href="javascript:story.displayTiddler(null,'››DK works selection');" />
<area shape="poly" alt="last news" title="" coords="211,134,247,110,327,111,357,134,328,156,242,156" href="javascript:story.displayTiddler(null,'♥News');" />
<area shape="poly" alt="pistologie" title="" coords="374,76,386,66,418,46,425,61,447,43,465,60,477,50,494,71,493,92,483,86,473,101,460,93,446,103,436,93,422,102,409,88,391,97,391,79,381,87,383,78" href="javascript:story.displayTiddler(null,'Pistologie');"/>
<area shape="poly" alt="dialogist-kantor" title="" coords="199,230,214,198,239,213,267,196,270,210,307,196,307,212,357,213,340,231,372,220,363,241,325,258,325,251,298,260,270,249,276,262,231,255,233,248,201,245,188,233,190,222" href="javascript:story.displayTiddler(null,'Dialogist-Kantor');" />
<area shape="poly" alt="laboratoires patacyclistes" title="" coords="209,338,246,314,325,315,355,338,327,360,240,360" href="javascript:story.displayTiddler(null,'Laboratoires Patacyclistes');" />
<area shape="poly" alt="bureau du port" title="" coords="414,328,389,295,411,289,401,262,421,247,454,252,454,259,467,258,469,287,488,292,460,330,454,318,432,339,426,327" href="javascript:story.displayTiddler(null,'ex-Bureau du Port');"/>
<area shape="poly" alt="fumoir" title="" coords="501,371,476,338,498,332,488,305,508,290,541,295,541,302,554,301,556,330,575,335,547,373,541,361,519,382,513,370" href="javascript:story.displayTiddler(null,'Fumoir');"/>
</map>
</html>
<script>
jQuery('.map').maphilight();
</script>
[img(500px,auto)[alt_text|http://bit.ly/ahEjmY]]
^^@@bgcolor(#ffcc66):galerie INTERFACE / Dijon 2008@@^^
Les Dialogist-Kantor (Toni Geirlandt & Carlos Montalvo) sont performeurs. Ce qui est en jeu dans leurs performances n’est pas le corps (celui de l’artiste) mais la communauté. Les Dialogist-Kantor utilisent la performance comme une attitude de résistance face à la réification des individus par le corps social. C’est au nom d’une communauté de vie qu’ils agissent, s’appuyant sur l’idée que l’art est un fête permanente, réhabilitant le geste poétique. Depuis une quinzaine d’année, les Dialogist-Kantor multiplient les collaborations communautaires avec d’autres groupes artistiques, organisent des réunions annuelles où chaque participant est invité, qu’il soit artiste ou non, à collaborer à l’édification de la pensée et du geste esthétique. C’est un vaste ensemble d’objets, de vidéos, d’affiches programmatiques constitués en archives à ré-activer qui témoignent de leur contre-culture.
Jérôme Giller / 2008
[<img(150px,auto)[alt_text|http://bit.ly/hNnsrU]]Toni Geirlandt & Carlos Montalvo (Dialogist-Kantor) font des envois postaux plus ou moins réguliers ou irréguliers, organisent des expositions et des performances, invitent des amis, fabriquent des objets. Toutes ces actions sont de même nature : des guirlandes, de jolis drapelets qui forment cortège, un joli cortège de messages ; des touches de couleur qui accompagnent le tracé de la vie et indiquent plus que tout le reste le sens de leur travail - avec la modestie des petits drapelets -, la générosité de leur démarche : une fête à laquelle ils nous convient en permanence sans que soient attribuées des places ou prononcés des discours, sans héros ni peintres allégoriques. Ils partagent l’amitié et les affichettes, les espaces et les expositions ; ils ont la générosité du grand saint de Tours qui, précisons le, remplace dans certaines régions, le grand saint Nicolas auprès des petits enfants en leur distribuant des cadeaux et des bonbons.
C’est sans doute à cause de cela, parce qu’ils mêlent autant leur existence que leurs œuvres, que Toni et Carlos essuyèrent récemment un refus auprès d’une commission ministérielle, pour une bourse sollicitée (leur travail ayant été qualifié de néo dada et de brouillon), en faisant fleurir sur les chemins les arbres et les buissons, en garnissant les salles de café et les chapelles de guirlandes et de drapelets.
''Laurent Busine'' directeur du Mac's ([[Musée des Arts Contemporains, Grand-Hornu|http://www.mac-s.be/]], Belgique) 2009
[img(600px+,auto)[histori DK|http://bit.ly/ejfbkE]]
<<<
~Dialogist-Kantor (Toni Geirlandt & Carlos Montalvo col.labo since 1992) solo & group interventions (1993-...) and conceptors of rastafarian situations (laboratoires patacyclistes, Bureau du port, Pistologie, Fumoir / Rookzaal )
<<<
__''GROUP/''__
[[2011 / Célébrations ISELP Bruxelles ("Entre pas cher et gratuit" interv.+install.)|2011_Iselp Entre pas cher et gratuit]]
[[2011/ Vagabondages (Pori, Finland) avec Emmanuel Tête, Lise Duclaux, Jérôme Giller, Bernard Mulliez et Dialogist-Kantor|2011_Vagabondages (Pori, Finland)]]
[[2011/ "Un hommage à Bern Lohaus" / Muhka Antwerpen|Un hommage à Bernd Lohaus]]
[[2010/ SALON 5 Performative journeys with... / 50/50 with Emilio Lopez -Menchero , Chris Straetling / ARGOS, Brussels|2010_SALON5.Argos]]
[[2010/ WHY LOOK A THINGS UPSIDE DOWN / Galerie Martin van Blerk , Antwerpen|2010_UpsideDown]]
[[2010/ HYPERACTIVITY / summerlab /CAN & Marks Blond Project ,Neuchâtel (Suisse)|2010_SummerLabCAN]]
[[2010/ CANVASCOLLECTIE/COLLECTION RTBF / finalistes , BOZAR , Bruxelles|2010_CanvasCOLLECTIE BOZAR]]
[[2010/ ROSE,C'EST LA VIE - Bernard Villers invite/ ~CO21(centre couleur contemporaine) Bruxelles|2010_Rose, c'est la vie]]
[[2010/ Cherry Invitational 2010 jacques Halbert invite.../ galerie "les Contemporains" galerij +-0 , Bruxell|2010_Cherry Invitational]]
2010/ jacques halbert ? moustache amphibie 2 (doc?)
[[2010/ Venise 3 jours 2 nuits / une proposition d'Eléonore Saintagnan et Grégoire Motte & Guests / Galerie Elaine Lévy Project - Bruxelles|VENISE 3 JOURS 2 NUITS #1 / 2010]]
2009/ Ailleurs et tantôt
:performance pour le finissage de l'exposition Cacher/Montrer de Marc Rossignol /avec Laetitia Yalon, Marc Rossignol, Heini Obst, Serge Paternoster, Djos Janssens / Centre culturel Jacques Franck - Bruxelles
[[2009/ ROUGE / ~CO21(centre de couleur contemporaine) avec Michel Couturier, Djos janssens, Marc Rossignol,Kurt Ryslavy -Bruxelles|2009_Rouge]]
2009/ ~Trouble-Fait / Chez Rita / avec Julien Celdran, Nolwenn Dequiedt, Lise Duclaux, Jérôme Giller, Bernard Mulliez, Emmanuel Tête - Roubaix (France)
2009/ Momentum 4/ A Few Small Changes / H29 ( Marcus Bering)
2009/ Campo Santo (titre?)
[[2009/ "Feuille,Bouteille,Ein Vogel" (le titre solution/à l'envers) - performance avec LL,Heinrich Obst, Serge Paternoster, Marc Rossignol, Kurt Ryslavy, Laetitia Yalon - soirée Composite #7- La Bellone - Bruxelles|2009_Bellone Composite #7]]
2009/ "La Bamba night" organisatie Dennis Tyfus- performance - Scheld'apen-Antwerpen
[[2008/ "Victim Design" Martin van Blerk galerij Antwerpen|2008_Hit Me With Your Rythmn Stick for Victim Design]]
2008/ "La vie en rond" june - H29 Brussels (Bel.)
2008/ « On en discutera demain matin» Galerie Interface – Dijon (Frankrijk)
[[2007/ Cosmos Mundo Forever -TRIENAL DE LUANDA –Luanda (Angola)|2007_1°Triennal de Luanda]]
[[2007/ PERFO 7 - performance & video festival- »The Munder Blackout Effect »(performance) –Pori(Finland)|The Munder Blackout Effect]]
2007/ « The Munder Blackout Effect 2 » Factor 44 - Antwerpen
2007/ Maison Grégoire- Mr.Jean Paul invite - Brussel ICC brochure modificatie project/UKKR
2007/ Mu.HKA -Antwerpen
[[2006/ Extra Sic Antwerpen / DK+Undecover |2006_Think Undercover]]
2006/ Vis Comica - Spanish cockpit BILD+WORT Projektraum- Berlin(Duitsland)
[[2006/ « St.Art van D..K » performance – LE 11 – centre culturel Jacques Franck - Brussel|2006_Saint Martin version 01]]
[[2006/ « St.Martin reloaded » featuring Sturm&Lie(performance) – Staalkaart- Gent|2006_Staalkaart]]
2005/ EUPHORIA at matrix art project By GAST BOUSCHET –performance D.K.- Brussel
2005/ " a poor sunday on a saturday"RHOK - Brussel
[[2005/POST DIGESTIV TRIBUNE Vollevox - Brussel|2005_Post-Digestive Tribune 2 / Mercelis 26 feb]]
2004/ MOLTI MULTIPLI - CCNOA, Brussel
jour fixe FACTOR 44- DK "Zugvogel Berlin 1996-2004"-Antwerpen
2004/ PAUVRES NOUS - Factor 44- Antwerpen ( incl. Danny Devos,Guy Van Bossche,Monica Droste,Ann - Veronica Janssens,Hyhs,Guy Rombouts,Marc Rossignol,Gwendoline Robin,Ria Pacquée,Walter Swennen,Andrew Webb,Tuire Lampila,Heinrich Obst,Dominique Thirion,Ito Takashi,Patrice Verhofstadt,Derk Thijs,Fréderic Tolmatcheff,Frigo)
2003/ CD MOBILES - SONORE CATALOGUS uitgegeven naar aanleiding van de tentoonstelling MOBILES
[[2002 / "NO MORE PATACYCLISTE ANYMORE" Under DK/program in het kader van MOBILES, MAISON DU PEUPLE– Brussel|2002_No More Patacycliste]]
2002/ –Brussel MEMENTO MONICA - boek in memory of Monica Droste uitgegeven door FACTOR 44
A MULTITUDE OF PERSONALISED DEVIATIONS FACTOR 44 – Antwerpen QUARTAIR - Den HAAG(Nederland)
2002/ PARAMOUNT BASICS.EXTENDED interventie in tentoonstelling van Richard Venlet in samenwerking met FACTOR 44 - M HKA - Antwerpen
2002/ ENTRE DEUX CHAISES samenwerking naar aanleiding van toneelstuk van FACTOR 44 DE BRANDERIJ –Antwerpen
HYPERSPACE - Brussel
L'ECRIT VAIN - EDITIONS tentoonstelling van kunstenaarsboeken Brussel
2001/ LE CLOU interventie "PAUVRES NOUS" FACTOR 44 – Antwerpen
A POOR SUNDAY WITH interventie "anch'io sono" BUREAU DU PORT – Brussel HALITOSIS CONVENTION QUARTAIR - Den HAAG(Nederland)
N.A.V.11-09-01 DE BRANDERIJ - Antwerpen
2000/ PAUVRE BOITE - MUSEUM OF INSTALLATIONS - London(Engeland)
ETUDE 2_C, THE HAT video- ARGOS - Brussel NOUS SOMMES SUR TERRE C'EST SANS REMEDE performance FACTOR 44 - Antwerpen DIPOSIT 19- Alicante(Spanje)
1999/ IMPRESSION initiatief TONY MORGAN -Genève(Zwitserland)
EN PURE PERTE - Performance - DE BRANDERIJ - Antwerpen
1998/ CHIEN CARRE video FACTOR 44 – Antwerpen
LA COLLECTIE FACTOR 44 – Antwerpen HOMMAGE M.KIPPENBERGER uitgave En Fanfare! FACTOR 44 - Antwerpen
ELLE ENTERRE DES SAPINS performance ten huize van Bouschet & Hilbert - Brussel
1997/ GALERIJ RAINER BORGEMEISTER -Berlijn(Duitsland)
HAUS DES LEHRERS ~D-K, Verhofstadt, Rossignol Berlijn(Duitsland)
FACTOR 44 - UNE REUNION DE POISSONS SECS Bonapartedok - Antwerpen
1996/ THE POSSIBILITY OF THE SPIRIT - organisatie Anne Buckingham -Brussel
24h/24u - E.V.A.Malibran - Brussel
1996/ BEAUTY FREE Org: Karyn Vyncke Location Project : Basement of the Kunstcentrum Vooruit, Gent (B)
Participants : Jean de La Fontaine/ Dialogist Kantor incl. Axel Claes/ Nick Roseew/ Yoris Van den Houte/ Karin Vyncke/ Benoit Verbeek/ Laetitia Yalon
1995/ QUARANTAINE - Antwerpen
__''SOLO/''__
[[2011 / Nivell Ni Bell Ni Babel, Galeria Charpa, Valencia, Spain|2011_Nivell Ni bell Ni Babel]]
[[2009 / L'art du lendemain, Cabinet d'amateur #3, MAC'S , Musée d' Art Contemporain Grand- Hornu|2009_L'art du lendemain]]
[[2009/ Everything is possibly possible / Machine#3- Gent ( Machine vzw, Gent, Odie Rynell Cash, Dirk Gondry )|2009_ Everything is possibly possible Machine Vzw #3]]
[[2009 / Mise en Machine Verschueren 20ex. ( niveau de l'art toile cirée)11.02.09 - Bruxelles|2009_Mise en Machine Verschueren]]
2007 / Steun Nu DK CCP 000-1194016-43.- with an Heini Obst introduction – H29 galerie - Brussel
[[2006 / BOX+COX with Andrew Webb - Gallerij.Annie Gentils - Antwerpen|2006_Box+Cox]]
[[2005 / 11.11. performance with KURT RYSLAVY for "Le 11" - Soleil - Brussel|2005_Soleil 11]]
2004 / "Observatorio #10" Camouflage - Brussel
2003 / L'ÎLE DU TRAVAIL Bureau du Port - Brussel
2001 / MADAME HUTFRESSER in samenwerking met Walter Swennen- Factor 44 – Antwerpen
2000 / PAUVRE MONSIEUR Bureau du Port - Brussel
1999 / LE JOUR DE GLOIRE Factor 44 - Antwerpen
1998 / PALAU COMTAL interventies & tentoonstelling tijdens zomer-universiteit van Universiteit Alicante – Palau Comtal Cocentaina (Spanje)
1995 / BUREAU DES REKLAMATIONS –Espace Sussuta Boe – Brussel
[[1995 / Bon débarras/ Opgeruimd staat netjes AK37 Antwerpen|1995_Bon débarras/ Opgeruimd staat netjes]]
[[1995 / TAIS - TOI ET TRAVAILLE ! Gallerij Vincenz Sala - Brussel|1995_Tais-Toi Et Travaille!]]
[img(400px,auto)[ef!15 remake|http://bit.ly/lQ8SJR]]
remake en fanfare! n°15 1994-2010 vert sur fond blanc / ex. indéterminé
[img(400px,auto)[WHY LOOK AT THINGS UPSDE DOWN|http://bit.ly/dsMniH]]
^^@@bgcolor(#99cccc):photo Djos Janssens@@^^
https://picasaweb.google.com/105898452618087093313/1996_AK37#5644045280608186850
<<tiddler PicasaJqueryincl>>
<div class='toolbar' macro='toolbar [[ToolbarCommands::EditToolbar]] wikibar'></div>
<div class='title' macro='view title'></div>
<div class='editor' macro='edit title'></div>
<div macro='annotations'></div>
<div class='editor' macro='edit tags'></div>
<div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser excludeLists'></span></div>
<div class='wikibar' macro='wikibar'></div>
<div class='editor' macro='edit text'></div>
<div style='margin-top: 1em;' macro='edit tagcolor'><span class='label' style='margin-right: 10px;'>Tag Color (valid css!): </span></div>
[img(400px,auto)[ef!15 remake|http://bit.ly/lQ8SJR]]
''En Fanfare! 1992-1999''
La série complète comprend 40 numéros. La première édition du EF!14 épuisée instantanément fut remplacée par une seconde version En Fanfare!n°14B ( Apr 1994 )
https://picasaweb.google.com/105898452618087093313/Enfanfare
|bgcolor(#DEDEDE):Format:|A3|
|bgcolor(#DEDEDE):Numéros:|39|
|bgcolor(#DEDEDE):Exemplaires:|min.10 - max.50 |
|bgcolor(#DEDEDE):Année: |1992-1999|
|bgcolor(#DEDEDE):Distribution: |Postale|
<<tiddler PicasaJqueryincl>>
/***
|Name|ExternalTiddlersPlugin|
|Source|http://www.TiddlyTools.com/#ExternalTiddlersPlugin|
|Documentation|http://www.TiddlyTools.com/#ExternalTiddlersPluginInfo|
|Version|1.3.3|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Requires|TemporaryTiddlersPlugin, SectionLinksPlugin (optional, recommended)|
|Description|retrieve and wikify content from external files or remote URLs|
This plugin extends the {{{<<tiddler>>}}} macro syntax so you can retrieve and wikify content directly from external files or remote URLs. You can also define alternative "fallback" sources to provide basic "import on demand" handling by automatically creating/importing tiddler content from external sources when the specified ~TiddlerName does not already exist in your document.
!!!!!Documentation
>see [[ExternalTiddlersPluginInfo]]
and DK BACKSTAGE http://goo.gl/hjcqm
!!!!!Configuration
<<<
<<option chkExternalTiddlersImport>> automatically create/import tiddlers when using external fallback references
{{{usage: <<option chkExternalTiddlersImport>>}}}
<<option chkExternalTiddlersQuiet>> don't display messages when adding tiddlers ("quiet mode")
{{{usage: <<option chkExternalTiddlersQuiet>>}}}
<<option chkExternalTiddlersTemporary>> tag retrieved tiddlers as 'temporary'(requires [[TemporaryTiddlersPlugin]])
{{{usage: <<option chkExternalTiddlersTemporary>>}}}
tag retrieved tiddlers with: <<option txtExternalTiddlersTags>>
{{{usage: <<option txtExternalTiddlersTags>>}}}
__password-protected server settings //(optional, if needed)//:__
>username: <<option txtRemoteUsername>> password: <<option txtRemotePassword>>
>{{{usage: <<option txtRemoteUsername>> <<option txtRemotePassword>>}}}
>''note: these settings are also used by [[LoadTiddlersPlugin]] and [[ImportTiddlersPlugin]]''
<<<
!!!!!Revisions
<<<
2011.04.27 1.3.3 merge/clone defaultCustomFields for saving in TiddlySpace
|please see [[ExternalTiddlersPluginInfo]] for additional revision details|
2007.11.25 1.0.0 initial release - moved from CoreTweaks
<<<
!!!!!Code
***/
//{{{
version.extensions.ExternalTiddlersPlugin= {major: 1, minor: 3, revision: 3, date: new Date(2011,4,26)};
// optional automatic import/create for missing tiddlers
if (config.options.chkExternalTiddlersImport==undefined) config.options.chkExternalTiddlersImport=true;
if (config.options.chkExternalTiddlersTemporary==undefined) config.options.chkExternalTiddlersTemporary=true;
if (config.options.chkExternalTiddlersQuiet==undefined) config.options.chkExternalTiddlersQuiet=false;
if (config.options.txtExternalTiddlersTags==undefined) config.options.txtExternalTiddlersTags="external";
if (config.options.txtRemoteUsername==undefined) config.options.txtRemoteUsername="";
if (config.options.txtRemotePassword==undefined) config.options.txtRemotePassword="";
config.macros.tiddler.externalTiddlers_handler = config.macros.tiddler.handler;
config.macros.tiddler.handler = function(place,macroName,params,wikifier,paramString,tiddler)
{
params = paramString.parseParams("name",null,true,false,true);
var names = params[0]["name"];
var list = names[0];
var items = list.split("|");
var className = names[1] ? names[1] : null;
var args = params[0]["with"];
// UTILITY FUNCTIONS
function extract(text,tids) { // get tiddler source content from plain text or TW doc
if (!text || !tids || !tids.length) return text; // no text or no tiddler list... return text as-is
var remoteStore=new TiddlyWiki();
if (!remoteStore.importTiddlyWiki(text)) return text; // not a TW document... return text as-is
var out=[]; for (var t=0;t<tids.length;t++)
{ var txt=remoteStore.getTiddlerText(tids[t]); if (txt) out.push(txt); }
return out.join("\n");
}
function substitute(text,args) { // replace "substitution markers" ($1-$9) with macro param values (if any)
if (!text || !args || !args.length) return text;
var n=args.length; if (n>9) n=9;
for(var i=0; i<n; i++) { var re=new RegExp("\\$" + (i + 1),"mg"); text=text.replace(re,args[i]); }
return text;
}
function addTiddler(src,text,tids) { // extract tiddler(s) from text and create local copy
if (!config.options.chkExternalTiddlersImport) return; // not enabled... do nothing
if (!text || !tids || !tids.length) return; // no text or no tiddler list... do nothing
var remoteStore=new TiddlyWiki();
if (!remoteStore.importTiddlyWiki(text)) // not a TW document... create a single tiddler from text
makeTiddler(src,text,tids[0]);
else // TW document with "permaview-like" suffix... copy tiddler(s) from remote store
for (var t=0;t<tids.length;t++)
insertTiddler(src,remoteStore.getTiddler(tids[t]));
return;
}
function makeTiddler(src,text,title) { // create a new tiddler object from text
var who=config.options.txtUserName; var when=new Date();
var msg="/%\n\nThis tiddler was automatically created using ExternalTiddlersPlugin\n";
msg+="by %0 on %1\nsource: %2\n\n%/";
var tags=config.options.txtExternalTiddlersTags.readBracketedList();
if (config.options.chkExternalTiddlersTemporary) tags.pushUnique(config.options.txtTemporaryTag);
var fields=merge({},config.defaultCustomFields,true)
store.saveTiddler(null,title,msg.format([who,when,src])+text,who,when,tags,fields);
if (!config.options.chkExternalTiddlersQuiet) displayMessage("Created new tiddler '"+title+"' from text file "+src);
}
function insertTiddler(src,t) { // import a single tiddler object into the current document store
if (!t) return;
var who=config.options.txtUserName; var when=new Date();
var msg="/%\n\nThis tiddler was automatically imported using ExternalTiddlersPlugin\n";
msg+="by %0 on %1\nsource: %2\n\n%/";
var newtags=new Array().concat(t.tags,config.options.txtExternalTiddlersTags.readBracketedList());
if (config.options.chkExternalTiddlersTemporary) newtags.push(config.options.txtTemporaryTag);
var fields=merge(t.fields,config.defaultCustomFields,true)
store.saveTiddler(null,t.title,msg.format([who,when,src])+t.text,t.modifier,t.modified,newtags,fields);
if (!config.options.chkExternalTiddlersQuiet) displayMessage("Imported tiddler '"+t.title+"' from "+src);
}
function getGUID() // create a Globally Unique ID (for async reference to DOM elements)
{ return new Date().getTime()+Math.random().toString(); }
// loop through "|"-separated list of alternative tiddler/file/URL references until successful
var fallback="";
for (var i=0; i<items.length; i++) { var src=items[i];
// if tiddler (or shadow) exists, replace reference list with current source name and apply core handler
if (store.getTiddlerText(src)) {
arguments[2][0]=src; // params[] array
var p=arguments[4].split(list); arguments[4]=p[0]+src+p[1]; // paramString
this.externalTiddlers_handler.apply(this,arguments);
break; // stop processing alternatives
}
// tiddler doesn't exist, and not an external file/URL reference... skip it
if (!config.formatterHelpers.isExternalLink(src)) {
if (!fallback.length) fallback=src; // title to use when importing external tiddler
continue;
}
// separate 'permaview' list of tiddlers (if any) from file/URL (i.e., '#name name name..." suffix)
var p=src.split("#"); src=p.shift(); var tids=p.join('#').readBracketedList(false);
// if reference is to a remotely hosted document or the current document is remotely hosted...
if (src.substr(0,4)=="http" || document.location.protocol.substr(0,4)=="http") {
if (src.substr(0,4)!="http") // fixup URL for relative remote references
{ var h=document.location.href; src=h.substr(0,h.lastIndexOf("/")+1)+src; }
var wrapper = createTiddlyElement(place,"span",getGUID(),className); // create placeholder for async rendering
var callback=function(success,params,text,src,xhr) { // ASYNC CALLBACK
if (!success) { displayMessage(xhr.status); return; } // couldn't read remote file... report the error
if (params.fallback.length)
addTiddler(params.url,text,params.tids.length?params.tids:[params.fallback]); // import tiddler
var wrapper=document.getElementById(params.id); if (!wrapper) return;
wikify(substitute(extract(text,params.tids),params.args),wrapper); // ASYNC RENDER
};
var callbackparams={ url:src, id:wrapper.id, args:args, tids:tids, fallback:fallback } // ASYNC PARAMS
var name=config.options.txtRemoteUsername; // optional value
var pass=config.options.txtRemotePassword; // optional value
var x=doHttp("GET",src,null,null,name,pass,callback,callbackparams,null)
if (typeof(x)=="string") // couldn't start XMLHttpRequest... report error
{ displayMessage("error: cannot access "+src); displayMessage(x); }
break; // can't tell if async read will succeed.... stop processing alternatives anyway.
}
else { // read file from local filesystem
var text=loadFile(getLocalPath(src));
if (!text) { // couldn't load file... fixup path for relative reference and retry...
var h=document.location.href;
var text=loadFile(getLocalPath(decodeURIComponent(h.substr(0,h.lastIndexOf("/")+1)))+src);
}
if (text) { // test it again... if file was loaded OK, render it in a class wrapper
if (fallback.length) // create new tiddler using primary source name (if any)
addTiddler(src,text,tids.length?tids:[fallback]);
var wrapper=createTiddlyElement(place,"span",null,className);
wikify(substitute(extract(text,tids),args),wrapper); // render
break; // stop processing alternatives
}
}
}
};
//}}}
/***
|''Name:''|FE2|
|''Description:''|create, edit, view and delete commands in toolbar <<toolbar fields>>|
|''Version:''|1.0.2|
|''Date:''|Oct. 21,2009|
|''Source:''|http://tbGTD.tiddlyspot.com|
|''Author:''|Tobias Beer|
|''License:''|[[BSD open source license|License]]|
|''~CoreVersion:''|2.5.3|
|''Browser:''|Firefox 2.0; InternetExplorer 6.0, others|
!Note
This is a refactored version of [[FieldsEditorPlugin|http://visualtw.ouvaton.org/VisualTW.html#FieldsEditorPlugin]] by Pascal Collin
!Installation
*import this tiddler, keep tagged as systemConfig, save and reload
!Code
***/
//{{{
//language settings for header, also see language options for macro.FE2 below!
config.commands.fields.lang={field:"field",actions:"actions",value:"value"};
config.commands.fields.handlePopup=function(popup,title){
addClass(popup,'FE2');
var tid=store.fetchTiddler(title);
if(!tid)return;
var t='[['+title+']]';
var fields={};
store.forEachField(tid,function(tid,field,v){fields[field]=v;},true);
var list=[];
for(var f in fields){
var e='[['+f+']]';
list.push({
field:f,
value:fields[f],
actions:"<<FE2 "+t+" rename "+e+">> <<FE2 "+t+" delete "+e+">> <<FE2 "+t+" edit "+e+">>"
});
}
list.sort(function(a,b){return a.field<b.field?-1:(a.field==b.field?0:+1);});
list.push({field:'',value:"",actions:"<<FE2 "+t+" create>>"});
var table=ListView.create(popup,list,{
columns:[
{name:'Field',field:'field',title:this.lang.field,type:'String'},
{name: 'Actions',field:'actions',title:this.lang.actions,type: 'WikiText'},
{name:'Value',field:'value',title:this.lang.value,type:'WikiText'}
],
rowClasses:[
{field:'actions'}
],
buttons:[ //can't use button for selected then delete, because click on checkbox will hide the popup
]
});
}
config.macros.FE2={
//language options
lang:{
'delete':'delete', //string since keyword!
rename:'<rename',
create:'Create a new field...',
edit:'edit>',
lineBreaks:"The field value contains linebreaks.\nEditing here will convert it to a single line!\nProceed?",
enterName:"Enter new field name...",
enterNewName:"Enter new name for '%1'...",
enterVal:"Enter field value for '%1'...",
enterNewVal:"Enter new value for '%1'..",
doDelete:"Delete field '%1' from tiddler '%2' ?",
existing:"This field already exists! "
},
handler:function(place,macroName,params,wikifier,paramString,tiddler){
if(!readOnly){
var tid=params[0];
var mode=params[1];
var field=params[2];
var btn=createTiddlyButton(place,this.lang[mode],this.lang[mode]+" "+field,this.clicked);
btn.setAttribute("tiddler",tid);
btn.setAttribute("field",field);
btn.setAttribute("mode",mode);
}
},
clicked:function(){
var lng=config.macros.FE2.lang;
var title=this.getAttribute("tiddler");
var field=this.getAttribute("field");
var mode=this.getAttribute("mode");
var tid=store.getTiddler(title);
if(!tid)return;
switch(mode){
case'create':
var first="";
do{
field=prompt(first+ lng.enterName,"");
first=lng.existing;
}while(store.getValue(tid,field));
if(field){
var v=prompt(lng.enterVal.replace(/%1/,field),"");
if(v)tid.fields[field]=v;else return;
}else return;
break;
case'delete':
if(confirm(lng.doDelete.replace(/%1/,field).replace(/%2/,title))){
delete tid.fields[field];
}else return;
break;
case'edit':
var v=tid.fields[field]||'';
if(!v.match(/\n/mg)||confirm(lng.lineBreaks)){
var v=prompt(lng.enterNewVal.replace(/%1/,field),v);
if(v||v=='')tid.fields[field]=v;else return;
}else return;
break;
case'rename':
var name=prompt(lng.enterNewName.replace(/%1/,field),field);
if(name){
tid.fields[name]=tid.fields[field];
delete tid.fields[field];
}else return;
break;
default:return;
}
store.saveTiddler(tid.title,tid.title,tid.text,tid.modifier,tid.modified,tid.tags,tid.fields);
story.refreshTiddler(title,null,true);
return false;
}
}
config.shadowTiddlers.StyleSheetFE2=
".FE2 td br{display:block;}\n"+
".FE2 td {font-size:12px;padding:1px 3px}\n"+
".FE2 .button {border:0;padding:0 0.2em;}\n"+
".FE2 .twtable,.FE2 .twtable thead, .FE2 .twtable tr{border:0}\n"+
".FE2 .twtable tr:hover{background:"+store.getTiddlerSlice('ColorPalette','TertiaryLight')+"}\n"+
".FE2 .twtable thead{font-size:13px;}";
store.addNotification("StyleSheetFE2",refreshStyles);
//}}}
FUMOIR 12 DEC 2011
@@bgcolor(#cccc66):still availlable HINTEN SEIN VORNE DASEIN by Stefan BONHENBERGER for Fumoir 12 - 100 ex 34 pp @@
[[contact DK|ask/contact]]
https://picasaweb.google.com/105898452618087093313/HintenSein2010#5698604226476145682
https://picasaweb.google.com/105898452618087093313/HintenSein2010#5698604247367878434
https://picasaweb.google.com/105898452618087093313/HintenSein2010#5698604243244281810
FUMOIR 12 SUNDAY 11-12-2011 3PM
https://picasaweb.google.com/105898452618087093313/Fumoir12_SB#5682951603494703426
<html>
<p>INTERVIEW <br><a class='iframe' href="http://dk500.tiddlyspot.com/#[[Interview%20SB%20Fumoir11]]"> Interview de Stefan Bohnenberger par Josef Schlecht
au salon de réception de l‘hôtel Baur, à Zurique, le 18 Novembre 2011 </a> </p>
</html>
FUMOIR 12bis SUNDAY 18-12-2011 @@color(#cc0000):''5.30 PM''@@ ''SB FILMS + ~PIC-NIC (bring something plz :)''
https://picasaweb.google.com/105898452618087093313/Fumoir12_SB#5687148187375911858
^^MOHAMMED KADIR ON A DONKEY ( Fragment of the film SHIGERAT TRAILER by Stefan Bohnenberger from 2000 )^^
+++[show list of films|SB movies]
@@color(#993300):^^FILMS FOR ~PIC-NIC
BY STEFAN BOHNENBERGER
AT FUMOIR/ ROOKZAAL, BRUSSELS
DECEMBER 18, 2011
A
HINTEN SEIN VORNE DASEIN, 0:39, b&w, hd, Brussels 2010
SQUARE, 0:32, b&w, hd, Portugal 2010
~PROJECTION-PHENOMENA-PROJECTION, 0:34, b&w, hd, Brussels 2011
FREE MUSIC SIX HANDS, 0:40, b&w, hd, Brussels 2010
ENVIRMENTAL EXPERIENCE N°233, 2:27, b&w, hd, Brussels 2011
LOCAL FICTION, 4:08, b&w, super8, Brussels 2011
MESHNUKS DRUM EXERCISE (MFA soundtrack for a sequence of Meshnuk), 1:16, color, hd, Brussels 2010
PANORAMA SWING (MFA clip), 2:11, b&w, hd, Brussels 2011
BOCA DO INFERNO, 2:01, color, super8, Portugal 2006
VEILED AND THEN SHE COMES (MFA clip), 0:44, color, hd, Brussels 2010
RUSSIAN POETS, 0:21, b&w, hd, Portugal 2010
FAKE DERWISH, 1:04, b&w, hd, Brussels 2011
SPIRITISTIC MOMENT, 0:16, color, hd, Portugal 2010
SHORT CUT LABYRINTH, 8:04, color and b&w, super8 & dv, Brussels 2011
MFA PUNK PIECE (soundtrack for a sequence of Jodorowskis El Topo), 0:38, b&w, hd, Brussels 2011
CUT OUT FROM LES ALLUMETTES A INTUITION, 5:59, color, dv, Brussels 2011
FOR LAILA (soundtrack by Mat & Baron Stucki Jr.), 0:45, b&w, super8, Brussels 2010
CUT OUT FROM KLOPFENSTEINS STORY OF THE HAARLEM NIGHT (MFA soundtrack), 2:53, b&w, 16mm, Brussels 2011
B
SUCKED BY HOLES, 12:08, color and b&w, super8 & dv, Brussels 2007
~B-MOVIE, 15:00, b&w, super8, Brussels 2006
COIFFURE LILIANE (by collective L), 18:00, b&w, super8, Brussels 2007
C
THE BEST OF MFA'S EL TOPO VERSION (soundtrack for Jodorowski), 17:21, color and b&w, video, Brussels 2011
SIX SEQUENCES FROM THE SHIGERAT TRAILER, 6:26, color and b&w, super8 & dv, Brussels 2011
FULL OF DESIRE (MFA clip), 1:19, b&w, hd, Brussels 2011
CRUZIFICATION OF A BLANKET (MFA clip), 2:41, color, hd, Brussels 2010
SIX SEANCES WITH DR.STERNHELL, 5:48, b&w, Amsterdam 2011
CLIP MFA, 1:15, color, hd, Brussels 2010^^@@
===
<<tiddler ColorBoxInclude>>
<<tiddler PicasaJqueryincl>>
[img(450px,auto)[alt_text|http://lh3.ggpht.com/_a4sdrWnGaJY/TMkg9GGVGKI/AAAAAAAAAiM/6WAJP9TBVvE/fumoir1.JPG]]
[img(450px,auto)[alt_text|http://lh3.ggpht.com/_a4sdrWnGaJY/TMkf6UmMGeI/AAAAAAAAAhA/p6nStfxnEe8/lieve_l5.JPG]]
<html>
<div id="container1"><span style= "font-size: 16pt ; color: fuchsia ; background-color: #FFFFFF ; " > </span></div>
</html>
<script> jQuery("#container1").pwi({
username: 'patacycliste',
maxResults: 8,
thumbSize: 100,
thumbCrop: 1,
mode: 'keyword',
album: 'Fumoir',
keyword: 'fumoir1',
albumTitle: 'fumoir1 2008 /Lieve Lambrecht \L éveil à l envers\'',
showSlideshowLink: false,
showAlbumDescription: true,
});
</script>
https://picasaweb.google.com/105898452618087093313/Fumoir21000000PicNic2008?authkey=Gv1sRgCI_Wj6PitYzWWw#5711940988418059170
https://picasaweb.google.com/105898452618087093313/Fumoir21000000PicNic2008?authkey=Gv1sRgCI_Wj6PitYzWWw
<<tiddler PicasaJqueryincl>>
https://picasaweb.google.com/105898452618087093313/Fumoir3#5594457733394922386
https://picasaweb.google.com/105898452618087093313/Fumoir3#5594458869147290290
https://picasaweb.google.com/105898452618087093313/Fumoir3#5654037603181526354
https://picasaweb.google.com/105898452618087093313/Fumoir3
<<tiddler PicasaJqueryincl>>
[img[http://bit.ly/fRbNTU]]
<html>
<div id="container1"><span style= "font-size: 16pt ; color: fuchsia ; background-color: #FFFFFF ; " > </span></div>
</html>
<script> jQuery("#container1").pwi({
username: 'patacycliste',
maxResults: 12,
thumbSize: 100,
thumbCrop: 1,
mode: 'keyword',
album: 'Fumoir4',
keyword: 'fum4',
albumTitle: '2008_Fumoir n°4 \Odie Rynell Cash+ extras. 25.07.2009\'',
showSlideshowLink: false,
showAlbumDescription: true,
});
</script>
[>img[alt_text|http://bit.ly/ehX2jo]]
[img(250px,auto)[Frédéric Tolmatcheff fumoir7|http://bit.ly/hZ3pe3]][img(250px,auto)[Frédéric Tolmatcheff fumoir7|http://bit.ly/egTLXU]]
^^images from F.Tolmatcheff FB album http://on.fb.me/i8Z8Jf^^
[img(400px+,auto)[fumoir 9|http://bit.ly/cv8OR6]]
<html>
<div id="container1"><span style= "font-size: 16pt ; color: fuchsia ; background-color: #FFFFFF ; " > </span></div>
</html>
<script> jQuery("#container1").pwi({
username: 'patacycliste',
maxResults: 8,
thumbSize: 100,
thumbCrop: 1,
mode: 'keyword',
album: 'fumoir',
keyword: 'fumoir9',
albumTitle: 'Fumoir9 2010 /Group \Mc Keta Prjcts\'',
showSlideshowLink: false,
showAlbumDescription: true,
});
</script>
^^sans oublier le [[GRUZEMEYRE insubmersible RAPPORT|http://home.scarlet.be/gruzemayer/]] ^^
[img(230px,auto)[alt_text|http://home.scarlet.be/gruzemayer/FumoirPx/MarcYetF9.jpg]][img(230px,auto)[alt_text|http://home.scarlet.be/gruzemayer/FumoirPx/BERNDfenMRw.jpg]]
[img[repot gRUZEMEYER|http://home.scarlet.be/gruzemayer/FumoirPx/TouwComboW.jpg][http://home.scarlet.be/gruzemayer/]]
https://picasaweb.google.com/105898452618087093313/Fumoir10_tiroir#5566227102873043362
@@color(#0066cc):FUMOIR 10/ GUY CARDOSO & SONORA MACHINE II / SAT JAN.15 incl. MFA@@
https://picasaweb.google.com/105898452618087093313/Fumoir10_tiroir#5561261790775874978
https://picasaweb.google.com/105898452618087093313/Fumoir10_tiroir
<<tiddler PicasaJqueryincl>>
https://picasaweb.google.com/105898452618087093313/Fumoir11_2011_PoriBoxKippis#5657899606101917074
Opening on Oct.01 2011 at 2 PM + multiple Pori Box Kippis 50ex. with Mulliez, Duclaux,Dialogist - Kantor, Tête, Celdran, Giller & Obst
https://picasaweb.google.com/105898452618087093313/Fumoir11_2011_PoriBoxKippis#5659764358841020418
https://picasaweb.google.com/105898452618087093313/Fumoir11_2011_PoriBoxKippis#5659764241513506338
https://picasaweb.google.com/105898452618087093313/Fumoir11_2011_PoriBoxKippis#5659766894030035698
https://picasaweb.google.com/105898452618087093313/Fumoir11_2011_PoriBoxKippis
<<tiddler PicasaJqueryincl>>
//{{{
//
// source: http://plugins.jquery.com/project/floatobject 1.4
//
// usage: jQuery(selector).makeFloat(params);
//
// where params is an object:
// x: number of pixels from the left of the window, or the string 'current' to use the current object location
// y: the same is x but for the Y axis
// speed: 'slow' , 'normal', 'fast'
//
// example: jQuery('#mydiv').makeFloat({x:'current',y:'100',speed:'normal'});
//
(function($){
/*----------------------------------------------------------------------------------
Class: FloatObject
-------------------------------------------------------------------------------------*/
function FloatObject(jqObj, params)
{
this.jqObj = jqObj;
switch(params.speed)
{
case 'fast': this.steps = 5; break;
case 'normal': this.steps = 10; break;
case 'slow': this.steps = 20; break;
default: this.steps = 10;
};
var offset = this.jqObj.offset();
this.currentX = offset.left;
this.currentY = offset.top;
this.width = this.jqObj.width();
this.height = this.jqObj.height();
this.alwaysVisible = params.alwaysVisible;
this.alwaysTop = params.alwaysTop;
this.origX = typeof(params.x) == "string" ? this.currentX : params.x;
this.origY = typeof(params.y) == "string" ? this.currentY : params.y;
//now we make sure the object is in absolute positions.
this.jqObj.css({'position':'absolute' , 'top':this.currentY ,'left':this.currentX});
}
FloatObject.prototype.updateLocation = function()
{
this.updatedX = $(window).scrollLeft() + this.origX;
if( this.alwaysTop == false ){
this.updatedY = $(window).scrollTop()+ this.origY;
if( this.alwaysVisible ){
if( this.origX + this.width > this.windowWidth() )
this.updatedX = this.windowWidth() - this.width + $(window).scrollLeft();
if( this.origY + this.height > this.windowHeight() )
{
this.updatedY = $(window).scrollTop() + this.windowHeight() - this.height;
if( this.updatedY < this.origY ) this.updatedY = this.origY;
}
}
}
else
{
if( $(window).scrollTop() > this.origY )
{
this.updatedY = $(window).scrollTop() + 5;
}
else
{
this.updatedY = this.origY + 5;
}
}
this.dx = Math.abs(this.updatedX - this.currentX );
this.dy = Math.abs(this.updatedY - this.currentY );
return this.dx || this.dy;
}
FloatObject.prototype.windowHeight = function()
{
var de = document.documentElement;
return self.innerHeight ||
(de && de.clientHeight) ||
document.body.clientHeight;
}
FloatObject.prototype.windowWidth = function()
{
var de = document.documentElement;
return self.innerWidth ||
(de && de.clientWidth) ||
document.body.clientWidth;
}
FloatObject.prototype.move = function()
{
if( this.jqObj.css("position") != "absolute" ) return;
var cx = 0;
var cy = 0;
if( this.dx > 0 )
{
if( this.dx < this.steps / 2 )
cx = (this.dx >= 1) ? 1 : 0;
else
cx = Math.round(this.dx/this.steps);
if( this.currentX < this.updatedX )
this.currentX += cx;
else
this.currentX -= cx;
}
if( this.dy > 0 )
{
if( this.dy < this.steps / 2 )
cy = (this.dy >= 1) ? 1 : 0;
else
cy = Math.round(this.dy/this.steps);
if( this.currentY < this.updatedY )
this.currentY += cy;
else
this.currentY -= cy;
}
this.jqObj.css({'left':this.currentX, 'top': this.currentY });
}
/*----------------------------------------------------------------------------------
Object: floatMgr
-------------------------------------------------------------------------------------*/
$.floatMgr = {
FOArray: new Array() ,
timer: null ,
initializeFO: function(jqObj,params)
{
var settings = $.extend({
x: 0 ,
y: 0 ,
speed: 'normal' ,
alwaysVisible: false ,
alwaysTop: false},params||{});
var newFO = new FloatObject(jqObj,settings);
$.floatMgr.FOArray.push(newFO);
if( !$.floatMgr.timer ) $.floatMgr.adjustFO();
//now making sure we are registered to all required window events
if( !$.floatMgr.registeredEvents )
{
$(window).bind("resize", $.floatMgr.onChange);
$(window).bind("scroll", $.floatMgr.onChange);
$.floatMgr.registeredEvents = true;
}
} ,
adjustFO: function()
{
$.floatMgr.timer = null;
var moveFO = false;
for( var i = 0 ; i < $.floatMgr.FOArray.length ; i++ )
{
FO = $.floatMgr.FOArray[i];
if( FO.updateLocation() ) moveFO = true;
}
if( moveFO )
{
for( var i = 0 ; i < $.floatMgr.FOArray.length ; i++ )
{
FO = $.floatMgr.FOArray[i];
FO.move();
}
if( !$.floatMgr.timer ) $.floatMgr.timer = setTimeout($.floatMgr.adjustFO,50);
}
} ,
stopFloatChk: false ,
onChange: function()
{
if( !$.floatMgr.timer && !$.floatMgr.stopFloatChk ) $.floatMgr.adjustFO();
}
};
/*----------------------------------------------------------------------------------
Function: makeFloat
-------------------------------------------------------------------------------------*/
$.fn.makeFloat = function(params) {
var obj = this.eq(0); //we only operate on the first selected object;
$.floatMgr.initializeFO(obj,params);
if( $.floatMgr.timer == null ) $.floatMgr.adjustFO();
return obj;
};
$.fn.stopFloat = function(params) {
$.floatMgr.stopFloatChk = true;
};
$.fn.restartFloat = function(params) {
$.floatMgr.stopFloatChk = false;
};
})(jQuery);
//}}}
Here are some examples that show the usage of the write action in the ForEachTiddlerMacro.
//''Select and Sort Examples''//
* InClauseExamples
* WhereClauseExamples
* SortClauseExamples
* ScriptClauseExamples
//''Action Examples''//
* AddToListActionExamples
* WriteActionExamples
Of cause you may also combine the examples, e.g. taking the whereClause of one example, the sortClause of a second and the action of a third.
//~~(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|FramedLinksPlugin|
|Source|http://www.TiddlyTools.com/#FramedLinksPlugin|
|Version|1.1.1|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|clicking an external link opens an IFRAME following the link instead of opening a new tab/window|
This plugin causes clicks on external links to be rendered as inline frames (~IFRAMEs) instead of opening new browser tabs/windows.
!!!!!Usage
<<<
Use standard TiddlyWiki external link syntax into your tiddler content. If {{{chkFramedLinks}}} is enabled or the tiddler is tagged with 'gallery' (see Configuration), then whenever you click the external link an IFRAME will be dynamically added to the content. Clicking on the link again removes the IFRAME. Hold down any modifier (shift, control, or alt) while clicking a link ''temporarily'' bypasses the IFRAME handling and use the standard link handling behavior.
<<<
!!!!!Configuration
<<<
<<option chkFramedLinks>> display inline frames for all external links
{{{<<option chkFramedLinks>>}}}
<<option chkFramedLinksTag>> display inline frames for external links in tiddlers tagged with: <<option txtFramedLinksTag>>
{{{<<option chkFramedLinksTag>> <<option txtFramedLinksTag>>}}}
IFRAME size (CSS units: %, em, px, cm, in) - width: <<option txtFrameWidth>> height: <<option txtFrameHeight>>
{{{<<option txtFrameWidth>> <<option txtFrameHeight>>}}}
<<<
!!!!!Examples
<<<
Try these links:
*http://www.TiddlyWiki.com
*[[swf munder blackout test|http://museum.99k.org/divDK/poriMBEeffect.swf]]
*[[test|http://preso.tiddlyspace.com/#[[OverlayMenu]]]]
<<<
!!!!!Revisions
<<<
2008.11.14 [1.1.1] fixed handling for external links embedded in //shadow// tiddlers
2008.09.13 [1.1.0] added support to selectively enable embedded IFRAMEs if the containing tiddler is tagged with 'framedLinks'
2007.11.29 [1.0.5] added slider animation and improved CSS handling for IFRAME height/width to maximize display area
2007.11.29 [1.0.0] initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.FramedLinksPlugin= {major: 1, minor: 1, revision: 1, date: new Date(2008,11,14)};
var co=config.options; // abbreviation
if (co.chkFramedLinks==undefined) co.chkFramedLinks=false;
if (co.chkFramedLinksTag==undefined) co.chkFramedLinksTag=true;
if (co.txtFramedLinksTag==undefined) co.txtFramedLinksTag="framedLinks";
if (co.txtFrameWidth==undefined) co.txtFrameWidth="100%";
if (co.txtFrameHeight==undefined) co.txtFrameHeight="80%";
window.framedLinks_createExternalLink=createExternalLink;
window.createExternalLink=function(place,url)
{
var link=this.framedLinks_createExternalLink.apply(this,arguments);
link.onclick=function(ev) { var e=ev?ev:window.event;
var co=config.options; // abbreviation
var here=story.findContainingTiddler(this);
if (here) var tid=store.getTiddler(here.getAttribute("tiddler"));
var enabled=co.chkFramedLinks || co.chkFramedLinksTag && tid && tid.isTagged(co.txtFramedLinksTag);
if (!enabled || e.ctrlKey || e.shiftKey || e.altKey) return; // BYPASS
var p=this.parentNode;
var f=this.nextSibling?this.nextSibling.firstChild:null; // get the IFRAME... maybe...
var w=co.txtFrameWidth; if (!w || !w.length) w="100%";
var h=co.txtFrameHeight; if (!h || !h.length) h="80%";
if (h.indexOf("%")) h=(findWindowHeight()*h.replace(/%/,"")/100)+"px"; // calc height as % of window
var showing=f && f.nodeName.toUpperCase()=="IFRAME"; // does IFRAME really exist?
var stretchCell=p.nodeName.toUpperCase()=="TD" && w.indexOf("%")!=-1 && w.replace(/%/,"")>=100;
if (!showing) { // create an iframe
link.style.display="block"; // force IFRAME onto line following link
if (stretchCell) { p.setAttribute("savedWidth",p.style.width); p.style.width="100%"; } // adjust TD so IFRAME stretches
var wrapper=createTiddlyElement(null,"span"); // wrapper for slider animation
wrapper.setAttribute("url",this.href); // for async loading of frame after animation completes
var f=createTiddlyElement(wrapper,"iframe"); // create IFRAME
f.style.backgroundColor="#fff"; f.style.width=w; f.style.height=h;
p.insertBefore(wrapper,this.nextSibling);
function loadURL(wrapper) { var f=wrapper.firstChild; var url=wrapper.getAttribute("url");
var d=f.contentDocument?f.contentDocument:(f.contentWindow?f.contentWindow.document:f.document);
d.open(); d.writeln("<html>connecting to "+url+"</html>"); d.close();
try { f.src=url; } // if the iframe can't handle the href
catch(e) { alert(e.description?e.description:e.toString()); } // ... then report the error
window.scrollTo(0,ensureVisible(wrapper));
}
if (!co.chkAnimate) loadURL(wrapper);
else {
var morph=new Slider(wrapper,true);
morph.callback=loadURL;
morph.properties.push({style: 'width', start: 0, end: 100, template: '%0%'});
anim.startAnimating(morph);
}
} else { // remove iframe
link.style.display="inline"; // restore link style
if (stretchCell) p.style.width=p.getAttribute("savedWidth"); // restore previous width of TD
if (!co.chkAnimate) p.removeChild(f.parentNode);
else {
var morph=new Slider(f.parentNode,false,false,"all");
morph.properties.push({style: 'width', start: 100, end: 0, template: '%0%'});
anim.startAnimating(morph);
}
}
e.cancelBubble=true; if (e.stopPropagation) e.stopPropagation(); return false;
}
return link;
}
//}}}
https://picasaweb.google.com/105898452618087093313/Freewheel
A post-En Fanfare! exercise including kitchen receipts, PS tricks and Tour de France anecdotes (since 2006 ?) send by post, minimal selling or gift (10n° until today jan.2012)
<<tiddler PicasaJqueryincl>>
<<<
Beginning 2008 former LP BDP formula commuted in new rastafari smoking disaster : ''FUMOIR''
<<<
[<img(220px,auto)[alt_text|http://bit.ly/d2I6qr]][img(220px,auto)[alt_text|http://goo.gl/10jTv]]
@@bgcolor(#ccc):2008:@@
[[Fumoir 1 - 03/2008 LL (Lieve Lambrecht) L’éveil à l’envers|FU01-LL L’éveil à L’envers]]
[[Fumoir 2 - 07/2008 The 1.000.000 $ Pic -Nic|FU02_1.000.000 $$ Pic -Nic / 2008]]
[[Fumoir 3 - 08/2008 MRCVE + J.Permentier + V.Trabalza /|FU03 - 08/2008 MRCVE + J.Permentier + V.Trabalza /]]
@@bgcolor(#ccc):2009:@@
[[Fumoir 4 - 07/2009 Odie Rynell CASH and a few Rastafari Abstracts / |FU04-Odie Rynell Cash+ extras]]
@@bgcolor(#ffd):Fumoir 5@@ - 10/2009 Oô Myth ho.. Michel Clerbois/ Simulacrum Piotr Osuskiewicz /
@@bgcolor(#ccc):2010:@@
@@bgcolor(#ffd):Fumoir 6@@ - 2010 Fabada/
[[Fumoir 7 - 2010 Frederic Tolmatcheff |FU07-Frédéric Tolmatcheff]]
@@bgcolor(#ffd):Fumoir 8@@ - 2010 Bowling DK /
[[Fumoir 9 - 2010 Mc Keta prjcts|FU09-Mc Keta prjcts]]
@@bgcolor(#ccc):2011:@@
[[Fumoir 10 - Tiroir Club|FU10 - Tiroir Club Guy Cardoso incl MFA]]
[[Fumoir 11 -Pori Box Kippis|FU11_Pori Box Kippis]]
[[Fumoir 12- Hinten sein vorne dasein Stefan Bohnenberger|FU-12 HINTEN SEIN VORNE DASEIN Stefan Bohnenberger]]
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)
* [[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>>
/***
|Name:|HideWhenPlugin|
|Description:|Allows conditional inclusion/exclusion in templates|
|Version:|4.0.0|
|Date:|2010-09-09|
|Author:|Simon Baird, Tobias Beer|
|Source:|http://mptw.tiddlyspot.com/#HideWhenPlugin|
|License:|http://mptw.tiddlyspot.com/#TheBSDLicense|
For use in ViewTemplate and EditTemplate. Example usage:
{{{<div macro="showWhenTagged Task">[[TaskToolbar]]</div>}}}
{{{<div macro="showWhen tiddler.modifier == 'BartSimpson'"><img src="bart.gif"/></div>}}}
***/
//{{{
window.hideWhenLastTest = false;
window.removeElementWhen = function(test,place) {
window.hideWhenLastTest = test;
if(test){
removeChildren(place);
place.parentNode.removeChild(place);
}
};
(function(){
var s,show=false,f,fs={
When:'eval(paramString)',
WhenTagged:'tiddler.tags.containsAll(params)',
WhenTaggedAny:'tiddler.tags.containsAny(params)',
WhenTaggedAll:'tiddler.tags.containsAll(params)',
WhenExists:'store.tiddlerExists(params[0]) || store.isShadowTiddler(params[0])',
TitleIs:'tiddler.title == params[0]',
'"else"':'!window.hideWhenLastTest'
}
for(var f in fs){
do{
s=f=='"else"'?'':(show?'show':'hide');
eval('merge(config.macros,{\n'+s+f+':{\n'+
'handler:function(place,macroName,params,wikifier,paramString,tiddler){\n'+
'removeElementWhen('+(show?'!':'')+fs[f]+',place);\n'+
'}}});');
show=!show&&s!='';
}while(show);
}
})();
//}}}
''PIERRE CORNUT : La Course'' @@color(#0066cc)://FUMOIR 13//@@
viewable on sat 12 & 19 may 2012 ''(3-8 PM)''
at FUMOIR local Brussels
https://picasaweb.google.com/105898452618087093313/Mumoir13_LaCourse#5740812764456865986
''DIALOGIST-KANTOR''
INCONCEVABLE CATALOOG
Opening 6 mei 16 uur
[img[alt_text|http://2.bp.blogspot.com/-E2C2fdylbYc/T5fp6lniGrI/AAAAAAAAAgo/5XN9TG5aFR0/s640/DKaffiVoorkant.jpg]]
[img[alt_text|http://www.beersel.be/free/signatuur/mailsignatuur_logo_teirlinck.gif]]
MUSEUM EN GALERIE Uwenberg 14 • 1650 Beersel
tel. 02 359 16 43
CORRESPONDENTIE Alsembergsteenweg 1046 • 1652 Alsemberg
Het Herman Teirlinckhuis is een initiatief van de gemeente Beersel.
<<tiddler [[2012_Pistologie / Savate Atlas]]>>
<<tiddler [[DK img map]]>>
DK 1992-2012 :)
@@bgcolor(#ffff33):
still availlable HINTEN SEIN VORNE DASEIN by Stefan BONHENBERGER for Fumoir 12 - 100 ex 34 pp [[contact DK|ask/contact]]@@ +
Interview de Stefan Bohnenberger par Josef Schlecht
au salon de réception de l‘hôtel Baur, à Zurique, le 18 Novembre 2011 [[here|http://dk500.tiddlyspot.com/#InterviewSBFumoir11]]
https://picasaweb.google.com/105898452618087093313/HintenSein2010#5698604247367878434
<<tiddler [[What's New]]>>
[img(430px,auto)[alt_text|http://janvirtanen.fi/kulttuuritoimi/taidemuseo/tyopaja/content/images/large/_MG_1452.jpg]]
Pori Museum FINLAND -Vagabondages 2011 (workshop at Pori taidemuseo - photo © Jan virtanen)
''LINK'' ''http://t.co/XR7lZYq ''
@@bgcolor(#999999):Spend a penny Pothead 2008 (Miete Strom Holtz serie 1)@@
https://picasaweb.google.com/105898452618087093313/SpendAPennyPOTHEAD#5678700083588472386
<<tiddler [[2000_ ou bien Ou bien]]>>
<<tiddler [[2011_Iselp Entre pas cher et gratuit (video)]]>>
<<tiddler [[FU11_Pori Box Kippis]]>>
@@bgcolor(#99cc66):installation ISELP 2011@@
<<tiddler [[2011_Iselp Entre pas cher et gratuit]]>>
https://picasaweb.google.com/105898452618087093313/TYPOSDKDIV#5650680602568892530
Typo for first ~Dialogist-Kantor [[Saint-Martin action in ccjf Brussels|2006_Saint Martin version 01]] (2006)
see More on [[MIX +|Mix+]]
<<tiddler PicasaJqueryincl>>
<<tiddler ColorBoxInclude>>
/***
|Name|ImageSizePlugin|
|Source|http://www.TiddlyTools.com/#ImageSizePlugin|
|Version|1.2.2|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|adds support for resizing images|
This plugin adds optional syntax to scale an image to a specified width and height and/or interactively resize the image with the mouse.
!!!!!Usage
<<<
The extended image syntax is:
{{{
[img(w+,h+)[...][...]]
}}}
where ''(w,h)'' indicates the desired width and height (in CSS units, e.g., px, em, cm, in, or %). Use ''auto'' (or a blank value) for either dimension to scale that dimension proportionally (i.e., maintain the aspect ratio). You can also calculate a CSS value 'on-the-fly' by using a //javascript expression// enclosed between """{{""" and """}}""". Appending a plus sign (+) to a dimension enables interactive resizing in that dimension (by dragging the mouse inside the image). Use ~SHIFT-click to show the full-sized (un-scaled) image. Use ~CTRL-click to restore the starting size (either scaled or full-sized).
<<<
!!!!!Examples
<<<
{{{
[img(100px+,75px+)[images/meow2.jpg]]
}}}
[img(100px+,75px+)[images/meow2.jpg]]
{{{
[<img(34%+,+)[images/meow.gif]]
[<img(21% ,+)[images/meow.gif]]
[<img(13%+, )[images/meow.gif]]
[<img( 8%+, )[images/meow.gif]]
[<img( 5% , )[images/meow.gif]]
[<img( 3% , )[images/meow.gif]]
[<img( 2% , )[images/meow.gif]]
[img( 1%+,+)[images/meow.gif]]
}}}
[<img(34%+,+)[images/meow.gif]]
[<img(21% ,+)[images/meow.gif]]
[<img(13%+, )[images/meow.gif]]
[<img( 8%+, )[images/meow.gif]]
[<img( 5% , )[images/meow.gif]]
[<img( 3% , )[images/meow.gif]]
[<img( 2% , )[images/meow.gif]]
[img( 1%+,+)[images/meow.gif]]
{{tagClear{
}}}
<<<
!!!!!Revisions
<<<
2010.07.24 [1.2.2] moved tip/dragtip text to config.formatterHelpers.imageSize object to enable customization
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: 2, date: new Date(2010,7,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.imageSize={
tip: 'SHIFT-CLICK=show full size, CTRL-CLICK=restore initial size',
dragtip: 'DRAG=stretch/shrink, '
}
config.formatterHelpers.addStretchHandlers=function(e,stretchW,stretchH) {
e.title=((stretchW||stretchH)?this.imageSize.dragtip:'')+this.imageSize.tip;
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|InlineJavascriptPlugin|
|Source|http://www.TiddlyTools.com/#InlineJavascriptPlugin|
|Documentation|http://www.TiddlyTools.com/#InlineJavascriptPluginInfo|
|Version|1.9.5|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|Insert Javascript executable code directly into your tiddler content.|
''Call directly into TW core utility routines, define new functions, calculate values, add dynamically-generated TiddlyWiki-formatted output'' into tiddler content, or perform any other programmatic actions each time the tiddler is rendered.
!!!!!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(/^#/,'')); } }
//}}}
/***
|Name|InlineJavascriptPluginInfo|
|Source|http://www.TiddlyTools.com/#InlineJavascriptPlugin|
|Documentation|http://www.TiddlyTools.com/#InlineJavascriptPluginInfo|
|Version|1.9.4|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|documentation|
|Description|Documentation for InlineJavascriptPlugin|
''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.
!!!!!Usage
<<<
This plugin adds wiki syntax for surrounding tiddler content with {{{<script>}}} and {{{</script>}}} markers, so that it can be recognized as embedded javascript code.
<script show>
/* javascript code goes here... */
</script>Every time the tiddler content is rendered, the javascript code is automatically evaluated, allowing you to invoke 'side-effect' processing and/or produce dynamically-generated content that is then inserted into the tiddler content, immediately following the script (see below). By including the optional ''show'' keyword as the final parameter in a {{{<script>}}} marker, the plugin will also include the script source code in the output that it displays in the tiddler. This is helpful when creating examples for documentation purposes (such as used in this tiddler!)
__''Deferred execution from an 'onClick' link''__
<script label="click here" title="mouseover tooltip text" key="X" show>
/* javascript code goes here... */
alert('you clicked on the link!');
</script>
By including a {{{label="..."}}} parameter in the initial {{{<script>}}} marker, the plugin will create a link to an 'onclick' script that will only be executed when that specific link is clicked, rather than running the script each time the tiddler is rendered. You may also include a {{{title="..."}}} parameter to specify the 'tooltip' text that will appear whenever the mouse is moved over the onClick link text, and a {{{key="X"}}} parameter to specify an //access key// (which must be a //single// letter or numeric digit only).
__''Loading scripts from external source files''__
<script src="URL" show>
/* optional javascript code goes here... */
</script>You can also load javascript directly from an external source URL, by including a src="..." parameter in the initial {{{<script>}}} marker (e.g., {{{<script src="demo.js"></script>}}}). This is particularly useful when incorporating third-party javascript libraries for use in custom extensions and plugins. The 'foreign' javascript code remains isolated in a separate file that can be easily replaced whenever an updated library file becomes available.
In addition to loading the javascript from the external file, you can also use this feature to invoke javascript code contained within the {{{<script>...</script>}}} markers. This code is invoked //after// the external script file has been processed, and can make immediate use of the functions and/or global variables defined by the external script file.
>Note: To ensure that your javascript functions are always available when needed, you should load the libraries from a tiddler that is rendered as soon as your TiddlyWiki document is opened, such as MainMenu. For example: put your {{{<script src="..."></script>}}} syntax into a separate 'library' tiddler (e.g., LoadScripts), and then add {{{<<tiddler LoadScripts>>}}} to MainMenu so that the library is loaded before any other tiddlers that rely upon the functions it defines.
>
>Normally, loading external javascript in this way does not produce any direct output, and should not have any impact on the appearance of your MainMenu. However, if your LoadScripts tiddler contains notes or other visible content, you can suppress this output by using 'inline CSS' in the MainMenu, like this: {{{@@display:none;<<tiddler LoadScripts>>@@}}}
<<<
!!!!!Creating dynamic tiddler content and accessing the ~TiddlyWiki DOM
<<<
An important difference between TiddlyWiki inline scripting and conventional embedded javascript techniques for web pages is the method used to produce output that is dynamically inserted into the document: in a typical web document, you use the {{{document.write()}}} (or {{{document.writeln()}}}) function to output text sequences (often containing HTML tags) that are then rendered when the entire document is first loaded into the browser window.
However, in a ~TiddlyWiki document, tiddlers (and other DOM elements) are created, deleted, and rendered "on-the-fly", so writing directly to the global 'document' object does not produce the results you want (i.e., replacing the embedded script within the tiddler content), and instead will //completely replace the entire ~TiddlyWiki document in your browser window (which is clearly not a good thing!)//. In order to allow scripts to use {{{document.write()}}}, the plugin automatically converts and buffers all HTML output so it can be safely inserted into your tiddler content, immediately following the script.
''Note that {{{document.write()}}} can only be used to output "pure HTML" syntax. To produce //wiki-formatted// output, your script should instead return a text value containing the desired wiki-syntax content'', which will then be automatically rendered immediately following the script. If returning a text value is not sufficient for your needs, the plugin also provides an automatically-defined variable, 'place', that gives the script code ''direct access to the //containing DOM element//'' into which the tiddler output is being rendered. You can use this variable to ''perform direct DOM manipulations'' that can, for example:
* generate wiki-formatted output using {{{wikify("...content...",place)}}}
* vary the script's actions based upon the DOM element in which it is embedded
* access 'tiddler-relative' DOM information using {{{story.findContainingTiddler(place)}}}
Note:
''When using an 'onclick' script, the 'place' element actually refers to the onclick //link text// itself, instead of the containing DOM element.'' This permits you to directly reference or modify the link text to reflect any 'stateful' conditions that might set by the script. To refer to the containing DOM element from within an 'onclick' script, you can use "place.parentNode" instead.
<<<
!!!!!Instant "bookmarklets"
<<<
You can also use an 'onclick' link to define a "bookmarklet": a small piece of javascript that can be ''invoked directly from the browser without having to be defined within the current document.'' This allows you to create 'stand-alone' commands that can be applied to virtually ANY TiddlyWiki document... even remotely-hosted documents that have been written by others!! To create a bookmarklet, simply define an 'onclick' script and then grab the resulting link text and drag-and-drop it onto your browser's toolbar (or right-click and use the 'bookmark this link' command to add it to the browser's menu).
Notes:
*When writing scripts intended for use as bookmarklets, due to the ~URI-encoding required by the browser, ''you cannot not use ANY double-quotes (") within the bookmarklet script code.''
*All comments embedded in the bookmarklet script must ''use the fully-delimited {{{/* ... */}}} comment syntax,'' rather than the shorter {{{//}}} comment syntax.
*Most importantly, because bookmarklets are invoked directly from the browser interface and are not embedded within the TiddlyWiki document, there is NO containing 'place' DOM element surrounding the script. As a result, ''you cannot use a bookmarklet to generate dynamic output in your document,'' and using {{{document.write()}}} or returning wiki-syntax text or making reference to the 'place' DOM element will halt the script and report a "Reference Error" when that bookmarklet is invoked.
Please see [[InstantBookmarklets]] for many examples of 'onclick' scripts that can also be used as bookmarklets.
<<<
!!!!!Special reserved function name
<<<
The plugin 'wraps' all inline javascript code inside a function, {{{_out()}}}, so that any return value you provide can be correctly handled by the plugin and inserted into the tiddler. To avoid unpredictable results (and possibly fatal execution errors), this function should never be redefined or called from ''within'' your script code.
<<<
!!!!!$(...) 'shorthand' function
<<<
As described by Dustin Diaz [[here|http://www.dustindiaz.com/top-ten-javascript/]], the plugin defines a 'shorthand' function that allows you to write:
{{{
$(id)
}}}
in place of the normal standard javascript syntax:
{{{
document.getElementById(id)
}}}
This function is provided merely as a convenience for javascript coders that may be familiar with this abbreviation, in order to allow them to save a few bytes when writing their own inline script code.
<<<
!!!!!Examples
<<<
simple dynamic output:
><script show>
document.write("The current date/time is: "+(new Date())+"<br>");
return "link to current user: [["+config.options.txtUserName+"]]\n";
</script>
dynamic output using 'place' to get size information for current tiddler:
><script show>
if (!window.story) window.story=window;
var title=story.findContainingTiddler(place).getAttribute("tiddler");
var size=store.getTiddlerText(title).length;
return title+" is using "+size+" bytes";
</script>
dynamic output from an 'onclick' script, using {{{document.write()}}} and/or {{{return "..."}}}
><script label="click here" show>
document.write("<br>The current date/time is: "+(new Date())+"<br>");
return "link to current user: [["+config.options.txtUserName+"]]\n";
</script>
creating an 'onclick' button/link that accesses the link text AND the containing tiddler:
><script label="click here" title="clicking this link will show an 'alert' box" key="H" show>
if (!window.story) window.story=window;
var txt=place.firstChild.data;
var tid=story.findContainingTiddler(place).getAttribute('tiddler');
alert('Hello World!\nlinktext='+txt+'\ntiddler='+tid);
</script>
dynamically setting onclick link text based on stateful information:
>{{block{
{{{
<script label="click here">
/* toggle "txtSomething" value */
var on=(config.txtSomething=="ON");
place.innerHTML=on?"enable":"disable";
config.txtSomething=on?"OFF":"ON";
return "\nThe current value is: "+config.txtSomething;
</script><script>
/* initialize onclick link text based on current "txtSomething" value */
var on=(config.txtSomething=="ON");
place.lastChild.previousSibling.innerHTML=on?"disable":"enable";
</script>
}}}
<script label="click here">
/* toggle "txtSomething" value */
var on=(config.txtSomething=="ON");
place.innerHTML=on?"enable":"disable";
config.txtSomething=on?"OFF":"ON";
return "\nThe current value is: "+config.txtSomething;
</script><script>
/* initialize onclick link text based on current "txtSomething" value */
var on=(config.txtSomething=="ON");
place.lastChild.innerHTML=on?"enable":"disable";
</script>
}}}
loading a script from a source url:
>http://www.TiddlyTools.com/demo.js contains:
>>{{{function inlineJavascriptDemo() { alert('Hello from demo.js!!') } }}}
>>{{{displayMessage('InlineJavascriptPlugin: demo.js has been loaded');}}}
>note: When using this example on your local system, you will need to download the external script file from the above URL and install it into the same directory as your document.
>
><script src="demo.js" show>
return "inlineJavascriptDemo() function has been defined"
</script>
><script label="click to invoke inlineJavascriptDemo()" key="D" show>
inlineJavascriptDemo();
</script>
<<<
!!!!!Revisions
<<<
2009.02.26 1.9.4 in $(), handle leading '#' on ID for compatibility with JQuery syntax
2008.06.11 1.9.3 added $(...) function as 'shorthand' for document.getElementById()
2008.03.03 1.9.2 corrected fallback declaration of wikifyPlainText() (fixes Safari "parse error")
2008.02.23 1.9.1 in onclick function, use string instead of array for 'bufferedHTML' (fixes IE errors)
2008.02.21 1.9.0 output from 'onclick' scripts (return value or document.write() calls) are now buffered and rendered into into a span following the script. Also, added default 'return false' handling if no return value provided (prevents HREF from being triggered -- return TRUE to allow HREF to be processed). Thanks to Xavier Verges for suggestion and preliminary code.
2008.02.14 1.8.1 added backward-compatibility for use of wikifyPlainText() in TW2.1.3 and earlier
2008.01.08 [*.*.*] plugin size reduction: documentation moved to ...Info tiddler
2007.12.28 1.8.0 added support for key="X" syntax to specify custom access key definitions
2007.12.15 1.7.0 autogenerate URI encoded HREF on links for onclick scripts. Drag links to browser toolbar to create bookmarklets. IMPORTANT NOTE: place is NOT defined when scripts are used as bookmarklets. In addition, double-quotes will cause syntax errors. Thanks to PaulReiber for debugging and brainstorming.
2007.11.26 1.6.2 when converting "document.write()" function calls in inline code, allow whitespace between "write" and "(" so that "document.write ( foobar )" is properly converted.
2007.11.16 1.6.1 when rendering "onclick scripts", pass label text through wikifyPlainText() to parse any embedded wiki-syntax to enable use of HTML entities or even TW macros to generate dynamic label text.
2007.02.19 1.6.0 added support for title="..." to specify mouseover tooltip when using an onclick (label="...") script
2006.10.16 1.5.2 add newline before closing '}' in 'function out_' wrapper. Fixes error caused when last line of script is a comment.
2006.06.01 1.5.1 when calling wikify() on script return value, pass hightlightRegExp and tiddler params so macros that rely on these values can render properly
2006.04.19 1.5.0 added 'show' parameter to force display of javascript source code in tiddler output
2006.01.05 1.4.0 added support 'onclick' scripts. When label="..." param is present, a button/link is created using the indicated label text, and the script is only executed when the button/link is clicked. 'place' value is set to match the clicked button/link element.
2005.12.13 1.3.1 when catching eval error in IE, e.description contains the error text, instead of e.toString(). Fixed error reporting so IE shows the correct response text. Based on a suggestion by UdoBorkowski
2005.11.09 1.3.0 for 'inline' scripts (i.e., not scripts loaded with src="..."), automatically replace calls to 'document.write()' with 'place.innerHTML+=' so script output is directed into tiddler content. Based on a suggestion by BradleyMeck
2005.11.08 1.2.0 handle loading of javascript from an external URL via src="..." syntax
2005.11.08 1.1.0 pass 'place' param into scripts to provide direct DOM access
2005.11.08 1.0.0 initial release
<<<
Let's see if something will come out of this simplifying TiddlyWiki css debugging.
/***
|''Name:''|IntelliTaggerPlugin|
|''Version:''|1.0.2 (2007-07-25)|
|''Type:''|plugin|
|''Source:''|http://tiddlywiki.abego-software.de/#IntelliTaggerPlugin|
|''Author:''|Udo Borkowski (ub [at] abego-software [dot] de)|
|''Documentation:''|[[IntelliTaggerPlugin Documentation]]|
|''~SourceCode:''|[[IntelliTaggerPlugin SourceCode]]|
|''Licence:''|[[BSD open source license (abego Software)]]|
|''~CoreVersion:''|2.0.8|
|''Browser:''|Firefox 1.5.0.2 or better|
***/
/***
!Version History
* 1.0.2 (2007-07-25):
** Feature: "Return" key may be used to accept first tag suggestion (beside "Alt-1")
** Bugfix: Keyboard shortcuts (Alt+3 etc.) shifted
* 1.0.1 (2007-05-18): Improvement: Speedup when using TiddlyWikis with many tags
* 1.0.0 (2006-04-26): Initial release
***/
// /%
if(!version.extensions.IntelliTaggerPlugin){if(!window.abego){window.abego={};}if(!abego.internal){abego.internal={};}abego.alertAndThrow=function(s){alert(s);throw s;};if(version.major<2){abego.alertAndThrow("Use TiddlyWiki 2.0.8 or better to run the IntelliTagger Plugin.");}version.extensions.IntelliTaggerPlugin={major:1,minor:0,revision:2,date:new Date(2007,6,25),type:"plugin",source:"http://tiddlywiki.abego-software.de/#IntelliTaggerPlugin",documentation:"[[IntelliTaggerPlugin Documentation]]",sourcecode:"[[IntelliTaggerPlugin SourceCode]]",author:"Udo Borkowski (ub [at] abego-software [dot] de)",licence:"[[BSD open source license (abego Software)]]",tiddlywiki:"Version 2.0.8 or better",browser:"Firefox 1.5.0.2 or better"};abego.createEllipsis=function(_2){var e=createTiddlyElement(_2,"span");e.innerHTML="…";};abego.isPopupOpen=function(_4){return _4&&_4.parentNode==document.body;};abego.openAsPopup=function(_5){if(_5.parentNode!=document.body){document.body.appendChild(_5);}};abego.closePopup=function(_6){if(abego.isPopupOpen(_6)){document.body.removeChild(_6);}};abego.getWindowRect=function(){return {left:findScrollX(),top:findScrollY(),height:findWindowHeight(),width:findWindowWidth()};};abego.moveElement=function(_7,_8,_9){_7.style.left=_8+"px";_7.style.top=_9+"px";};abego.centerOnWindow=function(_a){if(_a.style.position!="absolute"){throw "abego.centerOnWindow: element must have absolute position";}var _b=abego.getWindowRect();abego.moveElement(_a,_b.left+(_b.width-_a.offsetWidth)/2,_b.top+(_b.height-_a.offsetHeight)/2);};abego.isDescendantOrSelf=function(_c,e){while(e){if(_c==e){return true;}e=e.parentNode;}return false;};abego.toSet=function(_e){var _f={};for(var i=0;i<_e.length;i++){_f[_e[i]]=true;}return _f;};abego.filterStrings=function(_11,_12,_13){var _14=[];for(var i=0;i<_11.length&&(_13===undefined||_14.length<_13);i++){var s=_11[i];if(s.match(_12)){_14.push(s);}}return _14;};abego.arraysAreEqual=function(a,b){if(!a){return !b;}if(!b){return false;}var n=a.length;if(n!=b.length){return false;}for(var i=0;i<n;i++){if(a[i]!=b[i]){return false;}}return true;};abego.moveBelowAndClip=function(_1b,_1c){if(!_1c){return;}var _1d=findPosX(_1c);var _1e=findPosY(_1c);var _1f=_1c.offsetHeight;var _20=_1d;var _21=_1e+_1f;var _22=findWindowWidth();if(_22<_1b.offsetWidth){_1b.style.width=(_22-100)+"px";}var _23=_1b.offsetWidth;if(_20+_23>_22){_20=_22-_23-30;}if(_20<0){_20=0;}_1b.style.left=_20+"px";_1b.style.top=_21+"px";_1b.style.display="block";};abego.compareStrings=function(a,b){return (a==b)?0:(a<b)?-1:1;};abego.sortIgnoreCase=function(arr){var _27=[];var n=arr.length;for(var i=0;i<n;i++){var s=arr[i];_27.push([s.toString().toLowerCase(),s]);}_27.sort(function(a,b){return (a[0]==b[0])?0:(a[0]<b[0])?-1:1;});for(i=0;i<n;i++){arr[i]=_27[i][1];}};abego.getTiddlerField=function(_2d,_2e,_2f){var _30=document.getElementById(_2d.idPrefix+_2e);var e=null;if(_30!=null){var _32=_30.getElementsByTagName("*");for(var t=0;t<_32.length;t++){var c=_32[t];if(c.tagName.toLowerCase()=="input"||c.tagName.toLowerCase()=="textarea"){if(!e){e=c;}if(c.getAttribute("edit")==_2f){e=c;}}}}return e;};abego.setRange=function(_35,_36,end){if(_35.setSelectionRange){_35.setSelectionRange(_36,end);var max=0+_35.scrollHeight;var len=_35.textLength;var top=max*_36/len,bot=max*end/len;_35.scrollTop=Math.min(top,(bot+top-_35.clientHeight)/2);}else{if(_35.createTextRange!=undefined){var _3b=_35.createTextRange();_3b.collapse();_3b.moveEnd("character",end);_3b.moveStart("character",_36);_3b.select();}else{_35.select();}}};abego.internal.TagManager=function(){var _3c=null;var _3d=function(){if(_3c){return;}_3c={};store.forEachTiddler(function(_3e,_3f){for(var i=0;i<_3f.tags.length;i++){var tag=_3f.tags[i];var _42=_3c[tag];if(!_42){_42=_3c[tag]={count:0,tiddlers:{}};}_42.tiddlers[_3f.title]=true;_42.count+=1;}});};var _43=TiddlyWiki.prototype.saveTiddler;TiddlyWiki.prototype.saveTiddler=function(_44,_45,_46,_47,_48,_49){var _4a=this.fetchTiddler(_44);var _4b=_4a?_4a.tags:[];var _4c=(typeof _49=="string")?_49.readBracketedList():_49;_43.apply(this,arguments);if(!abego.arraysAreEqual(_4b,_4c)){abego.internal.getTagManager().reset();}};var _4d=TiddlyWiki.prototype.removeTiddler;TiddlyWiki.prototype.removeTiddler=function(_4e){var _4f=this.fetchTiddler(_4e);var _50=_4f&&_4f.tags.length>0;_4d.apply(this,arguments);if(_50){abego.internal.getTagManager().reset();}};this.reset=function(){_3c=null;};this.getTiddlersWithTag=function(tag){_3d();var _52=_3c[tag];return _52?_52.tiddlers:null;};this.getAllTags=function(_53){_3d();var _54=[];for(var i in _3c){_54.push(i);}for(i=0;_53&&i<_53.length;i++){_54.pushUnique(_53[i],true);}abego.sortIgnoreCase(_54);return _54;};this.getTagInfos=function(){_3d();var _56=[];for(var _57 in _3c){_56.push([_57,_3c[_57]]);}return _56;};var _58=function(a,b){var a1=a[1];var b1=b[1];var d=b[1].count-a[1].count;return d!=0?d:abego.compareStrings(a[0].toLowerCase(),b[0].toLowerCase());};this.getSortedTagInfos=function(){_3d();var _5e=this.getTagInfos();_5e.sort(_58);return _5e;};this.getPartnerRankedTags=function(_5f){var _60={};for(var i=0;i<_5f.length;i++){var _62=this.getTiddlersWithTag(_5f[i]);for(var _63 in _62){var _64=store.getTiddler(_63);if(!(_64 instanceof Tiddler)){continue;}for(var j=0;j<_64.tags.length;j++){var tag=_64.tags[j];var c=_60[tag];_60[tag]=c?c+1:1;}}}var _68=abego.toSet(_5f);var _69=[];for(var n in _60){if(!_68[n]){_69.push(n);}}_69.sort(function(a,b){var d=_60[b]-_60[a];return d!=0?d:abego.compareStrings(a.toLowerCase(),b.toLowerCase());});return _69;};};abego.internal.getTagManager=function(){if(!abego.internal.gTagManager){abego.internal.gTagManager=new abego.internal.TagManager();}return abego.internal.gTagManager;};(function(){var _6e=2;var _6f=1;var _70=30;var _71;var _72;var _73;var _74;var _75;var _76;if(!abego.IntelliTagger){abego.IntelliTagger={};}var _77=function(){return _72;};var _78=function(tag){return _75[tag];};var _7a=function(s){var i=s.lastIndexOf(" ");return (i>=0)?s.substr(0,i):"";};var _7d=function(_7e){var s=_7e.value;var len=s.length;return (len>0&&s[len-1]!=" ");};var _81=function(_82){var s=_82.value;var len=s.length;if(len>0&&s[len-1]!=" "){_82.value+=" ";}};var _85=function(tag,_87,_88){if(_7d(_87)){_87.value=_7a(_87.value);}story.setTiddlerTag(_88.title,tag,0);_81(_87);abego.IntelliTagger.assistTagging(_87,_88);};var _89=function(n){if(_76&&_76.length>n){return _76[n];}return (_74&&_74.length>n)?_74[n]:null;};var _8b=function(n,_8d,_8e){var _8f=_89(n);if(_8f){_85(_8f,_8d,_8e);}};var _90=function(_91){var pos=_91.value.lastIndexOf(" ");var _93=(pos>=0)?_91.value.substr(++pos,_91.value.length):_91.value;return new RegExp(_93.escapeRegExp(),"i");};var _94=function(_95,_96){var _97=0;for(var i=0;i<_95.length;i++){if(_96[_95[i]]){_97++;}}return _97;};var _99=function(_9a,_9b,_9c){var _9d=1;var c=_9a[_9b];for(var i=_9b+1;i<_9a.length;i++){if(_9a[i][1].count==c){if(_9a[i][0].match(_9c)){_9d++;}}else{break;}}return _9d;};var _a0=function(_a1,_a2){var _a3=abego.internal.getTagManager().getSortedTagInfos();var _a4=[];var _a5=0;for(var i=0;i<_a3.length;i++){var c=_a3[i][1].count;if(c!=_a5){if(_a2&&(_a4.length+_99(_a3,i,_a1)>_a2)){break;}_a5=c;}if(c==1){break;}var s=_a3[i][0];if(s.match(_a1)){_a4.push(s);}}return _a4;};var _a9=function(_aa,_ab){return abego.filterStrings(abego.internal.getTagManager().getAllTags(_ab),_aa);};var _ac=function(){if(!_71){return;}var _ad=store.getTiddlerText("IntelliTaggerMainTemplate");if(!_ad){_ad="<b>Tiddler IntelliTaggerMainTemplate not found</b>";}_71.innerHTML=_ad;applyHtmlMacros(_71,null);refreshElements(_71,null);};var _ae=function(e){if(!e){var e=window.event;}var tag=this.getAttribute("tag");if(_73){_73.call(this,tag,e);}return false;};var _b2=function(_b3){createTiddlyElement(_b3,"span",null,"tagSeparator"," | ");};var _b4=function(_b5,_b6,_b7,_b8,_b9){if(!_b6){return;}var _ba=_b8?abego.toSet(_b8):{};var n=_b6.length;var c=0;for(var i=0;i<n;i++){var tag=_b6[i];if(_ba[tag]){continue;}if(c>0){_b2(_b5);}if(_b9&&c>=_b9){abego.createEllipsis(_b5);break;}c++;var _bf="";var _c0=_b5;if(_b7<10){_c0=createTiddlyElement(_b5,"span",null,"numberedSuggestion");_b7++;var key=_b7<10?""+(_b7):"0";createTiddlyElement(_c0,"span",null,"suggestionNumber",key+") ");var _c2=_b7==1?"Return or ":"";_bf=" (Shortcut: %1Alt-%0)".format([key,_c2]);}var _c3=config.views.wikified.tag.tooltip.format([tag]);var _c4=(_78(tag)?"Remove tag '%0'%1":"Add tag '%0'%1").format([tag,_bf]);var _c5="%0; Shift-Click: %1".format([_c4,_c3]);var btn=createTiddlyButton(_c0,tag,_c5,_ae,_78(tag)?"currentTag":null);btn.setAttribute("tag",tag);}};var _c7=function(){if(_71){window.scrollTo(0,ensureVisible(_71));}if(_77()){window.scrollTo(0,ensureVisible(_77()));}};var _c8=function(e){if(!e){var e=window.event;}if(!_71){return;}var _cb=resolveTarget(e);if(_cb==_77()){return;}if(abego.isDescendantOrSelf(_71,_cb)){return;}abego.IntelliTagger.close();};addEvent(document,"click",_c8);var _cc=Story.prototype.gatherSaveFields;Story.prototype.gatherSaveFields=function(e,_ce){_cc.apply(this,arguments);var _cf=_ce.tags;if(_cf){_ce.tags=_cf.trim();}};var _d0=function(_d1){story.focusTiddler(_d1,"tags");var _d2=abego.getTiddlerField(story,_d1,"tags");if(_d2){var len=_d2.value.length;abego.setRange(_d2,len,len);window.scrollTo(0,ensureVisible(_d2));}};var _d4=config.macros.edit.handler;config.macros.edit.handler=function(_d5,_d6,_d7,_d8,_d9,_da){_d4.apply(this,arguments);var _db=_d7[0];if((_da instanceof Tiddler)&&_db=="tags"){var _dc=_d5.lastChild;_dc.onfocus=function(e){abego.IntelliTagger.assistTagging(_dc,_da);setTimeout(function(){_d0(_da.title);},100);};_dc.onkeyup=function(e){if(!e){var e=window.event;}if(e.altKey&&!e.ctrlKey&&!e.metaKey&&(e.keyCode>=48&&e.keyCode<=57)){_8b(e.keyCode==48?9:e.keyCode-49,_dc,_da);}else{if(e.ctrlKey&&e.keyCode==32){_8b(0,_dc,_da);}}if(!e.ctrlKey&&(e.keyCode==13||e.keyCode==10)){_8b(0,_dc,_da);}setTimeout(function(){abego.IntelliTagger.assistTagging(_dc,_da);},100);return false;};_81(_dc);}};var _e0=function(e){if(!e){var e=window.event;}var _e3=resolveTarget(e);var _e4=_e3.getAttribute("tiddler");if(_e4){story.displayTiddler(_e3,_e4,"IntelliTaggerEditTagsTemplate",false);_d0(_e4);}return false;};var _e5=config.macros.tags.handler;config.macros.tags.handler=function(_e6,_e7,_e8,_e9,_ea,_eb){_e5.apply(this,arguments);abego.IntelliTagger.createEditTagsButton(_eb,createTiddlyElement(_e6.lastChild,"li"));};var _ec=function(){if(_71&&_72&&!abego.isDescendantOrSelf(document,_72)){abego.IntelliTagger.close();}};setInterval(_ec,100);abego.IntelliTagger.displayTagSuggestions=function(_ed,_ee,_ef,_f0,_f1){_74=_ed;_75=abego.toSet(_ee);_76=_ef;_72=_f0;_73=_f1;if(!_71){_71=createTiddlyElement(document.body,"div",null,"intelliTaggerSuggestions");_71.style.position="absolute";}_ac();abego.openAsPopup(_71);if(_77()){var w=_77().offsetWidth;if(_71.offsetWidth<w){_71.style.width=(w-2*(_6e+_6f))+"px";}abego.moveBelowAndClip(_71,_77());}else{abego.centerOnWindow(_71);}_c7();};abego.IntelliTagger.assistTagging=function(_f3,_f4){var _f5=_90(_f3);var s=_f3.value;if(_7d(_f3)){s=_7a(s);}var _f7=s.readBracketedList();var _f8=_f7.length>0?abego.filterStrings(abego.internal.getTagManager().getPartnerRankedTags(_f7),_f5,_70):_a0(_f5,_70);abego.IntelliTagger.displayTagSuggestions(_a9(_f5,_f7),_f7,_f8,_f3,function(tag,e){if(e.shiftKey){onClickTag.call(this,e);}else{_85(tag,_f3,_f4);}});};abego.IntelliTagger.close=function(){abego.closePopup(_71);_71=null;return false;};abego.IntelliTagger.createEditTagsButton=function(_fb,_fc,_fd,_fe,_ff,id,_101){if(!_fd){_fd="[edit]";}if(!_fe){_fe="Edit the tags";}if(!_ff){_ff="editTags";}var _102=createTiddlyButton(_fc,_fd,_fe,_e0,_ff,id,_101);_102.setAttribute("tiddler",(_fb instanceof Tiddler)?_fb.title:String(_fb));return _102;};abego.IntelliTagger.getSuggestionTagsMaxCount=function(){return 100;};config.macros.intelliTagger={label:"intelliTagger",handler:function(_103,_104,_105,_106,_107,_108){var _109=_107.parseParams("list",null,true);var _10a=_109[0]["action"];for(var i=0;_10a&&i<_10a.length;i++){var _10c=_10a[i];var _10d=config.macros.intelliTagger.subhandlers[_10c];if(!_10d){abego.alertAndThrow("Unsupported action '%0'".format([_10c]));}_10d(_103,_104,_105,_106,_107,_108);}},subhandlers:{showTags:function(_10e,_10f,_110,_111,_112,_113){_b4(_10e,_74,_76?_76.length:0,_76,abego.IntelliTagger.getSuggestionTagsMaxCount());},showFavorites:function(_114,_115,_116,_117,_118,_119){_b4(_114,_76,0);},closeButton:function(_11a,_11b,_11c,_11d,_11e,_11f){var _120=createTiddlyButton(_11a,"close","Close the suggestions",abego.IntelliTagger.close);},version:function(_121){var t="IntelliTagger %0.%1.%2".format([version.extensions.IntelliTaggerPlugin.major,version.extensions.IntelliTaggerPlugin.minor,version.extensions.IntelliTaggerPlugin.revision]);var e=createTiddlyElement(_121,"a");e.setAttribute("href","http://tiddlywiki.abego-software.de/#IntelliTaggerPlugin");e.innerHTML="<font color=\"black\" face=\"Arial, Helvetica, sans-serif\">"+t+"<font>";},copyright:function(_124){var e=createTiddlyElement(_124,"a");e.setAttribute("href","http://tiddlywiki.abego-software.de");e.innerHTML="<font color=\"black\" face=\"Arial, Helvetica, sans-serif\">© 2006-2007 <b><font color=\"red\">abego</font></b> Software<font>";}}};})();config.shadowTiddlers["IntelliTaggerStyleSheet"]="/***\n"+"!~IntelliTagger Stylesheet\n"+"***/\n"+"/*{{{*/\n"+".intelliTaggerSuggestions {\n"+"\tposition: absolute;\n"+"\twidth: 600px;\n"+"\n"+"\tpadding: 2px;\n"+"\tlist-style: none;\n"+"\tmargin: 0;\n"+"\n"+"\tbackground: #eeeeee;\n"+"\tborder: 1px solid DarkGray;\n"+"}\n"+"\n"+".intelliTaggerSuggestions .currentTag {\n"+"\tfont-weight: bold;\n"+"}\n"+"\n"+".intelliTaggerSuggestions .suggestionNumber {\n"+"\tcolor: #808080;\n"+"}\n"+"\n"+".intelliTaggerSuggestions .numberedSuggestion{\n"+"\twhite-space: nowrap;\n"+"}\n"+"\n"+".intelliTaggerSuggestions .intelliTaggerFooter {\n"+"\tmargin-top: 4px;\n"+"\tborder-top-width: thin;\n"+"\tborder-top-style: solid;\n"+"\tborder-top-color: #999999;\n"+"}\n"+".intelliTaggerSuggestions .favorites {\n"+"\tborder-bottom-width: thin;\n"+"\tborder-bottom-style: solid;\n"+"\tborder-bottom-color: #999999;\n"+"\tpadding-bottom: 2px;\n"+"}\n"+"\n"+".intelliTaggerSuggestions .normalTags {\n"+"\tpadding-top: 2px;\n"+"}\n"+"\n"+".intelliTaggerSuggestions .intelliTaggerFooter .button {\n"+"\tfont-size: 10px;\n"+"\n"+"\tpadding-left: 0.3em;\n"+"\tpadding-right: 0.3em;\n"+"}\n"+"\n"+"/*}}}*/\n";config.shadowTiddlers["IntelliTaggerMainTemplate"]="<!--\n"+"{{{\n"+"-->\n"+"<div class=\"favorites\" macro=\"intelliTagger action: showFavorites\"></div>\n"+"<div class=\"normalTags\" macro=\"intelliTagger action: showTags\"></div>\n"+"<!-- The Footer (with the Navigation) ============================================ -->\n"+"<table class=\"intelliTaggerFooter\" border=\"0\" width=\"100%\" cellspacing=\"0\" cellpadding=\"0\"><tbody>\n"+" <tr>\n"+"\t<td align=\"left\">\n"+"\t\t<span macro=\"intelliTagger action: closeButton\"></span>\n"+"\t</td>\n"+"\t<td align=\"right\">\n"+"\t\t<span macro=\"intelliTagger action: version\"></span>, <span macro=\"intelliTagger action: copyright \"></span>\n"+"\t</td>\n"+" </tr>\n"+"</tbody></table>\n"+"<!--\n"+"}}}\n"+"-->\n";config.shadowTiddlers["IntelliTaggerEditTagsTemplate"]="<!--\n"+"{{{\n"+"-->\n"+"<div class='toolbar' macro='toolbar +saveTiddler -cancelTiddler'></div>\n"+"<div class='title' macro='view title'></div>\n"+"<div class='tagged' macro='tags'></div>\n"+"<div class='viewer' macro='view text wikified'></div>\n"+"<div class='toolbar' macro='toolbar +saveTiddler -cancelTiddler'></div>\n"+"<div class='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser'></span></div>\n"+"<!--\n"+"}}}\n"+"-->\n";config.shadowTiddlers["BSD open source license (abego Software)"]="See [[Licence|http://tiddlywiki.abego-software.de/#%5B%5BBSD%20open%20source%20license%5D%5D]].";config.shadowTiddlers["IntelliTaggerPlugin Documentation"]="[[Documentation on abego Software website|http://tiddlywiki.abego-software.de/doc/IntelliTagger.pdf]].";config.shadowTiddlers["IntelliTaggerPlugin SourceCode"]="[[Plugin source code on abego Software website|http://tiddlywiki.abego-software.de/archive/IntelliTaggerPlugin/Plugin-IntelliTagger-src.1.0.2.js]]\n";(function(){var _126=restart;restart=function(){setStylesheet(store.getTiddlerText("IntelliTaggerStyleSheet"),"IntelliTaggerStyleSheet");_126.apply(this,arguments);};})();}
// %/
https://picasaweb.google.com/105898452618087093313/Kameraad#5543897362844392642
https://picasaweb.google.com/105898452618087093313/Kameraad
<<tiddler PicasaJqueryincl>>
[img[alt_text|http://img34.imageshack.us/img34/2567/screenshot2rx.jpg]]
[img(500px+,auto)[alt_text|http://lh3.ggpht.com/_a4sdrWnGaJY/TLzBRB2e1QI/AAAAAAAAAKo/onhRQYj2eK4/kurt_LeVif.jpg]]
<html><iframe width=100% height=560px frameborder=0 src=https://docs.google.com/gview?a=v&pid=explorer&chrome=false&api=true&embedded=true&srcid=11IVBKWojThx62wM5vIzSWpc4AeD-zj1p2snCGVP3pndEY0pcdKPGqshpfmSD&authkey=CO76nosL&hl=fr></iframe></html>
https://picasaweb.google.com/105898452618087093313/LP#5543883813476552802
<<tiddler PicasaJqueryincl>>
https://picasaweb.google.com/105898452618087093313/1996_LP14FermeGesloten?authkey=Gv1sRgCIy-veLV8ca6WQ#5653958418010126514
https://picasaweb.google.com/105898452618087093313/1996_LP14FermeGesloten?authkey=Gv1sRgCIy-veLV8ca6WQ
La vitrine changeait tous les midis. Rendez-vous café des Arts à Flagey. Quelques accros (Eric Stenmans, Patrice Verhofstadt, Nanouche..) accompagnaient la vedette du jour. Finissions souvent gais.
<<tiddler PicasaJqueryincl>>
https://picasaweb.google.com/105898452618087093313/LP_18Zeekoffersalon#5654137728357487858
<<tiddler PicasaJqueryincl>>
https://picasaweb.google.com/105898452618087093313/LP24_Casino1999#5654365825294957442
<<tiddler PicasaJqueryincl>>
https://picasaweb.google.com/105898452618087093313/1993_LP3?authkey=Gv1sRgCIn9iJDv5tKcbg#5706899221955833154
https://picasaweb.google.com/105898452618087093313/1993_LP3?authkey=Gv1sRgCIn9iJDv5tKcbg
<<tiddler PicasaJqueryincl>>
[img(auto,220px)[alt_text|http://bit.ly/dNbLn7]][img(auto,220px)[alt_text|http://goo.gl/3noJg]]
<<<
The ~Dialogist-Kantor (Toni Geirlandt & Carlos Montalvo col.labo since 1992) organisi episodical travelling artists meetings nomi LABORATOIRES PATACYCLISTES (LP)(1992-1999)
<<<
@@bgcolor(#F9DFCF):1992:@@
Lp1 rue Duquesnoystraat,8 - Brussel
@@bgcolor(#F9DFCF):1993:@@
Lp2 "Werken uit verveling" - Patrice Verhofstadt - Brussel
[[Lp3 Jef Lambrecht - Brussel|LP3_Jef Lambrecht 1993]]
Lp4 Jean- Luc Paquet – Brussel
Lp5 Michèle Barley - Brussel
@@bgcolor(#F9DFCF):1994: @@
Lp6 "Les Grands Brulés" - Oostende
Lp7 Rossignol, Nightingale - E.V.A. Malibran - Brussel
Lp8 Somer Universita - E.V.A. Malibran - Brussel
Lp81/2 Les aventures de Nanouche, Lombardie (Bxl) - Brussel
Lp9 Oorlogsrecepten - E.V.A. Malibran - Brussel
@@bgcolor(#F9DFCF):1995: @@
Lp10 Meringue - Oostende
Lp11 Grande Parade - Magasin 4 - Brussel
Lp12 La Générale Songfestival - E.V.A. Malibran - Brussel
[[Lp13 Streetspraakjes - E.V.A. Malibran - Brussel|LP13_No Reclame AUB SVP 1995]]
@@bgcolor(#F9DFCF):1996: @@
[[Lp14 Fermé- Gesloten 24H/24U - E.V.A. Malibran - Brussel |LP14_Fermé-Gesloten 1996]]
Lp15 "R" - Oostende
Lp16 Promenade Rossignol - Brussel
Lp17 Das Souvenir OUI - Berlijn(Duitsland)
@@bgcolor(#F9DFCF):1997: @@
[[Lp18 Zeekoffersallon - Oostende |LP18_Zeekoffersalon Ostende]]
Lp19 Tische,Table,Tafel postale laboratoire editie van poster in samenwerking met kunstenaars uit Berlijn,Keulen, Stuttgart,Brussel,Oostende,Antwerpen
Lp20 Post Digestive Tribune - Bureau du Port - Brussel
@@bgcolor(#F9DFCF):1998:@@
Lp21 Hippocampiteca Internazional - Oostende
Lp22 Sonora Machine – Dudelange (Luxemburg)
Lp23 Doplokaal - in samenwerking met Plus tôt / te Laat - Brussel
@@bgcolor(#F9DFCF):1999: @@
[[Lp24 Casino - Oostende |LP24_Casino 1999]]
Lp25 Eat that Chicken - Radio Campus & Radio Centraal (Brussel/ Antwerpen) (FIN)
^^[[fumoir 3_2008|FU3_Fumoir 3 - 08/2008 MRCVE + J.Permentier + V.Trabalza /]]^^
[img(340px,auto)[http://bit.ly/eVMqyB|http://bit.ly/eVMqyB][FU3_Fumoir 3 - 08/2008 MRCVE + J.Permentier + V.Trabalza /]]
^^[[St.Martin_2006|2006_Saint Martin version 01]]^^
[img(auto,340px)[http://bit.ly/eVMqyB|http://bit.ly/gt4hHG]]
[[Rouge Update|2009_Rouge]] [[Mercelis Update|2005_Mercelis]]
[<img(240px,auto)[rouge2009|http://bit.ly/f1WHkm]][img(240px,auto)[rouge2009|http://bit.ly/fWKg93]]
^^sans oublier le [[GRUZEMEYRE submersible RAPPORT|http://home.scarlet.be/gruzemayer/]] ^^
[img[repot gRUZEMEYER|http://home.scarlet.be/gruzemayer/FumoirPx/TouwComboW.jpg][http://home.scarlet.be/gruzemayer/]]
[img(230px,auto)[alt_text|http://home.scarlet.be/gruzemayer/FumoirPx/MarcYetF9.jpg]][img(230px,auto)[alt_text|http://home.scarlet.be/gruzemayer/FumoirPx/BERNDfenMRw.jpg]]
^^Update for [[1° Triennal de Luanda|2007_1°Triennal de Luanda]] in 2007^^
[img[alt_text|http://bit.ly/dbFCZR]]
<html>
<a href="http://www.flickr.com/photos/argosarts/5078087038/" title="Salon5 - Emilio Lopéz-Menchero - 1 de ARGOS centre for art and media, sur Flickr"><img src="http://farm5.static.flickr.com/4056/5078087038_1e3b4b1e84.jpg" width="500" height="333" alt="Salon5 - Emilio Lopéz-Menchero - 1" /></a>
</html>
{{right{^^[[refeed from ARGOS - flickr |http://www.flickr.com/photos/argosarts/5078087038/]]^^}}}
^^[[Updated Fumoir 9 (nov.7/2010)|FU9-Mc Keta prjcts]]^^
[img(500px,auto)[alt_text|http://bit.ly/bWG0cR]]
[img(500px,auto)[http://bit.ly/cv8OR6]]
<<forEachTiddler
where
'tiddler.tags.contains("›Current")'
script
'
function getFirstLine(s) {
var m = s.match(/\s*(.*)/);
return m != null && m.length >= 1 ? m[1] : "";
}
'
write
'"*[["+tiddler.title+"]] → "+getFirstLine(tiddler.text)+"\n"'
>>
*http://www.bouschet-hilbert.org/
*http://www.ryslavy.com/
*http://jeromegiller.net/blog/
*http://home.scarlet.be/gruzemayer/
*http://www.emmanueltete.eu/
*http://www.ultraeczema.com/
*http://www.azart.be/azartstart.html
*http://www.hyhs.be/
*http://liseduclaux.be/blog/
*http://www.sturm-lie.be/
*http://www.andrewwebb.org/
*http://peckishpeasant.blogspot.com/
*http://www.jacqueshalbert.com/
*http://julienceldran.free.fr/main.html
*http://www.djosjanssens.be/
*[[galleria 3h+k/ Pori |http://nyte.arkku.net/nayttelykalenteri.html]]
*http://www.can.ch/
*http://www.marksblond.com/
*http://www.mac-s.be/
<<forEachTiddler
sortBy
'getSortedTagsText(tiddler)+"###"+tiddler.title'
script
'
function getSortedTagsText(tiddler) {
var tags = tiddler.tags;
if (!tags || !tags.length)
return "{no tags}";
tags.sort();
var result = "";
for (var i = 0; i < tags.length;i++) {
result += tags[i]+ " ";
}
return result;
}
function getGroupTitle(tiddler, context) {
if (!context.lastGroup || context.lastGroup != getSortedTagsText(tiddler)) {
context.lastGroup = getSortedTagsText(tiddler);
return "{{{"+(context.lastGroup?context.lastGroup:"no tags")+"}}}";
} else
return "";
}
'
write
'"|"+(index+1)+"|"+ getGroupTitle(tiddler, context)+"|[[" + tiddler.title+"]]|\n"'
>>
/***
|''Name:''|LoadRemoteFileThroughProxy (previous LoadRemoteFileHijack)|
|''Description:''|When the TiddlyWiki file is located on the web (view over http) the content of [[SiteProxy]] tiddler is added in front of the file url. If [[SiteProxy]] does not exist "/proxy/" is added. |
|''Version:''|1.1.0|
|''Date:''|mar 17, 2007|
|''Source:''|http://tiddlywiki.bidix.info/#LoadRemoteFileHijack|
|''Author:''|BidiX (BidiX (at) bidix (dot) info)|
|''License:''|[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D ]]|
|''~CoreVersion:''|2.2.0|
***/
//{{{
version.extensions.LoadRemoteFileThroughProxy = {
major: 1, minor: 1, revision: 0,
date: new Date("mar 17, 2007"),
source: "http://tiddlywiki.bidix.info/#LoadRemoteFileThroughProxy"};
if (!window.bidix) window.bidix = {}; // bidix namespace
if (!bidix.core) bidix.core = {};
bidix.core.loadRemoteFile = loadRemoteFile;
loadRemoteFile = function(url,callback,params)
{
if ((document.location.toString().substr(0,4) == "http") && (url.substr(0,4) == "http")){
url = store.getTiddlerText("SiteProxy", "/proxy/") + url;
}
return bidix.core.loadRemoteFile(url,callback,params);
}
//}}}
[img(500px,auto)[alt_text|http://bit.ly/etPury]]
another MFA ([[1|http://www.youtube.com/watch?v=g28fBCjlHDw&feature=player_embedded#at=37]],[[2|http://www.youtube.com/watch?v=DwCMMW-s_1o&feature=player_embedded#at=23]] ) gig during ~Histori-Palindromic rev. date 11.02.2011 (Tahrir/St.Gilles 2060)
<<twyp player video:"[[On Earth FMA|http://www.youtube.com/v/LSagiaOFF_w]]" width:500 height:300 notitle>>
<<tiddler SidebarImage>>
<<list filter [tag[Map]]>>
<<tiddler twitterFront>>
Thanks to [[a jquery script|FloatObject]] this MainMenu is floatable. Floating is initiated in the PageTemplate via...
{{{<span macro="tiddler {{jQuery('#mainMenu').makeFloat({x:'current',y:65,speed:'fast'});'';}}"></span>}}}
//{{{
/*
Maphilighted davidlynch.org/projects/maphilight/jquery.maphilight.min.js
*/
(function(G){var B,J,C,K,N,M,I,E,H,A,L;B=document.namespaces;J=!!document.createElement("canvas").getContext;if(!(J||B)){G.fn.maphilight=function(){return this};return }if(J){E=function(O){return Math.max(0,Math.min(parseInt(O,16),255))};H=function(O,P){return"rgba("+E(O.substr(0,2))+","+E(O.substr(2,2))+","+E(O.substr(4,2))+","+P+")"};C=function(O){var P=G('<canvas style="width:'+O.width+"px;height:"+O.height+'px;"></canvas>').get(0);P.getContext("2d").clearRect(0,0,P.width,P.height);return P};var F=function(Q,O,R,P,S){P=P||0;S=S||0;Q.beginPath();if(O=="rect"){Q.rect(R[0]+P,R[1]+S,R[2]-R[0],R[3]-R[1])}else{if(O=="poly"){Q.moveTo(R[0]+P,R[1]+S);for(i=2;i<R.length;i+=2){Q.lineTo(R[i]+P,R[i+1]+S)}}else{if(O=="circ"){Q.arc(R[0]+P,R[1]+S,R[2],0,Math.PI*2,false)}}}Q.closePath()};K=function(Q,T,U,X,O){var S,P=Q.getContext("2d");if(X.shadow){P.save();if(X.shadowPosition=="inside"){F(P,T,U);P.clip()}var R=Q.width*100;var W=Q.height*100;F(P,T,U,R,W);P.shadowOffsetX=X.shadowX-R;P.shadowOffsetY=X.shadowY-W;P.shadowBlur=X.shadowRadius;P.shadowColor=H(X.shadowColor,X.shadowOpacity);var V=X.shadowFrom;if(!V){if(X.shadowPosition=="outside"){V="fill"}else{V="stroke"}}if(V=="stroke"){P.strokeStyle="rgba(0,0,0,1)";P.stroke()}else{if(V=="fill"){P.fillStyle="rgba(0,0,0,1)";P.fill()}}P.restore();if(X.shadowPosition=="outside"){P.save();F(P,T,U);P.globalCompositeOperation="destination-out";P.fillStyle="rgba(0,0,0,1);";P.fill();P.restore()}}P.save();F(P,T,U);if(X.fill){P.fillStyle=H(X.fillColor,X.fillOpacity);P.fill()}if(X.stroke){P.strokeStyle=H(X.strokeColor,X.strokeOpacity);P.lineWidth=X.strokeWidth;P.stroke()}P.restore();if(X.fade){G(Q).css("opacity",0).animate({opacity:1},100)}};N=function(O){O.getContext("2d").clearRect(0,0,O.width,O.height)}}else{C=function(O){return G('<var style="zoom:1;overflow:hidden;display:block;width:'+O.width+"px;height:"+O.height+'px;"></var>').get(0)};K=function(P,S,T,W,O){var U,V,Q,R;U='<v:fill color="#'+W.fillColor+'" opacity="'+(W.fill?W.fillOpacity:0)+'" />';V=(W.stroke?'strokeweight="'+W.strokeWidth+'" stroked="t" strokecolor="#'+W.strokeColor+'"':'stroked="f"');Q='<v:stroke opacity="'+W.strokeOpacity+'"/>';if(S=="rect"){R=G('<v:rect name="'+O+'" filled="t" '+V+' style="zoom:1;margin:0;padding:0;display:block;position:absolute;left:'+T[0]+"px;top:"+T[1]+"px;width:"+(T[2]-T[0])+"px;height:"+(T[3]-T[1])+'px;"></v:rect>')}else{if(S=="poly"){R=G('<v:shape name="'+O+'" filled="t" '+V+' coordorigin="0,0" coordsize="'+P.width+","+P.height+'" path="m '+T[0]+","+T[1]+" l "+T.join(",")+' x e" style="zoom:1;margin:0;padding:0;display:block;position:absolute;top:0px;left:0px;width:'+P.width+"px;height:"+P.height+'px;"></v:shape>')}else{if(S=="circ"){R=G('<v:oval name="'+O+'" filled="t" '+V+' style="zoom:1;margin:0;padding:0;display:block;position:absolute;left:'+(T[0]-T[2])+"px;top:"+(T[1]-T[2])+"px;width:"+(T[2]*2)+"px;height:"+(T[2]*2)+'px;"></v:oval>')}}}R.get(0).innerHTML=U+Q;G(P).append(R)};N=function(O){G(O).find("[name=highlighted]").remove()}}M=function(P){var O,Q=P.getAttribute("coords").split(",");for(O=0;O<Q.length;O++){Q[O]=parseFloat(Q[O])}return[P.getAttribute("shape").toLowerCase().substr(0,4),Q]};L=function(Q,P){var O=G(Q);return G.extend({},P,G.metadata?O.metadata():false,O.data("maphilight"))};A=function(O){if(!O.complete){return false}if(typeof O.naturalWidth!="undefined"&&O.naturalWidth==0){return false}return true};I={position:"absolute",left:0,top:0,padding:0,border:0};var D=false;G.fn.maphilight=function(Q){Q=G.extend({},G.fn.maphilight.defaults,Q);if(!J&&G.browser.msie&&!D){document.namespaces.add("v","urn:schemas-microsoft-com:vml");var P=document.createStyleSheet();var O=["shape","rect","oval","circ","fill","stroke","imagedata","group","textbox"];G.each(O,function(){P.addRule("v\\:"+this,"behavior: url(#default#VML); antialias:true")});D=true}return this.each(function(){var W,T,a,S,V,X,Z,U,Y;W=G(this);if(!A(this)){return window.setTimeout(function(){W.maphilight(Q)},200)}a=G.extend({},Q,G.metadata?W.metadata():false,W.data("maphilight"));Y=W.get(0).getAttribute("usemap");S=G('map[name="'+Y.substr(1)+'"]');if(!(W.is("img")&&Y&&S.size()>0)){return }if(W.hasClass("maphilighted")){var R=W.parent();W.insertBefore(R);R.remove();G(S).unbind(".maphilight").find("area[coords]").unbind(".maphilight")}T=G("<div></div>").css({display:"block",background:'url("'+this.src+'")',position:"relative",padding:0,width:this.width,height:this.height});if(a.wrapClass){if(a.wrapClass===true){T.addClass(G(this).attr("class"))}else{T.addClass(a.wrapClass)}}W.before(T).css("opacity",0).css(I).remove();if(G.browser.msie){W.css("filter","Alpha(opacity=0)")}T.append(W);V=C(this);G(V).css(I);V.height=this.height;V.width=this.width;Z=function(f){var c,d;d=L(this,a);if(!d.neverOn&&!d.alwaysOn){c=M(this);K(V,c[0],c[1],d,"highlighted");if(d.groupBy){var b;if(/^[a-zA-Z][-a-zA-Z]+$/.test(d.groupBy)){b=S.find("area["+d.groupBy+'="'+G(this).attr(d.groupBy)+'"]')}else{b=S.find(d.groupBy)}var g=this;b.each(function(){if(this!=g){var h=L(this,a);if(!h.neverOn&&!h.alwaysOn){var e=M(this);K(V,e[0],e[1],h,"highlighted")}}})}if(!J){G(V).append("<v:rect></v:rect>")}}};G(S).bind("alwaysOn.maphilight",function(){if(X){N(X)}if(!J){G(V).empty()}G(S).find("area[coords]").each(function(){var b,c;c=L(this,a);if(c.alwaysOn){if(!X&&J){X=C(W.get());G(X).css(I);X.width=W.width();X.height=W.height();W.before(X)}c.fade=c.alwaysOnFade;b=M(this);if(J){K(X,b[0],b[1],c,"")}else{K(V,b[0],b[1],c,"")}}})});G(S).trigger("alwaysOn.maphilight").find("area[coords]").bind("mouseover.maphilight",Z).bind("mouseout.maphilight",function(b){N(V)});W.before(V);W.addClass("maphilighted")})};G.fn.maphilight.defaults={fill:true,fillColor:"000000",fillOpacity:0.2,stroke:true,strokeColor:"ff0000",strokeOpacity:1,strokeWidth:1,fade:true,alwaysOn:false,neverOn:false,groupBy:false,wrapClass:true,shadow:false,shadowX:0,shadowY:0,shadowRadius:6,shadowColor:"000000",shadowOpacity:0.8,shadowPosition:"outside",shadowFrom:false}})(jQuery);
//}}}
<link href='http://fonts.googleapis.com/css?family=Tinos|PT+Sans|Inconsolata|Droid+Sans|Lobster|Pacifico|Inika' rel='stylesheet' type='text/css'>
<!--{{{-->
<link rel='alternate' type='application/rss+xml' title='RSS' href='index.xml' />
<link rel="shortcut icon" href="http://www.iconj.com/ico/y/z/yz1yp48pqy.ico">
<div id="SplashScreen"
style="border: ; margin: 10px auto; padding: 50px; background: white url() repeat scroll 0%; display: block; text-align: center; width: ;height:; color: black; font-size: 22px; font-family: Tahoma; ">
<b>Patacycliste Archives</b> <small><small>loading</small></small><blink><small><small>
...</small></small></blink><small>
</small><br>
<br>
<span style="font-size: 14px; color: blue;">Requires
Javascript.</span></div>
<!--}}}-->
//{{{
config.options.txtFadeTimer = 5000; // 5 seconds
window.displayMessage=function(text,linkText,fadeTimer) {
var e = getMessageDiv();
if(!e) {
alert(text);
return;
}
if(linkText) {
var link = createTiddlyElement(e,"a",null,null,text);
link.href = linkText;
link.target = "_blank";
} else {
e.appendChild(document.createTextNode(text));
}
if(config.options.txtFadeTimer > 0) {
setTimeout(clearMessage, config.options.txtFadeTimer);
}
}
//}}}
[img(430px,auto)[alt_text|http://janvirtanen.fi/kulttuuritoimi/taidemuseo/tyopaja/content/images/large/_MG_1570.jpg]]
~~Pori Museum FINLAND -Vagabondages 2011 (Emmanuel Tête/ photo © Jan virtanen)
http://t.co/XR7lZYq ~~
[img(400px,auto)[Admirals Absturz BDP|http://bit.ly/l8AB6q]]
@@bgcolor(#99ff33):^^DK prep Box+Cox 2005 & Admiral Absturz 2011 ( foto. ex_Bureau du Port)
^^@@[img(400px,auto)[ef!15 remake|http://bit.ly/lQ8SJR]]
<<tiddler [[2011_Vagabondages (Pori, Finland)]]>>
[<img(250px,auto)[ha ha ah ah Avelgem|http://bit.ly/kmQNqd]]
[[PRE-PREP AVELGEM SEE HERE|2011_No-Made Avelgem to Pori pre-prep w/ Heinrich Obst 5050]]
[img(400px,auto)[Think Undercover 2006|http://bit.ly/hqPAvX]]
<<tiddler [[›Pistologie]]>>
[img(400px,auto)[alt_text|http://bit.ly/gtGF2X]]
Last images update about [["Nivell Ni bell Ni Babel" DK exhibition in Valencia 2011|2011_Nivell Ni bell Ni Babel]]
<<tiddler [[Dégage]]>>
liquidation patacycliste 1999
[img(450px,auto)[alt_text|http://bit.ly/gIDplF]]
[img(500px, auto)[roubaix 2009|http://goo.gl/jOGNm]]
''links ''http://home.scarlet.be/gruzemayer/2bureaux.html
[<img(250px+,auto)[Kein K by DK|http://bit.ly/eCqtRo]][img(200px+,auto)[machine 2011|http://bit.ly/fGVGaK]]
[img(500px+,auto)[dijon 2008|http://bit.ly/eGv69a]]
---
Last images update about "Nivell Ni bell Ni Babel" DK exhibition in Valencia 2011
<<tiddler [[2011_Nivell Ni bell Ni Babel]]>>
[img[nivell ni bell ni babell |http://goo.gl/eHc2Y]]
[img(500px,auto)[alt_text|http://lh5.ggpht.com/_a4sdrWnGaJY/TUFfFJ3b5_I/AAAAAAAABPs/O3d0zH8yfYw/tonifloor1.jpg]]
<<tiddler [[Dégage]]>>
<<tiddler [[MFA1]]>>
[<img(220px,auto)[alt_text|http://home.scarlet.be/gruzemayer/Indx2011/BLmk20Jw.jpg]] ''Un hommage à Bernd Lohaus'' at the ~MuHKA Antwerp 0/01/2011. More info here http://home.scarlet.be/gruzemayer/ [img(235px,auto)[alt_text|http://home.scarlet.be/gruzemayer/Indx2011/KastbackMusw.jpg]]
more here [[Un hommage à Bernd Lohaus|Un hommage à Bernd Lohaus]]
liquidation patacycliste 1999
[img(450px,auto)[alt_text|http://bit.ly/gIDplF]]
[img[alt_text|http://bit.ly/gRqYTU]]
gallery here/there [[TIROIR CLUB by Guy Cardoso at FUMOIR 10|FU10 - Tiroir Club Guy Cardoso incl MFA]]
[[http://youtubedoubler.com/C1S5|http://youtubedoubler.com/C1S5]]
''links ''http://home.scarlet.be/gruzemayer/2bureaux.html
[<img(250px+,auto)[Kein K by DK|http://bit.ly/eCqtRo]][img(200px+,auto)[machine 2011|http://bit.ly/fGVGaK]]
[img(500px+,auto)[dijon 2008|http://bit.ly/eGv69a]]
{{cola{
[>img(200px+,auto)[rouge2009|http://bit.ly/f1WHkm][2009_Rouge]][>img(200px,auto)[alt_text|http://bit.ly/fcigGE]][>img(200px,auto)[alt_text|http://home.scarlet.be/gruzemayer/FumoirPx/TGbowlLLNad.jpg]][>img(200px,auto)[http://bit.ly/eVMqyB|http://bit.ly/eVMqyB]] [>img(200px,auto)[alt_text|http://bit.ly/dbFCZR]]
}}}{{colb{
<<forEachTiddler
where
'tiddler.tags.contains("›Updates")'
sortBy
tiddler.modified
descending
>>
[img(220px+,auto)[Think Undercover 2006|http://bit.ly/hqPAvX]]
[<img(220px+,auto)[alt_text|http://bit.ly/d6Ve4p][Spend a Penny, Pothead]]
}}}
{{clearx{}}}
/***
|Name|NestedSlidersPlugin|
|Source|http://www.TiddlyTools.com/#NestedSlidersPlugin|
|Documentation|http://www.TiddlyTools.com/#NestedSlidersPluginInfo|
|Version|2.4.9|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|show content in nest-able sliding/floating panels, without creating separate tiddlers for each panel's content|
!!!!!Documentation
>see [[NestedSlidersPluginInfo]]
!!!!!Configuration
<<<
<<option chkFloatingSlidersAnimate>> allow floating sliders to animate when opening/closing
>Note: This setting can cause 'clipping' problems in some versions of InternetExplorer.
>In addition, for floating slider animation to occur you must also allow animation in general (see [[AdvancedOptions]]).
<<<
!!!!!Revisions
<<<
2008.11.15 - 2.4.9 in adjustNestedSlider(), don't make adjustments if panel is marked as 'undocked' (CSS class). In onClickNestedSlider(), SHIFT-CLICK docks panel (see [[MoveablePanelPlugin]])
|please see [[NestedSlidersPluginInfo]] for additional revision details|
2005.11.03 - 1.0.0 initial public release. Thanks to RodneyGomes, GeoffSlocock, and PaulPetterson for suggestions and experiments.
<<<
!!!!!Code
***/
//{{{
version.extensions.NestedSlidersPlugin= {major: 2, minor: 4, revision: 9, date: new Date(2008,11,15)};
// options for deferred rendering of sliders that are not initially displayed
if (config.options.chkFloatingSlidersAnimate===undefined)
config.options.chkFloatingSlidersAnimate=false; // avoid clipping problems in IE
// default styles for 'floating' class
setStylesheet(".floatingPanel { position:absolute; z-index:10; padding:0.5em; margin:0em; \
background-color:#eee; color:#000; border:1px solid #000; text-align:left; }","floatingPanelStylesheet");
// if removeCookie() function is not defined by TW core, define it here.
if (window.removeCookie===undefined) {
window.removeCookie=function(name) {
document.cookie = name+'=; expires=Thu, 01-Jan-1970 00:00:01 UTC; path=/;';
}
}
config.formatters.push( {
name: "nestedSliders",
match: "\\n?\\+{3}",
terminator: "\\s*\\={3}\\n?",
lookahead: "\\n?\\+{3}(\\+)?(\\([^\\)]*\\))?(\\!*)?(\\^(?:[^\\^\\*\\@\\[\\>]*\\^)?)?(\\*)?(\\@)?(?:\\{\\{([\\w]+[\\s\\w]*)\\{)?(\\[[^\\]]*\\])?(\\[[^\\]]*\\])?(?:\\}{3})?(\\#[^:]*\\:)?(\\>)?(\\.\\.\\.)?\\s*",
handler: function(w)
{
lookaheadRegExp = new RegExp(this.lookahead,"mg");
lookaheadRegExp.lastIndex = w.matchStart;
var lookaheadMatch = lookaheadRegExp.exec(w.source)
if(lookaheadMatch && lookaheadMatch.index == w.matchStart)
{
var defopen=lookaheadMatch[1];
var cookiename=lookaheadMatch[2];
var header=lookaheadMatch[3];
var panelwidth=lookaheadMatch[4];
var transient=lookaheadMatch[5];
var hover=lookaheadMatch[6];
var buttonClass=lookaheadMatch[7];
var label=lookaheadMatch[8];
var openlabel=lookaheadMatch[9];
var panelID=lookaheadMatch[10];
var blockquote=lookaheadMatch[11];
var deferred=lookaheadMatch[12];
// location for rendering button and panel
var place=w.output;
// default to closed, no cookie, no accesskey, no alternate text/tip
var show="none"; var cookie=""; var key="";
var closedtext=">"; var closedtip="";
var openedtext="<"; var openedtip="";
// extra "+", default to open
if (defopen) show="block";
// cookie, use saved open/closed state
if (cookiename) {
cookie=cookiename.trim().slice(1,-1);
cookie="chkSlider"+cookie;
if (config.options[cookie]==undefined)
{ config.options[cookie] = (show=="block") }
show=config.options[cookie]?"block":"none";
}
// parse label/tooltip/accesskey: [label=X|tooltip]
if (label) {
var parts=label.trim().slice(1,-1).split("|");
closedtext=parts.shift();
if (closedtext.substr(closedtext.length-2,1)=="=")
{ key=closedtext.substr(closedtext.length-1,1); closedtext=closedtext.slice(0,-2); }
openedtext=closedtext;
if (parts.length) closedtip=openedtip=parts.join("|");
else { closedtip="show "+closedtext; openedtip="hide "+closedtext; }
}
// parse alternate label/tooltip: [label|tooltip]
if (openlabel) {
var parts=openlabel.trim().slice(1,-1).split("|");
openedtext=parts.shift();
if (parts.length) openedtip=parts.join("|");
else openedtip="hide "+openedtext;
}
var title=show=='block'?openedtext:closedtext;
var tooltip=show=='block'?openedtip:closedtip;
// create the button
if (header) { // use "Hn" header format instead of button/link
var lvl=(header.length>5)?5:header.length;
var btn = createTiddlyElement(createTiddlyElement(place,"h"+lvl,null,null,null),"a",null,buttonClass,title);
btn.onclick=onClickNestedSlider;
btn.setAttribute("href","javascript:;");
btn.setAttribute("title",tooltip);
}
else
var btn = createTiddlyButton(place,title,tooltip,onClickNestedSlider,buttonClass);
btn.innerHTML=title; // enables use of HTML entities in label
// set extra button attributes
btn.setAttribute("closedtext",closedtext);
btn.setAttribute("closedtip",closedtip);
btn.setAttribute("openedtext",openedtext);
btn.setAttribute("openedtip",openedtip);
btn.sliderCookie = cookie; // save the cookiename (if any) in the button object
btn.defOpen=defopen!=null; // save default open/closed state (boolean)
btn.keyparam=key; // save the access key letter ("" if none)
if (key.length) {
btn.setAttribute("accessKey",key); // init access key
btn.onfocus=function(){this.setAttribute("accessKey",this.keyparam);}; // **reclaim** access key on focus
}
btn.setAttribute("hover",hover?"true":"false");
btn.onmouseover=function(ev) {
// optional 'open on hover' handling
if (this.getAttribute("hover")=="true" && this.sliderPanel.style.display=='none') {
document.onclick.call(document,ev); // close transients
onClickNestedSlider(ev); // open this slider
}
// mouseover on button aligns floater position with button
if (window.adjustSliderPos) window.adjustSliderPos(this.parentNode,this,this.sliderPanel);
}
// create slider panel
var panelClass=panelwidth?"floatingPanel":"sliderPanel";
if (panelID) panelID=panelID.slice(1,-1); // trim off delimiters
var panel=createTiddlyElement(place,"div",panelID,panelClass,null);
panel.button = btn; // so the slider panel know which button it belongs to
btn.sliderPanel=panel; // so the button knows which slider panel it belongs to
panel.defaultPanelWidth=(panelwidth && panelwidth.length>2)?panelwidth.slice(1,-1):"";
panel.setAttribute("transient",transient=="*"?"true":"false");
panel.style.display = show;
panel.style.width=panel.defaultPanelWidth;
panel.onmouseover=function(event) // mouseover on panel aligns floater position with button
{ if (window.adjustSliderPos) window.adjustSliderPos(this.parentNode,this.button,this); }
// render slider (or defer until shown)
w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;
if ((show=="block")||!deferred) {
// render now if panel is supposed to be shown or NOT deferred rendering
w.subWikify(blockquote?createTiddlyElement(panel,"blockquote"):panel,this.terminator);
// align floater position with button
if (window.adjustSliderPos) window.adjustSliderPos(place,btn,panel);
}
else {
var src = w.source.substr(w.nextMatch);
var endpos=findMatchingDelimiter(src,"+++","===");
panel.setAttribute("raw",src.substr(0,endpos));
panel.setAttribute("blockquote",blockquote?"true":"false");
panel.setAttribute("rendered","false");
w.nextMatch += endpos+3;
if (w.source.substr(w.nextMatch,1)=="\n") w.nextMatch++;
}
}
}
}
)
function findMatchingDelimiter(src,starttext,endtext) {
var startpos = 0;
var endpos = src.indexOf(endtext);
// check for nested delimiters
while (src.substring(startpos,endpos-1).indexOf(starttext)!=-1) {
// count number of nested 'starts'
var startcount=0;
var temp = src.substring(startpos,endpos-1);
var pos=temp.indexOf(starttext);
while (pos!=-1) { startcount++; pos=temp.indexOf(starttext,pos+starttext.length); }
// set up to check for additional 'starts' after adjusting endpos
startpos=endpos+endtext.length;
// find endpos for corresponding number of matching 'ends'
while (startcount && endpos!=-1) {
endpos = src.indexOf(endtext,endpos+endtext.length);
startcount--;
}
}
return (endpos==-1)?src.length:endpos;
}
//}}}
//{{{
window.onClickNestedSlider=function(e)
{
if (!e) var e = window.event;
var theTarget = resolveTarget(e);
while (theTarget && theTarget.sliderPanel==undefined) theTarget=theTarget.parentNode;
if (!theTarget) return false;
var theSlider = theTarget.sliderPanel;
var isOpen = theSlider.style.display!="none";
// if SHIFT-CLICK, dock panel first (see [[MoveablePanelPlugin]])
if (e.shiftKey && config.macros.moveablePanel) config.macros.moveablePanel.dock(theSlider,e);
// toggle label
theTarget.innerHTML=isOpen?theTarget.getAttribute("closedText"):theTarget.getAttribute("openedText");
// toggle tooltip
theTarget.setAttribute("title",isOpen?theTarget.getAttribute("closedTip"):theTarget.getAttribute("openedTip"));
// deferred rendering (if needed)
if (theSlider.getAttribute("rendered")=="false") {
var place=theSlider;
if (theSlider.getAttribute("blockquote")=="true")
place=createTiddlyElement(place,"blockquote");
wikify(theSlider.getAttribute("raw"),place);
theSlider.setAttribute("rendered","true");
}
// show/hide the slider
if(config.options.chkAnimate && (!hasClass(theSlider,'floatingPanel') || config.options.chkFloatingSlidersAnimate))
anim.startAnimating(new Slider(theSlider,!isOpen,e.shiftKey || e.altKey,"none"));
else
theSlider.style.display = isOpen ? "none" : "block";
// reset to default width (might have been changed via plugin code)
theSlider.style.width=theSlider.defaultPanelWidth;
// align floater panel position with target button
if (!isOpen && window.adjustSliderPos) window.adjustSliderPos(theSlider.parentNode,theTarget,theSlider);
// if showing panel, set focus to first 'focus-able' element in panel
if (theSlider.style.display!="none") {
var ctrls=theSlider.getElementsByTagName("*");
for (var c=0; c<ctrls.length; c++) {
var t=ctrls[c].tagName.toLowerCase();
if ((t=="input" && ctrls[c].type!="hidden") || t=="textarea" || t=="select")
{ try{ ctrls[c].focus(); } catch(err){;} break; }
}
}
var cookie=theTarget.sliderCookie;
if (cookie && cookie.length) {
config.options[cookie]=!isOpen;
if (config.options[cookie]!=theTarget.defOpen) window.saveOptionCookie(cookie);
else window.removeCookie(cookie); // remove cookie if slider is in default display state
}
// prevent SHIFT-CLICK from being processed by browser (opens blank window... yuck!)
// prevent clicks *within* a slider button from being processed by browser
// but allow plain click to bubble up to page background (to close transients, if any)
if (e.shiftKey || theTarget!=resolveTarget(e))
{ e.cancelBubble=true; if (e.stopPropagation) e.stopPropagation(); }
Popup.remove(); // close open popup (if any)
return false;
}
//}}}
//{{{
// click in document background closes transient panels
document.nestedSliders_savedOnClick=document.onclick;
document.onclick=function(ev) { if (!ev) var ev=window.event; var target=resolveTarget(ev);
if (document.nestedSliders_savedOnClick)
var retval=document.nestedSliders_savedOnClick.apply(this,arguments);
// if click was inside a popup... leave transient panels alone
var p=target; while (p) if (hasClass(p,"popup")) break; else p=p.parentNode;
if (p) return retval;
// if click was inside transient panel (or something contained by a transient panel), leave it alone
var p=target; while (p) {
if ((hasClass(p,"floatingPanel")||hasClass(p,"sliderPanel"))&&p.getAttribute("transient")=="true") break;
p=p.parentNode;
}
if (p) return retval;
// otherwise, find and close all transient panels...
var all=document.all?document.all:document.getElementsByTagName("DIV");
for (var i=0; i<all.length; i++) {
// if it is not a transient panel, or the click was on the button that opened this panel, don't close it.
if (all[i].getAttribute("transient")!="true" || all[i].button==target) continue;
// otherwise, if the panel is currently visible, close it by clicking it's button
if (all[i].style.display!="none") window.onClickNestedSlider({target:all[i].button})
if (!hasClass(all[i],"floatingPanel")&&!hasClass(all[i],"sliderPanel")) all[i].style.display="none";
}
return retval;
};
//}}}
//{{{
// adjust floating panel position based on button position
if (window.adjustSliderPos==undefined) window.adjustSliderPos=function(place,btn,panel) {
if (hasClass(panel,"floatingPanel") && !hasClass(panel,"undocked")) {
// see [[MoveablePanelPlugin]] for use of 'undocked'
var rightEdge=document.body.offsetWidth-1;
var panelWidth=panel.offsetWidth;
var left=0;
var top=btn.offsetHeight;
if (place.style.position=="relative" && findPosX(btn)+panelWidth>rightEdge) {
left-=findPosX(btn)+panelWidth-rightEdge; // shift panel relative to button
if (findPosX(btn)+left<0) left=-findPosX(btn); // stay within left edge
}
if (place.style.position!="relative") {
var left=findPosX(btn);
var top=findPosY(btn)+btn.offsetHeight;
var p=place; while (p && !hasClass(p,'floatingPanel')) p=p.parentNode;
if (p) { left-=findPosX(p); top-=findPosY(p); }
if (left+panelWidth>rightEdge) left=rightEdge-panelWidth;
if (left<0) left=0;
}
panel.style.left=left+"px"; panel.style.top=top+"px";
}
}
//}}}
//{{{
// TW2.1 and earlier:
// hijack Slider stop handler so overflow is visible after animation has completed
Slider.prototype.coreStop = Slider.prototype.stop;
Slider.prototype.stop = function()
{ this.coreStop.apply(this,arguments); this.element.style.overflow = "visible"; }
// TW2.2+
// hijack Morpher stop handler so sliderPanel/floatingPanel overflow is visible after animation has completed
if (version.major+.1*version.minor+.01*version.revision>=2.2) {
Morpher.prototype.coreStop = Morpher.prototype.stop;
Morpher.prototype.stop = function() {
this.coreStop.apply(this,arguments);
var e=this.element;
if (hasClass(e,"sliderPanel")||hasClass(e,"floatingPanel")) {
// adjust panel overflow and position after animation
e.style.overflow = "visible";
if (window.adjustSliderPos) window.adjustSliderPos(e.parentNode,e.button,e);
}
};
}
//}}}
[img[Niveau de l'Art de la ville de Neuchâtel 2010|http://bit.ly/dkpiFI]]
@@^^ ~Dialogist-Kantor //Niveau de l'Art de la ville de Neuchâtel// / 2010^^@@
//Niveau de l'Art 2010// ( highest ). Quartier de ~Pierre-à-Bot. Hauteurs de Neuchâtel. Le lac. Le ~Mont-Blanc. Des enfants. ~Al-Fahdil. Des poèmes arabes. Celine Donatella Sallah Jordan. Un mètre-colonne peint en vert. Des craies. Massimo Marc Noa Julian Raïsa. Le jour tombe faut redescendre..etc.
/***
|Name|OpenTopPlugin|
|Created by|SaqImtiaz|
|Location|http://tw.lewcid.org/#OpenTopPlugin|
|Version|0.1|
|Requires|~TW2.x|
!!!Description:
Open new tiddlers at the top of the screen.
!!!Code
***/
//{{{
Story.prototype.coreLewcidDisplayTiddler=Story.prototype.displayTiddler ;
Story.prototype.displayTiddler =
function(srcElement,title,template,unused1,unused2,animate,slowly)
{
var srcElement=null;
if (document.getElementById(this.idPrefix + title))
{story.closeTiddler(title);}
this.coreLewcidDisplayTiddler(srcElement,title,template,unused1,unused2,animate,slowly);
window.scrollTo(0,0);
}
//}}}
<html>
<div id="container"> </div>
<div id="container2"> </div>
</html>
<script show>
jQuery("#container").pwi({
username: 'dialogistkantor',
maxResults: 5,
mode: 'latest'
});
jQuery("#container2").pwi({
username: 'dialogistkantor',
mode: 'albums',
albums: ["BoxCOX"],
thumbCss: { margin: '5px' }
});
</script>
<!--{{{-->
<div id="container">
<div class='header' >
<!--Header-->
<div class='titleLine' macro="hideWhen readOnly" >
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
<span class='searchBar' macro='search' ></span>
</div>
</div>
<!--Ex Primary Sidebar-->
<div id="content">
<!--Main content-->
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
</div>
</div>
<div id="secondary">
<!--Secondary Sidebar-->
<div id='sidebar'>
<!--Ex Breadcrumbs <div id='breadC'> <div refresh='content' tiddler='BreadCrumbs'></div></div> -->
<div id='sidebarTabs' refresh='content' force='true' tiddler='PataTabs'></div>
<div id='sidebarOptions' refresh='content' macro="hideWhen readOnly" tiddler='SideBarOptions'></div>
</div>
<div id='sidebarTabs' refresh='content' force='true' macro="hideWhen readOnly" tiddler='SideBarTabs'></div>
</div>
<div id="footer">
<!--Footer-->
<div id='contentFooter' refresh='content' tiddler='contentFooter'></div>
</div>
</div>
<!--}}}-->
<<paletteView [[ColorPalette]]>>
see tiddler ColorPalette
<<tiddler ColorPalette>>
/***
|''Name''|PaletteViewMacro|
|''Version''|0.2|
|''Author''|FND|
|''Source''|[[FND's DevPad|http://devpad.tiddlyspot.com/#PaletteViewMacro]]|
|''License''|[[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]]|
|''~CoreVersion''|2.1|
|''Type''|macro|
|''Requires''|N/A|
|''Overrides''|N/A|
|''Description''|Displays color palettes.|
!Notes
There is also [[ViewPalettePlugin|http://simon.tiddlyspot.com/#ViewPalettePlugin]], which currently does not work with TiddlyWiki v2.2 though.
!Usage
{{{
<<paletteView [tiddler name]>>
}}}
!!Example
<<paletteView [[ColorPalette]]>>
!Revision History
!!v0.1 (2007-11-18)
* initial release
!!v0.2 (2007-11-20)
* limited processing to slices containing [[actual color values|http://www.w3.org/TR/CSS21/syndata.html#color-units]]
* changed fallback value to the tiddler the macro is called from (instead of using [[ColorPalette]])
!To Do
* selection list for all available palettes (tag-based)
* parameter for custom table class
* customizable column order
* documentation (e.g. using from within [[ViewTemplate]])
!Code
***/
//{{{
config.macros.paletteView = {};
config.macros.paletteView.handler = function(place, macroName, params, wikifier, paramString, tiddler) {
var title = params[0] || tiddler.title;
//var palettes = store.getTaggedTiddlers(params[0]); // DEBUG: yet to be implemented
var colors = store.calcAllSlices(title);
var labels = [];
for(var c in colors) {
if(this.isColor(colors[c])) {
labels.push(c);
}
}
if(labels.length > 0) {
var output = "|!Sample|!Value|!Name|h\n";
for(var i = 0; i < labels.length; i++) {
output += "|padding:0 4em;background-color:" + colors[labels[i]] + "; |"
+ "{{{" + colors[labels[i]] + "}}}|"
+ "[[" + labels[i] + "|" + title + "]]|\n";
}
wikify(output, place);
}
};
config.macros.paletteView.isColor = function(s) {
var colors = ["Black", "Green", "Silver", "Lime", "Gray", "Olive", "White", "Yellow",
"Maroon", "Navy", "Red", "Blue", "Purple", "Teal", "Fuchsia", "Aqua", "Orange"];
var match = s.match(/^#[0-9A-F]{3}$|^#[0-9A-F]{6}$|^RGB\([\d,\s]{5,}\)$/i);
if(match) return true;
if(colors.contains(s)) return true;
return false;
};
//}}}
Thanks to Serge Gurwith for this panoramic flash in-view of ''Bureau du Port'' in 2005
link [[panorama|http://goo.gl/UL6Zm]]
<html><iframe width=100% height=560px frameborder=0 src=http://worldwidepanorama.org/worldwidepanorama/wwp305/html/SergeGutwirth-710.html></iframe></html>
/***
|''Name:''|PasswordOptionPlugin|
|''Description:''|Extends TiddlyWiki options with non encrypted password option.|
|''Version:''|1.0.2|
|''Date:''|Apr 19, 2007|
|''Source:''|http://tiddlywiki.bidix.info/#PasswordOptionPlugin|
|''Author:''|BidiX (BidiX (at) bidix (dot) info)|
|''License:''|[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D ]]|
|''~CoreVersion:''|2.2.0 (Beta 5)|
***/
//{{{
version.extensions.PasswordOptionPlugin = {
major: 1, minor: 0, revision: 2,
date: new Date("Apr 19, 2007"),
source: 'http://tiddlywiki.bidix.info/#PasswordOptionPlugin',
author: 'BidiX (BidiX (at) bidix (dot) info',
license: '[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D]]',
coreVersion: '2.2.0 (Beta 5)'
};
config.macros.option.passwordCheckboxLabel = "Save this password on this computer";
config.macros.option.passwordInputType = "password"; // password | text
setStylesheet(".pasOptionInput {width: 11em;}\n","passwordInputTypeStyle");
merge(config.macros.option.types, {
'pas': {
elementType: "input",
valueField: "value",
eventName: "onkeyup",
className: "pasOptionInput",
typeValue: config.macros.option.passwordInputType,
create: function(place,type,opt,className,desc) {
// password field
config.macros.option.genericCreate(place,'pas',opt,className,desc);
// checkbox linked with this password "save this password on this computer"
config.macros.option.genericCreate(place,'chk','chk'+opt,className,desc);
// text savePasswordCheckboxLabel
place.appendChild(document.createTextNode(config.macros.option.passwordCheckboxLabel));
},
onChange: config.macros.option.genericOnChange
}
});
merge(config.optionHandlers['chk'], {
get: function(name) {
// is there an option linked with this chk ?
var opt = name.substr(3);
if (config.options[opt])
saveOptionCookie(opt);
return config.options[name] ? "true" : "false";
}
});
merge(config.optionHandlers, {
'pas': {
get: function(name) {
if (config.options["chk"+name]) {
return encodeCookie(config.options[name].toString());
} else {
return "";
}
},
set: function(name,value) {config.options[name] = decodeCookie(value);}
}
});
// need to reload options to load passwordOptions
loadOptionsCookie();
/*
if (!config.options['pasPassword'])
config.options['pasPassword'] = '';
merge(config.optionsDesc,{
pasPassword: "Test password"
});
*/
//}}}
<<tabs txtMainTab
'Patacycliste' 'Home' [[MainMenu]] 'Things' 'archives + documents' [[TabTagsOnline]]
>>
/*{{{*/
<html>
<div id="container1"><span style= "font-size: 16pt ; color: fuchsia ; background-color: #FFFFFF ; " > </span></div>
</html>
<script> jQuery("#container1").pwi({
username: 'patacycliste',
maxResults: 8,
thumbSize: 100,
thumbCrop: 1,
mode: 'keyword',
album: 'BDPfull',
keyword: 'BDP2005KurtRyslavy',
albumTitle: 'Bureau du Port 2005 /Kurt Ryslavy \The London-Galleries-Theraphy\'',
showSlideshowLink: false,
showAlbumDescription: true,
});
</script>
/*}}}*/
<script>
jQuery('body').brscPicasa ();
</script>
//{{{
/**
* Picasa Webalbum Integration jQuery plugin
* This library was inspired aon pwa by Dieter Raber
* @name jquery.pwi.js
* @author Jeroen Diderik - http://www.jdee.nl/
* @revision 1.3.0
* @date august 16, 2010
* @copyright (c) 2010 Jeroen Diderik(www.jdee.nl)
* @license Creative Commons Attribution-Share Alike 3.0 Netherlands License - http://creativecommons.org/licenses/by-sa/3.0/nl/
* @Visit http://pwi.googlecode.com/ for more informations, duscussions etc about this library
*/
(function ($) {
var elem, opts = {};
$.fn.pwi = function (opts) {
var $self, settings = {};
opts = $.extend({}, $.fn.pwi.defaults, opts);
elem = this;
function _initialize() {
settings = opts;
ts = new Date().getTime();
settings.id = ts;
$self = $("<div id='pwi_" + ts + "'/>").appendTo(elem);
$self.addClass('pwi_container');
_start();
return false;
}
function _start() {
if (settings.username === '') {
alert('Make sure you specify at least your username.' + '\n' + 'See http://pwi.googlecode.com for more info');
return;
}
switch (settings.mode) {
case 'latest':
getLatest();
break;
case 'album':
getAlbum();
break;
case 'keyword':
getAlbum();
break;
default:
getAlbums();
break;
}
}
function formatDate($dt) {
var $today = new Date(Number($dt)),
$year = $today.getUTCFullYear();
if ($year < 1000) {
$year += 1900;
}
return (settings.months[($today.getUTCMonth())] + " " + $today.getUTCDate() + ", " + $year);
}
function nl2br(s) {
return s.replace(/\n/g, '<br />\n');
}
function formatDateTime($dt) {
var $today = new Date(Number($dt));
$year = $today.getUTCFullYear();
if ($year < 1000) {
$year += 1900;
}
if ($today == "Invalid Date") {
return $dt;
} else {
return ($today.getUTCDate() + "-" + ($today.getUTCMonth() + 1) + "-" + $year + " " + $today.getUTCHours() + ":" + ($today.getUTCMinutes() < 10 ? "0" + $today.getUTCMinutes() : $today.getUTCMinutes()));
}
}
function photo(j) {
var $html, $d = "", $c = "", $img_base = j.content.src,
$id_base = j.gphoto$id.$t;
$c = nl2br(j.summary ? j.summary.$t : "");
if (settings.showPhotoDate) {
if (j.exif$tags.exif$time) {
$d = formatDateTime(j.exif$tags.exif$time.$t);
} else if (j.gphoto$timestamp) {
$d = formatDateTime(j.gphoto$timestamp.$t);
} else {
$d = formatDateTime(j.published.$t);
}
$d += " ";
}
$d += $c.replace(new RegExp("'", "g"), "'");
$html = $("<div class='pwi_photo' style='height:" + (settings.thumbSize + 1) + "px;cursor: pointer;'/>");
$html.append("<a href='" + $img_base + "?imgmax=" + settings.photoSize + "' rel='lb-" + settings.username + "' title='" + $d + "'><img src='" + $img_base + "?imgmax=" + settings.thumbSize + "&crop=" + settings.thumbCrop + "'/></a>");
//if(settings.showPhotoDownload){$c += "download";}
if (settings.showPhotoCaption) {
if (settings.showPhotoCaptionDate && settings.showPhotoDate) { $c = $d; }
if ($c > settings.showCaptionLength) { $c = $c.substring(0, settings.showCaptionLength); }
$html.find("a").append("<br/>" + $c);
}
if (typeof (settings.onclickThumb) === "function") { var obj = j; $html.bind('click.pwi', obj, clickThumb); }
return $html;
}
function albums(j) {
var $scAlbums = $("<div/>"), i = 0;
var $na = 0, $navrow = "";
i = settings.albumsPerPage * (settings.albumPage - 1);
$na = j.feed.entry.length;
while (i < settings.albumMaxResults && i < $na && i < (settings.albumsPerPage * settings.albumPage)) {
var $id_base = j.feed.entry[i].gphoto$name.$t,
$album_date = formatDate(j.feed.entry[i].gphoto$timestamp.$t),
$thumb = j.feed.entry[i].media$group.media$thumbnail[0].url.replace(new RegExp("/s160-c/", "g"), "/");
if ($.inArray($id_base, settings.albums) > -1 || settings.albums.length === 0) {
$scAlbum = $("<div class='pwi_album'/>");
var jfeed = j.feed.entry[i];
$scAlbum.bind('click.pwi', jfeed, function (e) {
e.stopPropagation();
settings.page = 1;
settings.album = e.data.gphoto$name.$t;
if (typeof (settings.onclickAlbumThumb) === "function") {
settings.onclickAlbumThumb(e);
return false;
} else {
getAlbum();
return false;
}
});
if (settings.showAlbumThumbs) {
$scAlbum.append("<img src='" + $thumb + "?imgmax=" + settings.albumThumbSize + "&crop=" + settings.albumCrop + "'/>");
}
if (settings.showAlbumTitles) {
$scAlbum.append("<br/>" + j.feed.entry[i].title.$t + "<br/>" + (settings.showAlbumdate ? $album_date : "") + (settings.showAlbumPhotoCount ? " " + j.feed.entry[i].gphoto$numphotos.$t + " " + settings.labels.photos : ""));
}
$scAlbums.append($scAlbum);
}
i++;
}
$scAlbums.append("<div style='clear: both;height:0px;'/>");
// less albums-per-page then max so paging
if ($na > settings.albumsPerPage) {
var $pageCount = ($na / settings.albumsPerPage);
var $ppage = $("<div class='pwi_prevpage'/>").text(settings.labels.prev),
$npage = $("<div class='pwi_nextpage'/>").text(settings.labels.next);
$navRow = $("<div class='pwi_pager'/>");
if (settings.albumPage > 1) {
$ppage.addClass('link').bind('click.pwi', function (e) {
e.stopPropagation();
settings.albumPage = (parseInt(settings.albumPage, 10) - 1);
albums(j);
return false;
});
}
$navRow.append($ppage);
for (var p = 1; p < $pageCount + 1; p++) {
if (p == settings.albumPage) {
tmp = "<div class='pwi_pager_current'>" + p + "</div> ";
} else {
tmp = $("<div class='pwi_pager_page'>" + p + "</div>").bind('click.pwi', p, function (e) {
e.stopPropagation();
settings.albumPage = e.data;
albums(j);
return false;
});
}
$navRow.append(tmp);
}
if (settings.albumPage < $pageCount) {
$npage.addClass('link').bind('click.pwi', function (e) {
e.stopPropagation();
settings.albumPage = (parseInt(settings.albumPage, 10) + 1);
albums(j);
return false;
});
}
$navRow.append($npage);
$navRow.append("<div style='clear: both;height:0px;'/>");
if ($navRow.length > 0 && (settings.showPager === 'both' || settings.showPager === 'top')) {
$scAlbums.append($navRow);
}
if ($navRow.length > 0 && (settings.showPager === 'both' || settings.showPager === 'bottom')) {
$scAlbums.prepend($navRow.clone(true));
}
}
// end paging
settings.albumstore = j;
show(false, $scAlbums);
}
function album(j) {
var $scPhotos, $scPhotosDesc, tmp = "",
$np = j.feed.openSearch$totalResults.$t,
$at = "", $navRow = "",
$loc = j.feed.gphoto$location === undefined ? "" : j.feed.gphoto$location.$t,
$ad = j.feed.subtitle === undefined ? "" : j.feed.subtitle.$t,
$album_date = formatDate(j.feed.gphoto$timestamp === undefined ? '' : j.feed.gphoto$timestamp.$t),
$item_plural = ($np == "1") ? false : true;
$at = (j.feed.title === "undefined" || settings.albumTitle.length > 0) ? settings.albumTitle : j.feed.title.$t;
$scPhotos = $("<div/>");
if (settings.mode != 'album' && settings.mode != 'keyword') {
tmp = $("<div class='pwi_album_backlink'>" + settings.labels.albums + "</div>").bind('click.pwi', function (e) {
e.stopPropagation();
getAlbums();
return false;
});
$scPhotos.append(tmp);
}
if (settings.showAlbumDescription) {
$scPhotosDesc = $("<div class='pwi_album_description'/>");
$scPhotosDesc.append("<div class='title'>" + $at + "</div>");
$scPhotosDesc.append("<div class='details'>" + $np + " " + ($item_plural ? settings.labels.photos : settings.labels.photo) + (settings.showAlbumdate ? ", " + $album_date : "") + (settings.showAlbumLocation && $loc ? ", " + $loc : "") + "</div>");
$scPhotosDesc.append("<div class='description'>" + $ad + "</div>");
if (settings.showSlideshowLink) {
if (settings.mode === 'keyword' || settings.keyword !== "") {
//alert("currently not supported");
} else {
$scPhotosDesc.append("<div><a href='http://picasaweb.google.com/" + settings.username + "/" + j.feed.gphoto$name.$t + "" + ((settings.authKey !== "") ? "?authkey=" + settings.authKey : "") + "#slideshow/" + j.feed.entry[0].gphoto$id.$t + "' rel='gb_page_fs[]' target='_new' class='sslink'>" + settings.labels.slideshow + "</a></div>");
}
}
$scPhotos.append($scPhotosDesc);
}
if ($np > settings.maxResults) {
$pageCount = ($np / settings.maxResults);
var $ppage = $("<div class='pwi_prevpage'/>").text(settings.labels.prev),
$npage = $("<div class='pwi_nextpage'/>").text(settings.labels.next);
$navRow = $("<div class='pwi_pager'/>");
if (settings.page > 1) {
$ppage.addClass('link').bind('click.pwi', function (e) {
e.stopPropagation();
settings.page = (parseInt(settings.page, 10) - 1);
getAlbum();
return false;
});
}
$navRow.append($ppage);
for (var p = 1; p < $pageCount + 1; p++) {
if (p == settings.page) {
tmp = "<div class='pwi_pager_current'>" + p + "</div> ";
} else {
tmp = $("<div class='pwi_pager_page'>" + p + "</div>").bind('click.pwi', p, function (e) {
e.stopPropagation();
settings.page = e.data;
getAlbum();
return false;
});
}
$navRow.append(tmp);
}
if (settings.page < $pageCount) {
$npage.addClass('link').bind('click.pwi', function (e) {
e.stopPropagation();
settings.page = (parseInt(settings.page,10) + 1);
getAlbum();
return false;
});
}
$navRow.append($npage);
$navRow.append("<div style='clear: both;height:0px;'/>");
}
if ($navRow.length > 0 && (settings.showPager === 'both' || settings.showPager === 'top')) {
$scPhotos.append($navRow);
}
var i = ((settings.page - 1) * settings.maxResults);
while (i < (settings.maxResults * settings.page) && i < $np) {
var $scPhoto = photo(j.feed.entry[i]);
$scPhotos.append($scPhoto);
i++;
}
if ($navRow.length > 0 && (settings.showPager === 'both' || settings.showPager === 'bottom')) {
$scPhotos.append($navRow.clone(true));
}
settings.photostore[settings.album] = j;
var $s = $(".pwi_photo", $scPhotos).css(settings.thumbCss);
if (typeof (settings.popupExt) === "function") {
settings.popupExt($s.find("a[rel='lb-" + settings.username + "']"));
} else if (typeof (settings.onclickThumb) != "function" && $.slimbox) {
$s.find("a[rel='lb-" + settings.username + "']").slimbox(settings.slimbox_config);
}
show(false, $scPhotos);
}
function latest(j) {
var $scPhotos = $("<div/>"),
$len = j.feed ? j.feed.entry.length : 0,
i = 0;
while (i < settings.maxResults && i < $len) {
var $scPhoto = photo(j.feed.entry[i]);
$scPhotos.append($scPhoto);
i++;
}
$scPhotos.append("<div style='clear: both;height:0px;'> </div>");
var $s = $("div.pwi_photo", $scPhotos).css(settings.thumbCss);
if (typeof (settings.popupExt) === "function") {
settings.popupExt($s.find("a[rel='lb-" + settings.username + "']"));
} else if (typeof (settings.onclickThumb) != "function" && $.slimbox) {
$s.find("a[rel='lb-" + settings.username + "']").slimbox(settings.slimbox_config);
}
show(false, $scPhotos);
}
function clickAlbumThumb(event) {
event.stopPropagation();
event.preventDefault();
settings.onclickAlbumThumb(event);
}
function clickThumb(event) {
event.stopPropagation();
event.preventDefault();
settings.onclickThumb(event);
}
function getAlbums() {
if (settings.albumstore.feed) {
albums(settings.albumstore);
} else {
show(true, '');
var $u = 'http://picasaweb.google.com/data/feed/api/user/' + settings.username + '?kind=album&access=' + settings.albumTypes + '&alt=json';
$.getJSON($u, 'callback=?', albums);
}
return $self;
}
function getAlbum() {
if (settings.photostore[settings.album]) {
album(settings.photostore[settings.album]);
} else {
var $si = ((settings.page - 1) * settings.maxResults) + 1;
var $u = 'http://picasaweb.google.com/data/feed/api/user/' + settings.username + '/album/' + settings.album + '?kind=photo&alt=json' + ((settings.authKey !== "") ? "&authkey=" + settings.authKey : "") + ((settings.keyword !== "") ? "&tag=" + settings.keyword : "");
show(true, '');
$.getJSON($u, 'callback=?', album);
}
return $self;
}
function getLatest() {
show(true, '');
var $u = 'http://picasaweb.google.com/data/feed/api/user/' + settings.username + (settings.album !== "" ? '/album/' + settings.album : '') + '?kind=photo&max-results=' + settings.maxResults + '&alt=json&q=' + ((settings.authKey !== "") ? "&authkey=" + settings.authKey : "") + ((settings.keyword !== "") ? "&tag=" + settings.keyword : "");
$.getJSON($u, 'callback=?', latest);
return $self;
}
function show(loading, data) {
if (loading) {
document.body.style.cursor = "wait";
//if ($.blockUI){ $self.block(settings.blockUIConfig);}
} else {
document.body.style.cursor = "default";
//if ($.blockUI){ $self.unblock(); }
$self.html(data);
}
}
_initialize();
};
$.fn.pwi.defaults = {
mode: 'albums', //-- can be: album, albums, latest (keyword = obsolete but backwards compatible, now just fill in a keyword in the settings to enable keyword-photos)
username: '', //-- Must be explicitly set!!!
album: "", //-- For loading a single album
authKey: "", //-- for loading a single album that is private (use in 'album' mode only)
albums: [], //-- use to load specific albums only: ["MyAlbum", "TheSecondAlbumName", "OtherAlbum"]
keyword: "",
albumCrop: 1, //-- crop thumbs on albumpage to have all albums in square thumbs (see albumThumbSize for supported sizes)
albumTitle: "", //-- overrule album title in 'album' mode
albumThumbSize: 160, //-- specify thumbnail size of albumthumbs (default: 72, cropped not supported, supported cropped/uncropped: 32, 48, 64, 160 and uncropped only: 72, 144, 200, 288, 320, 400, 512, 576, 640, 720, 800)
albumMaxResults: 999, //-- load only the first X albums
albumsPerPage: 999, //-- show X albums per page (activates paging on albums when this amount is less then the available albums)
albumPage: 1, //-- force load on specific album
albumTypes: "public", //-- load public albums, not used for now
page: 1, //-- initial page for an photo page
photoSize: 800, //-- size of large photo loaded in slimbox, fancybox or other
maxResults: 50, //-- photos per page
showPager: 'bottom', //'top', 'bottom', 'both' (for both albums and album paging)
thumbSize: 72, //-- specify thumbnail size of photos (default: 72, cropped not supported, supported cropped/uncropped: 32, 48, 64, 160 and uncropped only: 72, 144, 200, 288, 320, 400, 512, 576, 640, 720, 800)
thumbCrop: 0, //-- force crop on photo thumbnails (see thumbSize for supported sized)
thumbCss: {
'margin': '5px'
},
onclickThumb: "", //-- overload the function when clicked on a photo thumbnail
onclickAlbumThumb: "", //-- overload the function when clicked on a album thumbnail
popupExt: "", //-- extend the photos by connecting them to for example Fancybox (see demos for example)
showAlbumTitles: true, //--following settings should be self-explanatory
showAlbumThumbs: true,
showAlbumdate: true,
showAlbumPhotoCount: true,
showAlbumDescription: true,
showAlbumLocation: true,
showSlideshowLink: true,
showPhotoCaption: false,
showPhotoCaptionDate: false,
showCaptionLength: 9999,
showPhotoDownload: false,
showPhotoDate: true,
labels: {
photo: "photo",
photos: "photos",
albums: "Back to albums",
slideshow: "Display slideshow",
loading: "PWI fetching data...",
page: "Page",
prev: "Previous",
next: "Next",
devider: "|"
}, //-- translate if needed
months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
slimbox_config: {
loop: false,
overlayOpacity: 0.6,
overlayFadeDuration: 400,
resizeDuration: 400,
resizeEasing: "swing",
initialWidth: 250,
initlaHeight: 250,
imageFadeDuration: 400,
captionAnimationDuration: 400,
counterText: "{x}/{y}",
closeKeys: [27, 88, 67, 70],
prevKeys: [37, 80],
nextKeys: [39, 83]
}, //-- overrule defaults is needed
blockUIConfig: {
message: "<div class='lbLoading pwi_loader'>loading...</div>",
css: "pwi_loader"
}, //-- overrule defaults if needed
albumstore: {}, //-- don't touch
photostore: {}, //-- don't touch
token: ""
};
})(jQuery);
//}}}
<<<
__One Day Ostend meetings__ renamed in ''Pistologie'' after 1999 LP dissolution (Annual Easter Monday)
<<<
[img[alt_text|http://lh6.ggpht.com/-fnybGbH6xa8/TO7ugRke6ZI/AAAAAAAAAwE/uejo8jumLIw/s800/IMG_8632.JPG]]
^^//Gondole e Paparazzi // with Piotr Osuszkiewicz, Andrew Webb and Carine Van Erps (2006)^^
[[Pistologie Full (affiches 1994-2011)|Pistologie Full 1994-2011]]
[<img(230px,auto)[alt_text|http://bit.ly/gu48bF]][img(360px,auto)[alt_text|http://goo.gl/6tZPb]]
@@color(#ff0000):''LAST UPDATES''@@
[[2004_Pistologie / Vis Comica Fin'|2004_Pistologie / Vis Comica Fin']]
[[2005_Pistologie / Moustaches Amphibies|2005_Pistologie / Moustaches Amphibies]]
[[2006_Pistologie/ Gondole e Paparazzi|2006_Pistologie/ Gondole e Paparazzi]]
[[2007_Pistologie / Canaris Anarchistes|2007_Pistologie / Canaris Anarchistes]]
[[2008_Pistologie / Marguerite Radar|2008_Pistologie / Marguerite Radar]]
[[2009_Pistologie / Parasit|2009_Pistologie / Parasit]]
[[2010_Pistologie / Belomokanal|2010_Pistologie / Belomokanal]]
[[2011_Pistologie / Ouragan|2011_Pistologie / Ouragan]]
https://picasaweb.google.com/105898452618087093313/PISTOLOGIEFULL?authkey=Gv1sRgCM6e2bjGuoHuMg#5703799362001729490
https://picasaweb.google.com/105898452618087093313/PISTOLOGIEFULL?authkey=Gv1sRgCM6e2bjGuoHuMg
Depuis 1994 chaque lundi de Pâques à Ostende (excepté 2001)
<<tiddler PicasaJqueryincl>>
https://picasaweb.google.com/105898452618087093313/Popoems#5544099740759575890
https://picasaweb.google.com/105898452618087093313/Popoems
<<tiddler PicasaJqueryincl>>
/*{{{*/
.pwi_loader{
height: 60px;
width: 200;
border: 1px solid #7F7F7F;
}
.pwi_container{
color: #000000;
background-color: ;
font-family: Arial;
font-size: 8pt;
padding: 5px;
}
.pwi_container a{
color: #000000;
}
.pwi_album_description{
text-align: left;
color: #000000;
font-family: Arial;
font-size: 0.8em;
background-color: ;
border:1px solid blue;
width:50em;
padding: 5px;
}
.pwi_album_description .title{
color: #000000;
font-family: Verdana;
font-weight:normal;
}
.pwi_album_description .details{
color: #000000;
font-style: italic;
}
.pwi_album_description .description{
font-size: 11px;
padding: ;
}
.pwi_album_description .sslink{
}
.pwi_album{
float: left;
margin: 1em;
text-align: center;
color: #000000;
cursor: pointer;
}
.pwi_album_backlink{
text-decoration: underline;
cursor: pointer;
}
.pwi_album img{
border: 0px solid #7F7F7F;
}
.pwi_photo{
float: left;
margin: 1em;
text-align: center;
border: 0px dotted white;
}
.pwi_photo img{
border: 0px solid #7F7F7F;
}
.pwi_photo a{
text-decoration: none;
}
.pwi_pager{
clear: both;
}
.pwi_prevpage, .pwi_nextpage, .pwi_pager_page, .pwi_pager_current{
float: left;
margin: 5px;
}
.link{
text-decoration: underline;
cursor: pointer;
}
.pwi_pager_current{
text-decoration: none;
font-weight: bold;
}
/*}}}*/
/***
|Name:|QuickOpenTagPlugin|
|Description:|Changes tag links to make it easier to open tags as tiddlers|
|Version:|3.0.1 ($Rev: 3861 $)|
|Date:|$Date: 2008-03-08 10:53:09 +1000 (Sat, 08 Mar 2008) $|
|Source:|http://mptw.tiddlyspot.com/#QuickOpenTagPlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License:|http://mptw.tiddlyspot.com/#TheBSDLicense|
@@color:red; ((modified for tbGTD(^mod by Tobias Beer ...optionally does not show ~QuickOpenTag-button if there are no tagging tiddlers)))@@
***/
//{{{
config.quickOpenTag = {
hideIfNoneTagging:true,
dropdownChar: "\u25be", //(document.all ? "\u25bc" : "\u25be"), // the little one doesn't work in IE?
createTagButton: function(place,tag,excludeTiddler) {
// little hack so we can do this: <<tag PrettyTagName|RealTagName>>
var splitTag = tag.split("|");
var pretty = tag;
if (splitTag.length == 2) {
tag = splitTag[1];
pretty = splitTag[0];
}
var sp = createTiddlyElement(place,"span",null,"quickopentag");
createTiddlyText(createTiddlyLink(sp,tag,false),pretty);
if(config.quickOpenTag.hideIfNoneTagging&&store.getTaggedTiddlers(tag).length==0)return; //tbGTD
var theTag = createTiddlyButton(sp,config.quickOpenTag.dropdownChar,
config.views.wikified.tag.tooltip.format([tag]),onClickTag);
theTag.setAttribute("tag",tag);
if (excludeTiddler)
theTag.setAttribute("tiddler",excludeTiddler);
return(theTag);
},
miniTagHandler: function(place,macroName,params,wikifier,paramString,tiddler) {
var tid=params[0]?params[0]:tiddler;
if (!store.getValue(tid,'nominitag')&&store.getTaggedTiddlers(tid.title).length>0) {
var theTag = createTiddlyButton(place,config.quickOpenTag.dropdownChar,
config.views.wikified.tag.tooltip.format([tid.title]),onClickTag);
theTag.setAttribute("tag",tid.title);
theTag.className = "miniTag";
}
},
allTagsHandler: function(place,macroName,params) {
var tags = store.getTags(params[0]);
var filter = params[1]; // new feature
var ul = createTiddlyElement(place,"ul");
if(tags.length == 0)
createTiddlyElement(ul,"li",null,"listTitle",this.noTags);
for(var t=0; t<tags.length; t++) {
var title = tags[t][0];
if (!filter || (title.match(new RegExp('^'+filter)))) {
var info = getTiddlyLinkInfo(title);
var theListItem =createTiddlyElement(ul,"li");
var theLink = createTiddlyLink(theListItem,tags[t][0],true);
var theCount = " (" + tags[t][1] + ")";
theLink.appendChild(document.createTextNode(theCount));
var theDropDownBtn = createTiddlyButton(theListItem," " +
config.quickOpenTag.dropdownChar,this.tooltip.format([tags[t][0]]),onClickTag);
theDropDownBtn.setAttribute("tag",tags[t][0]);
}
}
},
// todo fix these up a bit
styles: [
"/*{{{*/",
"/* created by QuickOpenTagPlugin */",
".tagglyTagged .quickopentag, .tagged .quickopentag {margin-right:1.2em; border:1px solid [[ColorPalette::TertiaryPale]]; padding:2px 0 2px 1px;}",
".quickopentag .tiddlyLink, .quickopentag a.button {padding:1px;margin:0;}",
".miniTag:hover {background:[[ColorPalette::SecondaryLight]]}",
"#displayArea .viewer .quickopentag a.button, ",
"#displayArea .viewer .quickopentag a.tiddyLink {border:0px solid [[ColorPalette::Foreground]];}",
"/*}}}*/",
""].join("\n"),
init: function() {
// we fully replace these builtins. can't hijack them easily
window.createTagButton = this.createTagButton;
config.macros.allTags.handler = this.allTagsHandler;
config.macros.miniTag = { handler: this.miniTagHandler };
config.shadowTiddlers["StyleSheetQuickOpenTag"] = this.styles;
store.addNotification("StyleSheetQuickOpenTag",refreshStyles);
}
}
config.quickOpenTag.init();
//}}}
/***
|''Name''|RandomColorPalettePlugin|
|''Description''|Adds a random color palette to TiddlyWiki|
|''Author''|Jon Robson|
|''Version''|1.2.5|
|''Status''|stable|
|''Source''|http://svn.tiddlywiki.org/Trunk/contributors/JonRobson/plugins/RandomColorPalettePlugin/RandomColorPalettePlugin.js|
|''License''|[[BSD|http://www.opensource.org/licenses/bsd-license.php]]|
!Usage
{{{
<<RandomColorPalette>>
Sets and saves a random color palette on execution
<<RandomColorPaletteButton>>
Creates a button, which when clicked will change the color palette
}}}
!Parameters
rgb: yes
By default the ColorPalette is defined in hex. You can output the colours as rgb by simply including this parameter.
hue:[0,360]
Seeds the randomiser with this hue.
saturation:[0,1]
Seeds the randomiser with a given saturation
lightness:[0,1]
Seeds the randomiser with a value for the lightest color tone (0 being darkest, 1 being lightest).
darkest:[0,1]
Seeds the randomiser with a value for the darkest color tone (0 being darkest, 1 being lightest).
huevariance: [0,90]
Given a certain hue, specify the angle from the secondary colour to which the secondary and tertiary colours should be determined.
Note parameters can be discovered by viewing the ColorPaletteParameter slice within the generated ColorPalette.
!Code
***/
//{{{
(function($){
RGB.prototype.toRGBString = function() {
return "rgb(%0,%1,%2)".format([parseInt(this.r * 255, 10),
parseInt(this.g * 255, 10), parseInt(this.b * 255, 10)])
}
function HSL_TO_RGB(h, s, l){ // h (hue) between 0 and 360, s (saturation) & l (lightness) between 0 and 1
var c;
if(l <= 0.5) {
c = 2 * l * s;
} else {
c = ( 2 - (2 * l)) * s;
}
var h1 = h / 60;
var x = c * (1 - Math.abs((h1 % 2) - 1));
var r, g, b;
if(typeof(h) == 'undefined') {
r = 0;
g = 0;
b = 0;
} else if(0 <= h1 && h1 < 1) {
r = c;
g = x;
b = 0;
} else if(1 <= h1 && h1 < 2) {
r = x;
g = c;
b = 0;
} else if(2 <= h1 && h1 < 3) {
r = 0;
g = c;
b = x;
}
else if(3 <= h1 && h1 < 4) {
r = 0;
g = x;
b = c;
} else if(4 <= h1 && h1 < 5) {
r = x;
g = 0;
b = c;
} else if(5 <= h1 && h1 < 6) {
r = c;
g = 0;
b = x;
}
m = l - (0.5 * c);
r += m;
g += m;
b += m;
return new RGB(r, g, b);
}
var macro = config.macros.RandomColorPalette = {
messagesOn: false,
changedPaletteText: "We have assigned you a random theme by adjusting the [[ColorPalette]] tiddler.\nDon't like it? Click <<RandomColorPalette>> for another one.",
handler: function(place, macroName, params, wikifier, paramString, tiddler) {
paramString = paramString || "";
var options = paramString.parseParams("name", null, true, false, true)[0];
var tiddler = macro.generatePalette(options, true);
},
generateRandomNumber: function(min, max, info) {
var num = (Math.random() * 1);
if(!info) {
info = { attempts:0 };
}
info.attempts += 1;
var good = true;
if(min == max) return max;
if(min && num < min) {
good = false;
} else if(max && num > max) {
good = false;
}
if(!good) {
if(info.attempts < 5) {
return macro.generateRandomNumber(min, max, info);
} else {
if(max) {
return max;
} else if(min) {
return min;
} else {
return 1;
}
}
}
return num;
},
getExistingPalette: function(asJSON) {
var title = "ColorPalette";
var tiddlerText;
if(store.tiddlerExists(title)) {
tiddlerText = store.getTiddlerText(title);
} else if(store.isShadowTiddler(title)){
tiddlerText = config.shadowTiddlers[title];
}
if(asJSON) {
var json = {};
if(tiddlerText) {
var lines = tiddlerText.split("\n");
for(var i = 0; i < lines.length; i++) {
var definition = lines[i].split(":");
if(definition.length == 2) {
var name = definition[0].trim();
var value = definition[1].trim();
json[name] = value;
}
}
}
return json;
} else {
return tiddlerText;
}
},
generatePalette: function(options, save) {
var outputRGB = options.rgb && options.rgb[0];
if(this.inprogress) {
return;
}
this.inprogress = true;
var palette = macro.getExistingPalette(true);
var hue = options.hue ? parseInt(options.hue[0]) : Math.floor(Math.random() * 359);
var saturation = options.saturation ? parseFloat(options.saturation[0]) : macro.generateRandomNumber(0.3, 0.7);
var dark = options.darkest ? parseFloat(options.darkest[0]) : macro.generateRandomNumber(0, 0.1);
var pale = options.lightness ? parseFloat(options.lightness[0]) : macro.generateRandomNumber(0.6 + dark, 1);
var lightness_values = {Dark:dark, Mid:pale - ( ( pale - dark ) / 2 ),
Light:pale - ( ( pale - dark ) / 4 ), Pale:pale};
var opposite_hue = (hue + 180) % 360;
var seed = options.huevariance ? options.huevariance[0] : Math.floor((85 * Math.random()) + 5); // we want it to be at least 5 degrees
var huetwo = (opposite_hue + seed) % 360;
var huethree = (opposite_hue - seed) % 360;
if(huetwo < 0) {
huetwo = 360 + huetwo;
}
if(huethree < 0) {
huethree = 360 + huethree;
}
for(var j in lightness_values) {
if(true) {
palette["Primary" + j] = HSL_TO_RGB(hue, saturation, lightness_values[j]);
palette["Secondary" + j] = HSL_TO_RGB(huetwo, saturation, lightness_values[j]);
palette["Tertiary" + j] = HSL_TO_RGB(huethree, saturation, lightness_values[j]);
}
}
palette.Background = HSL_TO_RGB(hue, saturation, 0.92);
palette.Foreground = HSL_TO_RGB(hue, saturation, 0.08);
palette.ColorPaletteParameters = ["HSL([", hue, "|", seed, "], [", saturation, "],",
"[", dark, "|", pale, "])"].join("");
// construct new ColorPalette
var text = ["/*{{{*/\n"];
var colorcode;
for(var id in palette) {
if(true) {
var color = palette[id];
if(outputRGB) {
colorcode = color.toRGBString();
} else {
colorcode = color.toString();
}
text.push("%0: %1\n".format([id, colorcode]));
}
}
text.push("/*}}}*/");
var tid = store.getTiddler('ColorPalette');
if(!tid) {
tid = new Tiddler('ColorPalette');
tid.fields = merge({}, config.defaultCustomFields);
tid.modifier ='RandomColorPalette Macro';
} else {
// TODO: detect that the ColorPalette in the space comes from elsewhere and use config.defaultCustomFields instead
}
tid.text = text.join("");
this.inprogress = false;
if(save) {
macro.saveColorPalette(tid);
}
return tid;
},
saveColorPalette: function(tid) {
// save the color palette in tid
tid = store.saveTiddler(tid.title, tid.title, tid.text, tid.modifier, tid.modified,
tid.tags, tid.fields, false, tid.created, '');
// an interval is used to cope with users clicking on the palette button quickly.
if(macro._nextSave) {
window.clearTimeout(macro._nextSave);
}
macro._nextSave = window.setTimeout(function() {
autoSaveChanges(null, [tid]);
}, 2000);
refreshAll();
macro.reportChange();
},
reportChange: function() {
if(macro.messagesOn) { // only display message once..
var msgPlace = getMessageDiv();
if(!$(".changedPalette", msgPlace)[0]) {
var tempPlace = document.createElement("div");
wikify("{{changedPalette{" + macro.changedPaletteText + "}}}", tempPlace);
msgPlace.appendChild(tempPlace);
}
}
}
};
config.macros.RandomColorPaletteButton = {
text: "New ColorPalette",
tooltip: "Generate a random colour scheme for your TiddlyWiki",
handler: function(place, macroName, params, wikifier, paramString, tiddler) {
var btnHandler = function() {
config.macros.RandomColorPalette.handler(place, macroName, params, wikifier, paramString, tiddler);
};
createTiddlyButton(place, this.text, this.tooltip, btnHandler);
}
};
})(jQuery);
//}}}
/***
|Name:|RenameTagsPlugin|
|Description:|Allows you to easily rename or delete tags across multiple tiddlers|
|Version:|3.0 ($Rev: 3861 $)|
|Date:|$Date: 2008-03-08 10:53:09 +1000 (Sat, 08 Mar 2008) $|
|Source:|http://mptw.tiddlyspot.com/#RenameTagsPlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License|http://mptw.tiddlyspot.com/#TheBSDLicense|
Rename a tag and you will be prompted to rename it in all its tagged tiddlers.
***/
//{{{
config.renameTags = {
prompts: {
rename: "Rename the tag '%0' to '%1' in %2 tidder%3?",
remove: "Remove the tag '%0' from %1 tidder%2?"
},
removeTag: function(tag,tiddlers) {
store.suspendNotifications();
for (var i=0;i<tiddlers.length;i++) {
store.setTiddlerTag(tiddlers[i].title,false,tag);
}
store.resumeNotifications();
store.notifyAll();
},
renameTag: function(oldTag,newTag,tiddlers) {
store.suspendNotifications();
for (var i=0;i<tiddlers.length;i++) {
store.setTiddlerTag(tiddlers[i].title,false,oldTag); // remove old
store.setTiddlerTag(tiddlers[i].title,true,newTag); // add new
}
store.resumeNotifications();
store.notifyAll();
},
storeMethods: {
saveTiddler_orig_renameTags: TiddlyWiki.prototype.saveTiddler,
saveTiddler: function(title,newTitle,newBody,modifier,modified,tags,fields) {
if (title != newTitle) {
var tagged = this.getTaggedTiddlers(title);
if (tagged.length > 0) {
// then we are renaming a tag
if (confirm(config.renameTags.prompts.rename.format([title,newTitle,tagged.length,tagged.length>1?"s":""])))
config.renameTags.renameTag(title,newTitle,tagged);
if (!this.tiddlerExists(title) && newBody == "")
// dont create unwanted tiddler
return null;
}
}
return this.saveTiddler_orig_renameTags(title,newTitle,newBody,modifier,modified,tags,fields);
},
removeTiddler_orig_renameTags: TiddlyWiki.prototype.removeTiddler,
removeTiddler: function(title) {
var tagged = this.getTaggedTiddlers(title);
if (tagged.length > 0)
if (confirm(config.renameTags.prompts.remove.format([title,tagged.length,tagged.length>1?"s":""])))
config.renameTags.removeTag(title,tagged);
return this.removeTiddler_orig_renameTags(title);
}
},
init: function() {
merge(TiddlyWiki.prototype,this.storeMethods);
}
}
config.renameTags.init();
//}}}
/***
|Name|SearchOptionsPlugin|
|Source|http://www.TiddlyTools.com/#SearchOptionsPlugin|
|Documentation|http://www.TiddlyTools.com/#SearchOptionsPluginInfo|
|Version|3.0.7|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|extend core search function with additional user-configurable options|
Adds extra options to core search function including selecting which data items to search, enabling/disabling incremental key-by-key searches, and generating a ''list of matching tiddlers'' instead of immediately displaying all matches. This plugin also adds syntax for rendering 'search links' within tiddler content to embed one-click searches using pre-defined 'hard-coded' search terms.
!!!!!Documentation
>see [[SearchOptionsPluginInfo]]
!!!!!Configuration
<<<
Search in:
<<option chkSearchTitles>> titles <<option chkSearchText>> text <<option chkSearchTags>> tags <<option chkSearchFields>> fields <<option chkSearchShadows>> shadows
<<option chkSearchHighlight>> Highlight matching text in displayed tiddlers
<<option chkSearchList>> Show list of matches
<<option chkSearchListTiddler>> Write list to [[SearchResults]] tiddler
<<option chkSearchTitlesFirst>> Show title matches first
<<option chkSearchByDate>> Sort matching tiddlers by modification date (most recent first)
<<option chkSearchResultsOptions>> Include {{{options...}}} slider in "search again" form
<<option chkIncrementalSearch>> Incremental key-by-key search: {{twochar{<<option txtIncrementalSearchMin>>}}} or more characters, {{threechar{<<option txtIncrementalSearchDelay>>}}} msec delay
<<option chkSearchOpenTiddlers>> Search only in tiddlers that are currently displayed
<<option chkSearchExcludeTags>> Exclude tiddlers tagged with: <<option txtSearchExcludeTags>>
<<<
!!!!!Revisions
<<<
2010.05.03 3.0.8 added chkSearchResultsOptions to allow/omit the "options..." slider from the "search again" form
|please see [[SearchOptionsPluginInfo]] for additional revision details|
2005.10.18 1.0.0 Initial Release
<<<
!!!!!Code
***/
//{{{
version.extensions.SearchOptionsPlugin= {major: 3, minor: 0, revision: 8, date: new Date(2010,5,3)};
var defaults={
chkSearchTitles: true,
chkSearchText: true,
chkSearchTags: true,
chkSearchFields: true,
chkSearchTitlesFirst: true,
chkSearchList: true,
chkSearchHighlight: true,
chkSearchListTiddler: false,
chkSearchByDate: false,
chkIncrementalSearch: true,
chkSearchShadows: true,
chkSearchOpenTiddlers: false,
chkSearchResultsOptions:true,
chkSearchExcludeTags: true,
txtSearchExcludeTags: 'excludeSearch',
txtIncrementalSearchDelay: 500,
txtIncrementalSearchMin: 3
}; for (var id in defaults) if (config.options[id]===undefined)
config.options[id]=defaults[id];
if (config.macros.search.reportTitle==undefined)
config.macros.search.reportTitle="SearchResults"; // note: not a cookie!
config.macros.search.label+="\xa0"; // a little bit of space just because it looks better
//}}}
// // searchLink: {{{[search[text to find]] OR [search[text to display|text to find]]}}}
//{{{
config.formatters.push( {
name: "searchLink",
match: "\\[search\\[",
lookaheadRegExp: /\[search\[(.*?)(?:\|(.*?))?\]\]/mg,
prompt: "search for: '%0'",
handler: function(w)
{
this.lookaheadRegExp.lastIndex = w.matchStart;
var lookaheadMatch = this.lookaheadRegExp.exec(w.source);
if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
var label=lookaheadMatch[1];
var text=lookaheadMatch[2]||label;
var prompt=this.prompt.format([text]);
var btn=createTiddlyButton(w.output,label,prompt,
function(){story.search(this.getAttribute("searchText"))},"searchLink");
btn.setAttribute("searchText",text);
w.nextMatch = this.lookaheadRegExp.lastIndex;
}
}
});
//}}}
// // incremental search uses option settings instead of hard-coded delay and minimum input values
//{{{
var fn=config.macros.search.onKeyPress;
fn=fn.toString().replace(/500/g, "config.options.txtIncrementalSearchDelay||500");
fn=fn.toString().replace(/> 2/g, ">=(config.options.txtIncrementalSearchMin||3)");
eval("config.macros.search.onKeyPress="+fn);
//}}}
// // REPLACE story.search() for option to "show search results in a list"
//{{{
Story.prototype.search = function(text,useCaseSensitive,useRegExp)
{
var co=config.options; // abbrev
var re=new RegExp(useRegExp ? text : text.escapeRegExp(),useCaseSensitive ? "mg" : "img");
if (config.options.chkSearchHighlight) highlightHack=re;
var matches = store.search(re,co.chkSearchByDate?"modified":"title","");
if (co.chkSearchByDate) matches=matches.reverse(); // most recent first
var q = useRegExp ? "/" : "'";
clearMessage();
if (!matches.length) {
if (co.chkSearchListTiddler) discardSearchResults();
displayMessage(config.macros.search.failureMsg.format([q+text+q]));
} else {
if (co.chkSearchList||co.chkSearchListTiddler)
reportSearchResults(text,matches);
else {
var titles = []; for(var t=0; t<matches.length; t++) titles.push(matches[t].title);
this.closeAllTiddlers(); story.displayTiddlers(null,titles);
displayMessage(config.macros.search.successMsg.format([matches.length, q+text+q]));
}
}
highlightHack = null;
}
//}}}
// // REPLACE store.search() for enhanced searching/sorting options
//{{{
TiddlyWiki.prototype.search = function(searchRegExp,sortField,excludeTag,match)
{
var co=config.options; // abbrev
var tids = this.reverseLookup("tags",excludeTag,!!match,sortField);
var opened=[]; story.forEachTiddler(function(tid,elem){opened.push(tid);});
// eliminate tiddlers tagged with excluded tags
if (co.chkSearchExcludeTags&&co.txtSearchExcludeTags.length) {
var ex=co.txtSearchExcludeTags.readBracketedList();
var temp=[]; for(var t=tids.length-1; t>=0; t--)
if (!tids[t].tags.containsAny(ex)) temp.push(tids[t]);
tids=temp;
}
// scan for matching titles first...
var results = [];
if (co.chkSearchTitles) {
for(var t=0; t<tids.length; t++) {
if (co.chkSearchOpenTiddlers && !opened.contains(tids[t].title)) continue;
if(tids[t].title.search(searchRegExp)!=-1) results.push(tids[t]);
}
if (co.chkSearchShadows)
for (var t in config.shadowTiddlers) {
if (co.chkSearchOpenTiddlers && !opened.contains(t)) continue;
if ((t.search(searchRegExp)!=-1) && !store.tiddlerExists(t))
results.push((new Tiddler()).assign(t,config.shadowTiddlers[t]));
}
}
// then scan for matching text, tags, or field data
for(var t=0; t<tids.length; t++) {
if (co.chkSearchOpenTiddlers && !opened.contains(tids[t].title)) continue;
if (co.chkSearchText && tids[t].text.search(searchRegExp)!=-1)
results.pushUnique(tids[t]);
if (co.chkSearchTags && tids[t].tags.join(" ").search(searchRegExp)!=-1)
results.pushUnique(tids[t]);
if (co.chkSearchFields && store.forEachField!=undefined)
store.forEachField(tids[t],
function(tid,field,val) {
if (val.search(searchRegExp)!=-1) results.pushUnique(tids[t]);
},
true); // extended fields only
}
// then check for matching text in shadows
if (co.chkSearchShadows)
for (var t in config.shadowTiddlers) {
if (co.chkSearchOpenTiddlers && !opened.contains(t)) continue;
if ((config.shadowTiddlers[t].search(searchRegExp)!=-1) && !store.tiddlerExists(t))
results.pushUnique((new Tiddler()).assign(t,config.shadowTiddlers[t]));
}
// if not 'titles first', or sorting by modification date,
// re-sort results to so titles, text, tag and field matches are mixed together
if(!sortField) sortField = "title";
var bySortField=function(a,b){
if(a[sortField]==b[sortField])return(0);else return(a[sortField]<b[sortField])?-1:+1;
}
if (!co.chkSearchTitlesFirst || co.chkSearchByDate) results.sort(bySortField);
return results;
}
//}}}
// // HIJACK core {{{<<search>>}}} macro to add "report" and "simple inline" output
//{{{
config.macros.search.SOP_handler=config.macros.search.handler;
config.macros.search.handler = function(place,macroName,params)
{
// if "report", use SearchOptionsPlugin report generator for inline output
if (params[1]&¶ms[1].substr(0,6)=="report") {
var keyword=params[0];
var options=params[1].split("=")[1]; // split "report=option+option+..."
var heading=params[2]?params[2].unescapeLineBreaks():"";
var matches=store.search(new RegExp(keyword.escapeRegExp(),"img"),"title","excludeSearch");
if (matches.length) wikify(heading+window.formatSearchResults(keyword,matches,options),place);
} else if (params[1]) {
var keyword=params[0];
var heading=params[1]?params[1].unescapeLineBreaks():"";
var seperator=params[2]?params[2].unescapeLineBreaks():", ";
var matches=store.search(new RegExp(keyword.escapeRegExp(),"img"),"title","excludeSearch");
if (matches.length) {
var out=[];
for (var m=0; m<matches.length; m++) out.push("[["+matches[m].title+"]]");
wikify(heading+out.join(seperator),place);
}
} else
config.macros.search.SOP_handler.apply(this,arguments);
};
//}}}
// // SearchResults panel handling
//{{{
setStylesheet(".searchResults { padding:1em 1em 0 1em; }","searchResults"); // matches std tiddler padding
config.macros.search.createPanel=function(text,matches,body) {
function getByClass(e,c) { var d=e.getElementsByTagName("div");
for (var i=0;i<d.length;i++) if (hasClass(d[i],c)) return d[i]; }
var panel=createTiddlyElement(null,"div","searchPanel","searchPanel");
this.renderPanel(panel,text,matches,body);
var oldpanel=document.getElementById("searchPanel");
if (!oldpanel) { // insert new panel just above tiddlers
var da=document.getElementById("displayArea");
da.insertBefore(panel,da.firstChild);
} else { // if panel exists
var oldwrap=getByClass(oldpanel,"searchResults");
var newwrap=getByClass(panel,"searchResults");
// if no prior content, just insert new content
if (!oldwrap) oldpanel.insertBefore(newwrap,null);
else { // swap search results content but leave containing panel intact
oldwrap.style.display='block'; // unfold wrapper if needed
var i=oldwrap.getElementsByTagName("input")[0]; // get input field
if (i) { var pos=this.getCursorPos(i); i.onblur=null; } // get cursor pos, ignore blur
oldpanel.replaceChild(newwrap,oldwrap);
panel=oldpanel; // use existing panel
}
}
this.showPanel(true,pos);
return panel;
}
config.macros.search.renderPanel=function(panel,text,matches,body) {
var wrap=createTiddlyElement(panel,"div",null,"searchResults");
wrap.onmouseover = function(e){ addClass(this,"selected"); }
wrap.onmouseout = function(e){ removeClass(this,"selected"); }
// create toolbar: "open all", "fold/unfold", "close"
var tb=createTiddlyElement(wrap,"div",null,"toolbar");
var b=createTiddlyButton(tb, "open all", "open all matching tiddlers", function() {
story.displayTiddlers(null,this.getAttribute("list").readBracketedList()); return false; },"button");
var list=""; for(var t=0;t<matches.length;t++) list+='[['+matches[t].title+']] ';
b.setAttribute("list",list);
var b=createTiddlyButton(tb, "fold", "toggle display of search results", function() {
config.macros.search.foldPanel(this); return false; },"button");
var b=createTiddlyButton(tb, "close", "dismiss search results", function() {
config.macros.search.showPanel(false); return false; },"button");
createTiddlyText(createTiddlyElement(wrap,"div",null,"title"),"Search for: "+text); // title
wikify(body,createTiddlyElement(wrap,"div",null,"viewer")); // report
return panel;
}
config.macros.search.showPanel=function(show,pos) {
var panel=document.getElementById("searchPanel");
var i=panel.getElementsByTagName("input")[0];
i.onfocus=show?function(){config.macros.search.stayFocused(true);}:null;
i.onblur=show?function(){config.macros.search.stayFocused(false);}:null;
if (show && panel.style.display=="block") { // if shown, grab focus, restore cursor
if (i&&this.stayFocused()) { i.focus(); this.setCursorPos(i,pos); }
return;
}
if(!config.options.chkAnimate) {
panel.style.display=show?"block":"none";
if (!show) { removeChildren(panel); config.macros.search.stayFocused(false); }
} else {
var s=new Slider(panel,show,false,show?"none":"children");
s.callback=function(e,p){e.style.overflow="visible";}
anim.startAnimating(s);
}
return panel;
}
config.macros.search.foldPanel=function(button) {
var d=document.getElementById("searchPanel").getElementsByTagName("div");
for (var i=0;i<d.length;i++) if (hasClass(d[i],"viewer")) var v=d[i]; if (!v) return;
var show=v.style.display=="none";
if(!config.options.chkAnimate)
v.style.display=show?"block":"none";
else {
var s=new Slider(v,show,false,"none");
s.callback=function(e,p){e.style.overflow="visible";}
anim.startAnimating(s);
}
button.innerHTML=show?"fold":"unfold";
return false;
}
config.macros.search.stayFocused=function(keep) { // TRUE/FALSE=set value, no args=get value
if (keep===undefined) return this.keepReportInFocus;
this.keepReportInFocus=keep;
return keep
}
config.macros.search.getCursorPos=function(i) {
var s=0; var e=0; if (!i) return { start:s, end:e };
try {
if (i.setSelectionRange) // FF
{ s=i.selectionStart; e=i.selectionEnd; }
if (document.selection && document.selection.createRange) { // IE
var r=document.selection.createRange().duplicate();
var len=r.text.length; s=0-r.moveStart('character',-100000); e=s+len;
}
}catch(e){};
return { start:s, end:e };
}
config.macros.search.setCursorPos=function(i,pos) {
if (!i||!pos) return; var s=pos.start; var e=pos.end;
if (i.setSelectionRange) //FF
i.setSelectionRange(s,e);
if (i.createTextRange) // IE
{ var r=i.createTextRange(); r.collapse(true); r.moveStart("character",s); r.select(); }
}
//}}}
// // SearchResults report generation
// note: these functions are defined globally, so they can be more easily redefined to customize report formats//
//{{{
if (!window.reportSearchResults) window.reportSearchResults=function(text,matches)
{
var cms=config.macros.search; // abbrev
var body=window.formatSearchResults(text,matches);
if (!config.options.chkSearchListTiddler) // show #searchResults panel
window.scrollTo(0,ensureVisible(cms.createPanel(text,matches,body)));
else { // write [[SearchResults]] tiddler
var title=cms.reportTitle;
var who=config.options.txtUserName;
var when=new Date();
var tags="excludeLists excludeSearch temporary";
var tid=store.getTiddler(title); if (!tid) tid=new Tiddler();
tid.set(title,body,who,when,tags);
store.addTiddler(tid);
story.closeTiddler(title);
story.displayTiddler(null,title);
}
}
if (!window.formatSearchResults) window.formatSearchResults=function(text,matches,opt)
{
var body='';
var title=config.macros.search.reportTitle
var q = config.options.chkRegExpSearch ? "/" : "'";
if (!opt) var opt="all";
var parts=opt.split("+");
for (var i=0; i<parts.length; i++) { var p=parts[i].toLowerCase();
if (p=="again"||p=="all") body+=window.formatSearchResults_again(text,matches);
if (p=="summary"||p=="all") body+=window.formatSearchResults_summary(text,matches);
if (p=="list"||p=="all") body+=window.formatSearchResults_list(text,matches);
if (p=="buttons"||p=="all") body+=window.formatSearchResults_buttons(text,matches);
}
return body;
}
if (!window.formatSearchResults_again) window.formatSearchResults_again=function(text,matches)
{
var title=config.macros.search.reportTitle
var body='';
// search again
body+='{{span{<<search "'+text.replace(/"/g,'"')+'">> /%\n';
body+='%/<html><input type="button" value="search again"';
body+=' onclick="var t=this.parentNode.parentNode.getElementsByTagName(\'input\')[0];';
body+=' config.macros.search.doSearch(t); return false;">';
if (!config.options.chkSearchResultsOptions) { // omit "options..."
body+='</html>}}}\n\n';
return body;
}
body+=' <a href="javascript:;" onclick="';
body+=' var e=this.parentNode.nextSibling;';
body+=' var show=e.style.display!=\'block\';';
body+=' if(!config.options.chkAnimate) e.style.display=show?\'block\':\'none\';';
body+=' else anim.startAnimating(new Slider(e,show,false,\'none\'));';
body+=' return false;">options...</a>';
body+='</html>@@display:none;border-left:1px dotted;margin-left:1em;padding:0;padding-left:.5em;font-size:90%;/%\n';
body+=' %/<<option chkSearchTitles>>titles /%\n';
body+=' %/<<option chkSearchText>>text /%\n';
body+=' %/<<option chkSearchTags>>tags /%\n';
body+=' %/<<option chkSearchFields>>fields /%\n';
body+=' %/<<option chkSearchShadows>>shadows\n';
body+=' <<option chkCaseSensitiveSearch>>case-sensitive /%\n';
body+=' %/<<option chkRegExpSearch>>text patterns /%\n';
body+=' %/<<option chkSearchByDate>>sorted by date\n';
body+=' <<option chkSearchHighlight>> highlight matching text in displayed tiddlers\n';
body+=' <<option chkIncrementalSearch>>incremental key-by-key search: /%\n';
body+=' %/{{twochar{<<option txtIncrementalSearchMin>>}}} or more characters, /%\n';
body+=' %/{{threechar{<<option txtIncrementalSearchDelay>>}}} msec delay\n';
body+=' <<option chkSearchOpenTiddlers>> search only in tiddlers that are currently displayed\n';
body+=' <<option chkSearchExcludeTags>>exclude tiddlers tagged with:\n';
body+=' {{editor{<<option txtSearchExcludeTags>>}}}/%\n';
body+='%/@@}}}\n\n';
return body;
}
if (!window.formatSearchResults_summary) window.formatSearchResults_summary=function(text,matches)
{
// summary: nn tiddlers found matching '...', options used
var body='';
var co=config.options; // abbrev
var title=config.macros.search.reportTitle
var q = co.chkRegExpSearch ? "/" : "'";
body+="''"+config.macros.search.successMsg.format([matches.length,q+"{{{"+text+"}}}"+q])+"''\n";
var opts=[];
if (co.chkSearchTitles) opts.push("titles");
if (co.chkSearchText) opts.push("text");
if (co.chkSearchTags) opts.push("tags");
if (co.chkSearchFields) opts.push("fields");
if (co.chkSearchShadows) opts.push("shadows");
if (co.chkSearchOpenTiddlers) body+="^^//search limited to displayed tiddlers only//^^\n";
body+="~~ searched in "+opts.join(" + ")+"~~\n";
body+=(co.chkCaseSensitiveSearch||co.chkRegExpSearch?"^^ using ":"")
+(co.chkCaseSensitiveSearch?"case-sensitive ":"")
+(co.chkRegExpSearch?"pattern ":"")
+(co.chkCaseSensitiveSearch||co.chkRegExpSearch?"matching^^\n":"");
return body;
}
if (!window.formatSearchResults_list) window.formatSearchResults_list=function(text,matches)
{
// bullet list of links to matching tiddlers
var body='';
var co=config.options; // abbrev
var pattern=co.chkRegExpSearch?text:text.escapeRegExp();
var sensitive=co.chkCaseSensitiveSearch?"mg":"img";
var link='{{tiddlyLinkExisting{<html><nowiki><a href="javascript:;" onclick="'
+'if(config.options.chkSearchHighlight)'
+' highlightHack=new RegExp(\x27'+pattern+'\x27.escapeRegExp(),\x27'+sensitive+'\x27);'
+'story.displayTiddler(null,\x27%0\x27);'
+'highlightHack = null; return false;'
+'" title="%2">%1</a></html>}}}';
for(var t=0;t<matches.length;t++) {
body+="* ";
if (co.chkSearchByDate)
body+=matches[t].modified.formatString('YYYY.0MM.0DD 0hh:0mm')+" ";
var title=matches[t].title;
var fixup=title.replace(/'/g,"\\x27").replace(/"/g,"\\x22");
var tid=store.getTiddler(title);
var tip=tid?tid.getSubtitle():''; tip=tip.replace(/"/g,""");
body+=link.format([fixup,title,tip])+'\n';
}
return body;
}
if (!window.formatSearchResults_buttons) window.formatSearchResults_buttons=function(text,matches)
{
// embed buttons only if writing SearchResults to tiddler
if (!config.options.chkSearchListTiddler) return "";
// "open all" button
var title=config.macros.search.reportTitle;
var body="";
body+="@@diplay:block;<html><input type=\"button\" href=\"javascript:;\" "
+"onclick=\"story.displayTiddlers(null,[";
for(var t=0;t<matches.length;t++)
body+="'"+matches[t].title.replace(/\'/mg,"\\'")+"'"+((t<matches.length-1)?", ":"");
body+="],1);\" accesskey=\"O\" value=\"open all matching tiddlers\"></html> ";
// "discard SearchResults" button
body+="<html><input type=\"button\" href=\"javascript:;\" "
+"onclick=\"discardSearchResults()\" value=\"discard "+title+"\"></html>";
body+="@@\n";
return body;
}
if (!window.discardSearchResults) window.discardSearchResults=function()
{
// remove the tiddler
story.closeTiddler(config.macros.search.reportTitle);
store.deleteTiddler(config.macros.search.reportTitle);
store.notify(config.macros.search.reportTitle,true);
}
//}}}
/%
!INFO
{{title{@@color:red;Unfortunately, the definition tiddler is not working yet... see [[here|SetCssRules]]@@}}}
|Name|SetCss|
|Source|http://www.coloredlinks.tiddlyspot.com/#SetCss|
|Version|1.0.0|
|Author|Tobias Beer|
|Type|transclusion|
|Description|Sets or removes a CSS class for a tiddler or its elements depending on the tiddler's tags|
|Documentation|http://www.coloredlinks.tiddlyspot.com/#SetCssInfo ([[SetCssInfo]])|
|''License''|[[Creative Commons Attribution-Share Alike 3.0|http://creativecommons.org/licenses/by-sa/3.0/]]|
This transclusion is inspired by [[SetTiddlerBackground from TiddlyTools...|http://www.tiddlytools.com/#SetTiddlerBackground]]
''Usage''
{{{
<<tiddler SetCss with: class tag selector>>
<<tiddler SetCss with: 'config=DefinitionTiddler'>>
}}}
See [[SetCssInfo]] or [[SetCssInfo@tiddlyspot|http://www.coloredlinks.tiddlyspot.com/#SetCssInfo]] for more info.
!OUT
$1
!SHOW
<<tiddler SetCss##OUT with: {{
//defaults
var defaultSelector='.viewer';
var c='$1',d,ds,e=place,lst,out='',t='$2',s='$3',ti,$,r,x;
c=c=='$'+'1'?'':c;
r=c.substr(0,7)=='config=';
ti=r?c.substr(7):c;
if(r){
ds=store.getTiddlerText(ti).split('\n');
for(d=0;d<ds.length;d++){
pre=ds[d].substr(0,1);
if(pre!=' '&&pre!='<'&&ds[d]!=''){
x=ds[d].readMacroParams();
out+='<\<tiddler SetCss with: [['+x[0]+']]'+
(x[1]?' [['+x[1]+']]':'')+
(x[2]?' [['+x[2]+']]':'')+'\>\>\n';
}
}
out="{{{\n"+out+"\}\}\}\n{{title{The above doesn't get triggered and I have no idea as to why not!}\}\}\nPlease read right after the output from ColorPalette here below which is there to show you that transclusion generally works with output from SetCss!\n\nForeground from ColorPalette:<<tiddler [[ColorPalette::Foreground]]>\>"+out+"<<tag Urgent>\>";
}else{
r=c.substr(0,1)=='-';
c=r?c.substr(1):c;
t=t=='$'+'2'?'':t;
s=s=='$'+'3'?defaultSelector:s;
$=s.substr(0,1)=='$';
s=$?s.substr(1):s;
do{
ti=e&&e.getAttribute?e.getAttribute('tiddler'):null;
lst=ti?e:lst;
e=e.parentNode;
}while(e);
ti=store.getTiddler(lst?lst.getAttribute('tiddler'):'');
if (c&&!t||ti&&ti.isTagged(t)){
if($)e=jQuery(s);
else{
e=jQuery(lst);
if(s!='.tiddler')e=e.find(s);
}
r?e.removeClass(c):e.addClass(c);
}
}
out;}}>>
!END%/<<tiddler {{
var src='SetCss';
src+(tiddler&&tiddler.title==src?'##INFO':'##SHOW');
}} with: [[$1]] [[$2]] [[$3]]>>
<<tiddler SetCss##INFO>>
!Parameters...
#the only one required being either...
##''simple mode:'' the css {{{class}}} being added to the tiddler element
##*for what it's worth, if you prefix this parameter with a dash ({{{-}}}) instead of being added, the class will be removed from the element!
##''enhanced mode:'' {{{'config=Definition Tiddler'}}}
##*points to a tiddler containing serveral definitions, one per line (see SetCssRules below)
#{{{tag}}} (optional)
#*a tag that triggers coloring
#{{{selector}}} (optional / default: {{{.viewer}}})
#*is a css selector corresponding to the elements you want to style
#**if you use {{{.tiddler}}} the class will be added to the tiddler itself
#***might require a refresh of that tiddler if its tag information has changed
#**using {{{.title}}} adds the class to the {{{title}}} element(s) instead of the {{{viewer}}}
#**if you prepend the selector with a {{{$}}} dollar sign, e.g. {{{$#displayArea}}}, you can reach any document element you want.
''Note:'' Any added classes will only be removed later...
*when the element, e.g. a tiddler, is being closed or refreshed by user action
*if you specifically remove the class later on ...see dash ({{{-}}}) switch for first parameter
!Example
{{{<<tiddler SetCss with: Transclusion '' 'td'>>}}} sets the class {{{transclusion}}} for all table cells in the corresponding tiddler.
!Definition tiddler
Consider defining your styling rules in a single convenient tiddler, e.g, SetCssRules, containing something like this:
<<tiddler Show with: {{'{{{\n'+store.getTiddlerText('SetCssRules')+'\n}\}\}';}}>>
Simply note the parameters as you would supply them calling SetCss individually.
To apply this set of tag-based css rules, transclude the SetCss like so...
{{{<<tiddler SetCss with: 'config=SetCssRules'>>}}}
or put it in your ViewTemplate for it to apply to all tiddlers...
{{{<span macro='tiddler SetCss with: "config=SetCssRules"' style='display:none'></span>}}}
Once you set those tags in your definitions for SetCss, the styles will be applied.
Don't forget to add corresponding css definitions to your StyleSheet{{title{!}}} like this...
{{{
.red{background:#fbb;border:1px solid #f99;}
}}}
!Rules
red Urgent
yellow #next
green #done
!End Rules
Trigger:{{{<<tiddler SetCss with: 'config=SetCssRules##Rules'>>}}}<<tiddler SetCss with: 'config=SetCssRules##Rules'>>
{{quote{Please note that any other macro output is being invoked, which you see by the wikified value for Foreground from ColorPalette and the <<tag Urgent>> button right above which has been added to the output to show you that it works! These were the statements used: {{{<<tiddler [[ColorPalette::Foreground]]>>}}} and {{{<<tag Urgent>>}}} which worked as opposed to... {{{<<tiddler SetCss with: [[green]] [[#done]]>>}}} which only works when put right into the tiddler (try it out!), yet not if ''re-transcluded'' via {{{<<tiddler SetCss with: 'config=SetCssRules##Rules'>>}}}!
{{title red{ @@text-align:center;display:block;padding:0 2em;line-height:1em;font-size:3em; So...<br>What is going on?!?@@ }}}
}}}
* colored things
** [[ColoredLinksPlugin]]
** [[CycleTags|CycleTagsInfo]]
*Archives sections
** [[Dialogist-Kantor]]
** [[Laboratoires Patacyclistes]]
** [[ex-Bureau du Port]]
** [[Pistologie]]
** [[Fumoir]]
* Main Menu Basics
** [[MainMenu]]
** [[DefaultTiddlers]]
** [[SiteSubtitle]]
** [[PageTemplate]]
** [[StyleSheet]]
** [[formating]]
** [[excludeLists]]
** [[PaletteView]]
** [[List All]]
<<accordion>>
<<permaview>><<newTiddler>><<saveChanges>><<tiddler TspotSidebar>><<slider chkSliderOptionsPanel OptionsPanel "options »" "Change TiddlyWiki advanced options">>
<<slider chkSidebarTabs SideBarTabs##SHOW "lists »" "show SideBarTabs">><<tiddler {{
jQuery('#sidebarTabs > a').addClass('buttontabs');
'';}}>>/%
!SHOW
<<tabs txtMainTab tags "list of tags" TabTags recent "list tiddlers by date" SideBarTabs##RECENT all "lists all tiddlers" TabAll more "standard lists and more" TabMore>>
!RECENT
{{recent{<<timeline "modified" "17" "YYYY-0MM-0DD">>
----
@@padding-left:10px;[[::Complete Timeline::|Timeline]]@@}}}
!end%/
~~
@@bgcolor(#ffff99):[[Home|Home]]@@~~
[img(150px,auto)[alt_text|http://goo.gl/8q11e]]
/***
|Name|SinglePageModePlugin|
|Source|http://www.TiddlyTools.com/#SinglePageModePlugin|
|Documentation|http://www.TiddlyTools.com/#SinglePageModePluginInfo|
|Version|2.9.6|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|Show tiddlers one at a time with automatic permalink, or always open tiddlers at top/bottom of page.|
This plugin allows you to configure TiddlyWiki to navigate more like a traditional multipage web site with only one tiddler displayed at a time.
!!!!!Documentation
>see [[SinglePageModePluginInfo]]
!!!!!Configuration
<<<
<<option chkSinglePageMode>> Display one tiddler at a time
><<option chkSinglePagePermalink>> Automatically permalink current tiddler
><<option chkSinglePageKeepFoldedTiddlers>> Don't close tiddlers that are folded
><<option chkSinglePageKeepEditedTiddlers>> Don't close tiddlers that are being edited
<<option chkTopOfPageMode>> Open tiddlers at the top of the page
<<option chkBottomOfPageMode>> Open tiddlers at the bottom of the page
<<option chkSinglePageAutoScroll>> Automatically scroll tiddler into view (if needed)
Notes:
* The "display one tiddler at a time" option can also be //temporarily// set/reset by including a 'paramifier' in the document URL: {{{#SPM:true}}} or {{{#SPM:false}}}.
* If more than one display mode is selected, 'one at a time' display takes precedence over both 'top' and 'bottom' settings, and if 'one at a time' setting is not used, 'top of page' takes precedence over 'bottom of page'.
* When using Apple's Safari browser, automatically setting the permalink causes an error and is disabled.
<<<
!!!!!Revisions
<<<
2008.10.17 [2.9.6] changed chkSinglePageAutoScroll default to false
| Please see [[SinglePageModePluginInfo]] for previous revision details |
2005.08.15 [1.0.0] Initial Release. Support for BACK/FORWARD buttons adapted from code developed by Clint Checketts.
<<<
!!!!!Code
***/
//{{{
version.extensions.SinglePageModePlugin= {major: 2, minor: 9, revision: 6, date: new Date(2008,10,17)};
//}}}
//{{{
config.paramifiers.SPM = { onstart: function(v) {
config.options.chkSinglePageMode=eval(v);
if (config.options.chkSinglePageMode && config.options.chkSinglePagePermalink && !config.browser.isSafari) {
config.lastURL = window.location.hash;
if (!config.SPMTimer) config.SPMTimer=window.setInterval(function() {checkLastURL();},1000);
}
} };
//}}}
//{{{
if (config.options.chkSinglePageMode==undefined)
config.options.chkSinglePageMode=false;
if (config.options.chkSinglePagePermalink==undefined)
config.options.chkSinglePagePermalink=true;
if (config.options.chkSinglePageKeepFoldedTiddlers==undefined)
config.options.chkSinglePageKeepFoldedTiddlers=false;
if (config.options.chkSinglePageKeepEditedTiddlers==undefined)
config.options.chkSinglePageKeepEditedTiddlers=false;
if (config.options.chkTopOfPageMode==undefined)
config.options.chkTopOfPageMode=false;
if (config.options.chkBottomOfPageMode==undefined)
config.options.chkBottomOfPageMode=false;
if (config.options.chkSinglePageAutoScroll==undefined)
config.options.chkSinglePageAutoScroll=false;
//}}}
//{{{
config.SPMTimer = 0;
config.lastURL = window.location.hash;
function checkLastURL()
{
if (!config.options.chkSinglePageMode)
{ window.clearInterval(config.SPMTimer); config.SPMTimer=0; return; }
if (config.lastURL == window.location.hash) return; // no change in hash
var tids=decodeURIComponent(window.location.hash.substr(1)).readBracketedList();
if (tids.length==1) // permalink (single tiddler in URL)
story.displayTiddler(null,tids[0]);
else { // restore permaview or default view
config.lastURL = window.location.hash;
if (!tids.length) tids=store.getTiddlerText("DefaultTiddlers").readBracketedList();
story.closeAllTiddlers();
story.displayTiddlers(null,tids);
}
}
if (Story.prototype.SPM_coreDisplayTiddler==undefined)
Story.prototype.SPM_coreDisplayTiddler=Story.prototype.displayTiddler;
Story.prototype.displayTiddler = function(srcElement,tiddler,template,animate,slowly)
{
var title=(tiddler instanceof Tiddler)?tiddler.title:tiddler;
var tiddlerElem=document.getElementById(story.idPrefix+title); // ==null unless tiddler is already displayed
var opt=config.options;
var single=opt.chkSinglePageMode && !startingUp;
var top=opt.chkTopOfPageMode && !startingUp;
var bottom=opt.chkBottomOfPageMode && !startingUp;
if (single) {
story.forEachTiddler(function(tid,elem) {
// skip current tiddler and, optionally, tiddlers that are folded.
if ( tid==title
|| (opt.chkSinglePageKeepFoldedTiddlers && elem.getAttribute("folded")=="true"))
return;
// if a tiddler is being edited, ask before closing
if (elem.getAttribute("dirty")=="true") {
if (opt.chkSinglePageKeepEditedTiddlers) return;
// if tiddler to be displayed is already shown, then leave active tiddler editor as is
// (occurs when switching between view and edit modes)
if (tiddlerElem) return;
// otherwise, ask for permission
var msg="'"+tid+"' is currently being edited.\n\n";
msg+="Press OK to save and close this tiddler\nor press Cancel to leave it opened";
if (!confirm(msg)) return; else story.saveTiddler(tid);
}
story.closeTiddler(tid);
});
}
else if (top)
arguments[0]=null;
else if (bottom)
arguments[0]="bottom";
if (single && opt.chkSinglePagePermalink && !config.browser.isSafari) {
window.location.hash = encodeURIComponent(String.encodeTiddlyLink(title));
config.lastURL = window.location.hash;
document.title = wikifyPlain("SiteTitle") + " - " + title;
if (!config.SPMTimer) config.SPMTimer=window.setInterval(function() {checkLastURL();},1000);
}
if (tiddlerElem && tiddlerElem.getAttribute("dirty")=="true") { // editing... move tiddler without re-rendering
var isTopTiddler=(tiddlerElem.previousSibling==null);
if (!isTopTiddler && (single || top))
tiddlerElem.parentNode.insertBefore(tiddlerElem,tiddlerElem.parentNode.firstChild);
else if (bottom)
tiddlerElem.parentNode.insertBefore(tiddlerElem,null);
else this.SPM_coreDisplayTiddler.apply(this,arguments); // let CORE render tiddler
} else
this.SPM_coreDisplayTiddler.apply(this,arguments); // let CORE render tiddler
var tiddlerElem=document.getElementById(story.idPrefix+title);
if (tiddlerElem&&opt.chkSinglePageAutoScroll) {
// scroll to top of page or top of tiddler
var isTopTiddler=(tiddlerElem.previousSibling==null);
var yPos=isTopTiddler?0:ensureVisible(tiddlerElem);
// if animating, defer scroll until after animation completes
var delay=opt.chkAnimate?config.animDuration+10:0;
setTimeout("window.scrollTo(0,"+yPos+")",delay);
}
}
if (Story.prototype.SPM_coreDisplayTiddlers==undefined)
Story.prototype.SPM_coreDisplayTiddlers=Story.prototype.displayTiddlers;
Story.prototype.displayTiddlers = function() {
// suspend single/top/bottom modes when showing multiple tiddlers
var opt=config.options;
var saveSPM=opt.chkSinglePageMode; opt.chkSinglePageMode=false;
var saveTPM=opt.chkTopOfPageMode; opt.chkTopOfPageMode=false;
var saveBPM=opt.chkBottomOfPageMode; opt.chkBottomOfPageMode=false;
this.SPM_coreDisplayTiddlers.apply(this,arguments);
opt.chkBottomOfPageMode=saveBPM;
opt.chkTopOfPageMode=saveTPM;
opt.chkSinglePageMode=saveSPM;
}
//}}}
/***
|Name|SinglePageModePluginInfo|
|Source|http://www.TiddlyTools.com/#SinglePageModePlugin|
|Documentation|http://www.TiddlyTools.com/#SinglePageModePluginInfo|
|Version|2.9.6|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|documentation|
|Description|Documentation for SinglePageModePlugin|
Normally, as you click on the links in TiddlyWiki, more and more tiddlers are displayed on the page. The order of this tiddler display depends upon when and where you have clicked. Some people like this non-linear method of reading the document, while others have reported that when many tiddlers have been opened, it can get somewhat confusing. SinglePageModePlugin allows you to configure TiddlyWiki to navigate more like a traditional multipage web site with only one item displayed at a time.
!!!!!Usage
<<<
When the plugin is enabled, only one tiddler will be displayed at a time and the browser window's titlebar is updated to include the current tiddler title. The browser's location URL is also updated with a 'permalink' for the current tiddler so that it is easier to create a browser 'bookmark' for the current tiddler. Alternatively, even when displaying multiple tiddlers //is// permitted, you can still reduce the potential for confusion by forcing tiddlers to always open at the top (or bottom) of the page instead of being displayed following the tiddler containing the link that was clicked.
<<<
!!!!!Configuration
<<<
<<option chkSinglePageMode>> Display one tiddler at a time
><<option chkSinglePagePermalink>> Automatically permalink current tiddler
><<option chkSinglePageKeepFoldedTiddlers>> Don't close tiddlers that are folded
><<option chkSinglePageKeepEditedTiddlers>> Don't close tiddlers that are being edited
<<option chkTopOfPageMode>> Open tiddlers at the top of the page
<<option chkBottomOfPageMode>> Open tiddlers at the bottom of the page
<<option chkSinglePageAutoScroll>> Automatically scroll tiddler into view (if needed)
Notes:
* {{block{
The "display one tiddler at a time" option can also be //temporarily// set/reset by including a 'paramifier' in the document URL: {{{#SPM:true}}} or {{{#SPM:false}}}. You can also use {{{SPM:expression}}}, where 'expression' is any javascript statement that evaluates to true or false. This allows you to create hard-coded links in other documents that can selectively enable/disable the use of this option based on various programmatic conditions, such as the current username. For example, using
{{{#SPM:config.options.txtUserName!="SomeName"}}}
enables 'one tiddler at a time' display for all users //other than// "~SomeName")}}}
* If more than one display mode is selected, 'one at a time' display takes precedence over both 'top' and 'bottom' settings, and if 'one at a time' setting is not used, 'top of page' takes precedence over 'bottom of page'.
* When using Apple's Safari browser, automatically setting the permalink causes an error and is disabled.
<<<
!!!!!Revisions
<<<
2008.10.17 2.9.6 changed chkSinglePageAutoScroll default to false
2008.06.12 2.9.5 corrected 'scroll to top of page' logic in auto-scroll handling
2008.06.11 2.9.4 added chkSinglePageKeepEditedTiddlers option
2008.06.05 2.9.3 in displayTiddler(), bypass single/top/bottom mode handling if startingUp. Allows multiple tiddlers to be displayed during startup processing (e.g., #story:DefaultTiddlers), even if single/top/bottom mode is enabled.
2008.04.18 2.9.2 in displayTiddler() and checkLastURL(), handling for Unicode in tiddler titles (remove explicit conversion between Unicode and UTF, as this is apparently done automatically by encode/decodeURIComponent, resulting in double-encoding!
2008.04.08 2.9.1 don't automatically add options to AdvancedOptions shadow tiddler
2008.04.02 2.9.0 in displayTiddler(), when single-page mode is in use and a tiddler is being edited, ask for permission to save-and-close that tiddler, instead of just leaving it open.
2008.03.29 2.8.3 in displayTiddler(), get title from tiddler object (if needed). Fixes errors caused when calling function passes a tiddler *object* instead of a tiddler *title*
2008.03.14 2.8.2 in displayTiddler(), if editing specified tiddler, just move it to top/bottom of story *without* re-rendering (prevents discard of partial edits).
2008.03.06 2.8.1 in paramifier handler, start 'checkURL' timer if chkSinglePageMode is enabled
2008.03.06 2.8.0 added option, {{{config.options.chkSinglePageKeepFoldedTiddlers}}}, so folded tiddlers won't be closed when using single-page mode. Also, in checkURL(), if hash is a ''permaview'' (e.g., "#foo bar baz"), then display multiple tiddlers rather than attempting to display "foo bar baz" as a single tiddler
2008.03.05 2.7.0 added support for "SPM:" URL paramifier
2008.03.01 2.6.0 in hijack of displayTiddler(), added 'title' argument to closeAllTiddlers() so that target tiddler isn't closed-and-reopened if it was already displayed. Also, added config.options.chkSinglePageAutoScrolloption to bypass automatic 'scroll into view' logic (note: core still does it's own ensureVisible() handling)
2007.12.22 2.5.3 in checkLastURL(), use decodeURIComponent() instead of decodeURI so that tiddler titles with commas (and/or other punctuation) are correctly handled.
2007.10.26 2.5.2 documentation cleanup
2007.10.08 2.5.1 in displayTiddler(), when using single-page or top-of-page mode, scrollTo(0,0) to ensure that page header is in view.
2007.09.13 2.5.0 for TPM/BPM modes, don't force tiddler to redisplay if already shown. Allows transition between view/edit or collapsed/view templates, without repositioning displayed tiddler.
2007.09.12 2.4.0 added option to disable automatic permalink feature. Also, Safari is now excluded from permalinking action to avoid bug where tiddlers don't display after hash is updated.
2007.03.03 2.3.1 fix typo when adding BPM option to AdvancedOptions (prevented checkbox from appearing)
2007.03.03 2.3.0 added support for BottomOfPageMode (BPM) based on request from DaveGarbutt
2007.02.06 2.2.3 in Story.prototype.displayTiddler(), use convertUnicodeToUTF8() for correct I18N string handling when creating URL hash string from tiddler title (based on bug report from BidiX)
2007.01.08 2.2.2 use apply() to invoke hijacked core functions
2006.07.04 2.2.1 in hijack for displayTiddlers(), suspend TPM as well as SPM so that DefaultTiddlers displays in the correct order.
2006.06.01 2.2.0 added chkTopOfPageMode (TPM) handling
2006.02.04 2.1.1 moved global variable declarations to config.* to avoid FireFox 1.5.0.1 crash bug when assigning to globals
2005.12.27 2.1.0 hijack displayTiddlers() so that SPM can be suspended during startup while displaying the DefaultTiddlers (or #hash list). Also, corrected initialization for undefined SPM flag to "false", so default behavior is to display multiple tiddlers
2005.12.27 2.0.0 Update for TW2.0
2005.11.24 1.1.2 When the back and forward buttons are used, the page now changes to match the URL. Based on code added by Clint Checketts
2005.10.14 1.1.1 permalink creation now calls encodeTiddlyLink() to handle tiddler titles with spaces in them
2005.10.14 1.1.0 added automatic setting of window title and location bar ('auto-permalink'). feature suggestion by David Dickens.
2005.10.09 1.0.1 combined documentation and code in a single tiddler
2005.08.15 1.0.0 Initial Release
<<<
http://patacycliste.tiddlyspot.com
/*{{{*/
/* SLIMBOX */
#lbOverlay {
position: fixed;
z-index: 9999;
left: 0;
top: 0;
width: 100%;
height: 100%;
background-color: #000;
cursor: pointer;
}
#lbCenter, #lbBottomContainer {
position: absolute;
z-index: 9999;
overflow: hidden;
background-color: #fff;
}
.lbLoading {
background: #fff url(http://museum.99k.org/js/jquery.slimbox2/loading.gif) no-repeat center;
}
#lbImage {
position: absolute;
left: 0;
top: 0;
border: 10px solid #fff;
background-repeat: no-repeat;
}
#lbPrevLink, #lbNextLink {
display: block;
position: absolute;
top: 0;
width: 50%;
outline: none;
}
#lbPrevLink {
left: 0;
}
#lbPrevLink:hover {
background: transparent url(http://museum.99k.org/js/jquery.slimbox2/prevlabel.gif) no-repeat 0 15%;
}
#lbNextLink {
right: 0;
}
#lbNextLink:hover {
background: transparent url(http://museum.99k.org/js/jquery.slimbox2/nextlabel.gif) no-repeat 100% 15%;
}
#lbBottom {
font-family: Verdana, Arial, Geneva, Helvetica, sans-serif;
font-size: 10px;
color: #666;
line-height: 1.4em;
text-align: left;
border: 10px solid #fff;
border-top-style: none;
}
#lbCloseLink {
display: block;
float: right;
width: 66px;
height: 22px;
background: transparent url(http://museum.99k.org/js/jquery.slimbox2/closelabel.gif) no-repeat center;
margin: 5px 0;
outline: none;
}
#lbCaption, #lbNumber {
margin-right: 71px;
}
#lbCaption {
font-weight: bold;
}
/*}}}*/
//{{{
/*
Slimbox v2.04 - The ultimate lightweight Lightbox clone for jQuery
(c) 2007-2010 Christophe Beyls <http://www.digitalia.be>
MIT-style license.
*/
(function(w){var E=w(window),u,f,F=-1,n,x,D,v,y,L,r,m=!window.XMLHttpRequest,s=[],l=document.documentElement,k={},t=new Image(),J=new Image(),H,a,g,p,I,d,G,c,A,K;w(function(){w("body").append(w([H=w('<div id="lbOverlay" />')[0],a=w('<div id="lbCenter" />')[0],G=w('<div id="lbBottomContainer" />')[0]]).css("display","none"));g=w('<div id="lbImage" />').appendTo(a).append(p=w('<div style="position: relative;" />').append([I=w('<a id="lbPrevLink" href="#" />').click(B)[0],d=w('<a id="lbNextLink" href="#" />').click(e)[0]])[0])[0];c=w('<div id="lbBottom" />').appendTo(G).append([w('<a id="lbCloseLink" href="#" />').add(H).click(C)[0],A=w('<div id="lbCaption" />')[0],K=w('<div id="lbNumber" />')[0],w('<div style="clear: both;" />')[0]])[0]});w.slimbox=function(O,N,M){u=w.extend({loop:false,overlayOpacity:0.8,overlayFadeDuration:400,resizeDuration:400,resizeEasing:"swing",initialWidth:250,initialHeight:250,imageFadeDuration:400,captionAnimationDuration:400,counterText:"Image {x} of {y}",closeKeys:[27,88,67],previousKeys:[37,80],nextKeys:[39,78]},M);if(typeof O=="string"){O=[[O,N]];N=0}y=E.scrollTop()+(E.height()/2);L=u.initialWidth;r=u.initialHeight;w(a).css({top:Math.max(0,y-(r/2)),width:L,height:r,marginLeft:-L/2}).show();v=m||(H.currentStyle&&(H.currentStyle.position!="fixed"));if(v){H.style.position="absolute"}w(H).css("opacity",u.overlayOpacity).fadeIn(u.overlayFadeDuration);z();j(1);f=O;u.loop=u.loop&&(f.length>1);return b(N)};w.fn.slimbox=function(M,P,O){P=P||function(Q){return[Q.href,Q.title]};O=O||function(){return true};var N=this;return N.unbind("click").click(function(){var S=this,U=0,T,Q=0,R;T=w.grep(N,function(W,V){return O.call(S,W,V)});for(R=T.length;Q<R;++Q){if(T[Q]==S){U=Q}T[Q]=P(T[Q],Q)}return w.slimbox(T,U,M)})};function z(){var N=E.scrollLeft(),M=E.width();w([a,G]).css("left",N+(M/2));if(v){w(H).css({left:N,top:E.scrollTop(),width:M,height:E.height()})}}function j(M){if(M){w("object").add(m?"select":"embed").each(function(O,P){s[O]=[P,P.style.visibility];P.style.visibility="hidden"})}else{w.each(s,function(O,P){P[0].style.visibility=P[1]});s=[]}var N=M?"bind":"unbind";E[N]("scroll resize",z);w(document)[N]("keydown",o)}function o(O){var N=O.keyCode,M=w.inArray;return(M(N,u.closeKeys)>=0)?C():(M(N,u.nextKeys)>=0)?e():(M(N,u.previousKeys)>=0)?B():false}function B(){return b(x)}function e(){return b(D)}function b(M){if(M>=0){F=M;n=f[F][0];x=(F||(u.loop?f.length:0))-1;D=((F+1)%f.length)||(u.loop?0:-1);q();a.className="lbLoading";k=new Image();k.onload=i;k.src=n}return false}function i(){a.className="";w(g).css({backgroundImage:"url("+n+")",visibility:"hidden",display:""});w(p).width(k.width);w([p,I,d]).height(k.height);w(A).html(f[F][1]||"");w(K).html((((f.length>1)&&u.counterText)||"").replace(/{x}/,F+1).replace(/{y}/,f.length));if(x>=0){t.src=f[x][0]}if(D>=0){J.src=f[D][0]}L=g.offsetWidth;r=g.offsetHeight;var M=Math.max(0,y-(r/2));if(a.offsetHeight!=r){w(a).animate({height:r,top:M},u.resizeDuration,u.resizeEasing)}if(a.offsetWidth!=L){w(a).animate({width:L,marginLeft:-L/2},u.resizeDuration,u.resizeEasing)}w(a).queue(function(){w(G).css({width:L,top:M+r,marginLeft:-L/2,visibility:"hidden",display:""});w(g).css({display:"none",visibility:"",opacity:""}).fadeIn(u.imageFadeDuration,h)})}function h(){if(x>=0){w(I).show()}if(D>=0){w(d).show()}w(c).css("marginTop",-c.offsetHeight).animate({marginTop:0},u.captionAnimationDuration);G.style.visibility=""}function q(){k.onload=null;k.src=t.src=J.src=n;w([a,g,c]).stop(true);w([I,d,g,G]).hide()}function C(){if(F>=0){q();F=x=D=-1;w(a).hide();w(H).stop().fadeOut(u.overlayFadeDuration,j)}return false}})(jQuery);
// AUTOLOAD CODE BLOCK (MAY BE CHANGED OR REMOVED)
if (!/android|iphone|ipod|series60|symbian|windows ce|blackberry/i.test(navigator.userAgent)) {
jQuery(function($) {
$("a[rel^='lightbox']").slimbox({/* Put custom options here */}, null, function(el) {
return (this == el) || ((this.rel.length > 8) && (this.rel == el.rel));
});
});
}
//}}}
/***
''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
***/
//{{{
window.old_lewcid_splash_restart=window.restart;
window.restart = function()
{ if (document.getElementById("SplashScreen"))
document.getElementById("SplashScreen").style.display = "none";
if (document.getElementById("contentWrapper"))
document.getElementById("contentWrapper").style.display = "block";
window.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;
}
//}}}
/*{{{*/
/* tagged as border color*/
.tagglyTagging {border:1px solid blue}
/* ColorBox iframe link */
a.iframe {color:red; border: 1px solid #000;}
a:hover.iframe {color:#000; background-color: red;}
/*BG du tiddler
.tiddler {background:url(http://i51.tinypic.com/b52wk5.gif)}*/
/*style des notes sub /sup */
.viewer sub, .viewer sup{Font-family:Arial,Verdana,sans-serif;
Font-size:10.6667px; padding-left:5px }
/* styles for BSR Picasa Plugin */
li.brscPicasaListItem{display:inline}
.albumthumbs img{padding:2px;margin:2px;}
/*viewer pre-code*/
.viewer pre {border:1px solid blue; color:#333;background:#ddd;}
/* custom styles for parallel columns. Classes coln a and coln b */
.cola {width:45%; float:left; margin-left:0.5em;}
.colb {width:45%; float:left; margin-left:1.5em;background:;font-size:0.9em;}
.colb li{list-style-image:url('http://bit.ly/eDXvOA');}
.clearx{clear:both;}
/* Last Custom 8.8.11 */
.viewer .tiddlyLink{font-family: 'Droid Sans';;font-weight:bold}
.tiddlyLink:hover {background-color:#aaa}
/*addedDK*/
#mainMenu ul {padding:0}
.viewer ul, .viewer ol {margin-left:0.5em; padding-left:0.5em;}
#container {
text-align: left;
margin: 0px auto;
padding: 0px;
border:0;
width: 850px;
}
#primary {
float: left;
width: 190px;
}
#content {
padding-top: 15px;
float: right;
width: 640px;
}
#secondary {
padding-top: 5px;
float: left;
width: 190px;
}#footer {
clear: both;
}
.tooltipsy
{
padding: 10px;
max-width: 200px;
color: #303030;
background-color: #f5f5b5;
border: 1px solid #deca7e;
}
.tabSelected{font-weight:bold}
.big{font-family: 'Inconsolata';}
#tiddlerHome .title{display:none}
iframe{border:none}
.tabContents ul li {font-size: 9px;}
.viewer img {cursor:help}
#sidebarTabs .tiddlyLinkExisting, .tiddlyLinkExisting {font-weight:normal;font-family:arial;font-size:1em}
blockquote{font-family:courier new; color:blue}
#contentWrapper {display:block;background:url() repeat-y fixed left bottom;}
#sidebarTabs ul li{list-style-type: none;line-height:1.5em}
.tabSelected{background: [[ColorPalette::Background]]; }
img{padding:0.5em;}
a.editTags{display:none}
#breadC {width:;background:;text-align:;padding:1.5em 0em 0.5em 0.2em;}
#breadC a{font-size:11px;font-family:arial;line-height:1.5em;}
.header {
background: [[ColorPalette::Background]];
margin: 2em 0;
padding:0 0;
}
#breadC a{font-weight:normal;}
#breadC a:hover{background:#9AF}
#breadC ul {list-style-type: none;}
.titleLine{
margin:2em 3em 1em 0em;
padding: 0;
text-align: left;
color: #fff;
letter-spacing:-1px;
font-family:pacifico;
float:right;
}
.siteTitle a,span.siteSubtitle{font-size:20px;}
.siteSubtitle {
color:#000;
font-family:pacifico;
}
.siteTitle {
display: inline;
position: relative;
font: 22px Helvetica, Sans-Serif;
font-weight: bold;
letter-spacing: -3px;
color: rgba(0,0,255,0.5);
padding-right:5px
}
a.searchButton{margin-left:63px;margin-right:5px;padding:3px;font-family:verdana,arial, sans-serif; background:[[ColorPalette::SecondaryMid]];;color:[[ColorPalette::PrimaryPale]];}
.searchBarOR{
position:absolute;
right:1.7em;
top:15px;
}
.searchBar{
margin-left:0;
}
/*}}}*/
/*{{{*/
body {
font-family:arial;
background:url()no-repeat;
background-attachment:fixed;
}
a:active, a:focus{outline: 0;}
.headerShadow .tiddlyLink:hover{text-decoration:underline;}
.top{float:right;margin-top:10px;display:none;}
#messageArea {background:[[ColorPalette::Error]];position:absolute;top:5px;left:35%;padding:1em 1%;margin:0 0 0 1%;width:35%;border:3px solid [[ColorPalette::TertiaryLight]];-moz-border-radius:5px; -webkit-border-radius:5px;border-radius:5px;background:[[ColorPalette::MsgLo]];}
#messageArea .messageToolbar {display:block;float:right;padding:0.1em;text-align:right;width:60px;}
#messageArea a, #messageArea .button {background:transparent;text-decoration:none;color:[[ColorPalette::TertiaryDark]];border:0;}
#messageArea a:hover{color:[[ColorPalette::Foreground]];border-bottom:1px solid [[ColorPalette::TertiaryDark]];}
#backstageToolbar {text-align:center;}
.listBreak div {border-bottom:1px solid [[ColorPalette::TertiaryMid]];margin:0;}
.popup {background:[[ColorPalette::TertiaryPale]];border: 1px solid [[ColorPalette::TertiaryMid]];}
.popup li a {height:20px;line-height:20px;}
#mainMenu .tiddlyLink, #mainMenu .button, .toolbar .button, #sidebarOptions .button, #searchResults .button, .buttontabs{line-height:1em;font-size:12px;display:block;color:[[ColorPalette::SecondaryMid]]!important;font-weight:normal;background:transparent ;padding:3px;margin:0 0 5px 0;}
.toolbar .button, #sidebarOptions .button, #searchResults .button, .buttontabs{text-align:left;}
#mainMenu .tiddlyLink, #mainMenu .button, .toolbar .button{text-align:left;}
#mainMenu .tiddlyLink:hover, #mainMenu .button:hover {background:[[ColorPalette::Backgound]];color:[[ColorPalette::Background]];border:;text-decoration:underline}
.toolbar .button:hover, #sidebarOptions .button:hover, #searchResults .button:hover, .buttontabs:hover{background:[[ColorPalette::TertiaryPale]];color:[[ColorPalette::Background]];border:}
.toolbar .button{display:inline-block;margin-bottom:0;}
#sidebarTabs .tabContents {font-size:10px;width:19em;background:#FFF;opacity:0.9; }
#sidebarOptions{padding:0.3em 0.3em 0 0.3em;}
#sidebarTabs{padding:0 0.3em 0.3em 0.3em;}
#sidebarOptions .sliderPanel {padding-top:15px;background:[[ColorPalette::Background]];border:1px solid [[ColorPalette::TertiaryLight]];font-size:110%;margin:0 0 5px 0;[[StyleSheet::BigRound]]}
#sidebar .txtOptionInput,#sidebar .pasOptionInput{display:block;width:12em;}
#sidebar li{padding: 2px 0;}
.button{cursor:pointer;}
a{color:[[ColorPalette::TertiaryDark]];font-weight:normal;}
a:hover{color:[[ColorPalette::SecondaryDark]];background:none;}
#search input{float:right;clear:none;display:inline;position:absolute;right:0;top:0;display:inline;border:1px solid #ccc;padding:0px;width:180px;z-index:0;margin-left:5px;}
#search .button, .toggleButton .button {background:none;border:0;color:#eee;font-size:115%;font-weight:bold;padding:3px 2em;}
.viewer .button{padding:1px 3px;margin:0 1px;background:[[ColorPalette::SecondaryPale]];border-color:[[ColorPalette::SecondaryMid]];}
#searchResults{margin:2em 1em 0 1em;background:[[ColorPalette::TertiaryPale]];padding:1em;[[StyleSheet::BigRound]]}
#searchResults .button {float:right;}
.viewer .button {padding:0 1px;}
.tiddler{margin-bottom:2em;}
.viewer{margin-top:1em;}
.viewer li{margin-top:3px;}
.marked{background:[[ColorPalette::SecondaryPale]];padding:0 2px;}
.wideInput input{width:500px;}
.hastags{font-weight:bold !important;color:[[ColorPalette::SecondaryDark]] !important;}
.selected .tagged, .tagged, .selected .tagging, .tagging{background:none;border:none;list-style-type:circle;}
.tagging li{margin-left:15px;list-style-type:circle;margin-top:2px;}
.tagged .listTitle, .tagging .listTitle{list-style-type:none;margin-bottom:3px;color:[[ColorPalette::SecondaryDark]];}
.tagging ul, .tagging li, .tagging li a {display:block;width:100%;}
.tagging ul{padding-right:100px;}
.tagging li a{border:1px solid transparent;border-left-width:0;border-right-width:0;}
.tagging li a:hover{border-color:[[ColorPalette::SecondaryLight]];}
.subtag a{font-size:120%;color:[[ColorPalette::SecondaryDark]];}
.noTitle .listTitle{display:none;}
.tagglyTagged {margin-bottom:7px;}
.tagglyTagged .quickopentag, .tagged .quickopentag {padding:0 !important}
div.title {margin:20px 0 3px 0;font-size:1.2em !important;font-family: 'Droid Sans', arial, serif;font-weight:;color:#000;}
#sidebarTabs .tiddlyLink{font-size:1.2em !important;border-color:transparent;padding-left:4px !important;border-left-width:10px !important;border-left-style:solid !important;}
.coloredLink{border:1px solid transparent;padding:0 4px !important;}
.tiddler [firsttag='[[ColorPalette::TertiaryMid]]']:hover{background:[[ColorPalette::TertiaryMid]] !important;color:[[ColorPalette::Background]];}
.tiddler [firsttag='Urgent']:hover{background:red !important;color:white !important;}
.red {background:#fcc;}
.yellow {background:#FDFCDC;}
.green {background:#cfc;}
/*}}}*/
/*{{{*/
[[ColorBoxCSS]]
[[SlimboxCss]]
[[colorboxCss]]
[[PwiCSS]]
[[StyleSheetShortcuts]]
[[TwitterCss]]
/*}}}*/
/*{{{*/
ul.accordion, ul.accordion li, ul.accordion li ul {margin:0; padding:0; list-style-type:none;text-align:right;}
ul.accordion li ul {display:none;}
ul.accordion li.accordion-active ul {display:block;}
ul.accordion li.accordion-active a {cursor:default;}
ul.accordion li.accordion-active ul li a{cursor:pointer;}
ul.accordion a {display:; padding:0;}
ul.accordion li a.tiddlyLink, ul.accordion li a.tiddlyLinkNonExisting, ul.accordion li a {font-weight:normal;}
ul.accordion li a {background:#0066aa; color:#FFF; border-bottom:1px solid #fff;}
ul.accordion li.accordion-active a, ul.accordion li a:hover {background:#00558F;color:#FFF;}
ul.accordion li ul li{display:block;overflow:hidden;background:pink}
ul.accordion li.accordion-active ul li {background:; color:#000; padding:0em;}
ul.accordion li.accordion-active ul li div {padding:1em 1.5em; background:#eff3fa;}
ul.accordion li.accordion-active ul a{background:#eff3fa; color:#000; padding:0.5em 0.5em 0.5em 1.0em;border:none;}
ul.accordion li.accordion-active ul a:hover {background:#e0e8f5; color:#000;}
/*}}}*/
/*{{{*/
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::SecondaryMid]];}
.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::PrimaryDark]];
border-top:1px solid [[ColorPalette::PrimaryDark]];
border-right:1px solid [[ColorPalette::PrimaryDark]];
}
.tabUnselected {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::Error]];}
.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]];}
.readOnly {background:[[ColorPalette::TertiaryPale]];}
#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;color:blue}
.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 0 1em 1em; left:-1px; top:-1px;}
.headerForeground {position:absolute; padding:4.5em 0 1em 1em; left:0px; top:0px;}
.siteTitle {font-size:3em;}
.siteSubtitle {font-size:1.2em;}
#sidebarOptions {padding-top:0.3em;}
#sidebarOptions a {margin:0 0.2em; padding:0.2em 0.3em; display:block;}
#sidebarOptions input {margin:0.4em 0.5em;}
#sidebarOptions .sliderPanel {margin-left:1em; padding:0.5em; font-size:.85em;}
#sidebarOptions .sliderPanel a {font-weight:bold; display:inline; padding:0;}
#sidebarOptions .sliderPanel input {margin:0 0 0.3em 0;}
#sidebarTabs .tabContents {width:15em; overflow:hidden;}
.wizard {padding:0.1em 1em 0 2em;}
.wizard h1 {font-size:2em; font-weight:bold; background:none; padding:0; margin:0.4em 0 0.2em;}
.wizard h2 {font-size:1.2em; font-weight:bold; background:none; padding:0; margin:0.4em 0 0.2em;}
.wizardStep {padding:1em 1em 1em 1em;}
.wizard .button {margin:0.5em 0 0; font-size:1.2em;}
.wizardFooter {padding:0.8em 0.4em 0.8em 0;}
.wizardFooter .status {padding:0 0.4em; margin-left:1em;}
.wizard .button {padding:0.1em 0.2em;}
#messageArea {position:fixed; top:2em; right:0; margin:0.5em; padding:0.5em; z-index:2000; _position:absolute;}
.messageToolbar {display:block; text-align:right; padding:0.2em;}
#messageArea a {text-decoration:underline;}
.tiddlerPopupButton {padding:0.2em;}
.popupTiddler {position: absolute; z-index:300; padding:1em; margin:0;}
.popup {position:absolute; z-index:300; font-size:.9em; padding:0; list-style:none; margin:0;}
.popup .popupMessage {padding:0.4em;}
.popup hr {display:block; height:1px; width:auto; padding:0; margin:0.2em 0;}
.popup li.disabled {padding:0.4em;}
.popup li a {display:block; padding:0.4em; font-weight:normal; cursor:pointer;}
.listBreak {font-size:1px; line-height:1px;}
.listBreak div {margin:2px 0;}
.tabset {padding:1em 0 0 0.5em;}
.tab {margin:0 0 0 0.25em; padding:2px;}
.tabContents {padding:0.5em;}
.tabContents ul, .tabContents ol {margin:0; padding:0;}
.txtMainTab .tabContents li {list-style:none;}
.tabContents li.listLink { margin-left:.75em;}
#contentWrapper {display:block;}
#splashScreen {display:none;}
.toolbar {text-align:right; font-size:.9em;}
.tiddler {padding:1em 1em 0;}
.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:0 0.25em; padding:0 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 0; font-size:.9em;}
.editorFooter .button {padding-top:0px; padding-bottom:0px;}
.fieldsetFix {border:0; padding:0; margin:1px 0px;}
.sparkline {line-height:1em;}
.sparktick {outline:0;}
.zoomer {font-size:1.1em; position:absolute; overflow:hidden;}
.zoomer div {padding:1em;}
* html #backstage {width:99%;}
* html #backstageArea {width:99%;}
#backstageArea {display:none; position:relative; overflow: hidden; z-index:150; padding:0.3em 0.5em;}
#backstageToolbar {position:relative;}
#backstageArea a {font-weight:bold; margin-left:0.5em; padding:0.3em 0.5em;}
#backstageButton {display:none; position:absolute; z-index:175; top:0; right:0;}
#backstageButton a {padding:0.1em 0.4em; margin:0.1em;}
#backstage {position:relative; width:100%; z-index:50;}
#backstagePanel {display:none; z-index:100; position:absolute; width:90%; margin-left:3em; padding:1em;}
.backstagePanelFooter {padding-top:0.2em; float:right;}
.backstagePanelFooter a {padding:0.2em 0.4em;}
#backstageCloak {display:none; z-index:20; position:absolute; width:100%; height:100px;}
.whenBackstage {display:none;}
.backstageVisible .whenBackstage {display:block;}
/*}}}*/
/***
|Name|StyleSheetShortcuts|
|Source|http://www.TiddlyTools.com/#StyleSheetShortcuts|
|Version||
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|CSS|
|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; }
/* vertical tabsets - courtesy of Tobias Beer */
.vTabs .tabset {float:left;display:block;padding:0px;margin-top:.5em;min-width:20%;}
.vTabs .tabset .tab {display:block;text-align:right;padding:2px 3px 2px 7px; margin:0 1px 1px 0;}
.vTabs .tabContents {margin-left:20%;max-width:80%;padding:5px;}
.vTabs .tabContents .tabContents {border:none; background:transparent;}
/* multi-column tiddler content (not supported in Internet Explorer) */
.twocolumns { display:block;
-moz-column-count:2; -moz-column-gap:1em; -moz-column-width:50%; /* FireFox */
-webkit-column-count:2; -webkit-column-gap:1em; -webkit-column-width:50%; /* Safari */
column-count:2; column-gap:1em; column-width:50%; /* Opera */
}
.threecolumns { display:block;
-moz-column-count:3; -moz-column-gap:1em; -moz-column-width:33%; /* FireFox */
-webkit-column-count:3; -webkit-column-gap:1em; -webkit-column-width:33%; /* Safari */
column-count:3; column-gap:1em; column-width:33%; /* Opera */
}
.fourcolumns { display:block;
-moz-column-count:4; -moz-column-gap:1em; -moz-column-width:25%; /* FireFox */
-webkit-column-count:4; -webkit-column-gap:1em; -webkit-column-width:25%; /* Safari */
column-count:4; column-gap:1em; column-width:25%; /* Opera */
}
/* page breaks */
.breakbefore { page-break-before:always; }
.breakafter { page-break-before:always; }
/* show/hide browser-specific content for InternetExplorer vs. non-IE ("moz") browsers */
*[class="ieOnly"]
{ display:none; } /* hide in moz (uses CSS selector) */
* html .mozOnly, *:first-child+html .mozOnly
{ display: none; } /* hide in IE (uses IE6/IE7 CSS hacks) */
/* borderless tables */
.borderless, .borderless table, .borderless td, .borderless tr, .borderless th, .borderless tbody
{ border:0 !important; margin:0 !important; padding:0 !important; }
.widetable, .widetable table
{ width:100%; }
/* thumbnail images (fixed-sized scaled images) */
.thumbnail img { height:5em !important; }
/* stretchable images (auto-size to fit tiddler) */
.stretch img { width:95%; }
/* grouped content */
.outline
{ display:block; padding:1em; -moz-border-radius:1em;-webkit-border-radius:1em; border:1px solid; }
.menubox
{ display:block; padding:1em; -moz-border-radius:1em;-webkit-border-radius:1em; border:1px solid; background:#fff; color:#000; }
.menubox .button, .menubox .tiddlyLinkExisting, .menubox .tiddlyLinkNonExisting
{ color:#009 !important; }
.groupbox
{ display:block; padding:1em; -moz-border-radius:1em;-webkit-border-radius:1em; border:1px solid; background:#ffe; color:#000; }
.groupbox a, .groupbox .button, .groupbox .tiddlyLinkExisting, .groupbox .tiddlyLinkNonExisting
{ color:#009 !important; }
.groupbox code
{ color:#333 !important; }
.borderleft
{ margin:0;padding:0;border:0;margin-left:1em; border-left:1px dotted; padding-left:.5em; }
.borderright
{ margin:0;padding:0;border:0;margin-right:1em; border-right:1px dotted; padding-right:.5em; }
.borderbottom
{ margin:0;padding:1px 0;border:0;border-bottom:1px dotted; margin-bottom:1px; padding-bottom:1px; }
.bordertop
{ margin:0;padding:0;border:0;border-top:1px dotted; margin-top:1px; padding-top:1px; }
/* scrolled content */
.scrollbars { overflow:auto; }
.height10em { height:10em; }
.height15em { height:15em; }
.height20em { height:20em; }
.height25em { height:25em; }
.height30em { height:30em; }
.height35em { height:35em; }
.height40em { height:40em; }
/* compact form */
.smallform
{ white-space:nowrap; }
.smallform input, .smallform textarea, .smallform button, .smallform checkbox, .smallform radio, .smallform select
{ font-size:8pt; }
/* stretchable edit fields and textareas (auto-size to fit tiddler) */
.stretch input { width:99%; }
.stretch textarea { width:99%; }
/* compact input fields (limited to a few characters for entering percentages and other small values) */
.onechar input { width:1em; }
.twochar input { width:2em; }
.threechar input { width:3em; }
.fourchar input { width:4em; }
.fivechar input { width:5em; }
/* text colors */
.white { color:#fff !important }
.gray { color:#999 !important }
.black { color:#000 !important }
.red { color:#f66 !important }
.green { color:#0c0 !important }
.blue { color:#99f !important }
/* rollover highlighting */
.mouseover
{color:[[ColorPalette::TertiaryLight]] !important;}
.mouseover a
{color:[[ColorPalette::TertiaryLight]] !important;}
.selected .mouseover
{color:[[ColorPalette::Foreground]] !important;}
.selected .mouseover .button, .selected .mouseover a
{color:[[ColorPalette::PrimaryDark]] !important;}
/* rollover zoom text */
.zoomover
{ font-size:80% !important; }
.selected .zoomover
{ font-size:100% !important; }
/* [[ColorPalette]] text colors */
.Background { color:[[ColorPalette::Background]]; }
.Foreground { color:[[ColorPalette::Foreground]]; }
.PrimaryPale { color:[[ColorPalette::PrimaryPale]]; }
.PrimaryLight { color:[[ColorPalette::PrimaryLight]]; }
.PrimaryMid { color:[[ColorPalette::PrimaryMid]]; }
.PrimaryDark { color:[[ColorPalette::PrimaryDark]]; }
.SecondaryPale { color:[[ColorPalette::SecondaryPale]]; }
.SecondaryLight { color:[[ColorPalette::SecondaryLight]];}
.SecondaryMid { color:[[ColorPalette::SecondaryMid]]; }
.SecondaryDark { color:[[ColorPalette::SecondaryDark]]; }
.TertiaryPale { color:[[ColorPalette::TertiaryPale]]; }
.TertiaryLight { color:[[ColorPalette::TertiaryLight]]; }
.TertiaryMid { color:[[ColorPalette::TertiaryMid]]; }
.TertiaryDark { color:[[ColorPalette::TertiaryDark]]; }
.Error { color:[[ColorPalette::Error]]; }
/* [[ColorPalette]] background colors */
.BGBackground { background-color:[[ColorPalette::Background]]; }
.BGForeground { background-color:[[ColorPalette::Foreground]]; }
.BGPrimaryPale { background-color:[[ColorPalette::PrimaryPale]]; }
.BGPrimaryLight { background-color:[[ColorPalette::PrimaryLight]]; }
.BGPrimaryMid { background-color:[[ColorPalette::PrimaryMid]]; }
.BGPrimaryDark { background-color:[[ColorPalette::PrimaryDark]]; }
.BGSecondaryPale { background-color:[[ColorPalette::SecondaryPale]]; }
.BGSecondaryLight { background-color:[[ColorPalette::SecondaryLight]]; }
.BGSecondaryMid { background-color:[[ColorPalette::SecondaryMid]]; }
.BGSecondaryDark { background-color:[[ColorPalette::SecondaryDark]]; }
.BGTertiaryPale { background-color:[[ColorPalette::TertiaryPale]]; }
.BGTertiaryLight { background-color:[[ColorPalette::TertiaryLight]]; }
.BGTertiaryMid { background-color:[[ColorPalette::TertiaryMid]]; }
.BGTertiaryDark { background-color:[[ColorPalette::TertiaryDark]]; }
.BGError { background-color:[[ColorPalette::Error]]; }
/*}}}*/
/*{{{*/
.tagCloud span {line-height: 3.5em; margin:3px;}
.tagCloud1{font-size: 100%;}
.tagCloud2{font-size: 110%;}
.tagCloud3{font-size: 120%;}
.tagCloud4{font-size: 140%;}
.tagCloud5{font-size: 160%;}
.tagCloud6{font-size: 180%;}
.tagCloud7{font-size: 200%;}
.tagCloud8{font-size: 220%;}
.tagCloud9{font-size: 240%;}
/*}}}*/
<<<
« ONE MURDER , HOWEVER SYMBOLIC , WOULD SATISFY. »
J.L.B.
<<<
[<img(160px,auto)[alt_text|http://bit.ly/dDs3HK]]__THANKUT__
Once again ~Dialogist-Kantor (D.K.) have given us yet another taste of their superb, highly sexualised and phalocentric art practice. The metamorphosis of marshal arts belts into errectile tissue, in the colour of human liquid expulsions and the play on childerns games using knots as a metaphor for masturbation, serve to bring form to the work. The sculpture suspended, referencing Duchamp, from the ceiling, to the correct hight inviting it to be « hit or punched », as the subtle, flexible, sweat drenched strips of fabric are woven into the hard rigid, sexually charged form of the «~Scooby-Do ».
The repetative overlapping and knoting of the material progressively ensure the solidity of the structure, evokes the making of a corn dolly - an ancient fertility object. The knotted, rope like cloth hanging , reminds us of the hangmans noose of death and the oxygen deprived enlightened orgasm. As in their last outing which gave us gold leaved horn, balls and extended forskins or enticing flesh like tunnels, DK have presented us with an eclectic piece tinged with eastern mystersism, Sadian torture and unequivocal, explicit sexual overtones that have become their trade mark.
Natalie Banco, 2004
~~(/via Andrew Webb - Brussels - Fax 27/11/04 / expo Molti Multipli CCNOA)~~
|>|bgcolor:#4c4c4c;@@color(#ccc):''68 tiddlers found matching /{{{styl}}}/''@@|bgcolor:#4c4c4c; @@color:#ffffc8; Ver: <<version>>@@ |
|>|>|bgcolor:#999;color:#000;<<search>> <<option chkSearchTitles>> Titles <<option chkSearchText>> Text <<option chkSearchTags>>Tags <<option chkHoldSearches>> Hold |
|bgcolor:#4c4c4c; |bgcolor:#4c4c4c; ''Titles'' |bgcolor:#4c4c4c; ''Size'' |bgcolor:#4c4c4c; ''Tags'' |bgcolor:#4c4c4c; ''Modified'' |h
| 1|[[StyleSheetTagCloud]]| 326||2011.08.08|
| 2|[[StyleSheetShortcuts]]| 8578|CSS,Stylesheet|2010.11.13|
| 3|[[StyleSheetLayout]]| 6386||2011.10.30|
| 4|[[StyleSheetColors]]| 8866||2011.11.12|
| 5|[[StyleSheetAccordionMenuPlugin]]| 1080||2010.10.27|
| 6|[[StyleSheet]]| 8294|CSS,excludeLists|2012.02.22|
| 7|[[StyleSheetLocale]]| 432||2012.04.08|
| 8|[[StyleSheetPrint]]| 290||2012.04.08|
| 9|[[StyleSheetFE2]]| 247||2012.04.08|
| 10|[[IntelliTaggerStyleSheet]]| 908||2012.04.08|
| 11|[[StyleSheetQuickOpenTag]]| 474||2012.04.08|
| 12|[[StyleSheetTagSearch]]| 1419||2012.04.08|
| 13|[[TagglyTaggingStyles]]| 2477||2012.04.08|
| 14|[[StyleSheetTwyp]]| 1487||2012.04.08|
| 15|[[WikiBar]]| 53458|systemConfig|2011.11.01|
| 16|[[UploadPlugin]]| 19117|systemConfig|2010.10.17|
| 17|[[Un hommage à Bernd Lohaus]]| 922|EXHIB_DKgroup,›Updates|2011.02.04|
| 18|[[twyp]]| 12938|excludeLists,systemConfig|2011.01.19|
| 19|[[TwitterCss]]| 3651|CSS|2012.01.16|
| 20|[[ToggleFullScreen]]| 2966|toggle|2010.10.23|
| 21|[[TiddlerListMacro]]| 8297|systemConfig|2010.09.09|
| 22|[[The Red Spot Serie]]| 628|›Updates,››DK works selection,››Print Stuff|2011.04.12|
| 23|[[The Munder Blackout Effect]]| 1359|›Updates,››DK works selection,framedLinks|2012.02.05|
| 24|[[TagSearchPlugin]]| 11283|systemConfig|2010.09.08|
| 25|[[TagglyTaggingPlugin]]| 23141|systemConfig|2012.01.16|
| 26|[[TagCloudSmall]]| 115|excludeLists|2011.05.12|
| 27|[[TagCloudPlugin]]| 9637|systemConfig|2011.02.02|
| 28|[[SplashScreenPlugin]]| 2386|systemConfig|2011.01.30|
| 29|[[SlimboxJS]]| 4135|systemConfig|2011.03.14|
| 30|[[SlimboxCss]]| 1421|PWI,css|2010.10.25|
| 31|[[SideBarOptions]]| 572||2012.01.16|
| 32|[[SetCssInfo]]| 2194||2010.09.10|
| 33|[[SearchOptionsPlugin]]| 20418|systemConfig|2010.09.26|
| 34|[[QuickOpenTagPlugin]]| 3723|systemConfig|2010.09.09|
| 35|[[PwiCSS]]| 1364|css|2011.05.23|
| 36|[[PicasaWebIntegrationPWI]]| 20971|systemConfig|2011.03.14|
| 37|[[PicasaJquery]]| 680||2010.10.28|
| 38|[[PasswordOptionsPlugin]]| 2488|systemConfig|2010.10.17|
| 39|[[NestedSlidersPlugin]]| 14643|systemConfig|2010.10.23|
| 40|[[MarkupPreHead]]| 634||2011.12.07|
| 41|[[MarkupPostHead]]| 145||2012.01.30|
| 42|[[Maphilighted.js]]| 6082|systemConfig|2012.01.25|
| 43|[[IntelliTaggerPlugin]]| 17347|systemConfig|2010.10.02|
| 44|[[InlineJavascriptPlugin]]| 4444|systemConfig|2010.09.26|
| 45|[[ImageSizePlugin]]| 6758|systemConfig|2010.09.29|
| 46|[[FU09-Mc Keta prjcts]]| 1052|›Updates|2011.10.23|
| 47|[[FU04-Odie Rynell Cash+ extras]]| 660|›Updates|2011.04.12|
| 48|[[FU01-LL L’éveil à L’envers]]| 854|›Updates|2011.04.11|
| 49|[[FramedLinksPlugin]]| 5441|framedLinks,systemConfig|2012.02.05|
| 50|[[ForEachTiddlerPlugin]]| 30340|systemConfig|2010.09.26|
| 51|[[FE2]]| 4416|systemConfig|2010.09.08|
| 52|[[EditTemplate]]| 610||2011.08.24|
| 53|[[colorboxJS]]| 26938|jQuery,systemConfig|2012.01.09|
| 54|[[ColorBoxCSS]]| 2475|css|2011.11.01|
| 55|[[BreadcrumbsPluginInfo]]| 11185|excludeLists,pluginInfo|2011.02.02|
| 56|[[BreadcrumbsPlugin]]| 8951|systemConfig|2011.02.02|
| 57|[[BreadCrumbs]]| 161|breadcrumbs|2012.01.16|
| 58|[[AccordionMenuPlugin]]| 3372|systemConfig|2010.10.23|
| 59|[[2011_No-Made Avelgem to Pori pre-prep w/ Heinrich Obst 5050]]| 698|EXHIB_DKgroup,›Updates,››Pori|2011.05.12|
| 60|[[2011_Fool Time A Lot ( Pori / Finland )]]| 972|›Updates,››DK works selection,››Pori|2011.05.31|
| 61|[[2010_Cherry Invitational]]| 641|EXHIB_DKgroup,›Updates|2010.11.29|
| 62|[[2009_Rouge]]| 893|CO21,EXHIB_DKgroup,›Updates|2011.08.23|
| 63|[[2009_ Everything is possibly possible Machine Vzw #3]]| 5039|›Updates,››DK works selection|2012.01.27|
| 64|[[2007_1°Triennal de Luanda]]| 671|EXHIB_DKgroup,›Updates|2010.11.25|
| 65|[[2005_Soleil 11]]| 1432|EXHIB_DKgroup,›Updates|2011.02.02|
| 66|[[StyleSheetLocale]]| 432||2012.04.08|
| 67|[[IntelliTaggerStyleSheet]]| 908||2012.04.08|
| 68|[[TagglyTaggingStyles]]| 2477||2012.04.08|
|sortable|k
<<tiddler SidebarImage>>
<<allTags excludeLists ›>>
/***
|Name|TagCloudPlugin|
|Source|http://www.TiddlyTools.com/#TagCloudPlugin|
|Version|1.7.0|
|Author|Eric Shulman|
|Original Author|Clint Checketts|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|present a 'cloud' of tags (or links) using proportional font display|
!Usage
<<<
{{{
<<cloud type action:... limit:... tag tag tag ...>>
<<cloud type action:... limit:... +TiddlerName>>
<<cloud type action:... limit:... -TiddlerName>>
<<cloud type action:... limit:... =tagvalue>>
}}}
where:
* //type// is a keyword, one of:
** ''tags'' (default) - displays a cloud of tags, based on frequency of use
** ''links'' - displays a cloud of tiddlers, based on number of links //from// each tiddler
** ''references'' - displays a cloud of tiddlers, based on number of links //to// each tiddler
* ''action:popup'' (default) - clicking a cloud item shows a popup with links to related tiddlers<br>//or//<br> ''action:goto'' - clicking a cloud item immediately opens the tiddler corresponding to that item
* ''limit:N'' (optional) - restricts the cloud display to only show the N most popular tags/links
* ''tag tag tag...'' (or ''title title title'' if ''links''/''references'' is used)<br>shows all tags/links in the document //except// for those listed as macro parameters
* ''+TiddlerName''<br>show only tags/links read from a space-separated, bracketed list stored in a separate tiddler.
* ''-TiddlerName''<br>show all tags/links //except// those read from a space-separated, bracketed list stored in a separate tiddler.
* ''=tagvalue'' (//only if type=''tags''//)<br>shows only tags that are themselves tagged with the indicated tag value (i.e., ~TagglyTagging usage)
//note: for backward-compatibility, you can also use the macro {{{<<tagCloud ...>>}}} in place of {{{<<cloud ...>>}}}//
<<<
!Examples
<<<
//all tags excluding<<tag systemConfig>>, <<tag excludeMissing>> and <<tag script>>//
{{{<<cloud systemConfig excludeMissing script>>}}}
{{groupbox{<<cloud systemConfig excludeMissing script>>}}}
//top 10 tags excluding<<tag systemConfig>>, <<tag excludeMissing>> and <<tag script>>//
{{{<<cloud limit:10 systemConfig excludeMissing script>>}}}
{{groupbox{<<cloud limit:10 systemConfig excludeMissing script>>}}}
//tags listed in// [[FavoriteTags]]
{{{<<cloud +FavoriteTags>>}}}
{{groupbox{<<cloud +FavoriteTags>>}}}
//tags NOT listed in// [[FavoriteTags]]
{{{<<cloud -FavoriteTags>>}}}
{{groupbox{<<cloud -FavoriteTags>>}}}
//links to tiddlers tagged with 'package'//
{{{<<cloud action:goto =package>>}}}
{{groupbox{<<cloud action:goto =package>>}}}
//top 20 most referenced tiddlers//
{{{<<cloud references limit:20>>}}}
{{groupbox{<<cloud references limit:20>>}}}
//top 20 tiddlers that contain the most links//
{{{<<cloud links limit:20>>}}}
{{groupbox{<<cloud links limit:20>>}}}
<<<
!Revisions
<<<
2009.07.17 [1.7.0] added {{{-TiddlerName}}} parameter to exclude tags that are listed in the indicated tiddler
2009.02.26 [1.6.0] added {{{action:...}}} parameter to apply popup vs. goto action when clicking cloud items
2009.02.05 [1.5.0] added ability to show links or back-links (references) instead of tags and renamed macro to {{{<<cloud>>}}} to reflect more generalized usage.
2008.12.16 [1.4.2] corrected group calculation to prevent 'group=0' error
2008.12.16 [1.4.1] revised tag filtering so excluded tags don't affect calculations
2008.12.15 [1.4.0] added {{{limit:...}}} parameter to restrict the number of tags displayed to the top N most popular
2008.11.15 [1.3.0] added {{{+TiddlerName}}} parameter to include only tags that are listed in the indicated tiddler
2008.09.05 [1.2.0] 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] added 'segments' property to macro object. Extensive code cleanup
<<<
!Code
***/
//{{{
version.extensions.TagCloudPlugin= {major: 1, minor: 7 , revision: 0, date: new Date(2009,7,17)};
//Originally created by Clint Checketts, contributions by Jonny Leroy and Eric Shulman
//Currently maintained and enhanced by Eric Shulman
//}}}
//{{{
config.macros.cloud = {
tagstip: "%1 tiddlers tagged with '%0'",
refslabel: " (%0 references)",
refstip: "%1 tiddlers have links to '%0'",
linkslabel: " (%0 links)",
linkstip: "'%0' has links to %1 other tiddlers",
groups: 9,
init: function() {
config.macros.tagCloud=config.macros.cloud; // for backward-compatibility
config.shadowTiddlers.TagCloud='<<cloud>>';
config.shadowTiddlers.StyleSheetTagCloud=
'/*{{{*/\n'
+'.tagCloud span {line-height: 3.5em; margin:3px;}\n'
+'.tagCloud1{font-size: 80%;}\n'
+'.tagCloud2{font-size: 100%;}\n'
+'.tagCloud3{font-size: 120%;}\n'
+'.tagCloud4{font-size: 140%;}\n'
+'.tagCloud5{font-size: 160%;}\n'
+'.tagCloud6{font-size: 180%;}\n'
+'.tagCloud7{font-size: 200%;}\n'
+'.tagCloud8{font-size: 220%;}\n'
+'.tagCloud9{font-size: 240%;}\n'
+'/*}}}*/\n';
setStylesheet(store.getTiddlerText('StyleSheetTagCloud'),'tagCloudsStyles');
},
getLinks: function(tiddler) { // get list of links to existing tiddlers and shadows
if (!tiddler.linksUpdated) tiddler.changed();
var list=[]; for (var i=0; i<tiddler.links.length; i++) {
var title=tiddler.links[i];
if (store.isShadowTiddler(title)||store.tiddlerExists(title))
list.push(title);
}
return list;
},
handler: function(place,macroName,params) {
// unpack params
var inc=[]; var ex=[]; var limit=0; var action='popup';
var links=(params[0]&¶ms[0].toLowerCase()=='links'); if (links) params.shift();
var refs=(params[0]&¶ms[0].toLowerCase()=='references'); if (refs) params.shift();
if (params[0]&¶ms[0].substr(0,7).toLowerCase()=='action:')
action=params.shift().substr(7).toLowerCase();
if (params[0]&¶ms[0].substr(0,6).toLowerCase()=='limit:')
limit=parseInt(params.shift().substr(6));
while (params.length) {
if (params[0].substr(0,1)=='+') { // read taglist from tiddler
inc=inc.concat(store.getTiddlerText(params[0].substr(1),'').readBracketedList());
} else if (params[0].substr(0,1)=='-') { // exclude taglist from tiddler
ex=ex.concat(store.getTiddlerText(params[0].substr(1),'').readBracketedList());
} else if (params[0].substr(0,1)=='=') { // get tag list using tagged tags
var tagged=store.getTaggedTiddlers(params[0].substr(1));
for (var t=0; t<tagged.length; t++) inc.push(tagged[t].title);
} else ex.push(params[0]); // exclude params
params.shift();
}
// get all items, include/exclude specific items
var items=[];
var list=(links||refs)?store.getTiddlers('title','excludeLists'):store.getTags();
for (var t=0; t<list.length; t++) {
var title=(links||refs)?list[t].title:list[t][0];
if (links) var count=this.getLinks(list[t]).length;
else if (refs) var count=store.getReferringTiddlers(title).length;
else var count=list[t][1];
if ((!inc.length||inc.contains(title))&&(!ex.length||!ex.contains(title)))
items.push({ title:title, count:count });
}
if(!items.length) return;
// sort by decending count, limit results (optional)
items=items.sort(function(a,b){return(a.count==b.count)?0:(a.count>b.count?-1:1);});
while (limit && items.length>limit) items.pop();
// find min/max and group size
var most=items[0].count;
var least=items[items.length-1].count;
var groupSize=(most-least+1)/this.groups;
// sort by title and draw the cloud of items
items=items.sort(function(a,b){return(a.title==b.title)?0:(a.title>b.title?1:-1);});
var cloudWrapper = createTiddlyElement(place,'div',null,'tagCloud',null);
for (var t=0; t<items.length; t++) {
cloudWrapper.appendChild(document.createTextNode(' '));
var group=Math.ceil((items[t].count-least)/groupSize)||1;
var className='tagCloudtag tagCloud'+group;
var tip=refs?this.refstip:links?this.linkstip:this.tagstip;
tip=tip.format([items[t].title,items[t].count]);
if (action=='goto') { // TAG/LINK/REFERENCES GOTO
var btn=createTiddlyLink(cloudWrapper,items[t].title,true,className);
btn.title=tip;
btn.style.fontWeight='normal';
} else if (!links&&!refs) { // TAG POPUP
var btn=createTiddlyButton(cloudWrapper,items[t].title,tip,onClickTag,className);
btn.setAttribute('tag',items[t].title);
} else { // LINK/REFERENCES POPUP
var btn=createTiddlyButton(cloudWrapper,items[t].title,tip,
function(ev) { var e=ev||window.event; var cmt=config.macros.cloud;
var popup = Popup.create(this);
var title = this.getAttribute('tiddler');
var count = this.getAttribute('count');
var refs = this.getAttribute('refs')=='T';
var links = this.getAttribute('links')=='T';
var label = (refs?cmt.refslabel:cmt.linkslabel).format([count]);
createTiddlyLink(popup,title,true);
createTiddlyText(popup,label);
createTiddlyElement(popup,'hr');
if (refs) {
popup.setAttribute('tiddler',title);
config.commands.references.handlePopup(popup,title);
}
if (links) {
var tiddler = store.fetchTiddler(title);
var links=config.macros.cloud.getLinks(tiddler);
for(var i=0;i<links.length;i++)
createTiddlyLink(createTiddlyElement(popup,'li'),
links[i],true);
}
Popup.show();
e.cancelBubble=true; if(e.stopPropagation) e.stopPropagation();
return false;
}, className);
btn.setAttribute('tiddler',items[t].title);
btn.setAttribute('count',items[t].count);
btn.setAttribute('refs',refs?'T':'F');
btn.setAttribute('links',links?'T':'F');
btn.title=tip;
}
}
}
};
//}}}
<<cloud systemConfig excludeLists Script macros pluginInfo Transclusion excludeSearch CSS Stylesheet tests PWI >>
Provides configuration for TagSearchPlugin...
!Tags
[[Colored]]
[[Action]]
[[Priority]]
!More
[[TAG:Archive]]
[[Journal]]
[[Reference]]
[[Transclusion]]
[[systemConfig]]
[[systemConfigDisable]]
[[excludeMissing]]
[[excludeSearch]]
[[excludeLists]]
[[ColoredLinksLegacy]]
/***
|''Name:''|TagSearchPlugin|
|''Version:''|1.0.4 (2010-09-07)|
|''Source:''|http://tagsearch.tiddlyspot.com/#TagSearchPlugin|
|''Author:''|[[Tobias Beer]]|
|''Description:''|Provides a drop down listing current tags and others to be set. Based on [[x-tagger|http://tbgtd.tiddlyspot.com/#x-tagger]] which in turn was once based on [[TaggerPlugin|http://tw.lewcid.org/#TaggerPlugin]].|
|''Documentation:''|See [[Welcome]] or [[online help|http://tagsearch.tiddlyspot.com]]|
|''~TiddlyWiki:''|Version 2.5 or better|
***/
//{{{
config.macros.tagsearch={
cfg:{
defaultMode:1, // 0 -> substitute (silent), 1 -> ask for substitution, >1 -> always add (silent)
defaultOpenNew:1, //0: never open new tiddler, 1:ask, >2: always open
defaultMore:'', //the default for the more section
sidebarOffset:20, //dist from sidebar
colWidth:'180px', //minwidth of sides
newAtSingle:30, //new block for all tags
newAt:18, //new block when grouped
excludeTagged:'', //default tags or exclusion
arrow:document.all?" ▼":" ▾", //only the fat works in IE
label:'Tags:', //localization starts here
options:'Options',
more:'More...',
tooltip:'Manage tiddler tags',
notags:'no tags set...',
aretags:'Current tags',
addTag:'Add tag...',
addTags:'Set tag...',
txtRemove: 'remove tag',
txtEdit:"~ edit categories...",
txtEditTip:"edit tiddler with GTD tag categories used by x-tagger",
txtNew:"~ add another tag",
txtAdd:"set tag ",
txtFor:"To be tagged... ",
promptNew:"Enter new tag:",
modeAsk:"Do also you want to remove tag '%0' and other tags from category '%1'?\nCancel simply adds tag '%2'.",
askOpen:"Do you want to open the newly created tiddler '%0' now tagged '%1'?"
},
handler:function(place,macroName,params,wikifier,paramString,tiddler){
var c,click,e,ex=[],goto,lbl,list,open,mode,more,notags,p,source,rtid,src,tb,tid,tip,tmp,x;
x=config.macros.tagsearch;c=x.cfg;
p=paramString.parseParams('tagman',null,true);
tb=params.contains("toolbar");
notags=params.contains("notags");
lbl=getParam(p,"label",c.label)+c.arrow;
tip=getParam(p,"tooltip",c.tooltip);
exclude=(getParam(p,"exclude",'')+' '+c.excludeTagged).readBracketedList();
exclude.map(function(e){ex.pushUnique(e);});
for(e=0;e<exclude.length;e++){
store.getTaggedTiddlers(exclude[e]).map(function(t){ex.pushUnique(t.title)});
}
src=getParam(p,"source",'');
if(src&&!store.getTiddlerText(src))return false;
more=getParam(p,"more",c.defaultMore);
mode=parseInt(getParam(p,"mode",c.defaultMode));
mode=isNaN(mode)?c.defaultMode:mode;
open=parseInt(getParam(p,"open",c.defaultOpenNew));
open=isNaN(open)?c.defaultOpenNew:open;
goto=getParam(p,"goto",'');
tid=rtid=getParam(p,"tiddler");
if(!tid){
do{tid=tmp;tmp=story.findContainingTiddler(place);}while(tmp&&tid!=tmp);
tid=tid?tid.getAttribute('tiddler'):'';
}
if(!tid)return;
click=function(e){
e=e||window.event;
var ar,curr,d1,d2,fst=true,i,j,l,nuBtns,nuLi,m,max=nu=src?c.newAt:c.newAtSingle,oTid=store.getTiddler(tid),pop,s,t,tags=[],tids,ti,tgt;
pop=Popup.create(this);
addClass(pop,'tagsearch');
if(src){//mod tb:different method for source tiddler
tids=store.getTiddlerText(src).readBracketedList();
for(t=0;t<tids.length;t++){
if(!ex.contains(tids[t])){
tgt=store.getTaggedTiddlers(tids[t]);
tags.push('TAG:'+tids[t]);
for(s=0;s<tgt.length;s++){
if(!ex.contains(tgt[s].title))tags.push(tgt[s].title);
}
}
}
}else tags=store.getTags();
curr=oTid?oTid.tags.sort():[];
nuLi=function(p){return createTiddlyElement(createTiddlyElement(p,"li",null,null),"ol",null,null);}
nuBtns=function(where,text,tag,pref){
var s,t;
s=createTiddlyElement(createTiddlyElement(where,"li"),"span",null,null);
t=createTiddlyButton(s,text,pref+" '"+tag+"'",x.setTag,"button toggleButton", null);
t.setAttribute("tiddler",tid);
t.setAttribute("tag",tag);
t.setAttribute("source",src);
t.setAttribute("mode",mode);
t.setAttribute("open",open);
insertSpacer(s);
createTagButton(s,tag);
}
d1=nuLi(pop);d2=nuLi(d1);
if(config.macros.gotoTiddler){
if(rtid){
l=createTiddlyElement(d2,"li",null,'addto','');
wikify('{{title{'+c.txtFor+'}}}<<tag [['+tid+']]>>',l);
d2=nuLi(d1);
}
createTiddlyElement(d2,"li",null,"title",c.addTag);
wikify('<<gotoTiddler '+goto+' >>',d2);
}
d2=nuLi(d1);
createTiddlyElement(d2,"li",null,"title",c.aretags);
if(curr.length==0)wikify('{{added{'+c.notags+'}}}',d2);
else for(t=0;t<curr.length;t++)nuBtns(d2,"[X]",curr[t],c.txtRemove);
if(c.colWidth)jQuery('li',d1).css('min-width',c.colWidth);
if(!notags){
for(i=0;i<tags.length;i++){
nu++;
ti=src?tags[i]:tags[i][0];
if(ti.indexOf('TAG:')==0){
ti=ti.substr(4);
if(nu>max){nu=0;d1=nuLi(pop);}d2=nuLi(d1);nu++;
createTiddlyLink(createTiddlyElement(d2,"li",null,null),ti,ti,'title');
}
else if(!curr.contains(ti)&&!ex.contains(ti)){
if(!src&&nu>max||src&&nu>c.newAtSingle){
nu=0;d1=nuLi(pop);d2=nuLi(d1);
if(fst){createTiddlyElement(createTiddlyElement(d2,"li",null,null),'li',null,'title',c.addTags);fst=false;}
}
nuBtns(d2,"["+String.fromCharCode(160,160,160)+"]",ti,c.txtAdd);
}
}
//options
d1=nuLi(pop);d2=nuLi(d1);createTiddlyElement(d2,'li',null,'title',c.options);
var newBtn=createTiddlyButton(createTiddlyElement(d2,"li"),(c.txtNew),null,x.setTag,'tsoption');
newBtn.setAttribute("tiddler",tid);
if(src){
var edit=createTiddlyButton(createTiddlyElement(d2,"li"),c.txtEdit,c.txtEditTip,onClickTiddlerLink,'tsoption');
edit.setAttribute("tiddlyLink",src.split('##')[0]);
}
fst=true;
if(more){//more
m=store.getTiddlerText(more).readBracketedList();
if(m.length>0){
for(i=0;i<m.length;i++){
var ti=m[i];
if(ti.indexOf('TAG:')==0){
ti=ti.substr(4,ti.length-4);
d2=nuLi(d1);createTiddlyLink(createTiddlyElement(d2,"li",null,null),ti,ti,'title');
ar=store.getTaggedTiddlers(ti);
for(j=0;j<ar.length;j++){var ti=ar[i].title;
if(!tiddler.tags.contains(ti)&&!ex.contains(ti))nuBtns(d2,"["+String.fromCharCode(160,160)+"]",ti,c.txtAdd);
}
}else{
if(fst){d2=nuLi(d1);createTiddlyElement(d2,'li',null,'title',c.more);fst=false;}
if(!curr.contains(ti)&&!ex.contains(ti))nuBtns(d2,"["+String.fromCharCode(160,160)+"]",ti,c.txtAdd);
}
}
}
if(c.colWidth)jQuery('li',d1).css('min-width',c.colWidth);
}
}
jQuery(pop).attr({tiddler:tid,source:src,mode:mode,open:open});
Popup.show(pop,false);
put=jQuery(".tagsearch form input");
put.attr('notify','config.macros.tagsearch.notify');
put.focus();
if(tb){
s=document.getElementById('sidebarTabs');
pop.style.left='';pop.style.right=(c.sidebarOffset+(s?s.offsetWidth:0))+'px';
}
e.cancelBubble=true;
if(e.stopPropagation)e.stopPropagation();
return false;
}
createTiddlyButton(place,lbl,tip,click,"button","tagsearchDrop");
},
setTag:function(e){
var a,b,el,f,m,nu,o,r,s,set,src,t,tag,ti,tid,title,c=config.macros.tagsearch.cfg;
el=e&&!e.target?e:this;
title=el.getAttribute("tiddler");
tag=el.getAttribute("tag");
src=el.getAttribute("source");
m=el.getAttribute("mode");
o=el.getAttribute("open");
tid=store.getTiddler(title);
if(!tag){nu=prompt(c.promptNew,"");if(!nu)return false;else tag=nu;}
b=!tid;
if(!tid||!tid.tags){
f=merge((tid?tid.fields:{}), config.defaultCustomFields);
store.saveTiddler(title,title,'',config.options.txtUserName,new Date(),tag,f);
if(!tid&&!document.getElementById(title)&&o>0)
if(o>1||o==1&&confirm(c.askOpen.format([title,tag])))
story.displayTiddler(null,title);
}else{
if(!tid.tags.contains(tag)){
if(src){
if(m<2){
var cats=store.getTiddlerText(src).readBracketedList();
findTagged: for(t=0;t<cats.length;t++){
ti=cats[t];
var tgt=store.getTaggedTiddlers(ti);
for(s=0;s<tgt.length;s++){
if(tgt[s].title==tag){
for(r=0;r<tgt.length;r++){
if(tid.tags.contains(tgt[r].title)){
var ok;
if(m==1&&!ok){
if(!confirm(c.modeAsk.format([tgt[r].title,ti,tag])))break findTagged;
ok=true;
}
store.setTiddlerTag(title,false,tgt[r].title);
}
}
break findTagged;
}
}
}
}
}
store.setTiddlerTag(title,true,tag);
}
else if(!nu)store.setTiddlerTag(title,false,tag);
story.saveTiddler(title);
}
if(!e.target){e.value='';e.focus();}
},
notify:function(tag){
var p = jQuery('.tagsearch');
var i = jQuery('.tagsearch form input')[0];
var t = store.getTiddler(p.attr('tiddler'));
if(t&&t.tags.contains(tag))return false;
wikify('{{added{ {{add{+}}} <<tag "'+tag+'">>}}}',i.parentNode);
p.attr('tag',tag);
this.setTag(p[0]);
i.select();
},
tiddler:'',
src:''
}
var gt=config.macros.gotoTiddler;
if(gt){
gt.processItem=function(title,here,list,showlist) {
if (!title.length) return;
list.style.display=showlist?'block':'none';
if (title=="*") { story.search(here.value); return false; } // do full-text search
if (!showlist) here.value=title;
var n=here.getAttribute('notify');
if(n)eval(n+'("'+title+'")'); //notify of selection, otherwise...
else story.displayTiddler(null,title); // show selected tiddler (default behaviour)
return false;
}
gt.IEtableFixup="%0";
}
var TP=store.getTiddlerText('ColorPalette::TertiaryPale'),
TM=store.getTiddlerText('ColorPalette::TertiaryMid'),
TD=store.getTiddlerText('ColorPalette::TertiaryDark'),
SP=store.getTiddlerText('ColorPalette::SecondaryPale'),
SD=store.getTiddlerText('ColorPalette::SecondaryDark');
config.shadowTiddlers["StyleSheetTagSearch"]="/*{{{*/\n"+
".tagsearch {padding:7px !important;border:1px solid "+SD+";background: "+TP+";-moz-border-radius:5px; -webkit-border-radius:5px;border-radius:5px;}\n"+
".tagsearch li a, .tagsearch .quickopentag .tiddlyLink {display:inline;padding:2px;color:"+TD+";clear:none;line-height:1em;height:1em;}\n"+
".tagsearch li a.toggleButton {display:inline;margin-left:5px;}\n"+
".tagsearch .title {margin:3px 0 0 5px;font-weight:bold;font-size:150%;color:"+SD+";padding:0;}\n"+
".tagsearch form{display:block;float:left;clear:both;padding-left:5px !important;}\n"+
".tagsearch .addto .quickopentag{display:block;clear:both;padding:5px;font-size:120%;}\n"+
".tagsearch .added{display:block;clear:both;padding:5px;}\n"+
".tagsearch .added span{display:block;float:left;}\n"+
".tagsearch .add{clear:left;padding:0 3px;}\n"+
".tagsearch ol{margin:0;padding:0 0 5px 0;}\n"+
".tagsearch li{display:block;float:left;padding-bottom:10px !important;}\n"+
".tagsearch li span{line-height:1em;}\n"+
".tagsearch li ol li{clear:both;min-width:120px;display:inline;border:1px solid transparent;}\n"+
".tagsearch li ol li:hover{border:1px solid "+TM+";}\n"+
".tagsearch li ol li ol li{padding:0 !important;}\n"+
".tagsearch li ol li ol li:hover{border:1px solid transparent;}\n"+
".tagsearch .tiddlyLink:hover{color:"+SD+";background:"+SP+";}\n"+
".tagsearch .quickopentag {display:inline;}\n"+
".tagsearch .quickopentag .tiddlyLink:hover {text-decoration:underline;}\n"+
".tagsearch .quickopentag .button {border:0;padding:2px;font-size:1.5em;}\n"+
"/*}}}*/";
store.addNotification("StyleSheetTagSearch",refreshStyles);
//}}}
/***
|Name:|TagglyTaggingPlugin|
|Description:|tagglyTagging macro is a replacement for the builtin tagging macro in your ViewTemplate|
|Version:|3.3.2a|
|Date:|27-Jun-2011|
|Source:|http://mptw.tiddlyspot.com/#TagglyTaggingPlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License:|http://mptw.tiddlyspot.com/#TheBSDLicense|
!Notes
See http://mptw.tiddlyspot.com/#TagglyTagging
***/
//{{{
merge(String.prototype,{
parseTagExpr: function(debug) {
if (this.trim() == "")
return "(true)";
var anyLogicOp = /(!|&&|\|\||\(|\))/g;
var singleLogicOp = /^(!|&&|\|\||\(|\))$/;
var spaced = this.
// because square brackets in templates are no good
// this means you can use [(With Spaces)] instead of [[With Spaces]]
replace(/\[\(/g," [[").
replace(/\)\]/g,"]] ").
// space things out so we can use readBracketedList. tricky eh?
replace(anyLogicOp," $1 ");
var expr = "";
var tokens = spaced.readBracketedList(false); // false means don't uniq the list. nice one JR!
for (var i=0;i<tokens.length;i++)
if (tokens[i].match(singleLogicOp))
expr += tokens[i];
else
expr += "tiddler.tags.contains('%0')".format([tokens[i].replace(/'/,"\\'")]); // fix single quote bug. still have round bracket bug i think
if (debug)
alert(expr);
return '('+expr+')';
}
});
merge(TiddlyWiki.prototype,{
getTiddlersByTagExpr: function(tagExpr,sortField) {
var result = [];
var expr = tagExpr.parseTagExpr();
store.forEachTiddler(function(title,tiddler) {
if (eval(expr))
result.push(tiddler);
});
if(!sortField)
sortField = "title";
result.sort(function(a,b) {return a[sortField] < b[sortField] ? -1 : (a[sortField] == b[sortField] ? 0 : +1);});
return result;
}
});
config.taggly = {
// for translations
lingo: {
labels: {
asc: "\u2191", // down arrow
desc: "\u2193", // up arrow
title: "title",
modified: "modified",
created: "created",
show: "+",
hide: "-",
normal: "normal",
group: "group",
commas: "commas",
sitemap: "sitemap",
numCols: "cols\u00b1", // plus minus sign
label: "Tagged as '%0':",
exprLabel: "Matching tag expression '%0':",
excerpts: "excerpts",
descr: "descr",
slices: "slices",
contents: "contents",
sliders: "sliders",
noexcerpts: "title only",
noneFound: "(none)"
},
tooltips: {
title: "Click to sort by title",
modified: "Click to sort by modified date",
created: "Click to sort by created date",
show: "Click to show tagging list",
hide: "Click to hide tagging list",
normal: "Click to show a normal ungrouped list",
group: "Click to show list grouped by tag",
sitemap: "Click to show a sitemap style list",
commas: "Click to show a comma separated list",
numCols: "Click to change number of columns",
excerpts: "Click to show excerpts",
descr: "Click to show the description slice",
slices: "Click to show all slices",
contents: "Click to show entire tiddler contents",
sliders: "Click to show tiddler contents in sliders",
noexcerpts: "Click to show entire title only"
},
tooDeepMessage: "* //sitemap too deep...//"
},
config: {
showTaggingCounts: true,
listOpts: {
// the first one will be the default
sortBy: ["title","modified","created"],
sortOrder: ["asc","desc"],
hideState: ["show","hide"],
listMode: ["sitemap","normal","group","commas"],
numCols: ["1","2","3","4","5","6"],
excerpts: ["noexcerpts", "excerpts","descr","slices","contents","sliders"]
},
valuePrefix: "taggly.",
excludeTags: ["excludeLists","excludeTagging"],
excerptSize: 50,
excerptMarker: "/%"+"%/",
siteMapDepthLimit: 25
},
getTagglyOpt: function(title,opt) {
var val = store.getValue(title,this.config.valuePrefix+opt);
return val ? val : this.config.listOpts[opt][0];
},
setTagglyOpt: function(title,opt,value) {
// create it silently if it doesn't exist
if (!store.tiddlerExists(title)) {
store.saveTiddler(title,title,config.views.editor.defaultText.format([title]),config.options.txtUserName,new Date(),"");
// <<tagglyTagging expr:"...">> creates a tiddler to store its display settings
// Make those tiddlers less noticeable by tagging as excludeSearch and excludeLists
// Because we don't want to hide real tags, check that they aren't actually tags before doing so
// Also tag them as tagglyExpression for manageability
// (contributed by RA)
if (!store.getTaggedTiddlers(title).length) {
store.setTiddlerTag(title,true,"excludeSearch");
store.setTiddlerTag(title,true,"excludeLists");
store.setTiddlerTag(title,true,"tagglyExpression");
}
}
// if value is default then remove it to save space
return store.setValue(title, this.config.valuePrefix+opt, value == this.config.listOpts[opt][0] ? null : value);
},
getNextValue: function(title,opt) {
var current = this.getTagglyOpt(title,opt);
var pos = this.config.listOpts[opt].indexOf(current);
// supposed to automagically don't let cols cycle up past the number of items
// currently broken in some situations, eg when using an expression
// lets fix it later when we rewrite for jquery
// the columns thing should be jquery table manipulation probably
var limit = (opt == "numCols" ? store.getTaggedTiddlers(title).length : this.config.listOpts[opt].length);
var newPos = (pos + 1) % limit;
return this.config.listOpts[opt][newPos];
},
toggleTagglyOpt: function(title,opt) {
var newVal = this.getNextValue(title,opt);
this.setTagglyOpt(title,opt,newVal);
},
createListControl: function(place,title,type) {
var lingo = config.taggly.lingo;
var label;
var tooltip;
var onclick;
if ((type == "title" || type == "modified" || type == "created")) {
// "special" controls. a little tricky. derived from sortOrder and sortBy
label = lingo.labels[type];
tooltip = lingo.tooltips[type];
if (this.getTagglyOpt(title,"sortBy") == type) {
label += lingo.labels[this.getTagglyOpt(title,"sortOrder")];
onclick = function() {
config.taggly.toggleTagglyOpt(title,"sortOrder");
return false;
}
}
else {
onclick = function() {
config.taggly.setTagglyOpt(title,"sortBy",type);
config.taggly.setTagglyOpt(title,"sortOrder",config.taggly.config.listOpts.sortOrder[0]);
return false;
}
}
}
else {
// "regular" controls, nice and simple
label = lingo.labels[type == "numCols" ? type : this.getNextValue(title,type)];
tooltip = lingo.tooltips[type == "numCols" ? type : this.getNextValue(title,type)];
onclick = function() {
config.taggly.toggleTagglyOpt(title,type);
return false;
}
}
// hide button because commas don't have columns
if (!(this.getTagglyOpt(title,"listMode") == "commas" && type == "numCols"))
createTiddlyButton(place,label,tooltip,onclick,type == "hideState" ? "hidebutton" : "button");
},
makeColumns: function(orig,numCols) {
var listSize = orig.length;
var colSize = listSize/numCols;
var remainder = listSize % numCols;
var upperColsize = colSize;
var lowerColsize = colSize;
if (colSize != Math.floor(colSize)) {
// it's not an exact fit so..
upperColsize = Math.floor(colSize) + 1;
lowerColsize = Math.floor(colSize);
}
var output = [];
var c = 0;
for (var j=0;j<numCols;j++) {
var singleCol = [];
var thisSize = j < remainder ? upperColsize : lowerColsize;
for (var i=0;i<thisSize;i++)
singleCol.push(orig[c++]);
output.push(singleCol);
}
return output;
},
drawTable: function(place,columns,theClass) {
var newTable = createTiddlyElement(place,"table",null,theClass);
var newTbody = createTiddlyElement(newTable,"tbody");
var newTr = createTiddlyElement(newTbody,"tr");
for (var j=0;j<columns.length;j++) {
var colOutput = "";
for (var i=0;i<columns[j].length;i++)
colOutput += columns[j][i];
var newTd = createTiddlyElement(newTr,"td",null,"tagglyTagging"); // todo should not need this class
wikify(colOutput,newTd);
}
return newTable;
},
createTagglyList: function(place,title,isTagExpr) {
switch(this.getTagglyOpt(title,"listMode")) {
case "group": return this.createTagglyListGrouped(place,title,isTagExpr); break;
case "normal": return this.createTagglyListNormal(place,title,false,isTagExpr); break;
case "commas": return this.createTagglyListNormal(place,title,true,isTagExpr); break;
case "sitemap":return this.createTagglyListSiteMap(place,title,isTagExpr); break;
}
},
getTaggingCount: function(title,isTagExpr) {
// thanks to Doug Edmunds
if (this.config.showTaggingCounts) {
var tagCount = config.taggly.getTiddlers(title,'title',isTagExpr).length;
if (tagCount > 0)
return " ("+tagCount+")";
}
return "";
},
getTiddlers: function(titleOrExpr,sortBy,isTagExpr) {
return isTagExpr ? store.getTiddlersByTagExpr(titleOrExpr,sortBy) : store.getTaggedTiddlers(titleOrExpr,sortBy);
},
getExcerpt: function(inTiddlerTitle,title,indent) {
if (!indent)
indent = 1;
var displayMode = this.getTagglyOpt(inTiddlerTitle,"excerpts");
var t = store.getTiddler(title);
if (t && displayMode == "excerpts") {
var text = t.text.replace(/\n/," ");
var marker = text.indexOf(this.config.excerptMarker);
if (marker != -1) {
return " {{excerpt{<nowiki>" + text.substr(0,marker) + "</nowiki>}}}";
}
else if (text.length < this.config.excerptSize) {
return " {{excerpt{<nowiki>" + t.text + "</nowiki>}}}";
}
else {
return " {{excerpt{<nowiki>" + t.text.substr(0,this.config.excerptSize) + "..." + "</nowiki>}}}";
}
}
else if (t && displayMode == "contents") {
return "\n{{contents indent"+indent+"{\n" + t.text + "\n}}}";
}
else if (t && displayMode == "sliders") {
return "<slider slide>\n{{contents{\n" + t.text + "\n}}}\n</slider>";
}
else if (t && displayMode == "descr") {
var descr = store.getTiddlerSlice(title,'Description');
return descr ? " {{excerpt{" + descr + "}}}" : "";
}
else if (t && displayMode == "slices") {
var result = "";
var slices = store.calcAllSlices(title);
for (var s in slices)
result += "|%0|<nowiki>%1</nowiki>|\n".format([s,slices[s]]);
return result ? "\n{{excerpt excerptIndent{\n" + result + "}}}" : "";
}
return "";
},
notHidden: function(t,inTiddler) {
if (typeof t == "string")
t = store.getTiddler(t);
return (!t || !t.tags.containsAny(this.config.excludeTags) ||
(inTiddler && this.config.excludeTags.contains(inTiddler)));
},
// this is for normal and commas mode
createTagglyListNormal: function(place,title,useCommas,isTagExpr) {
var list = config.taggly.getTiddlers(title,this.getTagglyOpt(title,"sortBy"),isTagExpr);
if (this.getTagglyOpt(title,"sortOrder") == "desc")
list = list.reverse();
var output = [];
var first = true;
for (var i=0;i<list.length;i++) {
if (this.notHidden(list[i],title)) {
var countString = this.getTaggingCount(list[i].title);
var excerpt = this.getExcerpt(title,list[i].title);
if (useCommas)
output.push((first ? "" : ", ") + "[[" + list[i].title + "]]" + countString + excerpt);
else
output.push("*[[" + list[i].title + "]]" + countString + excerpt + "\n");
first = false;
}
}
return this.drawTable(place,
this.makeColumns(output,useCommas ? 1 : parseInt(this.getTagglyOpt(title,"numCols"))),
useCommas ? "commas" : "normal");
},
// this is for the "grouped" mode
createTagglyListGrouped: function(place,title,isTagExpr) {
var sortBy = this.getTagglyOpt(title,"sortBy");
var sortOrder = this.getTagglyOpt(title,"sortOrder");
var list = config.taggly.getTiddlers(title,sortBy,isTagExpr);
if (sortOrder == "desc")
list = list.reverse();
var leftOvers = []
for (var i=0;i<list.length;i++)
leftOvers.push(list[i].title);
var allTagsHolder = {};
for (var i=0;i<list.length;i++) {
for (var j=0;j<list[i].tags.length;j++) {
if (list[i].tags[j] != title) { // not this tiddler
if (this.notHidden(list[i].tags[j],title)) {
if (!allTagsHolder[list[i].tags[j]])
allTagsHolder[list[i].tags[j]] = "";
if (this.notHidden(list[i],title)) {
allTagsHolder[list[i].tags[j]] += "**[["+list[i].title+"]]"
+ this.getTaggingCount(list[i].title) + this.getExcerpt(title,list[i].title) + "\n";
leftOvers.setItem(list[i].title,-1); // remove from leftovers. at the end it will contain the leftovers
}
}
}
}
}
var allTags = [];
for (var t in allTagsHolder)
allTags.push(t);
var sortHelper = function(a,b) {
if (a == b) return 0;
if (a < b) return -1;
return 1;
};
allTags.sort(function(a,b) {
var tidA = store.getTiddler(a);
var tidB = store.getTiddler(b);
if (sortBy == "title") return sortHelper(a,b);
else if (!tidA && !tidB) return 0;
else if (!tidA) return -1;
else if (!tidB) return +1;
else return sortHelper(tidA[sortBy],tidB[sortBy]);
});
var leftOverOutput = "";
for (var i=0;i<leftOvers.length;i++)
if (this.notHidden(leftOvers[i],title))
leftOverOutput += "*[["+leftOvers[i]+"]]" + this.getTaggingCount(leftOvers[i]) + this.getExcerpt(title,leftOvers[i]) + "\n";
var output = [];
if (sortOrder == "desc")
allTags.reverse();
else if (leftOverOutput != "")
// leftovers first...
output.push(leftOverOutput);
for (var i=0;i<allTags.length;i++)
if (allTagsHolder[allTags[i]] != "")
output.push("*[["+allTags[i]+"]]" + this.getTaggingCount(allTags[i]) + this.getExcerpt(title,allTags[i]) + "\n" + allTagsHolder[allTags[i]]);
if (sortOrder == "desc" && leftOverOutput != "")
// leftovers last...
output.push(leftOverOutput);
return this.drawTable(place,
this.makeColumns(output,parseInt(this.getTagglyOpt(title,"numCols"))),
"grouped");
},
// used to build site map
treeTraverse: function(title,depth,sortBy,sortOrder,isTagExpr) {
var list = config.taggly.getTiddlers(title,sortBy,isTagExpr);
if (sortOrder == "desc")
list.reverse();
var indent = "";
for (var j=0;j<depth;j++)
indent += "*"
var childOutput = "";
if (depth > this.config.siteMapDepthLimit)
childOutput += indent + this.lingo.tooDeepMessage + "\n";
else
for (var i=0;i<list.length;i++)
if (list[i].title != title)
if (this.notHidden(list[i].title,this.config.inTiddler))
childOutput += this.treeTraverse(list[i].title,depth+1,sortBy,sortOrder,false);
if (depth == 0)
return childOutput;
else
return indent + "[["+title+"]]" + this.getTaggingCount(title) + this.getExcerpt(this.config.inTiddler,title,depth) + "\n" + childOutput;
},
// this if for the site map mode
createTagglyListSiteMap: function(place,title,isTagExpr) {
this.config.inTiddler = title; // nasty. should pass it in to traverse probably
var output = this.treeTraverse(title,0,this.getTagglyOpt(title,"sortBy"),this.getTagglyOpt(title,"sortOrder"),isTagExpr);
return this.drawTable(place,
this.makeColumns(output.split(/(?=^\*\[)/m),parseInt(this.getTagglyOpt(title,"numCols"))), // regexp magic
"sitemap"
);
},
macros: {
tagglyTagging: {
handler: function (place,macroName,params,wikifier,paramString,tiddler) {
var parsedParams = paramString.parseParams("tag",null,true);
var refreshContainer = createTiddlyElement(place,"div");
// do some refresh magic to make it keep the list fresh - thanks Saq
refreshContainer.setAttribute("refresh","macro");
refreshContainer.setAttribute("macroName",macroName);
var tag = getParam(parsedParams,"tag");
var expr = getParam(parsedParams,"expr");
if (expr) {
refreshContainer.setAttribute("isTagExpr","true");
refreshContainer.setAttribute("title",expr);
refreshContainer.setAttribute("showEmpty","true");
}
else {
refreshContainer.setAttribute("isTagExpr","false");
if (tag) {
refreshContainer.setAttribute("title",tag);
refreshContainer.setAttribute("showEmpty","true");
}
else {
refreshContainer.setAttribute("title",tiddler.title);
refreshContainer.setAttribute("showEmpty","false");
}
}
this.refresh(refreshContainer);
},
refresh: function(place) {
var title = place.getAttribute("title");
var isTagExpr = place.getAttribute("isTagExpr") == "true";
var showEmpty = place.getAttribute("showEmpty") == "true";
jQuery(place).empty()
addClass(place,"tagglyTagging");
var countFound = config.taggly.getTiddlers(title,'title',isTagExpr).length
if (countFound > 0 || showEmpty) {
var lingo = config.taggly.lingo;
config.taggly.createListControl(place,title,"hideState");
if (config.taggly.getTagglyOpt(title,"hideState") == "show") {
createTiddlyElement(place,"span",null,"tagglyLabel",
isTagExpr ? lingo.labels.exprLabel.format([title]) : lingo.labels.label.format([title]));
config.taggly.createListControl(place,title,"title");
config.taggly.createListControl(place,title,"modified");
config.taggly.createListControl(place,title,"created");
config.taggly.createListControl(place,title,"listMode");
config.taggly.createListControl(place,title,"excerpts");
config.taggly.createListControl(place,title,"numCols");
config.taggly.createTagglyList(place,title,isTagExpr);
if (countFound == 0 && showEmpty)
createTiddlyElement(place,"div",null,"tagglyNoneFound",lingo.labels.noneFound);
}
}
}
}
},
// todo fix these up a bit
styles: [
"/*{{{*/",
"/* created by TagglyTaggingPlugin */",
".tagglyTagging { padding-top:0.5em; }",
".tagglyTagging li.listTitle { display:none; }",
".tagglyTagging ul {",
" margin-top:0px; padding-top:0.5em; padding-left:2em;",
" margin-bottom:0px; padding-bottom:0px;",
"}",
".tagglyTagging { vertical-align: top; margin:0px; padding:0px; }",
".tagglyTagging table { margin:0px; padding:0px; }",
".tagglyTagging .button { visibility:hidden; margin-left:3px; margin-right:3px; }",
".tagglyTagging .button, .tagglyTagging .hidebutton {",
" color:[[ColorPalette::TertiaryLight]]; font-size:90%;",
" border:0px; padding-left:0.3em;padding-right:0.3em;",
"}",
".tagglyTagging .button:hover, .hidebutton:hover, ",
".tagglyTagging .button:active, .hidebutton:active {",
" border:0px; background:[[ColorPalette::TertiaryPale]]; color:[[ColorPalette::TertiaryDark]];",
"}",
".selected .tagglyTagging .button { visibility:visible; }",
".tagglyTagging .hidebutton { color:[[ColorPalette::Background]]; }",
".selected .tagglyTagging .hidebutton { color:[[ColorPalette::TertiaryLight]] }",
".tagglyLabel { color:[[ColorPalette::TertiaryMid]]; font-size:90%; }",
".tagglyTagging ul {padding-top:0px; padding-bottom:0.5em; margin-left:1em; }",
".tagglyTagging ul ul {list-style-type:disc; margin-left:-1em;}",
".tagglyTagging ul ul li {margin-left:0.5em; }",
".editLabel { font-size:90%; padding-top:0.5em; }",
".tagglyTagging .commas { padding-left:1.8em; }",
"/* not technically tagglytagging but will put them here anyway */",
".tagglyTagged li.listTitle { display:none; }",
".tagglyTagged li { display: inline; font-size:90%; }",
".tagglyTagged ul { margin:0px; padding:0px; }",
".excerpt { color:[[ColorPalette::TertiaryDark]]; }",
".excerptIndent { margin-left:4em; }",
"div.tagglyTagging table,",
"div.tagglyTagging table tr,",
"td.tagglyTagging",
" {border-style:none!important; }",
".tagglyTagging .contents { border-bottom:2px solid [[ColorPalette::TertiaryPale]]; padding:0 1em 1em 0.5em;",
" margin-bottom:0.5em; }",
".tagglyTagging .indent1 { margin-left:3em; }",
".tagglyTagging .indent2 { margin-left:4em; }",
".tagglyTagging .indent3 { margin-left:5em; }",
".tagglyTagging .indent4 { margin-left:6em; }",
".tagglyTagging .indent5 { margin-left:7em; }",
".tagglyTagging .indent6 { margin-left:8em; }",
".tagglyTagging .indent7 { margin-left:9em; }",
".tagglyTagging .indent8 { margin-left:10em; }",
".tagglyTagging .indent9 { margin-left:11em; }",
".tagglyTagging .indent10 { margin-left:12em; }",
".tagglyNoneFound { margin-left:2em; color:[[ColorPalette::TertiaryMid]]; font-size:90%; font-style:italic; }",
"/*}}}*/",
""].join("\n"),
init: function() {
merge(config.macros,this.macros);
config.shadowTiddlers["TagglyTaggingStyles"] = this.styles;
store.addNotification("TagglyTaggingStyles",refreshStyles);
}
};
config.taggly.init();
//}}}
/***
InlineSlidersPlugin
By Saq Imtiaz
http://tw.lewcid.org/sandbox/#InlineSlidersPlugin
// syntax adjusted to not clash with NestedSlidersPlugin
// added + syntax to start open instead of closed
***/
//{{{
config.formatters.unshift( {
name: "inlinesliders",
// match: "\\+\\+\\+\\+|\\<slider",
match: "\\<slider",
// lookaheadRegExp: /(?:\+\+\+\+|<slider) (.*?)(?:>?)\n((?:.|\n)*?)\n(?:====|<\/slider>)/mg,
lookaheadRegExp: /(?:<slider)(\+?) (.*?)(?:>)\n((?:.|\n)*?)\n(?:<\/slider>)/mg,
handler: function(w) {
this.lookaheadRegExp.lastIndex = w.matchStart;
var lookaheadMatch = this.lookaheadRegExp.exec(w.source)
if(lookaheadMatch && lookaheadMatch.index == w.matchStart ) {
var btn = createTiddlyButton(w.output,lookaheadMatch[2] + " "+"\u00BB",lookaheadMatch[2],this.onClickSlider,"button sliderButton");
var panel = createTiddlyElement(w.output,"div",null,"sliderPanel");
panel.style.display = (lookaheadMatch[1] == '+' ? "block" : "none");
wikify(lookaheadMatch[3],panel);
w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;
}
},
onClickSlider : function(e) {
if(!e) var e = window.event;
var n = this.nextSibling;
n.style.display = (n.style.display=="none") ? "block" : "none";
return false;
}
});
//}}}
!TaskOverview based on the status tags for action items
!!Extended version based on [[TiddlerListMacro]]
example code for the "#future" list:
{{{<<tiddlerList tags:"#queued" order:"modified" itemTemplate:"<<tiddler cycleTags with: CycleAction %0 $))%link\n">>}}}
<<tiddler Show with: {{
var out='| !task overview |>|>|>|>|h\n| future | queued | next | done | waiting |h\n';
var a,as=['#future','#queued','#next','#done','#waiting'];
for(a=0;a<as.length;a++)out+='|<<tiddlerList tags:"'+as[a]+'" order:"modified" itemTemplate:"<<tiddler CycleTags with: CycleAction %0 $))%link\\n">\>';
out+'|';}}>>
!Simple version based on the standard list macro
example code for the "queued" list:
{{{<<list filter [tag[queued]][sort[-modified]]>>>}}}
| !task overview |>|>|>|>|h
| future | queued | next | done | waiting |h
|<<list filter [tag[#future]][sort[-modified]]>>|<<list filter [tag[#queued]][sort[-modified]]>>|<<list filter [tag[#next]][sort[-modified]]>>|<<list filter [tag[#done]][sort[-modified]]>>|<<list filter [tag[#waiting]][sort[-modified]]>>|
[[Check original SLIDESHOW|http://museum.99k.org/divDK/poriMBEeffect.swf]]
<html>
<div>
<h1><font size="5"><span style="font-family: Georgia;"><font size="7"><span style="font-weight: bold;">The Munder</span> <font style="font-weight: bold;" size="6">Blackout</font> <span style="font-weight: bold;">Effect</span></font><font size="3"><span style="font-weight: bold;"> </span> </font></span></font></h1>
<h1 style="font-weight: normal;"><font size="5"><span style="font-family: Georgia;">a project by Dialogist-Kantor</span></font></h1>
<h3><font size="6"></font></h3>
<font size="6"><font size="4"><font size="5"> </font></font><font size="5"><font style="font-family: Tahoma;" size="2">performed in Pori (Finland) in june 2007 for<br>
</font></font></font><font style="font-family: Tahoma;" size="2">PERF07, <span class="st" name="st">Pori</span> and PERFO! in Tampere<br>
T.E.H.D.A.S. art association and NYTE art association are organisating performance and –video art festival PERF07 in <span class="st" name="st">Pori</span>, Finland 18. – 19.5.2007. T.E.H.D.A.S. is also organisating a performance club (one of the five this year) in culture restaurant Telakka, in city of Tampere,<br>
Finland 22.5.2007</font><br>
</div>
</html>
https://picasaweb.google.com/105898452618087093313/DKdiv#5696488583645938498
<<tiddler PicasaJqueryincl>>
<html>
<div id="container1"><span style= "font-size: 16pt ; color: fuchsia ; background-color: #FFFFFF ; " > </span></div>
</html>
<script> jQuery("#container1").pwi({
username: 'patacycliste',
maxResults: 12,
thumbSize: 100,
thumbCrop: 1,
mode: 'keyword',
album: 'collages',
keyword: 'red spot 2006',
albumTitle: 'Collages /Red Spot serie \ 2006\'',
showSlideshowLink: false,
showAlbumDescription: true,
});
</script>
It is being tagged [[Urgent]] which itself contains the following css definition for the field {{{tagcolor}}}...
<<tiddler Show with: {{'{{{\n'+store.getValue('Urgent','tagcolor')+'\n}\}\}';}}>>
/***
|''Name:''|TiddlerListMacro|
|''Version:''|2.3 (8-Jan-2008)|
|''Source''|http://jackparke.googlepages.com/jtw.html#TiddlerListMacro ([[del.icio.us|http://del.icio.us/post?url=http://jackparke.googlepages.com/jtw.html%23TiddlerListMacro]])|
|''Author:''|[[Jack]]|
|''Type:''|Macro|
|''Documentation:''|http://jackparke.googlepages.com/jtw.html#TiddlerListMacroDoc|
!Usage
{{{<<tiddlerList parameter1:"value1" parameter2:"value2" ...>>}}}
See TiddlerListMacroDocumentation and TiddlerListMacroExamples
!Code
***/
//{{{
version.extensions.tiddlerList = {major: 2, minor: 3, revision: 0, date: new Date("Jan 08, 2008")};
// template = [header, item, separator, group, footer]
config.macros.tiddlerList={
formats : {list:true, nlist:true, span:true, stack:true, csv:true, table:true},
templates : {
list : [ "%0\n", "* %0\n", "", "%group\n", "%0\n"],
nlist : [ "%0", "# %0\n", "", "%group\n", "%0\n"],
span : [ "%0", "%0", " ", "%group", "%0"],
stack : [ "%0", "%0", "\n", "%group", "%0"],
csv : [ "%0", "%0", ", ", "%0", "%0\n"],
table : ["|!%0|\n", "|%0|\n", "", "|%group|\n", "|%0|\n"]
},
dateFormat : "DD MMM YYYY"
}
if (typeof gCurrentTiddler == 'undefined')
var gCurrentTiddler;
config.macros.tiddlerList.handler = function(place,macroName,params,wikifier,paramString,tiddler)
{
// Some globals
var count=0, groupCount=0, theGroup="", lastGroup="", firstInGroup = false;
var currentTiddler = tiddler;
gCurrentTiddler = tiddler;
var listWikiText="";
var formats = this.formats;
// SQL-Like parameters
var parameters = paramString.parseParams("name",null,true);
var pTags = parameters[0]["tags"]?parameters[0]["tags"][0].split(','):[];
var pOrder = parameters[0]["order"]?parameters[0]["order"][0]:"title";
var pTop = parameters[0]["top"]?parameters[0]["top"][0]:-1;
var pText = parameters[0]["text"]?parameters[0]["text"][0]:"";
var pTitle = parameters[0]["title"]?parameters[0]["title"][0]:"";
var pSearch = parameters[0]["search"]?parameters[0]["search"][0]:"";
var pFilter = parameters[0]["filter"]?parameters[0]["filter"][0]:"";
var pHeader = parameters[0]["header"]?paramFormat(parameters[0]["header"][0]):"";
var pFooter = parameters[0]["footer"]?paramFormat(parameters[0]["footer"][0]):"";
var pGroup = parameters[0]["group"]?parameters[0]["group"][0]:"";
var pDateFormat = parameters[0]["dateFormat"]?parameters[0]["dateFormat"][0]:this.dateFormat;
var pCustomParameter = parameters[0]["customParameter"]?parameters[0]["customParameter"][0]:"";
var pFormat = parameters[0]["format"]?parameters[0]["format"][0]:"list";
pFormat = formats[pFormat]?pFormat:"list"
// Separator
var pSeparator = parameters[0]["separator"]?paramFormat(parameters[0]["separator"][0]):(parameters[0]["seperator"]?paramFormat(parameters[0]["seperator"][0]):this.templates[pFormat][2])
// Template for group
var pGroupTemplate = this.templates[pFormat][3];
if (parameters[0]["groupTemplate"])
pGroupTemplate = paramFormat(parameters[0]["groupTemplate"][0])
pGroupTemplate = pGroupTemplate.replace(/\$\)\)/g, ">>")
// Template for group footer
var pGroupFooterTemplate = "";
if (parameters[0]["groupFooterTemplate"])
pGroupFooterTemplate = paramFormat(parameters[0]["groupFooterTemplate"][0]);
pGroupFooterTemplate = pGroupFooterTemplate.replace(/\$\)\)/g, ">>");
// Template for item
var pItemTemplate = this.templates[pFormat][1];
if (parameters[0]["itemTemplate"])
pItemTemplate = paramFormat(parameters[0]["itemTemplate"][0])
pItemTemplate = pItemTemplate.replace(/\$\)\)/g, ">>").replace(/%link/g, "%0").replace(/%item/g, "%1").replace(/%abstract/g, "%2").replace(/%text/g, "%3").replace(/%created/g, "%4").replace(/%modified/g, "%5").replace(/%modifier/g, "%6").replace(/%group/g, "%7").replace(/%title/g, "%8").replace(/%tags/g, "%9").replace(/%nolink/g, "%10").replace(/%custom/g, "%11")
// Template for footer
var pFooterTemplate = this.templates[pFormat][4].replace(/%count/g, "%1")
// Get all tiddlers
var tiddlers = store.reverseLookup("tags","",false);
// Sorting
if(!pOrder)
pOrder = "title";
if (pOrder.match(/^\-/i)) {
pOrder = pOrder.substr(1)
var sortDesc = true;
}
// Sorting on a standard field
if (pOrder.match(/(title)|(text)|(modifier)|(modified)|(created)|(tags)/))
if (sortDesc)
tiddlers.sort(function (a,b) {if(a[pOrder] == b[pOrder]) return(0); else return (a[pOrder] > b[pOrder]) ? -1 : +1; });
else
tiddlers.sort(function (a,b) {if(a[pOrder] == b[pOrder]) return(0); else return (a[pOrder] < b[pOrder]) ? -1 : +1; });
else
if (sortDesc)
tiddlers.sort(function (a,b) {if(a.fields[pOrder] == b.fields[pOrder]) return(0); else return (a.fields[pOrder] > b.fields[pOrder]) ? -1 : +1; });
else
tiddlers.sort(function (a,b) {if(a.fields[pOrder] == b.fields[pOrder]) return(0); else return (a.fields[pOrder] < b.fields[pOrder]) ? -1 : +1; });
// Header
if (pHeader)
listWikiText += formatItem(this.templates[pFormat][0], [pHeader], pFormat)
for(var t=0; t<tiddlers.length; t++) {
tiddler = tiddlers[t];
if (pText!="" && tiddler.text=="") tiddler.text=store.getValue(tiddler, 'text')
if (pTop==-1 || count<pTop) {
if (pText=="" || tiddler.text.match(pText)) {
if (pTitle=="" || tiddler.title.match(pTitle)) {
if (pSearch=="" || (tiddler.title.match(pSearch) || tiddler.text.match(pSearch))) {
if (pFilter=="" || eval(pFilter)) {
if (pTags.length==0 || compareArrays(tiddler.tags, pTags, "all")) {
count++;
if (tiddler.text=="") tiddler.text=store.getValue(tiddler, 'text')
// Grouping
if (pGroup) {
theGroup = eval(pGroup);
if(theGroup != lastGroup) {
groupCount++;firstInGroup = true;
if (pGroupFooterTemplate && groupCount>1)
listWikiText += pGroupFooterTemplate.replace("%group", theGroup)
listWikiText += pGroupTemplate.replace("%group", theGroup)
lastGroup = theGroup;
} else
firstInGroup = false;
}
// Separators
if (count>1 && !firstInGroup) listWikiText += pSeparator;
//Plaintext title
var noLink = tiddler.title.match(config.textPrimitives.wikiLink)?"~" + tiddler.title:tiddler.title;
// Custom parameter
if (pCustomParameter)
var custom="";
try {
custom = eval(pCustomParameter)
} catch (e) {}
// List individual tiddler
var strItem = formatItem(pItemTemplate,["[[" + tiddler.title + "]]",count,tiddler.text.substr(0,300),tiddler.text,tiddler.created.formatString(pDateFormat),tiddler.modified.formatString(pDateFormat),tiddler.modifier,theGroup,tiddler.title,(tiddler.tags.length>0?"[["+tiddler.tags.join("]], [[")+"]]":""),noLink,custom], pFormat)
for (var fld in tiddler.fields) strItem = strItem.replace('%field.' + fld, tiddler.fields[fld]);
listWikiText += strItem
}
}
}
}
}
}
}
// Last group footer
if (pGroup && pGroupFooterTemplate && count>0)
listWikiText += pGroupFooterTemplate.replace("%group", theGroup)
// Footer
if (pFooter) {
pFooter = pFooter.replace("%count", count)
listWikiText += formatItem(pFooterTemplate, [pFooter], pFormat)
}
// Render result
if (!parameters[0]["debug"])
wikify(listWikiText,place, null, currentTiddler)
else
place.innerHTML = "<textarea style=\"width:100%;\" rows=30>" + listWikiText + "</textarea>"
// Local functions
function paramFormat(param) {
// Allow "\n" in non evalled parameters
return param.replace(/\\n/g, "\n");
}
function formatItem(template, values, format) {
// Fill template with values (depending on list format)
if (format.match(/table/) && values[0].match(/\|/))
return ("%0\n").format(values)
else
return template.format(values)
}
function compareArrays(array, values, logic) {
// Compare items in array with AND("all") or OR("any") logic
var matches=0;
for(var v=0; v<values.length; v++)
if(values[v].replace(/^\s+|\s+$/g,"").match(/^\-/) && !array.contains(values[v].replace(/^\s+|\s+$/g,"").substr(1)))
matches++;
else if (array.contains(values[v]))
matches++;
return ((logic=="all" && matches==values.length) || (logic!="all" && matches>0))
}
}
String.prototype.prettyTrim = function(len,prefix,postfix) {
var result = this.trim().replace(/\r\n/g,' ').replace(/\n/g,' ');
if (!prefix) prefix = '';
if (!postfix) postfix = '';
if (result.length > len - 3)
return prefix + result.substr(0,len) + '...' + postfix;
else if (result.length > 0)
return prefix + result + postfix;
else
return result;
}
//}}}
...the singlefile wiki under this hood.
|linkTable|k
|width:400px; !by modified date |width:400px; !by date created |
|vertical-align:top;padding-left:20px;<<timeline "modified">>|vertical-align:top;padding-left:20px;<<timeline "created">>|
[[...they guy who wrote this stuff!|Tobias Beer]]
The guy who also created [[tbGTD|http://tbGTD.tiddlyspot.com]] and provided you with [[vertical tabs|http://verticaltabs.tiddlyspot.com]] and his version of a [[RatingMacro|http://lastfm.tiddlyspot.com/#RatingMacro]].
/%
!info
|Name|ToggleFullScreen|
|Source|http://www.TiddlyTools.com/#ToggleFullScreen|
|Version|2.0.1|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|transclusion|
|Description|Create a link that shows/hides sidebars and page headers|
Usage
<<<
{{{
<<tiddler ToggleFullScreen>>
<<tiddler ToggleFullScreen with: label altlabel>>
}}}
<<<
Example
<<<
{{{<<tiddler ToggleFullScreen with: fullscreen restore>>}}}
<<tiddler ToggleFullScreen##show with: fullscreen restore>>
<<<
!end
!show
<html><nowiki><a href='javascript:;' title="FULLSCREEN: toggle sidebars and page header"
onmouseover="
this.href='javascript:void(eval(decodeURIComponent(%22(function(){try{('
+encodeURIComponent(encodeURIComponent(this.onclick))
+')()}catch(e){alert(e.description?e.description:e.toString())}})()%22)))';"
onclick="
var co=config.options;
co.chkFullScreen=!co.chkFullScreen;
var showmm=!co.chkFullScreen && co.chkShowLeftSidebar!==false;
var showsb=!co.chkFullScreen && co.chkShowRightSidebar!==false;
var showcrumbs=!co.chkFullScreen && co.chkShowBreadcrumbs!==false
&& config.macros.breadcrumbs && config.macros.breadcrumbs.crumbs.length;
var cw=document.getElementById('contentWrapper');
var da=document.getElementById('displayArea');
var mm=document.getElementById('mainMenu');
var sb=document.getElementById('sidebar');
var sm=document.getElementById('storyMenu');
var bc=document.getElementById('breadCrumbs');
if (cw){
var elems=cw.getElementsByTagName('*');
for (var i=0; i<elems.length; i++) if (hasClass(elems[i],'header'))
{ elems[i].style.display=co.chkFullScreen?'none':'block'; break; }
}
if (mm) {
mm.style.display=showmm?'block':'none';
da.style.marginLeft=showmm?(co.txtDisplayAreaLeftMargin||''):'1em';
}
if (sb) {
sb.style.display=showsb?'block':'none';
da.style.marginRight=showsb?(co.txtDisplayAreaRightMargin||''):'1em';
}
if (sm) sm.style.display=!co.chkFullScreen ?'block':'none';
if (bc) bc.style.display=showcrumbs?'block':'none';
this.innerHTML=!co.chkFullScreen?'$1':'$2';
var b=document.getElementById('restoreFromFullscreenButton');
if (b) removeNode(b);
else {
setStylesheet(store.getTiddlerText('ToggleFullScreen##styles'),'fullScreenStyles');
var b=createTiddlyElement(null,'span','restoreFromFullscreenButton','selected');
b.innerHTML='◊';
b.title='RESTORE: redisplay page header, menu and sidebar';
b.onclick=this.onclick;
document.body.insertBefore(b,null);
}
return false;
">$1</a></html>
!styles
#restoreFromFullscreenButton {
position:fixed; top:.3em; right:.3em; z-index:10001;
cursor:pointer; font-size:8pt; color:ButtonText !important;
border:2px outset ButtonFace; padding:0px 3px;
background-color:ButtonFace; -moz-appearance:button;
}
!end
%/<<tiddler {{var src='ToggleFullScreen'; src+(tiddler&&tiddler.title==src?'##info':'##show');}}
with: {{'$'+'1'!='$1'?'$1':'fullscreen'}}
{{'$'+'2'!='$2'?'$2':'restore'}}>>
<<tiddler Show with: {{
var a=[],fst=true,ok=false,s='',t,tid,tgs,tmp=place;
do{if(fst)fst=false;else tid=tmp;tmp=story.findContainingTiddler(tmp);}while(tmp&&tid!=tmp);
tid=tid?store.getTiddler(tid.getAttribute('tiddler')):null;
store.getTaggedTiddlers('Action').map(function(t){a.push(t.title);});
store.getTaggedTiddlers('Priority').map(function(t){a.push(t.title);});
if(a&&tid&&tid.tags.containsAny(a))
s='<<tiddler CycleTags with: CyclePriority>\>';
'<<tiddler CycleTags with: CycleAction>\>'+s;}}>>
|~ViewToolbar|closeTiddler closeOthers +editTiddler > fields syncing permalink references jump <|
|~EditToolbar|+saveTiddler -cancelTiddler deleteTiddler|
/***
Description: Contains the stuff you need to use Tiddlyspot
Note, you also need UploadPlugin, PasswordOptionPlugin and LoadRemoteFileThroughProxy
from http://tiddlywiki.bidix.info for a complete working Tiddlyspot site.
***/
//{{{
// edit this if you are migrating sites or retrofitting an existing TW
config.tiddlyspotSiteId = 'patacycliste';
// make it so you can by default see edit controls via http
config.options.chkHttpReadOnly = false;
window.readOnly = false; // make sure of it (for tw 2.2)
window.showBackstage = true; // show backstage too
// disable autosave in d3
if (window.location.protocol != "file:")
config.options.chkGTDLazyAutoSave = false;
// tweak shadow tiddlers to add upload button, password entry box etc
with (config.shadowTiddlers) {
SiteUrl = 'http://'+config.tiddlyspotSiteId+'.tiddlyspot.com';
SideBarOptions = SideBarOptions.replace(/(<<saveChanges>>)/,"$1<<tiddler TspotSidebar>>");
OptionsPanel = OptionsPanel.replace(/^/,"<<tiddler TspotOptions>>");
DefaultTiddlers = DefaultTiddlers.replace(/^/,"[[WelcomeToTiddlyspot]] ");
MainMenu = MainMenu.replace(/^/,"[[WelcomeToTiddlyspot]] ");
}
// create some shadow tiddler content
merge(config.shadowTiddlers,{
'TspotOptions':[
"tiddlyspot password:",
"<<option pasUploadPassword>>",
""
].join("\n"),
'TspotControls':[
"| tiddlyspot password:|<<option pasUploadPassword>>|",
"| site management:|<<upload http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/store.cgi index.html . . " + config.tiddlyspotSiteId + ">>//(requires tiddlyspot password)//<br>[[control panel|http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/controlpanel]], [[download (go offline)|http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/download]]|",
"| links:|[[tiddlyspot.com|http://tiddlyspot.com/]], [[FAQs|http://faq.tiddlyspot.com/]], [[blog|http://tiddlyspot.blogspot.com/]], email [[support|mailto:support@tiddlyspot.com]] & [[feedback|mailto:feedback@tiddlyspot.com]], [[donate|http://tiddlyspot.com/?page=donate]]|"
].join("\n"),
'WelcomeToTiddlyspot':[
"This document is a ~TiddlyWiki from tiddlyspot.com. A ~TiddlyWiki is an electronic notebook that is great for managing todo lists, personal information, and all sorts of things.",
"",
"@@font-weight:bold;font-size:1.3em;color:#444; //What now?// @@ Before you can save any changes, you need to enter your password in the form below. Then configure privacy and other site settings at your [[control panel|http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/controlpanel]] (your control panel username is //" + config.tiddlyspotSiteId + "//).",
"<<tiddler TspotControls>>",
"See also GettingStarted.",
"",
"@@font-weight:bold;font-size:1.3em;color:#444; //Working online// @@ You can edit this ~TiddlyWiki right now, and save your changes using the \"save to web\" button in the column on the right.",
"",
"@@font-weight:bold;font-size:1.3em;color:#444; //Working offline// @@ A fully functioning copy of this ~TiddlyWiki can be saved onto your hard drive or USB stick. You can make changes and save them locally without being connected to the Internet. When you're ready to sync up again, just click \"upload\" and your ~TiddlyWiki will be saved back to tiddlyspot.com.",
"",
"@@font-weight:bold;font-size:1.3em;color:#444; //Help!// @@ Find out more about ~TiddlyWiki at [[TiddlyWiki.com|http://tiddlywiki.com]]. Also visit [[TiddlyWiki.org|http://tiddlywiki.org]] for documentation on learning and using ~TiddlyWiki. New users are especially welcome on the [[TiddlyWiki mailing list|http://groups.google.com/group/TiddlyWiki]], which is an excellent place to ask questions and get help. If you have a tiddlyspot related problem email [[tiddlyspot support|mailto:support@tiddlyspot.com]].",
"",
"@@font-weight:bold;font-size:1.3em;color:#444; //Enjoy :)// @@ We hope you like using your tiddlyspot.com site. Please email [[feedback@tiddlyspot.com|mailto:feedback@tiddlyspot.com]] with any comments or suggestions."
].join("\n"),
'TspotSidebar':[
"<<upload http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/store.cgi index.html . . " + config.tiddlyspotSiteId + ">><html><a href='http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/download' class='button'>download</a></html>"
].join("\n")
});
//}}}
/***
|Name|TwHelpSearchPlugin|
|Source|http://twhelp.tiddlyspot.com/#TwHelpSearchPlugin|
|Documentation|http://twhelp.tiddlyspot.com/#TWHelpSearchDoc|
|Version|1.0.8|
|Author|Morris Gray|
|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.0 - 2.4|
|Type|plugin|
|Requires|[[SearchOptionsPlugin|http://www.TiddlyTools.com/#SearchOptionsPlugin]] [[TableSortingPlugin|http://tw.lewcid.org/#TableSortingPlugin]] (only for sorting option)|
|Overrides|SearchOptionsPlugin's search results|
|Description|Extends the search results from SearchOptionsPlugin to a sortable table showing title, size and tags.|
''Demo search:''
|>|>|>|<<search>> |
|>|>| look for in |>|>|>|
| <<option chkSearchTitles>> | <<option chkSearchText>> | <<option chkSearchTags>> | <<option chkHoldSearches>> |
| titles | text | tags | hold |
''A Plugin Tweak for:'' SearchOptionsPlugin
!!!!!Description
<<<
This plugin defines an alternative format for the SearchResults tiddler that is generated by the SearchOptionsPlugin . It presents the search results in tabular form numbering the rows; and showing the tiddler title, the size in bytes, and the tags. It is ready to be used with the [[TableSortingPlugin|http://tw.lewcid.org/#TableSortingPlugin]] (check versions) so any column can be sorted; such as size in ascending or descending order.
<<<
!!!!!Installation
<<<
Import (or copy/paste) the following tiddlers into your ~TiddlyWiki:
* http://twhelp.tiddlyspot.com/#TwHelpSearchPlugin
*SearchOptionsPlugin from http://www.tiddlytools.com/#SearchOptionsPlugin
* Get more documentation here [[TWHelpSearchDoc]] or here:
* http://twhelp.tiddlyspot.com/#TwHelpSearchDoc
<<<
!!!!!Revision History
<<<
''2009.02.18 [1.0.8]''
Added modified column.
''2009.02.18 [1.0.7]''
Removed text coloring of headers re: conflict with TableSortingPlugin refresh.
''2008.09.14 [1.0.6]''
Cosmetic - Add header.
''2007.09.12 [1.0.6]''
Added overflow scroll to TWHelp-SearchResults for long titles or tags.
''2006.02.03 [1.0.5]''
Added facility for holding the results of multiple searches with tick box on dashboard.
''2006.02.02 [1.0.4]''
Added several options, cleaned up design.Planning one version basic and one with added options this is the added options version.
''2006.01.27 [1.0.3''
Added a column for the size of the text in each tiddler, this does not include the size of the title or tags. Added overall TW statistics button requires TiddlerStatsPlugin.
''2006.01.23 [1.0.2 ]''
''a)''Changed function reportSearchResults(text,matches) to window.reportSearchResults=function(text,matches)
''b)''Added a line so that Incremental Search is automatically disabled config.options.chkSearchIncremental=false; turn off key-by-key searching
''c)''Removed space inside parens. bgcolor(#fe8 )" to "bgcolor(#fe8)". This
is what was causing IE to 'crap out' halfway through drawing the table
headings.
''d)''Added {{{config.options.chkSearchList=true;}}}
''2006.01.20 [1.0.1]''
ELS: reportSearchResults() definition moved to this Plugin Tweak tiddler and removed extranous code
''2006.01.19 [1.0.0]''
This is an adaptation of Eric Shulman's SearchOptionsPlugin. Adapted by MorrisGray to provide search results in table form. All the necessary controls for refining the search is provided within the table including slide-down access to AdvancedOptions.
<<<
!!!!!Code
***/
//{{{
if (config.options.chkSinglePageMode==undefined) config.options.chkSinglePageMode=false;
if (config.options.chkRegExpSearch==undefined) config.options.chkRegExpSearch=true;
if (config.options.chkSearchTitles==undefined) config.options.chkSearchTitles=false;
if (config.options.chkSearchText==undefined) config.options.chkSearchText=true;
if (config.options.chkSearchTags==undefined) config.options.chkSearchTags=false;
if (config.options.chkSearchTitlesFirst==undefined) config.options.chkSearchTitlesFirst=true;
if (config.options.chkSearchList==undefined) config.options.chkSearchList=true;
if (config.options.chkSearchIncremental==undefined) config.options.chkSearchIncremental=false;
if (config.options.chkToggleLinks==true) config.options.chkToggleLinks=false;
if (config.options.chkHoldSearches==undefined) config.options.chkHoldSearches=false;
if (config.options.chkSortTags==undefined) config.options.chkSortTags=false;
config.options.chkToggleLinks=false;
config.options.chkSinglePageMode=false;
config.options.chkHoldSearches=false;
config.options.chkSearchIncremental=false;
config.options.chkHttpReadOnly = false;
config.options.chkRegExpSearch=true;
config.options.chkSearchList=true;
config.options.chkToggleLinks=false;
config.shadowTiddlers.AdvancedOptions += "\n<<option chkHoldSearches>> Hold search results";
//}}}
//{{{
// Give the report a custom name
config.macros.search.reportTitle="TWHelp-SearchResults";
// Override default SearchOptionsPlugin formatting for SearchResults tiddler
window.reportSearchResults=function(text,matches)
{
var title=config.macros.search.reportTitle
config.macros.search.reportTitle;
var q = config.options.chkRegExpSearch ? "/" : "'";
if (!config.options.chkHoldSearches) body="";
body+="\n|>|bgcolor:#4c4c4c;@@color(#ccc):''"+config.macros.search.successMsg.format([matches.length,q+"{{{"+text+"}}}"+q])+"''@@|bgcolor:#4c4c4c; @@color:#ffffc8; Ver: <<version>>@@ "+"|"+"\n";
body+="|>|>|bgcolor:#999;color:#000;<<search>> <<option chkSearchTitles>> Titles <<option chkSearchText>> Text <<option chkSearchTags>>Tags <<option chkHoldSearches>> Hold |"+"\n";
body+="\n|bgcolor:#4c4c4c; |bgcolor:#4c4c4c; ''Titles'' |bgcolor:#4c4c4c; ''Size'' |bgcolor:#4c4c4c; ''Tags'' |bgcolor:#4c4c4c; ''Modified'' |h";
for(var t=0;t<matches.length;t++)
body+="\n"+"| "+(t+1)+"|[["+matches[t].title+"]]| "+matches[t].text.length+"|"+matches[t].tags+"|"+matches[t].modified.formatString('YYYY.0MM.0DD')+"|";
body+="\n|sortable|k";
body+="\n";
// create/update the tiddler
var tiddler=store.getTiddler(title); if (!tiddler) tiddler=new Tiddler();
tiddler.set(title,body,config.options.txtUserName,(new Date()),"excludeLists excludeSearch killbookmark");
store.addTiddler(tiddler); story.closeTiddler(title);
// render tiddler
var oldprompt=config.macros.search.label;
config.macros.search.label="search again"; // use alternate "search again" label
story.displayTiddler(null,title,1); // force refresh
config.macros.search.label=oldprompt; // restore standard search label
}
//}}}
/*{{{*/
* jTweetsAnywhere V1.2.1
* http://thomasbillenstein.com/jTweetsAnywhere/
*
* Copyright 2010, Thomas Billenstein
* Licensed under the MIT license.
* http://thomasbillenstein.com/jTweetsAnywhere/license.txt
*/
.jta-tweet-list
{
padding: 0;
list-style: none;
}
.jta-tweet-list-item
{
background: #fff;
border-bottom: 1px solid #e4e4e4;
padding: 8px 0px 8px 0px;
overflow: hidden;
}
.jta-tweet-list-item:first-child
{
border-top: 1px solid #e4e4e4; font-size:110%;
}
.jta-tweet-profile-image
{
width: 48px;
display: inline;
float: left;
}
.jta-tweet-profile-image-link
{
}
.jta-tweet-profile-image img
{
width: 48px;
height: 48px;
}
.jta-tweet-body
{
}
.jta-tweet-body-list-profile-image-present
{
margin-left: 58px;
}
.jta-tweet-user-name
{
font-weight: bold;
}
.jta-tweet-user-screen-name
{
}
.jta-tweet-user-full-name
{
color: #900;
}
.jta-tweet-text
{
font-size:120%;letter-spacing:-0.2px; font-family:;
}
.jta-tweet-user-screen-name-link,
.jta-tweet-user-full-name-link,
.jta-tweet-a,
.twitter-anywhere-user
{
color: #900;
text-decoration: none;
}
.jta-tweet-user-screen-name-link:hover,
.jta-tweet-user-full-name-link:hover,
.jta-tweet-a:hover,
.twitter-anywhere-user:hover
{
color: #900;
text-decoration: underline;
}
.jta-tweet-link
{
}
.jta-tweet-link:hover
{
}
.jta-tweet-hashtag
{
color:green
}
.jta-tweet-hashtag:hover
{
}
.jta-tweet-attributes
{
display: block;
color: #999;
font-size: 11px;
margin-top: 3px;
}
.jta-tweet-timestamp
{
}
.jta-tweet-source
{
}
.jta-tweet-inreplyto
{
}
.jta-tweet-location
{
}
.jta-tweet-retweeter
{
}
.jta-tweet-timestamp-link,
.jta-tweet-source-link a,
.jta-tweet-inreplyto-link,
.jta-tweet-location-link,
.jta-tweet-retweeter-link
{
color: #999;
text-decoration: none;
}
.jta-tweet-timestamp-link:hover,
.jta-tweet-source-link a:hover,
.jta-tweet-inreplyto-link:hover,
.jta-tweet-location-link:hover,
.jta-tweet-retweeter-link:hover
{
color: #999;
text-decoration: underline;
}
.jta-tweet-list-controls
{
margin-top: 20px;
}
.jta-tweet-list-controls-button
{
padding: 5px;
padding-left: 20px;
padding-right: 20px;
text-align: center;
border: 1px solid #999;
}
.jta-tweet-list-controls-button:hover
{
color: black;
background-color: #999;
cursor: pointer;
}
.jta-tweet-list-controls-button-more
{
}
.jta-tweet-list-controls-button-prev
{
}
.jta-tweet-list-controls-button-next
{
margin-left: 10px;
}
.jta-tweet-list-autorefresh-trigger
{
padding: 8px 0px 8px 0px;
margin-bottom: 10px;
text-align: center;
border: 1px solid #999;
}
.jta-tweet-list-autorefresh-trigger:hover
{
color: black;
background-color: #999;
cursor: pointer;
}
.jta-tweet-list-autorefresh-trigger-content
{
}
.jta-follow-button
{
}
.jta-tweet-box
{
}
.jta-connect-button
{
}
.jta-login-info
{
}
.jta-login-info-profile-image
{
width: 48px;
display: inline;
float: left;
}
.jta-login-info-profile-image img
{
width: 48px;
height: 48px;
}
.jta-login-info-block
{
margin-left: 58px;
}
.jta-login-info-screen-name
{
}
.jta-login-info-sign-out
{
width: 97px;
margin-top: 2px;
padding: 1px;
text-align: center;
border: 1px solid #999;
}
.jta-login-info-sign-out:hover
{
color: black;
background-color: #999;
cursor: pointer;
}
.jta-loading
{
margin: 0;
padding: 8px 0px 8px 0px;
}
.jta-error
{
margin: 0;
padding: 8px;
color: #000;
background-color: #f00
}
.jta-nodata
{
margin: 0;
padding-top: 8px;
padding-bottom: 8px;
}
.jta-clear
{
clear: both;
display: block;
overflow: hidden;
visibility: hidden;
width: 0;
height: 0;
}
/*}}}*/
https://picasaweb.google.com/105898452618087093313/Enfanfare#5594462219051943986
UN AIR DE ZWANZE !
A I’'infernale course à la reconnaissance professionnelle qui passionne aujourd'hui bon nombre d'artistes, Toni Geirlandt & Carlos Montalvo ont préféré les rapports nettement plus conviviaux des randonnées d'amateurs d' où est banni tout esprit de compétition. D' abord en tant qu'oeuvres plastiques, les poèmes-objets et les diverses actions réalisés sous la casquette du Dialogist-Kantor, ont effectivement plus à voir avec I'errance qu' avec la réussite. Ensuite en tant qu' expositions collectives sans numerus clausus, les "Laboratoires patacyclistes" organisés régulièrement par le duo bruxellois témoignent d'un refus net de pratiquer toute forme d'hygiène esthétique.
C' est au debut des années 90 que les premiers indices d' une activité artistique signée Dialogist-Kantor apparaissent sous la forme de tracts poétiques. Non sans une certaine nostalgie, tant à l'égard des modes désuets d' imprimerie que vis-à-vis des attitudes engagées d 'avant les golden eighties, plusieur "poèmes rapides" -écrits sur un ton néo-dada - voient ainsi le jour comme autant de signes de ralliement adressés a des artistes soupconnés d'appartenir à une "generation perdue". Cet amour de la typographie qui les engage à faire travailler d'anciens imprimeurs ou à créer plus simplement leurs propres timbres en caoutchouc, donne lieu dès 1993 à un "Inconcevaabl Cataloog" qui rassemble sur un air de zwanze typiquement bruxelloise quelques éléments éparses d'une poésie de bistrot sauvée à la va-vite de I'oubli. C'est encore sur ce compte d'un dérisoire plus enclin néanmoins à la "fête permanente" qu'au spleen de I'artiste maudit qu'il convient de noter, comme une référence plus claire à Fluxus, les nombreux poèmes-objets, mini-actions et autres envois postaux emballant les mots des premiers "poèmes rapides" à I'intérieur de productions qui,sans jamais prétendre au statut d'objet d'art , n'en relèvent pas moins d'une expression subtilement plastique. L'une des premières actions à rendre ainsi au poème sa visibilité est " la boîte à faire mal aux yeux" (1993) qui invite le regardeur à coller son oeil contre le petit trou d'une caisse noire ne réservant à la rétine du pauvre "témoin occuliste" qu'une perception déceptive qui plus est tournéeen ridicule. C'est ici, comme avec les premiers "poèmes rapides" et plusieurs pièces ultérieures tel que le "Ramasse -Feuille" (1994) conçu pour récolter - "avant qu'elles ne touchent le sol" - les feuilles mortes d'automne, tout est effectivement mis en oeuvre pour contredire sans gravité l'austérité d'un système moderniste tendant selon un principe bourgeois à subordonner l'artefact aux besoins utilitaires et l'oeuvre d'art au seul plaisir rétinien.
[>img(250px,auto)[alt_text|http://bit.ly/dGq7HV]]CULTURE DE CAFE
Plus largement, les activités du Dialogist-Kantor s'inscrivent dans ce qu'il est permis de nommer en Belgique une "culture de café" qui d'Anvers à Liège en passant par Bruxelles, brasse une conception de l'art quelque peu imbibée de houblon, d'humour noir et
de philosophie à cinq sous. Qu'il s'agisse de la belle époque de la Galerie Inexistent fondée par Chris Straetling opérant aujourd'hui sous l'enseigne de Factor 44, des cafés ambulants d'Angel Vergara alias Straatman ou des nombreuses soulographies du Cirque Divers,
c'est toute une attitude existentielle et artistique partagée entre l'ivresse de l'échange et l'aigreur des lendemains difficiles qui apparaît en toile de fond des activités quotidiennes et esthétiques de Toni Geirlandt & Carlos Montalvo. D'où quelques affinités plus précises encore avec certains artistes qui ont réussi comme Jacques Lizène ou Martin Kippenberger à traduire le "no future" en des attitudes plastiques faisant échos à des
marginalités post-modernes et sub-urbaines en manque de voix ou d'inspiration créatrice.
Sans faire de l'Art de la Médiocrité prôné par le Petit Maître liègeois ou de l'esthétique punk à la berlinoise, le seul refuge de cette génération d'artiste, désabusée par l'utopie manquée des années 60 et le retour consécutif des yuppies des années 80,
risquons - nous à dire seulement que ces liens de parentés donnent à penser qu'il existe derrière ces quelques clowns de l'art contemporain - auxquels l'on pourrait joindre encore, côté américain, des célébrités comme Paul Mac Carthy - une communauté
d'artistes qui aurait pris, certes le même maquis, mais des moyens beaucoup moins ambitieux et narcissiques. Pour illustrer ce qui a pu effectivement être défini par une "culture de café" mais auquel de terme d'"art de la relation" aurait pu également
convenir - si l'art officiel ne s'en était déjà emparé - la "Pauvre Boîte" (2000) réalisée en collaboration avec le génial Patrice Verhofstadt ne pourrait mieux convenir. A moins peut-être de se laisser séduire par quelques performances comme "Mano a Mano" (1996) ou "Simple comme Bonjour" ( 1998) qui transfigurent le geste banal de la poignée de main en autant de pauvres sculptures; ou par l'évocation poétique de quelques titres d'oeuvres et d'expositions: "En pure perte", "Archives ménagères", "La Neigeuse ready raide"...
LABORATOIRES PATACYCLISTES
Du café, lieu d'échanges d'idées - pas forcément idéaliste - Du café, lieu d'echange d'idees — naquit aussi I'impressionnante serie de "Laboratoires patacyclistes" organisés par Dialogist-Kantor de 1992 1999 avec pour seule
prétention celle d'encourager un peloton artistique parfois tenté par la "roue-libre". Annoncées par de splendides affiches, fruit d'une passion pour la serigraphie, l'off set ou l'imprimerie, ces manifestations le plus souvent improvisées eurent ainsi pour but premier d'inviter une kyrielle d'artistes à venir prolonger en actions, objets,
installations etc. une idee le plus souvent lancée en I'air par les deux drôles de commissaires. Qu'ajouter de plus devant pareil refus de prendre le "monde de I'art" au serieux qu'une impression vivifiante d'avoir affaire pour une fois à un espace
de création dépourvu de tout esprit de competitivité Sans dire qu'aucune personnalité n'émerge de ces "laboratoires" ou se mélangent d'ailleurs lecteurs d'Art Press et producteurs non informés d'Art Brut, avançons seulement que la pertinence du
propos de ces organisateurs on-ne- peut-plus indépendants tient d'une capacité fort louable à résister à ce consensus pesant qui veut qu'il en va de I'art comme de I'économie. Si la "Pauvre Boîte" refoule à sa maniere comico-tragique le mercantilisme
qui mine une bonne partie de la profession artistique, il en va de même de toute une serie d'interventions par lesquelles s'expriment ce même souci de ne pas pactiser avec I'ennemi. Face à I'individualisme croissant qui eut raison de la tendance naturelle des avant- gardes à faire "mouvements", Dialogist-Kantor et sa bande de "patacyclistes" pourraient bel et bien s'avérer les derniers activistes a faire de la bonne vieille solidarité leur premier principe de resistance. C'est qu'lnternet — qui voudrait dans ce domaine s'imposer comme I'arme décisive — n'occupe pas encore tous les fronts,
préférant visiblement à la réalite de l'espace social sa metaphore désincarnée ! Reste alors, si la passion est — comme le croient certains — une course de côte, à soutenir nos lanternes rouges et à leur dire, comme eux : Courage !
Denis Gielen , « L’Art Même » ( Chronique des aets plastiques de la communauté française de Belgique ) n°11, 2001
<<tiddler PicasaJqueryincl>>
[<img(220px,auto)[alt_text|http://home.scarlet.be/gruzemayer/Indx2011/BLmk20Jw.jpg]] ''Un hommage à Bernd Lohaus'' at the ~MuHKA Antwerp 0/01/2011. More info here http://home.scarlet.be/gruzemayer/ [img(235px,auto)[alt_text|http://home.scarlet.be/gruzemayer/Indx2011/KastbackMusw.jpg]]
<html>
<div id="container1"><span style= "font-size: 16pt ; color: fuchsia ; background-color: #FFFFFF ; " > </span></div>
</html>
<script> jQuery("#container1").pwi({
username: 'patacycliste',
maxResults:8,
thumbSize: 100,
thumbCrop: 1,
mode: 'keyword',
album: 'LohausHommageMuhka',
keyword: 'LLlohaus',
albumTitle: 'Hommage à Bernd Lohaus/Muhka 20.01.2001\'',
showSlideshowLink: false,
showAlbumDescription: true,
});
</script>
@@bgcolor(#ff9933):[[check full list ✔|Last Updates]]@@
<<forEachTiddler
where
'tiddler.tags.contains("›Updates")'
sortBy
tiddler.modified
descending
script '
window.fetItemsPerPage = 30;
function getHeader(context,count) {
if (!window.fetStartIndex || window.fetStartIndex < 0)
window.fetStartIndex = 0;
// ensure not to page behind the last page
if (window.fetStartIndex >= count)
window.fetStartIndex = Math.min(Math.max(window.fetStartIndex-window.fetItemsPerPage,0),count-1);
createTiddlyButton(context.place,"<",null,
function(e) {
window.fetStartIndex -= window.fetItemsPerPage;
story.refreshTiddler(context.viewerTiddler.title,null,true);
});
createTiddlyButton(context.place,">",null,
function(e) {
window.fetStartIndex += window.fetItemsPerPage;
story.refreshTiddler(context.viewerTiddler.title,null,true);
});
var startNo = window.fetStartIndex+1;
var endNo = Math.min(count,window.fetStartIndex+window.fetItemsPerPage);
return "("+startNo+" - "+endNo+ " of "+ count + " items)\n";
}
'
write
'(index >= window.fetStartIndex) && (index < window.fetStartIndex + 30) ? "* [["+tiddler.title+"]]\n" : ""'
begin
'getHeader(context,count)'
>>
| !date | !user | !location | !storeUrl | !uploadDir | !toFilename | !backupdir | !origin |
| 13/09/2010 09:16:40 | YourName | [[/|http://dk-docs.tiddlyspot.com/]] | [[store.cgi|http://dk-docs.tiddlyspot.com/store.cgi]] | . | [[index.html | http://dk-docs.tiddlyspot.com/index.html]] | . | ok |
| 13/09/2010 09:18:07 | YourName | [[/|http://dk-docs.tiddlyspot.com/]] | [[store.cgi|http://dk-docs.tiddlyspot.com/store.cgi]] | . | [[index.html | http://dk-docs.tiddlyspot.com/index.html]] | . |
| 13/09/2010 10:47:08 | dk-docs | [[dk-docsOR.html|file:///C:/Documents%20and%20Settings/utilisateur/Bureau/dk-docsOR.html]] | [[store.cgi|http://dk-docs.tiddlyspot.com/store.cgi]] | . | [[index.html | http://dk-docs.tiddlyspot.com/index.html]] | . |
| 13/09/2010 10:48:39 | YourName | [[/|http://dk-docs.tiddlyspot.com/]] | [[store.cgi|http://dk-docs.tiddlyspot.com/store.cgi]] | . | [[index.html | http://dk-docs.tiddlyspot.com/index.html]] | . |
| 14/09/2010 14:26:32 | dk-docs | [[dk-docs.html|file:///C:/Documents%20and%20Settings/utilisateur/Bureau/dk-docs.html]] | [[store.cgi|http://dk-docs.tiddlyspot.com/store.cgi]] | . | [[index.html | http://dk-docs.tiddlyspot.com/index.html]] | . |
| 14/09/2010 14:31:04 | YourName | [[/|http://dk-docs.tiddlyspot.com/]] | [[store.cgi|http://dk-docs.tiddlyspot.com/store.cgi]] | . | [[index.html | http://dk-docs.tiddlyspot.com/index.html]] | . | failed |
| 14/09/2010 14:31:41 | YourName | [[/|http://dk-docs.tiddlyspot.com/]] | [[store.cgi|http://dk-docs.tiddlyspot.com/store.cgi]] | . | [[index.html | http://dk-docs.tiddlyspot.com/index.html]] | . |
/***
|''Name:''|UploadPlugin|
|''Description:''|Save to web a TiddlyWiki|
|''Version:''|4.1.3|
|''Date:''|Feb 24, 2008|
|''Source:''|http://tiddlywiki.bidix.info/#UploadPlugin|
|''Documentation:''|http://tiddlywiki.bidix.info/#UploadPluginDoc|
|''Author:''|BidiX (BidiX (at) bidix (dot) info)|
|''License:''|[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D ]]|
|''~CoreVersion:''|2.2.0|
|''Requires:''|PasswordOptionPlugin|
***/
//{{{
version.extensions.UploadPlugin = {
major: 4, minor: 1, revision: 3,
date: new Date("Feb 24, 2008"),
source: 'http://tiddlywiki.bidix.info/#UploadPlugin',
author: 'BidiX (BidiX (at) bidix (dot) info',
coreVersion: '2.2.0'
};
//
// Environment
//
if (!window.bidix) window.bidix = {}; // bidix namespace
bidix.debugMode = false; // true to activate both in Plugin and UploadService
//
// Upload Macro
//
config.macros.upload = {
// default values
defaultBackupDir: '', //no backup
defaultStoreScript: "store.php",
defaultToFilename: "index.html",
defaultUploadDir: ".",
authenticateUser: true // UploadService Authenticate User
};
config.macros.upload.label = {
promptOption: "Save and Upload this TiddlyWiki with UploadOptions",
promptParamMacro: "Save and Upload this TiddlyWiki in %0",
saveLabel: "save to web",
saveToDisk: "save to disk",
uploadLabel: "upload"
};
config.macros.upload.messages = {
noStoreUrl: "No store URL in parmeters or options",
usernameOrPasswordMissing: "Username or password missing"
};
config.macros.upload.handler = function(place,macroName,params) {
if (readOnly)
return;
var label;
if (document.location.toString().substr(0,4) == "http")
label = this.label.saveLabel;
else
label = this.label.uploadLabel;
var prompt;
if (params[0]) {
prompt = this.label.promptParamMacro.toString().format([this.destFile(params[0],
(params[1] ? params[1]:bidix.basename(window.location.toString())), params[3])]);
} else {
prompt = this.label.promptOption;
}
createTiddlyButton(place, label, prompt, function() {config.macros.upload.action(params);}, null, null, this.accessKey);
};
config.macros.upload.action = function(params)
{
// for missing macro parameter set value from options
if (!params) params = {};
var storeUrl = params[0] ? params[0] : config.options.txtUploadStoreUrl;
var toFilename = params[1] ? params[1] : config.options.txtUploadFilename;
var backupDir = params[2] ? params[2] : config.options.txtUploadBackupDir;
var uploadDir = params[3] ? params[3] : config.options.txtUploadDir;
var username = params[4] ? params[4] : config.options.txtUploadUserName;
var password = config.options.pasUploadPassword; // for security reason no password as macro parameter
// for still missing parameter set default value
if ((!storeUrl) && (document.location.toString().substr(0,4) == "http"))
storeUrl = bidix.dirname(document.location.toString())+'/'+config.macros.upload.defaultStoreScript;
if (storeUrl.substr(0,4) != "http")
storeUrl = bidix.dirname(document.location.toString()) +'/'+ storeUrl;
if (!toFilename)
toFilename = bidix.basename(window.location.toString());
if (!toFilename)
toFilename = config.macros.upload.defaultToFilename;
if (!uploadDir)
uploadDir = config.macros.upload.defaultUploadDir;
if (!backupDir)
backupDir = config.macros.upload.defaultBackupDir;
// report error if still missing
if (!storeUrl) {
alert(config.macros.upload.messages.noStoreUrl);
clearMessage();
return false;
}
if (config.macros.upload.authenticateUser && (!username || !password)) {
alert(config.macros.upload.messages.usernameOrPasswordMissing);
clearMessage();
return false;
}
bidix.upload.uploadChanges(false,null,storeUrl, toFilename, uploadDir, backupDir, username, password);
return false;
};
config.macros.upload.destFile = function(storeUrl, toFilename, uploadDir)
{
if (!storeUrl)
return null;
var dest = bidix.dirname(storeUrl);
if (uploadDir && uploadDir != '.')
dest = dest + '/' + uploadDir;
dest = dest + '/' + toFilename;
return dest;
};
//
// uploadOptions Macro
//
config.macros.uploadOptions = {
handler: function(place,macroName,params) {
var wizard = new Wizard();
wizard.createWizard(place,this.wizardTitle);
wizard.addStep(this.step1Title,this.step1Html);
var markList = wizard.getElement("markList");
var listWrapper = document.createElement("div");
markList.parentNode.insertBefore(listWrapper,markList);
wizard.setValue("listWrapper",listWrapper);
this.refreshOptions(listWrapper,false);
var uploadCaption;
if (document.location.toString().substr(0,4) == "http")
uploadCaption = config.macros.upload.label.saveLabel;
else
uploadCaption = config.macros.upload.label.uploadLabel;
wizard.setButtons([
{caption: uploadCaption, tooltip: config.macros.upload.label.promptOption,
onClick: config.macros.upload.action},
{caption: this.cancelButton, tooltip: this.cancelButtonPrompt, onClick: this.onCancel}
]);
},
options: [
"txtUploadUserName",
"pasUploadPassword",
"txtUploadStoreUrl",
"txtUploadDir",
"txtUploadFilename",
"txtUploadBackupDir",
"chkUploadLog",
"txtUploadLogMaxLine"
],
refreshOptions: function(listWrapper) {
var opts = [];
for(i=0; i<this.options.length; i++) {
var opt = {};
opts.push();
opt.option = "";
n = this.options[i];
opt.name = n;
opt.lowlight = !config.optionsDesc[n];
opt.description = opt.lowlight ? this.unknownDescription : config.optionsDesc[n];
opts.push(opt);
}
var listview = ListView.create(listWrapper,opts,this.listViewTemplate);
for(n=0; n<opts.length; n++) {
var type = opts[n].name.substr(0,3);
var h = config.macros.option.types[type];
if (h && h.create) {
h.create(opts[n].colElements['option'],type,opts[n].name,opts[n].name,"no");
}
}
},
onCancel: function(e)
{
backstage.switchTab(null);
return false;
},
wizardTitle: "Upload with options",
step1Title: "These options are saved in cookies in your browser",
step1Html: "<input type='hidden' name='markList'></input><br>",
cancelButton: "Cancel",
cancelButtonPrompt: "Cancel prompt",
listViewTemplate: {
columns: [
{name: 'Description', field: 'description', title: "Description", type: 'WikiText'},
{name: 'Option', field: 'option', title: "Option", type: 'String'},
{name: 'Name', field: 'name', title: "Name", type: 'String'}
],
rowClasses: [
{className: 'lowlight', field: 'lowlight'}
]}
};
//
// upload functions
//
if (!bidix.upload) bidix.upload = {};
if (!bidix.upload.messages) bidix.upload.messages = {
//from saving
invalidFileError: "The original file '%0' does not appear to be a valid TiddlyWiki",
backupSaved: "Backup saved",
backupFailed: "Failed to upload backup file",
rssSaved: "RSS feed uploaded",
rssFailed: "Failed to upload RSS feed file",
emptySaved: "Empty template uploaded",
emptyFailed: "Failed to upload empty template file",
mainSaved: "Main TiddlyWiki file uploaded",
mainFailed: "Failed to upload main TiddlyWiki file. Your changes have not been saved",
//specific upload
loadOriginalHttpPostError: "Can't get original file",
aboutToSaveOnHttpPost: 'About to upload on %0 ...',
storePhpNotFound: "The store script '%0' was not found."
};
bidix.upload.uploadChanges = function(onlyIfDirty,tiddlers,storeUrl,toFilename,uploadDir,backupDir,username,password)
{
var callback = function(status,uploadParams,original,url,xhr) {
if (!status) {
displayMessage(bidix.upload.messages.loadOriginalHttpPostError);
return;
}
if (bidix.debugMode)
alert(original.substr(0,500)+"\n...");
// Locate the storeArea div's
var posDiv = locateStoreArea(original);
if((posDiv[0] == -1) || (posDiv[1] == -1)) {
alert(config.messages.invalidFileError.format([localPath]));
return;
}
bidix.upload.uploadRss(uploadParams,original,posDiv);
};
if(onlyIfDirty && !store.isDirty())
return;
clearMessage();
// save on localdisk ?
if (document.location.toString().substr(0,4) == "file") {
var path = document.location.toString();
var localPath = getLocalPath(path);
saveChanges();
}
// get original
var uploadParams = new Array(storeUrl,toFilename,uploadDir,backupDir,username,password);
var originalPath = document.location.toString();
// If url is a directory : add index.html
if (originalPath.charAt(originalPath.length-1) == "/")
originalPath = originalPath + "index.html";
var dest = config.macros.upload.destFile(storeUrl,toFilename,uploadDir);
var log = new bidix.UploadLog();
log.startUpload(storeUrl, dest, uploadDir, backupDir);
displayMessage(bidix.upload.messages.aboutToSaveOnHttpPost.format([dest]));
if (bidix.debugMode)
alert("about to execute Http - GET on "+originalPath);
var r = doHttp("GET",originalPath,null,null,username,password,callback,uploadParams,null);
if (typeof r == "string")
displayMessage(r);
return r;
};
bidix.upload.uploadRss = function(uploadParams,original,posDiv)
{
var callback = function(status,params,responseText,url,xhr) {
if(status) {
var destfile = responseText.substring(responseText.indexOf("destfile:")+9,responseText.indexOf("\n", responseText.indexOf("destfile:")));
displayMessage(bidix.upload.messages.rssSaved,bidix.dirname(url)+'/'+destfile);
bidix.upload.uploadMain(params[0],params[1],params[2]);
} else {
displayMessage(bidix.upload.messages.rssFailed);
}
};
// do uploadRss
if(config.options.chkGenerateAnRssFeed) {
var rssPath = uploadParams[1].substr(0,uploadParams[1].lastIndexOf(".")) + ".xml";
var rssUploadParams = new Array(uploadParams[0],rssPath,uploadParams[2],'',uploadParams[4],uploadParams[5]);
var rssString = generateRss();
// no UnicodeToUTF8 conversion needed when location is "file" !!!
if (document.location.toString().substr(0,4) != "file")
rssString = convertUnicodeToUTF8(rssString);
bidix.upload.httpUpload(rssUploadParams,rssString,callback,Array(uploadParams,original,posDiv));
} else {
bidix.upload.uploadMain(uploadParams,original,posDiv);
}
};
bidix.upload.uploadMain = function(uploadParams,original,posDiv)
{
var callback = function(status,params,responseText,url,xhr) {
var log = new bidix.UploadLog();
if(status) {
// if backupDir specified
if ((params[3]) && (responseText.indexOf("backupfile:") > -1)) {
var backupfile = responseText.substring(responseText.indexOf("backupfile:")+11,responseText.indexOf("\n", responseText.indexOf("backupfile:")));
displayMessage(bidix.upload.messages.backupSaved,bidix.dirname(url)+'/'+backupfile);
}
var destfile = responseText.substring(responseText.indexOf("destfile:")+9,responseText.indexOf("\n", responseText.indexOf("destfile:")));
displayMessage(bidix.upload.messages.mainSaved,bidix.dirname(url)+'/'+destfile);
store.setDirty(false);
log.endUpload("ok");
} else {
alert(bidix.upload.messages.mainFailed);
displayMessage(bidix.upload.messages.mainFailed);
log.endUpload("failed");
}
};
// do uploadMain
var revised = bidix.upload.updateOriginal(original,posDiv);
bidix.upload.httpUpload(uploadParams,revised,callback,uploadParams);
};
bidix.upload.httpUpload = function(uploadParams,data,callback,params)
{
var localCallback = function(status,params,responseText,url,xhr) {
url = (url.indexOf("nocache=") < 0 ? url : url.substring(0,url.indexOf("nocache=")-1));
if (xhr.status == 404)
alert(bidix.upload.messages.storePhpNotFound.format([url]));
if ((bidix.debugMode) || (responseText.indexOf("Debug mode") >= 0 )) {
alert(responseText);
if (responseText.indexOf("Debug mode") >= 0 )
responseText = responseText.substring(responseText.indexOf("\n\n")+2);
} else if (responseText.charAt(0) != '0')
alert(responseText);
if (responseText.charAt(0) != '0')
status = null;
callback(status,params,responseText,url,xhr);
};
// do httpUpload
var boundary = "---------------------------"+"AaB03x";
var uploadFormName = "UploadPlugin";
// compose headers data
var sheader = "";
sheader += "--" + boundary + "\r\nContent-disposition: form-data; name=\"";
sheader += uploadFormName +"\"\r\n\r\n";
sheader += "backupDir="+uploadParams[3] +
";user=" + uploadParams[4] +
";password=" + uploadParams[5] +
";uploaddir=" + uploadParams[2];
if (bidix.debugMode)
sheader += ";debug=1";
sheader += ";;\r\n";
sheader += "\r\n" + "--" + boundary + "\r\n";
sheader += "Content-disposition: form-data; name=\"userfile\"; filename=\""+uploadParams[1]+"\"\r\n";
sheader += "Content-Type: text/html;charset=UTF-8" + "\r\n";
sheader += "Content-Length: " + data.length + "\r\n\r\n";
// compose trailer data
var strailer = new String();
strailer = "\r\n--" + boundary + "--\r\n";
data = sheader + data + strailer;
if (bidix.debugMode) alert("about to execute Http - POST on "+uploadParams[0]+"\n with \n"+data.substr(0,500)+ " ... ");
var r = doHttp("POST",uploadParams[0],data,"multipart/form-data; ;charset=UTF-8; boundary="+boundary,uploadParams[4],uploadParams[5],localCallback,params,null);
if (typeof r == "string")
displayMessage(r);
return r;
};
// same as Saving's updateOriginal but without convertUnicodeToUTF8 calls
bidix.upload.updateOriginal = function(original, posDiv)
{
if (!posDiv)
posDiv = locateStoreArea(original);
if((posDiv[0] == -1) || (posDiv[1] == -1)) {
alert(config.messages.invalidFileError.format([localPath]));
return;
}
var revised = original.substr(0,posDiv[0] + startSaveArea.length) + "\n" +
store.allTiddlersAsHtml() + "\n" +
original.substr(posDiv[1]);
var newSiteTitle = getPageTitle().htmlEncode();
revised = revised.replaceChunk("<title"+">","</title"+">"," " + newSiteTitle + " ");
revised = updateMarkupBlock(revised,"PRE-HEAD","MarkupPreHead");
revised = updateMarkupBlock(revised,"POST-HEAD","MarkupPostHead");
revised = updateMarkupBlock(revised,"PRE-BODY","MarkupPreBody");
revised = updateMarkupBlock(revised,"POST-SCRIPT","MarkupPostBody");
return revised;
};
//
// UploadLog
//
// config.options.chkUploadLog :
// false : no logging
// true : logging
// config.options.txtUploadLogMaxLine :
// -1 : no limit
// 0 : no Log lines but UploadLog is still in place
// n : the last n lines are only kept
// NaN : no limit (-1)
bidix.UploadLog = function() {
if (!config.options.chkUploadLog)
return; // this.tiddler = null
this.tiddler = store.getTiddler("UploadLog");
if (!this.tiddler) {
this.tiddler = new Tiddler();
this.tiddler.title = "UploadLog";
this.tiddler.text = "| !date | !user | !location | !storeUrl | !uploadDir | !toFilename | !backupdir | !origin |";
this.tiddler.created = new Date();
this.tiddler.modifier = config.options.txtUserName;
this.tiddler.modified = new Date();
store.addTiddler(this.tiddler);
}
return this;
};
bidix.UploadLog.prototype.addText = function(text) {
if (!this.tiddler)
return;
// retrieve maxLine when we need it
var maxLine = parseInt(config.options.txtUploadLogMaxLine,10);
if (isNaN(maxLine))
maxLine = -1;
// add text
if (maxLine != 0)
this.tiddler.text = this.tiddler.text + text;
// Trunck to maxLine
if (maxLine >= 0) {
var textArray = this.tiddler.text.split('\n');
if (textArray.length > maxLine + 1)
textArray.splice(1,textArray.length-1-maxLine);
this.tiddler.text = textArray.join('\n');
}
// update tiddler fields
this.tiddler.modifier = config.options.txtUserName;
this.tiddler.modified = new Date();
store.addTiddler(this.tiddler);
// refresh and notifiy for immediate update
story.refreshTiddler(this.tiddler.title);
store.notify(this.tiddler.title, true);
};
bidix.UploadLog.prototype.startUpload = function(storeUrl, toFilename, uploadDir, backupDir) {
if (!this.tiddler)
return;
var now = new Date();
var text = "\n| ";
var filename = bidix.basename(document.location.toString());
if (!filename) filename = '/';
text += now.formatString("0DD/0MM/YYYY 0hh:0mm:0ss") +" | ";
text += config.options.txtUserName + " | ";
text += "[["+filename+"|"+location + "]] |";
text += " [[" + bidix.basename(storeUrl) + "|" + storeUrl + "]] | ";
text += uploadDir + " | ";
text += "[[" + bidix.basename(toFilename) + " | " +toFilename + "]] | ";
text += backupDir + " |";
this.addText(text);
};
bidix.UploadLog.prototype.endUpload = function(status) {
if (!this.tiddler)
return;
this.addText(" "+status+" |");
};
//
// Utilities
//
bidix.checkPlugin = function(plugin, major, minor, revision) {
var ext = version.extensions[plugin];
if (!
(ext &&
((ext.major > major) ||
((ext.major == major) && (ext.minor > minor)) ||
((ext.major == major) && (ext.minor == minor) && (ext.revision >= revision))))) {
// write error in PluginManager
if (pluginInfo)
pluginInfo.log.push("Requires " + plugin + " " + major + "." + minor + "." + revision);
eval(plugin); // generate an error : "Error: ReferenceError: xxxx is not defined"
}
};
bidix.dirname = function(filePath) {
if (!filePath)
return;
var lastpos;
if ((lastpos = filePath.lastIndexOf("/")) != -1) {
return filePath.substring(0, lastpos);
} else {
return filePath.substring(0, filePath.lastIndexOf("\\"));
}
};
bidix.basename = function(filePath) {
if (!filePath)
return;
var lastpos;
if ((lastpos = filePath.lastIndexOf("#")) != -1)
filePath = filePath.substring(0, lastpos);
if ((lastpos = filePath.lastIndexOf("/")) != -1) {
return filePath.substring(lastpos + 1);
} else
return filePath.substring(filePath.lastIndexOf("\\")+1);
};
bidix.initOption = function(name,value) {
if (!config.options[name])
config.options[name] = value;
};
//
// Initializations
//
// require PasswordOptionPlugin 1.0.1 or better
bidix.checkPlugin("PasswordOptionPlugin", 1, 0, 1);
// styleSheet
setStylesheet('.txtUploadStoreUrl, .txtUploadBackupDir, .txtUploadDir {width: 22em;}',"uploadPluginStyles");
//optionsDesc
merge(config.optionsDesc,{
txtUploadStoreUrl: "Url of the UploadService script (default: store.php)",
txtUploadFilename: "Filename of the uploaded file (default: in index.html)",
txtUploadDir: "Relative Directory where to store the file (default: . (downloadService directory))",
txtUploadBackupDir: "Relative Directory where to backup the file. If empty no backup. (default: ''(empty))",
txtUploadUserName: "Upload Username",
pasUploadPassword: "Upload Password",
chkUploadLog: "do Logging in UploadLog (default: true)",
txtUploadLogMaxLine: "Maximum of lines in UploadLog (default: 10)"
});
// Options Initializations
bidix.initOption('txtUploadStoreUrl','');
bidix.initOption('txtUploadFilename','');
bidix.initOption('txtUploadDir','');
bidix.initOption('txtUploadBackupDir','');
bidix.initOption('txtUploadUserName','');
bidix.initOption('pasUploadPassword','');
bidix.initOption('chkUploadLog',true);
bidix.initOption('txtUploadLogMaxLine','10');
// Backstage
merge(config.tasks,{
uploadOptions: {text: "upload", tooltip: "Change UploadOptions and Upload", content: '<<uploadOptions>>'}
});
config.backstageTasks.push("uploadOptions");
//}}}
The category for urgent items...
Un projet de Grégoire Motte et Elèonore Saintagnan, galerie Elaine Levy, Bruxelles, 2010.
|[img(210px+,auto)[alt_text|http://www.gregoiremotte.com/files/venise-elainne-levy.jpg]]|[img(180px+,auto)[alt_text|http://www.gregoiremotte.com/files/venise-e-levy-kurt.jpg]][img(180px+,auto)[alt_text|http://www.gregoiremotte.com/files/venise-e-levy-vincentetferia.jpg]]|
Bookés sur le tard nous y avons présenté les 2 chapeaux POOR HOMME / POOR FEMMES posés au sol sur leurs boîtes devant un paysage de fantaisie peint au jus de tripes par Éléonore et Grégoire
<html>
<p><a class='iframe' href="http://www.gregoiremotte.com/index.php?/daisy/venise--3jours-2-nuits-1/">See on Gregoire Motte Webpage
</html> http://www.gregoiremotte.com/ http://www.elainelevyproject.com
<<tiddler ColorBoxInclude>>
<!--{{{-->
<div class='toolbar' macro="hideWhen readOnly">
<span macro='tiddler ToolbarAction'></span>
<span macro="tagsearch source:'TagSearchConfig##Tags' exclude:'' label:'tags ' tooltip:'Set tags' more:'TagSearchConfig##More' mode:0 toolbar"></span>
<span macro='tiddler newHere'></span>
<span macro='toolbar [[ToolbarCommands::ViewToolbar]]'></span>
</div>
<div class='tagged' macro="hideWhen readOnly"> <span macro='tags'></span></div>
<div class='title' macro='view title'></div>
<div class='subtitle' macro="hideWhen readOnly"><span macro='view modifier link'></span>, <span macro='view modified date'></span> (<span macro='message views.wikified.createdPrompt'></span> <span macro='view created date'></span>)</div>
<!--REPLACE tagged WITH TAGGLYTAGGED for horizontal tags
<div class="tagglyTagged" macro="tags"></div>
-->
<div class='viewer' macro='view text wikified'></div>
<div class='tagging' macro='tagglyTagging' >
<div class='tagClear'></div>
<!--}}}-->
/***
|''Name:''|WikiBar|
|''Version:''|2.0.0 beta3|
|''Source:''|[[AiddlyWiki|http://aiddlywiki.sourceforge.net]]|
|''Author:''|[[Arphen Lin|mailto:arphenlin@gmail.com]]|
|''Type:''|toolbar macro command extension|
|''Required:''|TiddlyWiki 2.0.0 beta6|
!Description
WikiBar is a toolbar that gives access to most of TiddlyWiki's formatting features with a few clicks. It's a handy tool for people who are not familiar with TiddlyWiki syntax.
Besides, with WikiBar-addons, users can extend the power of WikiBar.
!Support browser
*Firefox 1.5
!Revision history
*v2.0.0 beta3 (2005/12/30)
** remove macros (replaced by TWMacro addon)
** add wikibar command in toolbar automatically
** rename DOIT to HANDLER
** rename TIP to TOOLTIP
*v2.0.0 beta2 (2005/12/21)
** re-design Wikibar addon framework
*v2.0.0 beta1 (2005/12/14)
** Note:
*** WikiBarPlugin is renamed to WikiBar
** New Features:
*** support TiddlyWiki 2.0.0 template mechanism
*** new wikibar data structure
*** new wikibar-addon framework for developers
**** support dynamic popup menu generator
*** support most new macros added in TiddlyWiki 2.0.0
*** multi-level popup menu
*** fix wikibar tab stop
*** remove paletteSelector
** Known Bugs:
*** popup-menu and color-picker can't be closed correctly
*** some macros can't be displayed correctly in previewer
*** text in previewer will be displayed italic
*v1.2.0 (2005/11/21)
**New Features:
***User defined color palettes supported
####Get color palettes from [[ColorZilla Palettes|http://www.iosart.com/firefox/colorzilla/palettes.html]].
####Save the palette file(*.gpl) as a new tiddler and tag it with 'ColorPalettes', then you can use it in WikiBar.
***WikiBar style sheet supported
***Click on document to close current colorPicker, paletteSelector or aboutWikibar
*v1.1.1 (2005/11/03)
**Bugs fixed:
***'Not enough parameters!' message is displayed when the parameter includes '%+number', ex: 'hello%20world!'
*v1.1.0 (2005/11/01)
**Bugs fixed:
***WikiBar overruns (reported by by GeoffS <gslocock@yahoo.co.uk>)
**New features:
***Insert a color code at the cursor. (Thanks to RunningUtes <RunningUtes@gmail.com>)
***Enable gradient macro. (Thanks to RunningUtes <RunningUtes@gmail.com>)
***Insert tiddler comment tags {{{/% ... %/}}}. (new feature supported by TiddlyWiki 1.2.37)
***Insert DateFormatString for {{{<<today>>}}} macro. (new feature supported by TiddlyWiki 1.2.37)
**Enhanced:
***Allow optional parameters in syntax.
**Bugs:
***'Not enough parameters!' message is displayed when the parameter includes '%+number', ex: 'hello%20world!'
*v1.0.0 (2005/10/30)
**Initial release
!Code
***/
//{{{
config.macros.wikibar = {major: 2, minor: 0, revision: 0, beta: 3, date: new Date(2005,12,30)};
config.macros.wikibar.handler = function(place,macroName,params,wikifier,paramString,tiddler){
if(!(tiddler instanceof Tiddler)) {return;}
story.setDirty(tiddler.title,true);
place.id = 'wikibar'+tiddler.title;
place.className = 'toolbar wikibar';
};
function wikibar_install(){
config.commands.wikibar = {
text: 'wikibar',
tooltip: 'wikibar on/off',
handler: function(e,src,title) {
if(!e){ e = window.event; }
var theButton = resolveTarget(e);
theButton.id = 'wikibarButton'+title;
wikibarPopup.remove();
wikibar_installAddons(theButton, title);
wikibar_createWikibar(title);
return(false);
}
};
config.shadowTiddlers['EditTemplate'] = wikibar_addWikibarCommand(config.shadowTiddlers['EditTemplate']);
var tiddler = store.getTiddler('EditTemplate');
if(tiddler){
tiddler.text = wikibar_addWikibarCommand(tiddler.text);
}
}
function wikibar_installAddons(theButton, title){
var tiddlers = store.getTaggedTiddlers('wikibarAddons');
if(!tiddlers) { return; }
theButton.addons=[];
for(var i=0; i<tiddlers.length; i++){
try{
eval(tiddlers[i].text);
try{
wikibar_addonInstall(title);
wikibar_addonInstall = null;
theButton.addons.push({ok:true, name:tiddlers[i].title});
}catch(ex){
theButton.addons.push({ok:false, name:tiddlers[i].title, error:ex});
}
}catch(ex){
theButton.addons.push({ok:false, name:tiddlers[i].title, error:ex});
}
}
}
function wikibar_addWikibarCommand(tiddlerText){
var div = document.createElement('div');
div.style.display = 'none';
div.innerHTML = tiddlerText;
for(var i=0; i<div.childNodes.length; i++){
var o=div.childNodes[i];
if(o.tagName==='DIV'){
if(o.className=='toolbar'){
var macroText = o.getAttribute('macro').trim();
if(macroText.search('wikibar')<=0){
macroText += ' wikibar';
o.setAttribute('macro', macroText);
}
break;
}
}
}
return div.innerHTML.replace(/\"/g, "\'");
}
function wikibar_processSyntaxParams(theSyntax, params){
try{
var pcr = 'AplWikibarPcr';
var rx=null;
var allParams=null;
if(params){
if(typeof(params)=='object'){
for(var i=0; i<params.length; i++){
if(params[i]){
params[i] = params[i].replace(new RegExp('%','g'), pcr).trim();
rx = '(\\[%'+(i+1)+'\\])' + '|' + '(%'+(i+1)+')';
theSyntax = theSyntax.replace(new RegExp(rx,'g'), params[i] );
}
}
allParams = params.join(' ').trim();
}else{
allParams = params.replace(new RegExp('%','g'), pcr).trim();
rx = /(\[%1{1}\])|(%1{1})/g;
theSyntax = theSyntax.replace(rx, allParams);
}
}
if(allParams){
theSyntax = theSyntax.replace(new RegExp('%N{1}','g'), allParams);
}
rx=/\[%(([1-9]{1,}[0-9]{0,})|(N{1}))\]/g;
theSyntax = theSyntax.replace(rx, '');
rx=/%(([1-9]{1,}[0-9]{0,})|(N{1}))/g;
if( theSyntax.match(rx) ){
throw 'Not enough parameters! ' + theSyntax;
}
theSyntax=theSyntax.replace(new RegExp(pcr,'g'), '%');
return theSyntax;
} catch(ex){
return null;
}
}
function wikibar_resolveEditItem(tiddlerWrapper, itemName){
if(tiddlerWrapper.hasChildNodes()){
var c=tiddlerWrapper.childNodes;
for(var i=0; i<c.length; i++){
var txt=wikibar_resolveEditItem(c[i], itemName);
if(!txt){
continue;
}else{
return txt;
}
}
}
return ((tiddlerWrapper.getAttribute && tiddlerWrapper.getAttribute('edit')==itemName)? tiddlerWrapper : null);
}
function wikibar_resolveEditItemValue(tiddlerWrapper, itemName){
var o = wikibar_resolveEditItem(tiddlerWrapper, itemName);
return (o? o.value.replace(/\r/mg,'') : null);
}
function wikibar_resolveTiddlerEditorWrapper(obj){
if(obj.id=='tiddlerDisplay'){return null;}
if((obj.getAttribute && obj.getAttribute('macro')=='edit text')){return obj;}
return wikibar_resolveTiddlerEditorWrapper(obj.parentNode);
}
function wikibar_resolveTiddlerEditor(obj){
if(obj.hasChildNodes()){
var c = obj.childNodes;
for(var i=0; i<c.length; i++){
var o=wikibar_resolveTiddlerEditor(c[i]);
if(o){ return o;}
}
}
return ((obj.getAttribute && obj.getAttribute('edit')=='text')? obj : null);
}
function wikibar_resolveTargetButton(obj){
if(obj.id && obj.id.substring(0,7)=='wikibar'){ return null; }
if(obj.tiddlerTitle){
return obj;
}else{
return wikibar_resolveTargetButton(obj.parentNode);
}
}
function wikibar_isValidMenuItem(tool){
if(!tool){ return false; }
if(tool.TYPE=='MENU' || tool.TYPE=='MAIN_MENU'){
for(var key in tool){
if(key.substring(0,8)=='DYNAITEM'){ return true; }
if(wikibar_isValidMenuItem(tool[key])){ return true; }
}
return false;
}else{
return (tool.HANDLER? true : false);
}
}
function wikibar_editFormat(param){
var editor = param.button.editor;
var params = param.params;
clearMessage();
if(!editor){ return; }
var repText = wikibar_processSyntaxParams(this.syntax, params);
if(repText===null){ return; }
var st = editor.scrollTop;
var ss = editor.selectionStart;
var se = editor.selectionEnd;
var frontText= '';
var endText = '';
var fullText = editor.value;
if(se>ss && ss>=0){
frontText = fullText.substring(0, ss);
endText = fullText.substring(se, fullText.length);
}
else if(ss===0 && (se===0 || se == fullText.length) ){
endText = fullText;
}
else if(se==ss && ss>0){
frontText = fullText.substring(0, ss);
endText = fullText.substring(se, fullText.length);
}
if(repText.indexOf('user_text')>=0 && this.hint){
repText = repText.replace('user_text', this.hint);
}
editor.value = frontText + repText + endText;
editor.selectionStart = ss;
editor.selectionEnd = ss + repText.length;
editor.scrollTop = st;
editor.focus();
}
function wikibar_editFormatByWord(param){
var editor = param.button.editor;
var params = param.params;
clearMessage();
if(!editor){return;}
var repText = wikibar_processSyntaxParams(this.syntax, params);
if(repText===null){ return; }
var st = editor.scrollTop;
var ss = editor.selectionStart;
var se = editor.selectionEnd;
var frontText= '';
var selText = '';
var endText = '';
var fullText = editor.value;
if(se>ss && ss>=0){
frontText = fullText.substring(0, ss);
selText = fullText.substring(ss,se);
endText = fullText.substring(se, fullText.length);
}
else if(ss===0 && (se===0 || se == fullText.length) ){
endText = fullText;
}
else if(se==ss && ss>0){
frontText = fullText.substring(0, ss);
endText = fullText.substring(se, fullText.length);
if(!( fullText.charAt(ss-1).match(/\W/gi) || fullText.charAt(ss).match(/\W/gi) )){
var m = frontText.match(/\W/gi);
if(m){
ss = frontText.lastIndexOf(m[m.length-1])+1;
}
else{
ss = 0;
}
m = endText.match(/\W/gi);
if(m){
se += endText.indexOf(m[0]);
}
else{
se = fullText.length;
}
frontText = fullText.substring(0, ss);
endText = fullText.substring(se, fullText.length);
selText = fullText.substring(ss,se);
}
}
if(selText.length>0){
repText = repText.replace('user_text', selText);
}
if(repText.indexOf('user_text')>=0 && this.hint){
repText = repText.replace('user_text', this.hint);
}
editor.value = frontText + repText + endText;
editor.selectionStart = ss;
editor.selectionEnd = ss + repText.length;
editor.scrollTop = st;
editor.focus();
}
function wikibar_editFormatByCursor(param){
var editor = param.button.editor;
var params = param.params;
clearMessage();
if(!editor){ return; }
var repText = wikibar_processSyntaxParams(this.syntax, params);
if(repText===null){ return; }
var st = editor.scrollTop;
var ss = editor.selectionStart;
var se = editor.selectionEnd;
var frontText= '';
var endText = '';
var fullText = editor.value;
if(se>ss && ss>=0){
frontText = fullText.substring(0, ss);
endText = fullText.substring(se, fullText.length);
}
else if(ss===0 && (se===0 || se == fullText.length) ){
endText = fullText;
}
else if(se==ss && ss>0){
frontText = fullText.substring(0, ss);
endText = fullText.substring(se, fullText.length);
}
if(repText.indexOf('user_text')>=0 && this.hint){
repText = repText.replace('user_text', this.hint);
}
editor.value = frontText + repText + endText;
editor.selectionStart = ss;
editor.selectionEnd = ss + repText.length;
editor.scrollTop = st;
editor.focus();
}
function wikibar_editFormatByLine(param){
var editor = param.button.editor;
var params = param.params;
clearMessage();
if(!editor){ return; }
var repText = wikibar_processSyntaxParams(this.syntax, params);
if(repText===null){ return; }
var st = editor.scrollTop;
var ss = editor.selectionStart;
var se = editor.selectionEnd;
var frontText= '';
var selText = '';
var endText = '';
var fullText = editor.value;
if(se>ss && ss>=0){
if(this.byBlock){
frontText = fullText.substring(0, ss);
selText = fullText.substring(ss,se);
endText = fullText.substring(se, fullText.length);
}
else{
se = ss;
}
}
if(ss===0 && (se===0 || se == fullText.length) ){
var m=fullText.match(/(\n|\r)/g);
if(m){
se = fullText.indexOf(m[0]);
}else{
se = fullText.length;
}
selText = fullText.substring(0, se);
endText = fullText.substring(se, fullText.length);
}
else if(se==ss && ss>0){
frontText = fullText.substring(0, ss);
endText = fullText.substring(se, fullText.length);
m = frontText.match(/(\n|\r)/g);
if(m){
ss = frontText.lastIndexOf(m[m.length-1])+1;
}
else{
ss = 0;
}
m = endText.match(/(\n|\r)/g);
if(m){
se += endText.indexOf(m[0]);
}
else{
se = fullText.length;
}
frontText = fullText.substring(0, ss);
selText = fullText.substring(ss,se);
endText = fullText.substring(se, fullText.length);
}
if(selText.length>0){
repText = repText.replace('user_text', selText);
}
if(repText.indexOf('user_text')>=0 && this.hint){
repText = repText.replace('user_text', this.hint);
}
if(this.byBlock){
if( (frontText.charAt(frontText.length-1)!='\n') && ss>0 ){
repText = '\n' + repText;
}
if( (endText.charAt(0)!='\n') || se==fullText.length){
repText += '\n';
}
}
editor.value = frontText + repText + endText;
editor.selectionStart = ss;
editor.selectionEnd = ss + repText.length;
editor.scrollTop = st;
editor.focus();
}
function wikibar_editFormatByTableCell(param){
var editor = param.button.editor;
var params = param.params;
clearMessage();
if(!editor){ return; }
var repText = wikibar_processSyntaxParams(this.syntax, params);
if(repText===null){ return; }
var st = editor.scrollTop;
var ss = editor.selectionStart;
var se = editor.selectionEnd;
var frontText= '';
var selText = '';
var endText = '';
var fullText = editor.value;
if(ss===0 || ss==fullText.length){
throw 'not valid cell!';
}
se=ss;
frontText = fullText.substring(0, ss);
endText = fullText.substring(se, fullText.length);
i=frontText.lastIndexOf('\n');
j=frontText.lastIndexOf('|');
if(i>j || j<0){
throw 'not valid cell!';
}
ss = j+1;
i=endText.indexOf('\n');
j=endText.indexOf('|');
if(i<j || j<0){
throw 'not valid cell!';
}
se += j;
frontText = fullText.substring(0, ss-1);
selText = fullText.substring(ss,se);
endText = fullText.substring(se+1, fullText.length);
if(this.key.substring(0,5)=='align'){
selText = selText.trim();
if( selText=='>' || selText=='~' || selText.substring(0,8)=='bgcolor(') {return; }
}
if(selText.length>0){
repText = repText.replace('user_text', selText);
}
if(repText.indexOf('user_text')>=0 && this.hint){
repText = repText.replace('user_text', this.hint);
}
editor.value = frontText + repText + endText;
editor.selectionStart = ss;
editor.selectionEnd = ss + repText.length - 2;
editor.scrollTop = st;
editor.focus();
}
function wikibar_editSelectAll(param){
var editor = param.button.editor;
editor.selectionStart = 0;
editor.selectionEnd = editor.value.length;
editor.scrollTop = 0;
editor.focus();
}
function wikibar_doPreview(param){
var theButton = param.button;
var editor = param.button.editor;
var wikibar = theButton.parentNode;
if(!wikibar) { return; }
title = theButton.tiddlerTitle;
var editorWrapper = wikibar_resolveTiddlerEditorWrapper(editor);
var tiddlerWrapper = editorWrapper.parentNode;
var previewer = document.getElementById('previewer'+title);
if(previewer){
previewer.parentNode.removeChild(previewer);
editorWrapper.style.display = 'block';
visible=true;
}else{
previewer = document.createElement('div');
previewer.id = 'previewer'+title;
previewer.className = 'viewer previewer';
previewer.style.height = (editor.offsetHeight) + 'px';
wikify(editor.value, previewer);
tiddlerWrapper.insertBefore(previewer, editorWrapper);
editorWrapper.style.display = 'none';
visible=false;
}
var pv=null;
for(var i=0; i<wikibar.childNodes.length; i++){
try{
var btn = wikibar.childNodes[i];
if(btn.toolItem.key == 'preview'){ pv=btn; }
if(btn.toolItem.key != 'preview'){
btn.style.display = visible ? '': 'none';
}
}catch(ex){}
}
if(!pv) { return; }
if(visible){
pv.innerHTML = '<font face=\"verdana\">∞</font>';
pv.title = 'preview current tiddler';
}
else{
pv.innerHTML = '<font face=\"verdana\">←</font>';
pv.title = 'back to editor';
}
}
function wikibar_doListAddons(param){
clearMessage();
var title = param.button.tiddlerTitle;
var wikibarButton = document.getElementById('wikibarButton'+title);
var ok=0, fail=0;
for(var i=0; i<wikibarButton.addons.length; i++){
var addon=wikibarButton.addons[i];
if(addon.ok){
displayMessage('[ o ] '+addon.name);
ok++;
}
else{
displayMessage('[ x ] '+addon.name + ': ' + addon.error);
fail++;
}
}
displayMessage('---------------------------------');
displayMessage(ok + ' ok ; ' + fail + ' failed');
}
function wikibar_getColorCode(param){
var cbOnPickColor = function(colorCode, param){
param.params = colorCode;
param.button.toolItem.doMore(param);
};
wikibarColorTool.openColorPicker(param.button, cbOnPickColor, param);
}
function wikibar_getLinkUrl(param){
var url= prompt('Please enter the link target', (this.param? this.param : ''));
if (url && url.trim().length>0){
param.params = url;
this.doMore(param);
}
}
function wikibar_getTableRowCol(param){
var rc= prompt('Please enter (rows x cols) of the table', '2 x 3');
if (!rc || (rc.trim()).length<=0){ return; }
var arr = rc.toUpperCase().split('X');
if(arr.length != 2) { return; }
for(var i=0; i<arr.length; i++){
if(isNaN(arr[i].trim())) { return; }
}
var rows = parseInt(arr[0].trim(), 10);
var cols = parseInt(arr[1].trim(), 10);
var txtTable='';
for(var r=0; r<rows; r++){
for(var c=0; c<=cols; c++){
if(c===0){
txtTable += '|';
}else{
txtTable += ' |';
}
}
txtTable += '\n';
}
if(txtTable.trim().length>0){
param.params = txtTable.trim();
this.doMore(param);
}
}
function wikibar_getMacroParam(param){
var p = prompt('Please enter the parameters of macro \"' + this.key + '\":' +
'\nSyntax: ' + this.syntax +
'\n\nNote: '+
'\n%1,%2,... - parameter needed'+
'\n[%1] - optional parameter'+
'\n%N - more than one parameter(1~n)'+
'\n[%N] - any number of parameters(0~n)'+
'\n\nPS:'+
'\n1. Parameters should be seperated with space character'+
'\n2. Use \" to wrap the parameter that includes space character, ex: \"hello world\"'+
'\n3. Input the word(null) for the optional parameter ignored',
(this.param? this.param : '') );
if(!p) { return; }
p=p.readMacroParams();
for(var i=0; i<p.length; i++){
var s=p[i].trim();
if(s.indexOf(' ')>0){ p[i]="'"+s+"'"; }
if(s.toLowerCase()=='null'){ p[i]=null; }
}
param.params = p;
this.doMore(param);
}
function wikibar_getMorePalette(unused){
clearMessage();
displayMessage('Get more color palettes(*.gpl) from ColorZilla Palettes site', 'http:\/\/www.iosart.com/firefox/colorzilla/palettes.html');
displayMessage('Save it as a new tiddler with \"ColorPalettes\" tag');
}
function wikibar_createWikibar(title){
var theWikibar = document.getElementById('wikibar' + title);
if(theWikibar){
if(theWikibar.hasChildNodes()){
theWikibar.style.display = (theWikibar.style.display=='block'? 'none':'block');
return;
}
}
var tiddlerWrapper = document.getElementById('tiddler'+title);
var theTextarea = wikibar_resolveTiddlerEditor(tiddlerWrapper);
if(!theTextarea){
clearMessage();
displayMessage('WikiBar only works in tiddler edit mode now');
return;
}else{
if(!theTextarea.id){ theTextarea.id = 'editor'+title; }
if(!theTextarea.parentNode.id){ theTextarea.parentNode.id='editorWrapper'+title; }
}
if(theWikibar){
theWikibar = document.getElementById('wikibar'+title);
}else{
var editorWrapper = wikibar_resolveTiddlerEditorWrapper(theTextarea);
theWikibar = createTiddlyElement(tiddlerWrapper, 'div', 'wikibar'+title, 'toolbar');
addClass(theWikibar, 'wikibar');
var previewer = document.getElementById('previewer'+title);
if(previewer){
tiddlerWrapper.insertBefore(theWikibar, previewer);
}else{
tiddlerWrapper.insertBefore(theWikibar, editorWrapper);
}
}
wikibar_createMenu(theWikibar,wikibarStore,title,theTextarea);
if(config.options['chkWikibarSetEditorHeight'] && config.options['txtWikibarEditorRows']){
theTextarea.rows = config.options['txtWikibarEditorRows'];
}
setStylesheet(
'.wikibar{text-align:left;visibility:visible;margin:2px;padding:1px;}.previewer{overflow:auto;display:block;border:1px solid;}#colorPicker{position:absolute;display:none;z-index:10;margin:0px;padding:0px;}#colorPicker table{margin:0px;padding:0px;border:2px solid #000;border-spacing:0px;border-collapse:collapse;}#colorPicker td{margin:0px;padding:0px;border:1px solid;font-size:11px;text-align:center;cursor:auto;}#colorPicker .header{background-color:#fff;}#colorPicker .button{background-color:#fff;cursor:pointer;}#colorPicker .button:hover{padding-top:3px;padding-bottom:3px;color:#fff;background-color:#136;}#colorPicker .cell{padding:4px;font-size:7px;}#colorPicker .cell:hover{padding:10px;}.wikibarPopup{position:absolute;z-index:10;border:1px solid #014;color:#014;background-color:#cef;}.wikibarPopup table{margin:0;padding:0;border:0;border-spacing:0;border-collapse:collapse;}.wikibarPopup .button:hover{color:#eee;background-color:#014;}.wikibarPopup .disabled{color:#888;}.wikibarPopup .disabled:hover{color:#888;background-color:#cef;}.wikibarPopup tr .seperator hr{margin:0;padding:0;background-color:#cef;width:100%;border:0;border-top:1px dashed #014;}.wikibarPopup tr .icon{font-family:verdana;font-weight:bolder;}.wikibarPopup tr .marker{font-family:verdana;font-weight:bolder;}.wikibarPopup td{font-size:0.9em;padding:2px;}.wikibarPopup input{border:0;border-bottom:1px solid #014;margin:0;padding:0;font-family:arial;font-size:100%;background-color:#fff;}',
'WikiBarStyleSheet');
}
function wikibar_createMenu(place,toolset,title,editor){
if(!wikibar_isValidMenuItem(toolset)){return;}
if(!(toolset.TYPE=='MAIN_MENU' || toolset.TYPE=='MENU')){ return; }
for(var key in toolset){
if(key.substring(0,9)=='SEPERATOR'){
wikibar_createMenuSeperator(place);
continue;
}
if(key.substring(0,8)=='DYNAITEM'){
var dynaTools = toolset[key](title,editor);
if(dynaTools.TYPE && dynaTools.TYPE=='MENU'){
wikibar_createMenuItem(place,dynaTools,null,editor,title);
}else{
dynaTools.TYPE = 'MENU';
wikibar_createMenu(place, dynaTools, title, editor);
}
continue;
}
if((toolset[key].TYPE!='MENU' && toolset[key].TYPE!='MAIN_MENU') && !toolset[key].HANDLER){continue;}
wikibar_createMenuItem(place,toolset,key,editor,title);
}
}
function wikibar_createMenuItem(place,toolset,key,editor,title){
if(!key){
var tool = toolset;
}else{
tool = toolset[key];
tool.key = key;
}
if(!wikibar_isValidMenuItem(tool)){return;}
var toolIsOnMainMenu = (toolset.TYPE=='MAIN_MENU');
var toolIsMenu = (tool.TYPE=='MENU');
var theButton;
if(toolIsOnMainMenu){
theButton = createTiddlyButton(
place,
'',
(tool.TOOLTIP? tool.TOOLTIP : ''),
(toolIsMenu? wikibar_onClickMenuItem : wikibar_onClickItem),
'button');
theButton.innerHTML = (tool.CAPTION? tool.CAPTION : key);
theButton.isOnMainMenu = true;
addClass(theButton, (toolIsMenu? 'menu' : 'item'));
place.appendChild( document.createTextNode('\n') );
if(!toolIsMenu){
if(config.options['chkWikibarPopmenuOnMouseOver']){
theButton.onmouseover = function(e){ wikibarPopup.remove(); };
}
}
}else{
theButton=createTiddlyElement(place, 'tr',key,'button');
theButton.title = (tool.TOOLTIP? tool.TOOLTIP : '');
theButton.onclick = (toolIsMenu? wikibar_onClickMenuItem : wikibar_onClickItem);
var tdL = createTiddlyElement(theButton, 'td','','marker');
var td = createTiddlyElement(theButton, 'td');
var tdR = createTiddlyElement(theButton, 'td','','marker');
td.innerHTML = (tool.CAPTION? tool.CAPTION : key);
if(toolIsMenu){
tdR.innerHTML=' ›';
}
if(tool.SELECTED){
tdL.innerHTML = '√ ';
addClass(theButton, 'selected');
}
if(tool.DISABLED){
addClass(theButton, 'disabled');
}
}
theButton.tiddlerTitle = title;
theButton.toolItem = tool;
theButton.editor = editor;
theButton.tabIndex = 999;
if(toolIsMenu){
if(config.options['chkWikibarPopmenuOnMouseOver']){
theButton.onmouseover = wikibar_onClickMenuItem;
}
}
}
function wikibar_createMenuSeperator(place){
if(place.id.substring(0,7)=='wikibar') { return; }
var onclickSeperator=function(e){
if(!e){ e = window.event; }
e.cancelBubble = true;
if (e.stopPropagation){ e.stopPropagation(); }
return(false);
};
var theButton=createTiddlyElement(place,'tr','','seperator');
var td = createTiddlyElement(theButton, 'td','','seperator');
td.colSpan=3;
theButton.onclick=onclickSeperator;
td.innerHTML = '<hr>';
}
function wikibar_genWikibarAbout(){
var toolset={};
toolset.version = {
CAPTION: '<center>WikiBar ' +
config.macros.wikibar.major + '.' +
config.macros.wikibar.minor + '.' +
config.macros.wikibar.revision +
(config.macros.wikibar.beta? ' beta '+config.macros.wikibar.beta : '') +
'</center>',
HANDLER: function(){}
};
toolset.SEPERATOR = {};
toolset.author = {
CAPTION: '<center>Arphen Lin<br>arphenlin@gmail.com</center>',
TOOLTIP: 'send mail to the author',
HANDLER: function(){ window.open('mailto:arphenlin@gmail.com'); }
};
toolset.website = {
CAPTION: '<center>aiddlywiki.sourceforge.net</center>',
TOOLTIP: 'go to the web site of WikiBar',
HANDLER: function(){ window.open('http:\/\/aiddlywiki.sourceforge.net/'); }
};
return toolset;
}
function wikibar_genWikibarOptions(title, editor){
var toolset={};
toolset.popOnMouseOver = {
CAPTION:'popup menu on mouse over',
SELECTED: config.options['chkWikibarPopmenuOnMouseOver'],
HANDLER: function(param){
config.options['chkWikibarPopmenuOnMouseOver'] = !config.options['chkWikibarPopmenuOnMouseOver'];
saveOptionCookie('chkWikibarPopmenuOnMouseOver');
var title = param.button.tiddlerTitle;
var wikibar = document.getElementById('wikibar'+title);
if(wikibar){ wikibar.parentNode.removeChild(wikibar); }
wikibar_createWikibar(title);
}
};
toolset.setEditorSize = {
CAPTION:'set editor height: <input id=\"txtWikibarEditorRows\" type=text size=1 MAXLENGTH=3 value=\"' +
(config.options['txtWikibarEditorRows']? config.options['txtWikibarEditorRows']:editor.rows) + '\"> ok',
HANDLER: function(param){
var input = document.getElementById('txtWikibarEditorRows');
if(input){
var rows = parseInt(input.value, 10);
if(!isNaN(rows)){
var editor = param.button.editor;
editor.rows = rows;
}else{
rows=config.maxEditRows;
}
config.options['txtWikibarEditorRows'] = rows;
saveOptionCookie('txtWikibarEditorRows');
config.maxEditRows = rows;
}
}
};
toolset.setEditorSizeOnLoadingWikibar = {
CAPTION:'set editor height on loading wikibar',
SELECTED: config.options['chkWikibarSetEditorHeight'],
HANDLER: function(param){
config.options['chkWikibarSetEditorHeight'] = !config.options['chkWikibarSetEditorHeight'];
saveOptionCookie('chkWikibarSetEditorHeight');
if(config.options['chkWikibarSetEditorHeight']){
var rows = config.options['txtWikibarEditorRows'];
if(!isNaN(rows)){ rows = 15; }
var editor = param.button.editor;
editor.rows = rows;
config.options['txtWikibarEditorRows'] = rows;
saveOptionCookie('txtWikibarEditorRows');
}
}
};
toolset.SEPERATOR = {};
toolset.update = {
CAPTION: 'check for updates',
DISABLED: true,
HANDLER: function(){}
};
return toolset;
}
function wikibar_genPaletteSelector(){
try{
var cpTiddlers = store.getTaggedTiddlers('ColorPalettes');
if(!cpTiddlers) { return; }
var palettes=[];
palettes.push(wikibarColorTool.defaultPaletteName);
for(var i=0; i<cpTiddlers.length; i++){
palettes.push(cpTiddlers[i].title.trim());
}
var toolset={};
for(i=0; i<palettes.length; i++){
toolset[palettes[i]] = {
TOOLTIP: palettes[i],
SELECTED: (palettes[i]==wikibarColorTool.paletteName),
HANDLER: wikibar_doSelectPalette
};
}
return toolset;
}catch(ex){ return null; }
}
function wikibar_onClickItem(e){
if(!e){ e = window.event; }
var theTarget = resolveTarget(e);
if(theTarget.tagName=='INPUT'){
e.cancelBubble = true;
if (e.stopPropagation){ e.stopPropagation(); }
return;
}
var theButton = wikibar_resolveTargetButton(theTarget);
if(!theButton){ return(false); }
var o = theButton.toolItem;
if(!o) { return; }
var param = {
event: e,
button: theButton
};
if(o.HANDLER){ o.HANDLER(param); }
if(o.DISABLED){
e.cancelBubble = true;
if (e.stopPropagation){ e.stopPropagation(); }
}
return(false);
}
function wikibar_onClickMenuItem(e){
if(!e){ e = window.event; }
var theButton = wikibar_resolveTargetButton(resolveTarget(e));
if(!theButton){ return(false); }
e.cancelBubble = true;
if (e.stopPropagation){ e.stopPropagation(); }
var title = theButton.tiddlerTitle;
var editor = theButton.editor;
var tool = theButton.toolItem;
if(!tool) { return; }
var popup = wikibarPopup.create(this);
if(popup){
wikibar_createMenu(popup,tool,title,editor);
if(!popup.hasChildNodes()){
wikibarPopup.remove();
}else{
wikibarPopup.show(popup, false);
}
}
return(false);
}
var wikibarColorTool = {
defaultPaletteName : 'default',
defaultColumns : 16,
defaultPalette : [
'#FFF','#DDD','#CCC','#BBB','#AAA','#999','#666','#333','#111','#000','#FC0','#F90','#F60','#F30','#C30','#C03',
'#9C0','#9D0','#9E0','#E90','#D90','#C90','#FC3','#FC6','#F96','#F63','#600','#900','#C00','#F00','#F36','#F03',
'#CF0','#CF3','#330','#660','#990','#CC0','#FF0','#C93','#C63','#300','#933','#C33','#F33','#C36','#F69','#F06',
'#9F0','#CF6','#9C3','#663','#993','#CC3','#FF3','#960','#930','#633','#C66','#F66','#903','#C39','#F6C','#F09',
'#6F0','#9F6','#6C3','#690','#996','#CC6','#FF6','#963','#630','#966','#F99','#F39','#C06','#906','#F3C','#F0C',
'#3F0','#6F3','#390','#6C0','#9F3','#CC9','#FF9','#C96','#C60','#C99','#F9C','#C69','#936','#603','#C09','#303',
'#0C0','#3C0','#360','#693','#9C6','#CF9','#FFC','#FC9','#F93','#FCC','#C9C','#969','#939','#909','#636','#606',
'#060','#3C3','#6C6','#0F0','#3F3','#6F6','#9F9','#CFC','#9CF','#FCF','#F9F','#F6F','#F3F','#F0F','#C6C','#C3C',
'#030','#363','#090','#393','#696','#9C9','#CFF','#39F','#69C','#CCF','#C9F','#96C','#639','#306','#90C','#C0C',
'#0F3','#0C3','#063','#396','#6C9','#9FC','#9CC','#06C','#369','#99F','#99C','#93F','#60C','#609','#C3F','#C0F',
'#0F6','#3F6','#093','#0C6','#3F9','#9FF','#699','#036','#039','#66F','#66C','#669','#309','#93C','#C6F','#90F',
'#0F9','#6F9','#3C6','#096','#6FF','#6CC','#366','#069','#36C','#33F','#33C','#339','#336','#63C','#96F','#60F',
'#0FC','#6FC','#3C9','#3FF','#3CC','#399','#033','#39C','#69F','#00F','#00C','#009','#006','#003','#63F','#30F',
'#0C9','#3FC','#0FF','#0CC','#099','#066','#3CF','#6CF','#09C','#36F','#0CF','#09F','#06F','#03F','#03C','#30C'
],
colorPicker : null,
pickColorHandler: null,
userData: null
};
wikibarColorTool.paletteName = wikibarColorTool.defaultPaletteName;
wikibarColorTool.columns = wikibarColorTool.defaultColumns;
wikibarColorTool.palette = wikibarColorTool.defaultPalette;
wikibarColorTool.onPickColor = function(e){
if (!e){ e = window.event; }
var theCell = resolveTarget(e);
if(!theCell){ return(false); }
color = theCell.bgColor.toLowerCase();
if(!color) { return; }
wikibarColorTool.displayColorPicker(false);
if(wikibarColorTool.pickColorHandler){
wikibarColorTool.pickColorHandler(color, wikibarColorTool.userData);
}
return(false);
};
wikibarColorTool.onMouseOver = function(e){
if (!e){ e = window.event; }
var theButton = resolveTarget(e);
if(!theButton){ return(false); }
if(!wikibarColorTool) { return; }
color = theButton.bgColor.toUpperCase();
if(!color) { return; }
td=document.getElementById('colorPickerInfo');
if(!td) { return; }
td.bgColor = color;
td.innerHTML = '<span style=\"color:#000;\">'+color+'</span> ' +
'<span style=\"color:#fff;\">'+color+'</span>';
e.cancelBubble = true;
if (e.stopPropagation){ e.stopPropagation(); }
return(false);
};
wikibarColorTool.openColorPicker = function(theTarget, pickColorHandler, userData){
wikibarColorTool.skipClickDocumentEvent = true;
wikibarColorTool.pickColorHandler = pickColorHandler;
wikibarColorTool.userData = userData;
wikibarColorTool.moveColorPicker(theTarget);
};
wikibarColorTool.convert3to6HexColor = function(c){
c=c.trim();
var rx=/^\#(\d|[a-f])(\d|[a-f])(\d|[a-f])$/gi;
return (rx.test(c)? c.replace(rx, '#$1$1$2$2$3$3') : c);
};
wikibarColorTool.numToHexColor = function (n){
if(typeof(n)=='number' && (n>=0 && n<=255)) {
s = n.toString(16).toLowerCase();
return ((s.length==1)? '0'+s : s);
}else{
return null;
}
};
wikibarColorTool.renderColorPalette = function(){
if(wikibarColorTool.paletteName==wikibarColorTool.defaultPaletteName){
wikibarColorTool.palette=wikibarColorTool.defaultPalette;
wikibarColorTool.columns=wikibarColorTool.defaultColumns;
return;
}
tiddlerText = (store.getTiddlerText(wikibarColorTool.paletteName, '')).trim();
if(tiddlerText.length<=0) { return; }
var cpContents = tiddlerText.split('\n');
var colors=[];
columns = wikibarColorTool.defaultColumns;
var tmpArray=null;
errCount=0;
for(var i=0; i<cpContents.length; i++){
cpLine=cpContents[i].trim();
if( (!cpLine) || (cpLine.length<=0) || (cpLine.charAt(0) == '#') ){ continue; }
if(cpLine.substring(0,8).toLowerCase()=='columns:'){
tmpArray = cpLine.split(':');
try{
columns = parseInt(tmpArray[1],10);
}catch(ex){
columns = wikibarColorTool.defaultColumns;
}
}else{
tmpArray = cpLine.replace('\t', ' ').split(/[ ]{1,}/);
try{
color='';
for(var j=0; j<3; j++){
c=parseInt(tmpArray[j].trim(), 10);
if(isNaN(c)){
break;
}else{
c=wikibarColorTool.numToHexColor(c);
if(!c) {break;}
color+=c;
}
}
if(color.length==6){
colors.push('#'+color);
} else {
throw 'error';
}
}catch(ex){
}
}
}
if(colors.length>0){
wikibarColorTool.palette = colors;
wikibarColorTool.columns = columns;
}else{
throw 'renderColorPalette(): No color defined in the palette.';
}
};
wikibarColorTool.displayColorPicker = function(visible){
if(wikibarColorTool.colorPicker){
wikibarColorTool.colorPicker.style.display = (visible? 'block' : 'none');
}
};
wikibarColorTool.moveColorPicker = function(theTarget){
if(!wikibarColorTool.colorPicker){
wikibarColorTool.createColorPicker();
}
var cp = wikibarColorTool.colorPicker;
var rootLeft = findPosX(theTarget);
var rootTop = findPosY(theTarget);
var popupLeft = rootLeft;
var popupTop = rootTop;
var popupWidth = cp.offsetWidth;
var winWidth = findWindowWidth();
if(popupLeft + popupWidth > winWidth){
popupLeft = winWidth - popupWidth;
}
cp.style.left = popupLeft + 'px';
cp.style.top = popupTop + 'px';
wikibarColorTool.displayColorPicker(true);
};
wikibarColorTool.createColorPicker = function(unused, palette){
if(palette){ wikibarColorTool.paletteName=palette; }
wikibarColorTool.renderColorPalette();
wikibarColorTool.colorPicker = document.createElement('div');
wikibarColorTool.colorPicker.id = 'colorPicker';
document.body.appendChild(wikibarColorTool.colorPicker);
var theTable = document.createElement('table');
wikibarColorTool.colorPicker.appendChild(theTable);
var theTR = document.createElement('tr');
theTable.appendChild(theTR);
var theTD = document.createElement('td');
theTD.className = 'header';
theTD.colSpan = wikibarColorTool.columns;
theTD.innerHTML = wikibarColorTool.paletteName;
theTR.appendChild(theTD);
for(var i=0; i<wikibarColorTool.palette.length; i++){
if((i%wikibarColorTool.columns)===0){
theTR = document.createElement('tr');
theTable.appendChild(theTR);
}
theTD = document.createElement('td');
theTD.className = 'cell';
theTD.bgColor = wikibarColorTool.convert3to6HexColor(wikibarColorTool.palette[i]);
theTD.onclick = wikibarColorTool.onPickColor;
theTD.onmouseover = wikibarColorTool.onMouseOver;
theTR.appendChild(theTD);
}
rest = wikibarColorTool.palette.length % wikibarColorTool.columns;
if(rest>0){
theTD = document.createElement('td');
theTD.colSpan = wikibarColorTool.columns-rest;
theTD.bgColor = '#000000';
theTR.appendChild(theTD);
}
theTR = document.createElement('tr');
theTable.appendChild(theTR);
theTD = document.createElement('td');
theTD.colSpan = wikibarColorTool.columns;
theTD.id = 'colorPickerInfo';
theTR.appendChild(theTD);
};
wikibarColorTool.onDocumentClick = function(e){
if (!e){ e = window.event; }
if(wikibarColorTool.skipClickDocumentEvent) {
wikibarColorTool.skipClickDocumentEvent = false;
return true;
}
if((!e.eventPhase) || e.eventPhase == Event.BUBBLING_PHASE || e.eventPhase == Event.AT_TARGET){
wikibarColorTool.displayColorPicker(false);
}
return true;
};
function wikibar_doSelectPalette(param){
clearMessage();
var theButton = param.button;
if(!theButton.toolItem.key) { return; }
var palette = theButton.toolItem.key;
var oldPaletteName = wikibarColorTool.paletteName;
if(oldPaletteName != palette){
try{
wikibarColorTool.createColorPicker(theButton, palette);
displayMessage('Palette \"'+palette+'\" ('+ wikibarColorTool.palette.length +' colors) is selected');
}catch(ex){
errMsg = ex;
if(errMsg.substring(0,18)=='renderColorPalette'){
displayMessage('Invalid palette \"' + palette + '\", please check it out!');
wikibarColorTool.createColorPicker(theButton, oldPaletteName);
}
}
}
}
var wikibarPopup = {
skipClickDocumentEvent: false,
stack: []
};
wikibarPopup.resolveRootPopup = function(o){
if(o.isOnMainMenu){ return null; }
if(o.className.substring(0,12)=='wikibarPopup'){ return o;}
return wikibarPopup.resolveRootPopup(o.parentNode);
};
wikibarPopup.create = function(root){
for(var i=0; i<wikibarPopup.stack.length; i++){
var p=wikibarPopup.stack[i];
if(p.root==root){
wikibarPopup.removeFrom(i+1);
return null;
}
}
var rootPopup = wikibarPopup.resolveRootPopup(root);
if(!rootPopup){
wikibarPopup.remove();
}else{
wikibarPopup.removeFromRootPopup(rootPopup);
}
var popup = createTiddlyElement(document.body,'div','wikibarPopup'+root.toolItem.key,'wikibarPopup');
var pop = createTiddlyElement(popup,'table','','');
wikibarPopup.stack.push({rootPopup: rootPopup, root: root, popup: popup});
return pop;
};
wikibarPopup.show = function(unused,slowly){
var curr = wikibarPopup.stack[wikibarPopup.stack.length-1];
var overlayWidth = 1;
var rootLeft, rootTop, rootWidth, rootHeight, popupLeft, popupTop, popupWidth;
if(curr.rootPopup){
rootLeft = findPosX(curr.rootPopup);
rootTop = findPosY(curr.root);
rootWidth = curr.rootPopup.offsetWidth;
popupLeft = rootLeft + rootWidth - overlayWidth;
popupTop = rootTop;
}else{
rootLeft = findPosX(curr.root);
rootTop = findPosY(curr.root);
rootHeight = curr.root.offsetHeight;
popupLeft = rootLeft;
popupTop = rootTop + rootHeight;
}
var winWidth = findWindowWidth();
popupWidth = curr.popup.offsetWidth;
if(popupLeft + popupWidth > winWidth){
popupLeft = rootLeft - popupWidth + overlayWidth;
}
curr.popup.style.left = popupLeft + 'px';
curr.popup.style.top = popupTop + 'px';
curr.popup.style.display = 'block';
addClass(curr.root, 'highlight');
if(config.options.chkAnimate){
anim.startAnimating(new Scroller(curr.popup,slowly));
}else{
window.scrollTo(0,ensureVisible(curr.popup));
}
};
wikibarPopup.remove = function(){
if(wikibarPopup.stack.length > 0){
wikibarPopup.removeFrom(0);
}
};
wikibarPopup.removeFrom = function(from){
for(var t=wikibarPopup.stack.length-1; t>=from; t--){
var p = wikibarPopup.stack[t];
removeClass(p.root,'highlight');
p.popup.parentNode.removeChild(p.popup);
}
wikibarPopup.stack = wikibarPopup.stack.slice(0,from);
};
wikibarPopup.removeFromRootPopup = function(from){
for(var t=0; t<wikibarPopup.stack.length; t++){
var p = wikibarPopup.stack[t];
if(p.rootPopup==from){
wikibarPopup.removeFrom(t);
break;
}
}
};
wikibarPopup.onDocumentClick = function(e){
if (!e){ e = window.event; }
if(wikibarPopup.skipClickDocumentEvent){
wikibarPopup.skipClickDocumentEvent=false;
return true;
}
if((!e.eventPhase) || e.eventPhase == Event.BUBBLING_PHASE || e.eventPhase == Event.AT_TARGET){
wikibarPopup.remove();
}
return true;
};
var wikibarStore = {
TYPE: 'MAIN_MENU',
help:{
TYPE:'MENU',
CAPTION: '<font face=\"verdana\">?</font>',
TOOLTIP: 'about WikiBar',
options:{
TYPE:'MENU',
DYNAITEM: wikibar_genWikibarOptions
},
about:{
TYPE:'MENU',
DYNAITEM: wikibar_genWikibarAbout
}
},
preview:{
TOOLTIP: 'preview this tiddler',
CAPTION: '<font face=\"verdana\">∞</font>',
HANDLER: wikibar_doPreview
},
Pix:{
TOOLTIP: 'Picasa Pix',
CAPTION: '<font face=\"verdana\">Picasa</font>',
syntax: '\n<<tiddler PicasaJqueryincl>>\n',
HANDLER: wikibar_editFormatByCursor
},
Popup:{
TOOLTIP: 'external Modal',
CAPTION: '<font face=\"verdana\">ColorBox</font>',
syntax: '\n<<tiddler ColorBoxInclude>>\n',
HANDLER: wikibar_editFormatByCursor
},
line:{
TOOLTIP: 'horizontal line',
CAPTION: '<font face=\"verdana\">—</font>',
syntax: '\n---\n',
HANDLER: wikibar_editFormatByCursor
},
crlf:{
TOOLTIP: 'new line',
CAPTION: '<font face=\"verdana\">¶</font>',
syntax: '\n',
HANDLER: wikibar_editFormatByCursor
},
selectAll:{
TOOLTIP: 'select all',
CAPTION: '<font face=\"verdana\">§</font>',
HANDLER: wikibar_editSelectAll
},
deleteSelected:{
TOOLTIP: 'delete selected',
CAPTION: '<font face=\"verdana\">×</font>',
syntax: '',
HANDLER: wikibar_editFormat
},
textFormat:{
TYPE: 'MENU',
CAPTION: 'text',
TOOLTIP: 'text formatters',
ignore:{
TOOLTIP: 'ignore wiki word',
CAPTION: 'ignore wikiWord',
syntax: '~user_text',
hint: 'wiki_word',
HANDLER: wikibar_editFormatByWord
},
bolder:{
TOOLTIP: 'bolder text',
CAPTION: '<strong>bolder</strong>',
syntax: "''user_text''",
hint: 'bold_text',
HANDLER: wikibar_editFormatByWord
},
italic:{
TOOLTIP: 'italic text',
CAPTION: '<em>italic</em>',
syntax: '\/\/user_text\/\/',
hint: 'italic_text',
HANDLER: wikibar_editFormatByWord
},
underline:{
TOOLTIP: 'underline text',
CAPTION: '<u>underline</u>',
syntax: '__user_text__',
hint: 'underline_text',
HANDLER: wikibar_editFormatByWord
},
strikethrough:{
TOOLTIP: 'strikethrough text',
CAPTION: '<strike>strikethrough</strike>',
syntax: '==user_text==',
hint: 'strikethrough_text',
HANDLER: wikibar_editFormatByWord
},
superscript:{
TOOLTIP: 'superscript text',
CAPTION: 'X<sup>superscript</sup>',
syntax: '^^user_text^^',
hint: 'superscript_text',
HANDLER: wikibar_editFormatByWord
},
subscript:{
TOOLTIP: 'subscript text',
CAPTION: 'X<sub>subscript</sub>',
syntax: '~~user_text~~',
hint: 'subscript_text',
HANDLER: wikibar_editFormatByWord
},
comment:{
TOOLTIP: 'comment text',
CAPTION: 'comment text',
syntax: '/%user_text%/',
hint: 'comment_text',
HANDLER: wikibar_editFormatByWord
},
monospaced:{
TOOLTIP: 'monospaced text',
CAPTION: '<code>monospaced</code>',
syntax: '{{{user_text}}}',
hint: 'monospaced_text',
HANDLER: wikibar_editFormatByWord
}
},
paragraph:{
TYPE: 'MENU',
TOOLTIP: 'paragarph formatters',
list:{
TYPE: 'MENU',
TOOLTIP: 'list tools',
bullet:{
TOOLTIP: 'bullet point',
syntax: '*user_text',
hint: 'bullet_text',
HANDLER: wikibar_editFormatByLine
},
numbered:{
TOOLTIP: 'numbered list',
syntax: '#user_text',
hint: 'numbered_text',
HANDLER: wikibar_editFormatByLine
}
},
heading:{
TYPE: 'MENU',
heading1:{
CAPTION:'<h1>Heading 1</h1>',
TOOLTIP: 'Heading 1',
syntax: '!user_text',
hint: 'heading_1',
HANDLER: wikibar_editFormatByLine
},
heading2:{
CAPTION:'<h2>Heading 2<h2>',
TOOLTIP: 'Heading 2',
syntax: '!!user_text',
hint: 'heading_2',
HANDLER: wikibar_editFormatByLine
},
heading3:{
CAPTION:'<h3>Heading 3</h3>',
TOOLTIP: 'Heading 3',
syntax: '!!!user_text',
hint: 'heading_3',
HANDLER: wikibar_editFormatByLine
},
heading4:{
CAPTION:'<h4>Heading 4</h4>',
TOOLTIP: 'Heading 4',
syntax: '!!!!user_text',
hint: 'heading_4',
HANDLER: wikibar_editFormatByLine
},
heading5:{
CAPTION:'<h5>Heading 5</h5>',
TOOLTIP: 'Heading 5',
syntax: '!!!!!user_text',
hint: 'heading_5',
HANDLER: wikibar_editFormatByLine
}
},
comment:{
TYPE: 'MENU',
commentByLine:{
CAPTION:'comment by line',
TOOLTIP: 'line comment',
syntax: '/%user_text%/',
hint: 'comment_text',
HANDLER: wikibar_editFormatByLine
},
commentByBlock:{
CAPTION:'comment by block',
TOOLTIP: 'block comment',
syntax: '/%\nuser_text\n%/',
hint: 'comment_text',
byBlock: true,
HANDLER: wikibar_editFormatByLine
}
},
monospaced:{
TYPE: 'MENU',
monosByLine:{
CAPTION: 'monospaced by line',
TOOLTIP: 'line monospaced',
syntax: '{{{\nuser_text\n}}}',
hint: 'monospaced_text',
HANDLER: wikibar_editFormatByLine
},
monosByBlock:{
CAPTION: 'monospaced by block',
TOOLTIP: 'block monospaced',
syntax: '{{{\nuser_text\n}}}',
hint: 'monospaced_text',
byBlock: true,
HANDLER: wikibar_editFormatByLine
}
},
quote:{
TYPE: 'MENU',
quoteByLine:{
CAPTION: 'quote by line',
TOOLTIP: 'line quote',
syntax: '>user_text',
hint: 'quote_text',
HANDLER: wikibar_editFormatByLine
},
quoteByBlcok:{
CAPTION: 'quote by block',
TOOLTIP: 'block quote',
syntax: '<<<\nuser_text\n<<<',
hint: 'quote_text',
byBlock: true,
HANDLER: wikibar_editFormatByLine
}
},
plugin:{
TYPE: 'MENU',
code:{
CAPTION: 'code area',
TOOLTIP: 'block monospaced for plugin',
syntax: '\n\/\/{{{\nuser_text\n\/\/}}}\n',
hint: 'monospaced_plugin_code',
byBlock: true,
HANDLER: wikibar_editFormatByLine
},
commentByLine:{
CAPTION: 'comment by line',
TOOLTIP: 'line comment',
syntax: '\/\/user_text',
hint: 'plugin_comment',
HANDLER: wikibar_editFormatByLine
},
commentByBlock:{
CAPTION: 'comment by block',
TOOLTIP: 'block comment',
syntax: '\/\***\nuser_text\n***\/',
hint: 'plugin_comment',
byBlock: true,
HANDLER: wikibar_editFormatByLine
}
},
css:{
TYPE: 'MENU',
code:{
CAPTION: 'code area',
TOOLTIP: 'block monospaced for css',
syntax: '\n\nuser_text\n\n',
hint: 'monospaced_css_code',
byBlock: true,
HANDLER: wikibar_editFormatByLine
},
commentByLine:{
CAPTION: 'comment by line',
TOOLTIP: 'line comment',
syntax: '',
hint: 'css_comment',
HANDLER: wikibar_editFormatByLine
},
commentByBlock:{
CAPTION: 'comment by block',
TOOLTIP: 'block comment',
syntax: '',
hint: 'css_comment',
byBlock: true,
HANDLER: wikibar_editFormatByLine
}
}
},
color:{
TYPE: 'MENU',
TOOLTIP: 'color tools',
highlight:{
CAPTION:'highlight text',
TOOLTIP: 'highlight text',
syntax: '@@user_text@@',
hint: 'highlight_text',
HANDLER: wikibar_editFormatByWord
},
color:{
CAPTION:'text color',
TOOLTIP: 'text color',
hint: 'your_text',
syntax: '@@color(%1):user_text@@',
HANDLER: wikibar_getColorCode,
doMore: wikibar_editFormatByWord
},
bgcolor:{
CAPTION:'background color',
TOOLTIP: 'background color',
hint: 'your_text',
syntax: '@@bgcolor(%1):user_text@@',
HANDLER: wikibar_getColorCode,
doMore: wikibar_editFormatByWord
},
colorcode:{
CAPTION:'color code',
TOOLTIP: 'insert color code',
syntax: '%1',
HANDLER: wikibar_getColorCode,
doMore: wikibar_editFormatByCursor
},
'color palette':{
TYPE:'MENU',
DYNAITEM: wikibar_genPaletteSelector,
SEPERATOR:{},
morePalette:{
CAPTION:'more palettes',
TOOLTIP:'get more palettes',
HANDLER: wikibar_getMorePalette
}
}
},
link:{
TYPE: 'MENU',
TOOLTIP: 'insert link',
wiki:{
CAPTION:'wiki link',
TOOLTIP: 'wiki link',
syntax: '[[user_text]]',
hint: 'wiki_word',
HANDLER: wikibar_editFormatByWord
},
pretty:{
CAPTION: 'pretty link',
TOOLTIP: 'pretty link',
syntax: '[[user_text|%1]]',
hint: 'pretty_word',
param: 'PrettyLink Target',
HANDLER: wikibar_getLinkUrl,
doMore: wikibar_editFormatByWord
},
url:{
TOOLTIP: 'url link',
syntax: '[[user_text|%1]]',
hint: 'your_text',
param: 'http:\/\/...',
HANDLER: wikibar_getLinkUrl,
doMore: wikibar_editFormatByWord
},
image:{
TOOLTIP: 'image link',
syntax: '[img[user_text|%1]]',
hint: 'alt_text',
param: 'image/icon.jpg',
HANDLER: wikibar_getLinkUrl,
doMore: wikibar_editFormatByWord
}
},
macro:{},
more:{
TYPE: 'MENU',
TOOLTIP: 'more tools',
table:{
TYPE: 'MENU',
TOOLTIP: 'table',
table:{
CAPTION:'create table',
TOOLTIP: 'create a new table',
syntax: '\n%1\n',
HANDLER: wikibar_getTableRowCol,
doMore: wikibar_editFormatByWord
},
header:{
TOOLTIP: 'table header text',
syntax: '|user_text|c',
hint: 'table_header',
HANDLER: wikibar_editFormatByWord
},
cell:{
TOOLTIP: 'create a tabel cell',
syntax: '|user_text|',
hint: 'your_text',
HANDLER: wikibar_editFormatByWord
},
columnHeader:{
CAPTION:'column header',
TOOLTIP: 'create a column header cell',
syntax: '|!user_text|',
hint: 'column_header',
HANDLER: wikibar_editFormatByWord
},
cell:{
TYPE: 'MENU',
CAPTION: 'cell options',
bgcolor:{
CAPTION: 'background color',
TOOLTIP: 'cell bgcolor',
syntax: '|bgcolor(%1):user_text|',
hint: 'your_text',
HANDLER: wikibar_getColorCode,
doMore: wikibar_editFormatByTableCell
},
alignLeft:{
CAPTION: 'align left',
TOOLTIP: 'left align cell text',
syntax: '|user_text|',
hint: 'your_text',
HANDLER: wikibar_editFormatByTableCell
},
alignCenter:{
CAPTION: 'align center',
TOOLTIP: 'center align cell text',
syntax: '| user_text |',
hint: 'your_text',
HANDLER: wikibar_editFormatByTableCell
},
alignRight:{
CAPTION: 'align right',
TOOLTIP: 'right align cell text',
syntax: '| user_text|',
hint: 'your_text',
HANDLER: wikibar_editFormatByTableCell
}
}
},
html:{
TYPE: 'MENU',
html:{
CAPTION: '<html>',
TOOLTIP: 'html tag',
syntax: '<html>\nuser_text\n</html>',
hint: 'html_content',
byBlock: true,
HANDLER: wikibar_editFormatByLine
}
}
},
addon:{
TYPE: 'MENU',
TOOLTIP:'3rd party tools',
'about addons':{
TOOLTIP: 'list loaded addons',
HANDLER: wikibar_doListAddons
},
SEPERATOR:{}
}
};
addEvent(document, 'click', wikibarColorTool.onDocumentClick);
addEvent(document, 'click', wikibarPopup.onDocumentClick);
wikibar_install();
//}}}
Please use this for contact DK : @@bgcolor(#ffcc99):dialogistkantor@gmail.com@@
//{{{
// brscPicasa v1.1 - jQuery plugin for displaying photos from Google Picasa Web Albums.
// c) 2010-2011 Maciej 'barszcz' Marczewski - www.barszcz.info - maciej@marczewski.net.pl
// Licensed under the MIT license: http://www.opensource.org/licenses/mit-license.php
(function($) {
$.fn.brscPicasa = function(options) {
var name = 'brscPicasa',
settings = {
user: '',
album_id: '',
album_name: '',
photo_id: '',
authkey: '',
// thumbsizes: 32, 48, 64, 72, 104, 144, 150, 160 with 'u' or 'c' suffix (for uncropped (default if no suffix added) or cropped version)
// sizes: 94, 110, 128, 200, 220, 288, 320, 400, 512, 576, 640, 720, 800, 912, 1024, 1152, 1280, 1440, 1600
// othersizes: d - original uploaded photo including all original Exif data, 'none' - photo will not be linked to bigger size
albums_thumbsize: '150c', // values from thumbsizes and sizes
albums_titles: true,
photos_thumbsize: '150c', // values from thumbsizes and sizes
photos_linkedsize: '800', // values from thumbsizes, sizes and othersizes
photos_titles: false,
photo_displaysize: '640', // values from thumbsizes and sizes
photo_linkedsize: 'd', // values from thumbsizes, sizes, othersizes
photo_title: false,
mode: 'from_link', // available modes: albums - list all user public albums, photos - list photos from specified album, photo - display one photo, from_link - find links to pisaweb and guess what to display
from_link_target: '', // if empty 'a' element will be replaced with new content, any other string will be treated as jQuery selector and new content will be added to found element using append method
classes: {
link_replacer: '',
container: '',
album_list: '',
photos_list: '',
list_item: '',
single_item: '',
link_with_image: '',
photo: '',
title: ''
},
callback: function() {
jQuery('a.brscPicasaLinkWithImage', this).colorbox({rel:'a.brscPicasaLinkWithImage'});
}
},
opts = $.extend(true, {}, settings, $.fn.brscPicasa.defaults, options),
feed_base_url = 'http://picasaweb.google.com/data/feed/base/user/',
entry_base_url = 'http://picasaweb.google.com/data/entry/base/user/',
to_load_counter = 0; // this one is increased before every request to Picasa and decreased after reqest is finished
return this.each(function() {
var elem = this;
function _start() {
if (!opts.mode || !opts.user || !methods[opts.mode]) { // fallback to from_link method if mode is empty or user is not set or unknown mode is set
opts.mode = 'from_link';
}
methods[opts.mode].apply(elem, [opts]);
if ($.isFunction(opts.callback)) {
var interval_id;
interval_id = setInterval(function() {
if (to_load_counter <= 0) {
clearInterval(interval_id);
opts.callback.call(elem);
}
}
, 100);
}
}
var methods = {
albums: function(o) {
to_load_counter++;
var $this = $(this),
data = {
kind: 'album',
alt: 'json',
thumbsize: o.albums_thumbsize,
fields: 'entry(title,link[@rel=\'alternate\'],media:group/media:thumbnail)',
visibility: 'all'
},
callback = '';
if (o.authkey) {
data['authkey'] = o.authkey;
}
if (!$.support.cors) {
callback = '?callback=?';
data['alt'] = 'json-in-script';
}
$.getJSON(
feed_base_url + o.user + callback,
data,
function(root) {
var entries = root.feed.entry || [],
$list = $('<ul class="' + name + 'List ' + name + 'Albums ' + o.classes.album_list + '"></ul>');
for (var i = 0; i < entries.length; ++i) {
var entry = entries[i];
$item = $('<li class="' + name + 'ListItem ' + o.classes.list_item + '"><a class="' + name + 'LinkWithImage ' + o.classes.link_with_image + '" href="' + entry.link[0].href + '"><img class="' + name + 'Photo ' + o.classes.thumbnail + '" src="' + entry.media$group.media$thumbnail[0].url + '" width="' + entry.media$group.media$thumbnail[0].width + '" height="' + entry.media$group.media$thumbnail[0].height + '" /></a></li>');
if (o.albums_titles) {
$item.children().append('<span class="' + name + 'Title ' + o.classes.title + '">' + entry.title.$t + '</span>');
}
$list.append($item);
}
$list.wrap('<div class="' + name + 'Container ' + o.classes.container + '" />').parent().appendTo($this);
to_load_counter--;
}
);
},
photos: function(o) {
to_load_counter++;
var $this = $(this),
album_url_part = '', // 100 last user photos will be retrieved
data = {
kind: 'photo',
alt: 'json',
thumbsize: o.photos_thumbsize,
fields: 'entry(title,media:group(media:thumbnail, media:content))',
visibility: 'all'
},
callback = '';
if (o.authkey) {
data['authkey'] = o.authkey;
}
if (o.photos_linkedsize !== 'none') {
data['imgmax'] = o.photos_linkedsize;
}
if (!$.support.cors) {
callback = '?callback=?';
data['alt'] = 'json-in-script';
}
if (o.album_id) {
album_url_part = '/albumid/' + o.album_id;
} else if (o.album_name) {
album_url_part = '/album/' + o.album_name;
}
$.getJSON(
feed_base_url + o.user + album_url_part + callback,
data,
function(root) {
var entries = root.feed.entry || [],
$list = $('<ul class="' + name + 'List ' + name + 'Photos ' + o.classes.photos_list + '"></ul>');
for (var i = 0; i < entries.length; ++i) {
var entry = entries[i];
$item = $('<li class="' + name + 'ListItem ' + o.classes.list_item + '"><img class="' + name + 'Photo ' + o.classes.thumbnail + '" src="' + entry.media$group.media$thumbnail[0].url + '" width="' + entry.media$group.media$thumbnail[0].width + '" height="' + entry.media$group.media$thumbnail[0].height + '" /></li>');
if (o.photos_linkedsize !== 'none') {
$item.children().wrap('<a class="' + name + 'LinkWithImage ' + o.classes.link_with_image + '" href="' + entry.media$group.media$content[0].url + '"></a>');
}
if (o.photos_titles) {
$item.find('img').after('<span class="' + name + 'Title ' + o.classes.title + '">' + entry.title.$t + '</span>');
}
$list.append($item);
}
$list.wrap('<div class="' + name + 'Container ' + o.classes.container + '" />').parent().appendTo($this);
to_load_counter--;
}
);
},
photo: function(o) {
to_load_counter++;
var $this = $(this),
album_url_part = '',
data = {
kind :'photo',
alt: 'json',
thumbsize: o.photo_displaysize,
fields: 'title,media:group(media:thumbnail, media:content)',
visibility: 'all'
},
callback = '';
if (o.authkey) {
data['authkey'] = o.authkey;
}
if (o.photo_linkedsize !== 'none') {
data['imgmax'] = o.photo_linkedsize;
}
if (!$.support.cors) {
callback = '?callback=?';
data['alt'] = 'json-in-script';
}
if (!o.photo_id) {
$.error('photo_id option is not set for jQuery.' + name);
return;
}
if (o.album_id) {
album_url_part = '/albumid/' + o.album_id;
} else if (o.album_name) {
album_url_part = '/album/' + o.album_name;
} else {
$.error('album_id or album_name option must be set for jQuery.' + name);
return;
}
$.getJSON(
entry_base_url + o.user + album_url_part + '/photoid/' + o.photo_id + callback,
data,
function(root) {
var entry = root.entry || {},
$div = $('<div class="' + name + 'SingleItem ' + o.classes.single_item + '"><img class="' + name + 'Photo ' + o.classes.photo + '" src="' + entry.media$group.media$thumbnail[0].url + '" width="' + entry.media$group.media$thumbnail[0].width + '" height="' + entry.media$group.media$thumbnail[0].height + '" /></div>');
if (o.photo_linkedsize !== 'none') {
$div.children().wrap('<a class="' + name + 'LinkWithImage ' + o.classes.link_with_image + '" href="' + entry.media$group.media$content[0].url + '"></a>');
}
if (o.photo_title) {
$div.find('img').after('<span class="' + name + 'Title ' + o.classes.title + '">' + entry.title.$t + '</span>');
}
$div.wrap('<div class="' + name + 'Container ' + o.classes.container + '" />').parent().appendTo($this);
to_load_counter--;
}
);
},
from_link: function(o) {
var $this = $(this),
$links;
if ($this.is('a[href^="http://picasaweb.google."]') || $this.is('a[href^="https://picasaweb.google."]')) {
$links = $this;
} else {
$links = $this.find('a[href^="http://picasaweb.google."], a[href^="https://picasaweb.google."]');
}
$links.each(function() {
o.authkey = '';
if (this.search) {
var params = this.search.replace('?', '').split('&');
for(var i = 0; i < params.length; i++) {
param = params[i].split('=');
if (param[0] === 'authkey') {
o.authkey = param[1];
break;
}
}
}
var pathname = this.pathname;
if (pathname.substr(0, 1) === '/') {
pathname = pathname.substr(1, pathname.length);
}
var path_split = pathname.split('/');
if (path_split.length == 2) { // there is user and albumname in path
o.user = path_split[0];
o.album_name = path_split[1];
if (this.hash) { // there is photoid in path
o.photo_id = this.hash.replace('#', '');
o.mode = 'photo';
} else {
o.mode = 'photos';
}
} else if (path_split.length == 1 && path_split[0] != '') { // there is only username in path
o.user = path_split[0];
o.mode = 'albums';
} else { // can't find anything usefull in path
return;
}
if (!o.from_link_target) {
$target = $('<div class="' + name + 'LinkReplacer ' + o.classes.link_replacer + '"></div>');
$(this).replaceWith($target);
} else {
$target = $(o.from_link_target);
}
return methods[o.mode].apply($target, [o]);
});
}
}
_start();
});
}
$.fn.brscPicasa.defaults = {};
})(jQuery);
//}}}
//{{{
// ColorBox v1.3.19 - jQuery lightbox plugin
// (c) 2011 Jack Moore - jacklmoore.com
// License: http://www.opensource.org/licenses/mit-license.php
(function ($, document, window) {
var
// Default settings object.
// See http://jacklmoore.com/colorbox for details.
defaults = {
transition: "elastic",
speed: 300,
width: false,
initialWidth: "600",
innerWidth: false,
maxWidth: false,
height: false,
initialHeight: "450",
innerHeight: false,
maxHeight: false,
scalePhotos: true,
scrolling: true,
inline: false,
html: false,
iframe: false,
fastIframe: true,
photo: false,
href: false,
title: false,
rel: false,
opacity: 0.9,
preloading: true,
current: "image {current} of {total}",
previous: "previous",
next: "next",
close: "close",
open: false,
returnFocus: true,
reposition: true,
loop: true,
slideshow: false,
slideshowAuto: true,
slideshowSpeed: 2500,
slideshowStart: "start slideshow",
slideshowStop: "stop slideshow",
onOpen: false,
onLoad: false,
onComplete: false,
onCleanup: false,
onClosed: false,
overlayClose: true,
escKey: true,
arrowKey: true,
top: false,
bottom: false,
left: false,
right: false,
fixed: false,
data: undefined
},
// Abstracting the HTML and event identifiers for easy rebranding
colorbox = 'colorbox',
prefix = 'cbox',
boxElement = prefix + 'Element',
// Events
event_open = prefix + '_open',
event_load = prefix + '_load',
event_complete = prefix + '_complete',
event_cleanup = prefix + '_cleanup',
event_closed = prefix + '_closed',
event_purge = prefix + '_purge',
// Special Handling for IE
isIE = !$.support.opacity && !$.support.style, // IE7 & IE8
isIE6 = isIE && !window.XMLHttpRequest, // IE6
event_ie6 = prefix + '_IE6',
// Cached jQuery Object Variables
$overlay,
$box,
$wrap,
$content,
$topBorder,
$leftBorder,
$rightBorder,
$bottomBorder,
$related,
$window,
$loaded,
$loadingBay,
$loadingOverlay,
$title,
$current,
$slideshow,
$next,
$prev,
$close,
$groupControls,
// Variables for cached values or use across multiple functions
settings,
interfaceHeight,
interfaceWidth,
loadedHeight,
loadedWidth,
element,
index,
photo,
open,
active,
closing,
loadingTimer,
publicMethod,
div = "div",
init;
// ****************
// HELPER FUNCTIONS
// ****************
// Convience function for creating new jQuery objects
function $tag(tag, id, css) {
var element = document.createElement(tag);
if (id) {
element.id = prefix + id;
}
if (css) {
element.style.cssText = css;
}
return $(element);
}
// Determine the next and previous members in a group.
function getIndex(increment) {
var
max = $related.length,
newIndex = (index + increment) % max;
return (newIndex < 0) ? max + newIndex : newIndex;
}
// Convert '%' and 'px' values to integers
function setSize(size, dimension) {
return Math.round((/%/.test(size) ? ((dimension === 'x' ? $window.width() : $window.height()) / 100) : 1) * parseInt(size, 10));
}
// Checks an href to see if it is a photo.
// There is a force photo option (photo: true) for hrefs that cannot be matched by this regex.
function isImage(url) {
return settings.photo || /\.(gif|png|jpe?g|bmp|ico)((#|\?).*)?$/i.test(url);
}
// Assigns function results to their respective properties
function makeSettings() {
var i;
settings = $.extend({}, $.data(element, colorbox));
for (i in settings) {
if ($.isFunction(settings[i]) && i.slice(0, 2) !== 'on') { // checks to make sure the function isn't one of the callbacks, they will be handled at the appropriate time.
settings[i] = settings[i].call(element);
}
}
settings.rel = settings.rel || element.rel || 'nofollow';
settings.href = settings.href || $(element).attr('href');
settings.title = settings.title || element.title;
if (typeof settings.href === "string") {
settings.href = $.trim(settings.href);
}
}
function trigger(event, callback) {
$.event.trigger(event);
if (callback) {
callback.call(element);
}
}
// Slideshow functionality
function slideshow() {
var
timeOut,
className = prefix + "Slideshow_",
click = "click." + prefix,
start,
stop,
clear;
if (settings.slideshow && $related[1]) {
start = function () {
$slideshow
.text(settings.slideshowStop)
.unbind(click)
.bind(event_complete, function () {
if (settings.loop || $related[index + 1]) {
timeOut = setTimeout(publicMethod.next, settings.slideshowSpeed);
}
})
.bind(event_load, function () {
clearTimeout(timeOut);
})
.one(click + ' ' + event_cleanup, stop);
$box.removeClass(className + "off").addClass(className + "on");
timeOut = setTimeout(publicMethod.next, settings.slideshowSpeed);
};
stop = function () {
clearTimeout(timeOut);
$slideshow
.text(settings.slideshowStart)
.unbind([event_complete, event_load, event_cleanup, click].join(' '))
.one(click, function () {
publicMethod.next();
start();
});
$box.removeClass(className + "on").addClass(className + "off");
};
if (settings.slideshowAuto) {
start();
} else {
stop();
}
} else {
$box.removeClass(className + "off " + className + "on");
}
}
function launch(target) {
if (!closing) {
element = target;
makeSettings();
$related = $(element);
index = 0;
if (settings.rel !== 'nofollow') {
$related = $('.' + boxElement).filter(function () {
var relRelated = $.data(this, colorbox).rel || this.rel;
return (relRelated === settings.rel);
});
index = $related.index(element);
// Check direct calls to ColorBox.
if (index === -1) {
$related = $related.add(element);
index = $related.length - 1;
}
}
if (!open) {
open = active = true; // Prevents the page-change action from queuing up if the visitor holds down the left or right keys.
$box.show();
if (settings.returnFocus) {
$(element).blur().one(event_closed, function () {
$(this).focus();
});
}
// +settings.opacity avoids a problem in IE when using non-zero-prefixed-string-values, like '.5'
$overlay.css({"opacity": +settings.opacity, "cursor": settings.overlayClose ? "pointer" : "auto"}).show();
// Opens inital empty ColorBox prior to content being loaded.
settings.w = setSize(settings.initialWidth, 'x');
settings.h = setSize(settings.initialHeight, 'y');
publicMethod.position();
if (isIE6) {
$window.bind('resize.' + event_ie6 + ' scroll.' + event_ie6, function () {
$overlay.css({width: $window.width(), height: $window.height(), top: $window.scrollTop(), left: $window.scrollLeft()});
}).trigger('resize.' + event_ie6);
}
trigger(event_open, settings.onOpen);
$groupControls.add($title).hide();
$close.html(settings.close).show();
}
publicMethod.load(true);
}
}
// ColorBox's markup needs to be added to the DOM prior to being called
// so that the browser will go ahead and load the CSS background images.
function appendHTML() {
if (!$box && document.body) {
init = false;
$window = $(window);
$box = $tag(div).attr({id: colorbox, 'class': isIE ? prefix + (isIE6 ? 'IE6' : 'IE') : ''}).hide();
$overlay = $tag(div, "Overlay", isIE6 ? 'position:absolute' : '').hide();
$wrap = $tag(div, "Wrapper");
$content = $tag(div, "Content").append(
$loaded = $tag(div, "LoadedContent", 'width:0; height:0; overflow:hidden'),
$loadingOverlay = $tag(div, "LoadingOverlay").add($tag(div, "LoadingGraphic")),
$title = $tag(div, "Title"),
$current = $tag(div, "Current"),
$next = $tag(div, "Next"),
$prev = $tag(div, "Previous"),
$slideshow = $tag(div, "Slideshow").bind(event_open, slideshow),
$close = $tag(div, "Close")
);
$wrap.append( // The 3x3 Grid that makes up ColorBox
$tag(div).append(
$tag(div, "TopLeft"),
$topBorder = $tag(div, "TopCenter"),
$tag(div, "TopRight")
),
$tag(div, false, 'clear:left').append(
$leftBorder = $tag(div, "MiddleLeft"),
$content,
$rightBorder = $tag(div, "MiddleRight")
),
$tag(div, false, 'clear:left').append(
$tag(div, "BottomLeft"),
$bottomBorder = $tag(div, "BottomCenter"),
$tag(div, "BottomRight")
)
).find('div div').css({'float': 'left'});
$loadingBay = $tag(div, false, 'position:absolute; width:9999px; visibility:hidden; display:none');
$groupControls = $next.add($prev).add($current).add($slideshow);
$(document.body).append($overlay, $box.append($wrap, $loadingBay));
}
}
// Add ColorBox's event bindings
function addBindings() {
if ($box) {
if (!init) {
init = true;
// Cache values needed for size calculations
interfaceHeight = $topBorder.height() + $bottomBorder.height() + $content.outerHeight(true) - $content.height();//Subtraction needed for IE6
interfaceWidth = $leftBorder.width() + $rightBorder.width() + $content.outerWidth(true) - $content.width();
loadedHeight = $loaded.outerHeight(true);
loadedWidth = $loaded.outerWidth(true);
// Setting padding to remove the need to do size conversions during the animation step.
$box.css({"padding-bottom": interfaceHeight, "padding-right": interfaceWidth});
// Anonymous functions here keep the public method from being cached, thereby allowing them to be redefined on the fly.
$next.click(function () {
publicMethod.next();
});
$prev.click(function () {
publicMethod.prev();
});
$close.click(function () {
publicMethod.close();
});
$overlay.click(function () {
if (settings.overlayClose) {
publicMethod.close();
}
});
// Key Bindings
$(document).bind('keydown.' + prefix, function (e) {
var key = e.keyCode;
if (open && settings.escKey && key === 27) {
e.preventDefault();
publicMethod.close();
}
if (open && settings.arrowKey && $related[1]) {
if (key === 37) {
e.preventDefault();
$prev.click();
} else if (key === 39) {
e.preventDefault();
$next.click();
}
}
});
$('.' + boxElement, document).live('click', function (e) {
// ignore non-left-mouse-clicks and clicks modified with ctrl / command, shift, or alt.
// See: http://jacklmoore.com/notes/click-events/
if (!(e.which > 1 || e.shiftKey || e.altKey || e.metaKey)) {
e.preventDefault();
launch(this);
}
});
}
return true;
}
return false;
}
// Don't do anything if ColorBox already exists.
if ($.colorbox) {
return;
}
// Append the HTML when the DOM loads
$(appendHTML);
// ****************
// PUBLIC FUNCTIONS
// Usage format: $.fn.colorbox.close();
// Usage from within an iframe: parent.$.fn.colorbox.close();
// ****************
publicMethod = $.fn[colorbox] = $[colorbox] = function (options, callback) {
var $this = this;
options = options || {};
appendHTML();
if (addBindings()) {
if (!$this[0]) {
if ($this.selector) { // if a selector was given and it didn't match any elements, go ahead and exit.
return $this;
}
// if no selector was given (ie. $.colorbox()), create a temporary element to work with
$this = $('<a/>');
options.open = true; // assume an immediate open
}
if (callback) {
options.onComplete = callback;
}
$this.each(function () {
$.data(this, colorbox, $.extend({}, $.data(this, colorbox) || defaults, options));
}).addClass(boxElement);
if (($.isFunction(options.open) && options.open.call($this)) || options.open) {
launch($this[0]);
}
}
return $this;
};
publicMethod.position = function (speed, loadedCallback) {
var
top = 0,
left = 0,
offset = $box.offset(),
scrollTop = $window.scrollTop(),
scrollLeft = $window.scrollLeft();
$window.unbind('resize.' + prefix);
// remove the modal so that it doesn't influence the document width/height
$box.css({top: -9e4, left: -9e4});
if (settings.fixed && !isIE6) {
offset.top -= scrollTop;
offset.left -= scrollLeft;
$box.css({position: 'fixed'});
} else {
top = scrollTop;
left = scrollLeft;
$box.css({position: 'absolute'});
}
// keeps the top and left positions within the browser's viewport.
if (settings.right !== false) {
left += Math.max($window.width() - settings.w - loadedWidth - interfaceWidth - setSize(settings.right, 'x'), 0);
} else if (settings.left !== false) {
left += setSize(settings.left, 'x');
} else {
left += Math.round(Math.max($window.width() - settings.w - loadedWidth - interfaceWidth, 0) / 2);
}
if (settings.bottom !== false) {
top += Math.max($window.height() - settings.h - loadedHeight - interfaceHeight - setSize(settings.bottom, 'y'), 0);
} else if (settings.top !== false) {
top += setSize(settings.top, 'y');
} else {
top += Math.round(Math.max($window.height() - settings.h - loadedHeight - interfaceHeight, 0) / 2);
}
$box.css({top: offset.top, left: offset.left});
// setting the speed to 0 to reduce the delay between same-sized content.
speed = ($box.width() === settings.w + loadedWidth && $box.height() === settings.h + loadedHeight) ? 0 : speed || 0;
// this gives the wrapper plenty of breathing room so it's floated contents can move around smoothly,
// but it has to be shrank down around the size of div#colorbox when it's done. If not,
// it can invoke an obscure IE bug when using iframes.
$wrap[0].style.width = $wrap[0].style.height = "9999px";
function modalDimensions(that) {
$topBorder[0].style.width = $bottomBorder[0].style.width = $content[0].style.width = that.style.width;
$content[0].style.height = $leftBorder[0].style.height = $rightBorder[0].style.height = that.style.height;
}
$box.dequeue().animate({width: settings.w + loadedWidth, height: settings.h + loadedHeight, top: top, left: left}, {
duration: speed,
complete: function () {
modalDimensions(this);
active = false;
// shrink the wrapper down to exactly the size of colorbox to avoid a bug in IE's iframe implementation.
$wrap[0].style.width = (settings.w + loadedWidth + interfaceWidth) + "px";
$wrap[0].style.height = (settings.h + loadedHeight + interfaceHeight) + "px";
if (settings.reposition) {
setTimeout(function () { // small delay before binding onresize due to an IE8 bug.
$window.bind('resize.' + prefix, publicMethod.position);
}, 1);
}
if (loadedCallback) {
loadedCallback();
}
},
step: function () {
modalDimensions(this);
}
});
};
publicMethod.resize = function (options) {
if (open) {
options = options || {};
if (options.width) {
settings.w = setSize(options.width, 'x') - loadedWidth - interfaceWidth;
}
if (options.innerWidth) {
settings.w = setSize(options.innerWidth, 'x');
}
$loaded.css({width: settings.w});
if (options.height) {
settings.h = setSize(options.height, 'y') - loadedHeight - interfaceHeight;
}
if (options.innerHeight) {
settings.h = setSize(options.innerHeight, 'y');
}
if (!options.innerHeight && !options.height) {
$loaded.css({height: "auto"});
settings.h = $loaded.height();
}
$loaded.css({height: settings.h});
publicMethod.position(settings.transition === "none" ? 0 : settings.speed);
}
};
publicMethod.prep = function (object) {
if (!open) {
return;
}
var callback, speed = settings.transition === "none" ? 0 : settings.speed;
$loaded.remove();
$loaded = $tag(div, 'LoadedContent').append(object);
function getWidth() {
settings.w = settings.w || $loaded.width();
settings.w = settings.mw && settings.mw < settings.w ? settings.mw : settings.w;
return settings.w;
}
function getHeight() {
settings.h = settings.h || $loaded.height();
settings.h = settings.mh && settings.mh < settings.h ? settings.mh : settings.h;
return settings.h;
}
$loaded.hide()
.appendTo($loadingBay.show())// content has to be appended to the DOM for accurate size calculations.
.css({width: getWidth(), overflow: settings.scrolling ? 'auto' : 'hidden'})
.css({height: getHeight()})// sets the height independently from the width in case the new width influences the value of height.
.prependTo($content);
$loadingBay.hide();
// floating the IMG removes the bottom line-height and fixed a problem where IE miscalculates the width of the parent element as 100% of the document width.
//$(photo).css({'float': 'none', marginLeft: 'auto', marginRight: 'auto'});
$(photo).css({'float': 'none'});
// Hides SELECT elements in IE6 because they would otherwise sit on top of the overlay.
if (isIE6) {
$('select').not($box.find('select')).filter(function () {
return this.style.visibility !== 'hidden';
}).css({'visibility': 'hidden'}).one(event_cleanup, function () {
this.style.visibility = 'inherit';
});
}
callback = function () {
var preload, i, total = $related.length, iframe, frameBorder = 'frameBorder', allowTransparency = 'allowTransparency', complete, src, img;
if (!open) {
return;
}
function removeFilter() {
if (isIE) {
$box[0].style.removeAttribute('filter');
}
}
complete = function () {
clearTimeout(loadingTimer);
$loadingOverlay.hide();
trigger(event_complete, settings.onComplete);
};
if (isIE) {
//This fadeIn helps the bicubic resampling to kick-in.
if (photo) {
$loaded.fadeIn(100);
}
}
$title.html(settings.title).add($loaded).show();
if (total > 1) { // handle grouping
if (typeof settings.current === "string") {
$current.html(settings.current.replace('{current}', index + 1).replace('{total}', total)).show();
}
$next[(settings.loop || index < total - 1) ? "show" : "hide"]().html(settings.next);
$prev[(settings.loop || index) ? "show" : "hide"]().html(settings.previous);
if (settings.slideshow) {
$slideshow.show();
}
// Preloads images within a rel group
if (settings.preloading) {
preload = [
getIndex(-1),
getIndex(1)
];
while (i = $related[preload.pop()]) {
src = $.data(i, colorbox).href || i.href;
if ($.isFunction(src)) {
src = src.call(i);
}
if (isImage(src)) {
img = new Image();
img.src = src;
}
}
}
} else {
$groupControls.hide();
}
if (settings.iframe) {
iframe = $tag('iframe')[0];
if (frameBorder in iframe) {
iframe[frameBorder] = 0;
}
if (allowTransparency in iframe) {
iframe[allowTransparency] = "true";
}
// give the iframe a unique name to prevent caching
iframe.name = prefix + (+new Date());
if (settings.fastIframe) {
complete();
} else {
$(iframe).one('load', complete);
}
iframe.src = settings.href;
if (!settings.scrolling) {
iframe.scrolling = "no";
}
$(iframe).addClass(prefix + 'Iframe').appendTo($loaded).one(event_purge, function () {
iframe.src = "//about:blank";
});
} else {
complete();
}
if (settings.transition === 'fade') {
$box.fadeTo(speed, 1, removeFilter);
} else {
removeFilter();
}
};
if (settings.transition === 'fade') {
$box.fadeTo(speed, 0, function () {
publicMethod.position(0, callback);
});
} else {
publicMethod.position(speed, callback);
}
};
publicMethod.load = function (launched) {
var href, setResize, prep = publicMethod.prep;
active = true;
photo = false;
element = $related[index];
if (!launched) {
makeSettings();
}
trigger(event_purge);
trigger(event_load, settings.onLoad);
settings.h = settings.height ?
setSize(settings.height, 'y') - loadedHeight - interfaceHeight :
settings.innerHeight && setSize(settings.innerHeight, 'y');
settings.w = settings.width ?
setSize(settings.width, 'x') - loadedWidth - interfaceWidth :
settings.innerWidth && setSize(settings.innerWidth, 'x');
// Sets the minimum dimensions for use in image scaling
settings.mw = settings.w;
settings.mh = settings.h;
// Re-evaluate the minimum width and height based on maxWidth and maxHeight values.
// If the width or height exceed the maxWidth or maxHeight, use the maximum values instead.
if (settings.maxWidth) {
settings.mw = setSize(settings.maxWidth, 'x') - loadedWidth - interfaceWidth;
settings.mw = settings.w && settings.w < settings.mw ? settings.w : settings.mw;
}
if (settings.maxHeight) {
settings.mh = setSize(settings.maxHeight, 'y') - loadedHeight - interfaceHeight;
settings.mh = settings.h && settings.h < settings.mh ? settings.h : settings.mh;
}
href = settings.href;
loadingTimer = setTimeout(function () {
$loadingOverlay.show();
}, 100);
if (settings.inline) {
// Inserts an empty placeholder where inline content is being pulled from.
// An event is bound to put inline content back when ColorBox closes or loads new content.
$tag(div).hide().insertBefore($(href)[0]).one(event_purge, function () {
$(this).replaceWith($loaded.children());
});
prep($(href));
} else if (settings.iframe) {
// IFrame element won't be added to the DOM until it is ready to be displayed,
// to avoid problems with DOM-ready JS that might be trying to run in that iframe.
prep(" ");
} else if (settings.html) {
prep(settings.html);
} else if (isImage(href)) {
$(photo = new Image())
.addClass(prefix + 'Photo')
.error(function () {
settings.title = false;
prep($tag(div, 'Error').text('This image could not be loaded'));
})
.load(function () {
var percent;
photo.onload = null; //stops animated gifs from firing the onload repeatedly.
if (settings.scalePhotos) {
setResize = function () {
photo.height -= photo.height * percent;
photo.width -= photo.width * percent;
};
if (settings.mw && photo.width > settings.mw) {
percent = (photo.width - settings.mw) / photo.width;
setResize();
}
if (settings.mh && photo.height > settings.mh) {
percent = (photo.height - settings.mh) / photo.height;
setResize();
}
}
if (settings.h) {
photo.style.marginTop = Math.max(settings.h - photo.height, 0) / 2 + 'px';
}
if ($related[1] && (settings.loop || $related[index + 1])) {
photo.style.cursor = 'pointer';
photo.onclick = function () {
publicMethod.next();
};
}
if (isIE) {
photo.style.msInterpolationMode = 'bicubic';
}
setTimeout(function () { // A pause because Chrome will sometimes report a 0 by 0 size otherwise.
prep(photo);
}, 1);
});
setTimeout(function () { // A pause because Opera 10.6+ will sometimes not run the onload function otherwise.
photo.src = href;
}, 1);
} else if (href) {
$loadingBay.load(href, settings.data, function (data, status, xhr) {
prep(status === 'error' ? $tag(div, 'Error').text('Request unsuccessful: ' + xhr.statusText) : $(this).contents());
});
}
};
// Navigates to the next page/image in a set.
publicMethod.next = function () {
if (!active && $related[1] && (settings.loop || $related[index + 1])) {
index = getIndex(1);
publicMethod.load();
}
};
publicMethod.prev = function () {
if (!active && $related[1] && (settings.loop || index)) {
index = getIndex(-1);
publicMethod.load();
}
};
// Note: to use this within an iframe use the following format: parent.$.fn.colorbox.close();
publicMethod.close = function () {
if (open && !closing) {
closing = true;
open = false;
trigger(event_cleanup, settings.onCleanup);
$window.unbind('.' + prefix + ' .' + event_ie6);
$overlay.fadeTo(200, 0);
$box.stop().fadeTo(300, 0, function () {
$box.add($overlay).css({'opacity': 1, cursor: 'auto'}).hide();
trigger(event_purge);
$loaded.remove();
setTimeout(function () {
closing = false;
trigger(event_closed, settings.onClosed);
}, 1);
});
}
};
// Removes changes ColorBox made to the document, but does not remove the plugin
// from jQuery.
publicMethod.remove = function () {
$([]).add($box).add($overlay).remove();
$box = null;
$('.' + boxElement)
.removeData(colorbox)
.removeClass(boxElement)
.die();
};
// A method for fetching the current element ColorBox is referencing.
// returns a jQuery object.
publicMethod.element = function () {
return $(element);
};
publicMethod.settings = defaults;
}(jQuery, document, this));
//}}}
[<img(auto,300px)[alt_text|http://bit.ly/glHxJY]]
https://picasaweb.google.com/105898452618087093313/BDPdiv#5706340770772868802
<<<
From 2000 to 2007 , ~D-K opened in Brussels a picol.la galeri: ''BUREAU DU PORT'' 35 editions / [[complete collection affiches typo |Bureau du Port (Affiches)]]
<<<
2000
mei : [[DIALOGIST-KANTOR « Pauvre Monsieur » |BDP01 "Pauvre Monsieur" Dialogist-Kantor 2000]]
juni : [[PATRICE VERHOFSTADT « Elégance » |BDP02 "Elégance" Patrice Verhofstadt 2000]]
september :[[ HARRY HEIRMANS « Réunions des objects » |BDP03 "Réunion des Objects" Harry Heirmans]]
oktober : [[ANDREW WEBB « ....and here’s another one from me. » |BDP04 "...And here is another one from me." Andrew Webb 2000]]
december : MISSUS LAMBY & HEINI OBST « Keukendelirium »
december :JEAN DE LA FONTAINE « Pas Touch »
2001
juli : A POOR SUNDAY WITH Marc Rossignol, ll, ~Dialogist-Kantor, Harry Heirmans, Heini Obst, Andrew Webb, Patrice Verhofstadt
november : HIOCO « CPT.Boulanger »
december : MARC ROSSIGNOL « Le poids de l’art l’art du poids »
2002
februari : NANOUCHE « Gentille Nanouche »
maart- april : permanentie MAISON DU PEUPLE
september :[[LUC VAN TICHEL « LES ARCHIVES PERDUES DE L’UNIVERS AMNESIQUE ILLUSTRE »|BDP12 « LES ARCHIVES PERDUES DE L’UNIVERS AMNESIQUE ILLUSTRE » Luc Van Tichel]]
december : PATRICE VERHOFSTADT « Madame Patrice »
2003
maart : JEAN CROUTTON « Polarides »
juni : ANOTHER POOR SUNDAY WITH Ito Takashi, Kiekebich,Madame P.,ll , Rossignol, D.M.Mangelware, Gast, Tolmatcheff, A.W. , Jean Croutton, L’~U-A-ILL, Boulanger Imbecile, Titania, Djos,~D-K.
september : ERIC STENMANS « Juste une bête peinture »
november : ~DIALOGIST-KANTOR « l’Ile du travail »
december : DJOS JANSSENS « La confusion dans la clarté »
2004
fevrier: LL( Lieve Lambrecht) “Vol Aile”
juni: SOCIETE ANONYME J.F.K. CANARD
sept: YET ANOTHER POOR SUNDAY WITH…
dec: LAETITIA YALON “ O cire “
2005
jan: HEINI OBST “restrictive views in the rational portrait gallery”
mars: RUFUS “86 revisited”
april: WALLY “ wally decor”
may: STURM & LIE “io, tanto, ti bacio il culino...”
juni: ANDREW HARDIN “Strange Fruit”
juni: GAST BOUSCHET - NADINE HILBERT “Militant Apathy”
sept: [[ANDREW WEBB “Waxing+Wanning” |BDP29 "Waxing+Wanning" Andrew Webb 2005]]
Dec: [[KURT RYSLAVY “ The London-Galleries Theraphy”|BDP30 "The London-Galleries-Theraphy" Kurt Ryslavy 2005]]
2006
mars: MICHEL CLERBOIS “mastic schizzo magic bloc, blog”
may: [[PIOTR OSUSZKIEWICZ “Stringomania”|BDP32 "Stringomania" Piotr Osuszkiewicz]]
dec: [[YADNUS ROOP/POOR SUNDAY|BDP33 "Poor Sunday/Yadnus Roop" 2006]]
2007
maart: [[ DIALOGIST-KANTOR “The Luanda Protocol”|BDP34 "The Luanda Protocol" 2007]]
https://picasaweb.google.com/105898452618087093313/BDPCOMPLET?authkey=Gv1sRgCPWDuv-p1OLMOA
<<tiddler PicasaJqueryincl>>
indent+++
{{{
:text text text
}}}
:text text text
===
image simple+++
{{{
[img(50px+,auto)[http://is.gd/fJ3G3]]
}}}
[img(50px+,auto)[http://is.gd/fJ3G3]]
===
Tiddlers by tag Tabs+++
{{{
<<forEachTiddler
where
'tiddler.tags.contains("›Updates")'
sortBy
'tiddler.title.toUpperCase()'
write '" [["+tiddler.title+" ]] \"view ["+tiddler.title+"]\" [["+tiddler.title+"]] "'
begin '"<<tabs txtMyAutoTab "'
end '">"+">"'
none '"//No tiddler tagged with \"›Updates\"//"'
>>
}}}
<<forEachTiddler
where
'tiddler.tags.contains("›Updates")'
sortBy
'tiddler.title.toUpperCase()'
write '" [["+tiddler.title+" ]] \"view ["+tiddler.title+"]\" [["+tiddler.title+"]] "'
begin '"<<tabs txtMyAutoTab "'
end '">"+">"'
none '"//No tiddler tagged with \"›Updates\"//"'
>>
===
nested text+++
{{{
here is text and+++here is the rest===
}}}
here is text and+++here is the rest===
===
------------------------------------------------------------------------------------------------------
...L’absolue contrariété est le ressort du plus grand plaisir. Dialogist-Kantor cultivent une philosophie d’action qui contrepet (3), la typographie, les rencontres à l’envi et l’amour de l’autonomie. Transmuter la vie en art est un de leurs enjeux majeurs.
Véronique Depiesse (historienne & critique d'art) 2011
------------------------------------------------------------------------------------------------------
DIALOGIST-KANTOR: com a resultat d’una trajectoria artistica fecunda, experimental i força agosarada, els components d’aquest grup d’art de Brussel.les - Toni Geirlandt i Carlos Montalvo- inicien als anys noranta una sèrie de propostes plàstiques I conceptuals amb les quals adapten els seus discursos anteriors ( interventions fotogràfiques i brut-art, respectivament) a una nova dimensio communicacional del fet artistic: introduir la reflexio esteticoètica nno sols en el resultat plàstic dels processos creatius sino en els mateixos processos o recorreguts procedimentals, des dels inicis de les idees creatives o percepcions extraordinàries de l’entorn, l’espai, les relacions interpersonals i socials, etc, fins a la materialitzacio plàstica, matèrica o poètica dels esdeveniments artistics, estètics o bé poètics.
A través de les intervencions o accions, o bé a travès de la poesia visual, aquests dos artistes assumeixen tot un discurs i una postura d’avantguarda davant l’academicisme artistic més estrictament assimilat en els àmbits oficials de la postmodernitat institucional, galeries comercials o les fires d’art convencionals. Les seues propostes parteixen de la necessitat explicita de fer obrir els ulls i la ment als individus paralitzats per l’autisme socioestètic que fomenta la communicacio de masses, la tirania de la moda, les institucions i el determinisme interessat del mercat. Davant de l’art precuinat, ells aporten l’art de la innocence en la mirada, de l’autencitat del gest poètic, del sentiment de fruicio disprovist de falsedat o simulacre, i l’art es converteix en una actitud vital enfront del temps , de la historia o dels imperatius de la sociabilitat col;lectiva I gregària. En definitiva, aposten per l’art- total, tot defugint la convencio de la deconstruccio-reconstruccio de les formes sensé mes.
Els resultats de les seues accions poeticoartistiques esdevenen poderoses metàfores dels equivocs i les contradiccions de l'ésser humà perdut en l'eclecticisme o la relativitat i conformat al dirigisme emocional dels grans communicadors de masses. De vegades els suports matèrics, el cartell, la paraula o l’objecte més rabiosament quotidià esdevenen indicadors signics de la innocència en la mirada, de la reivindicacio de la simplicitat lúcida i lùdica o de la vida sense més.
Les accions-intervencions es concretaran cada jornada del 13 al 17 juliol, al pati del Palau Comtal de Cocentaina des de les 21.00 fins a les 22.00 hores.Tothom pot participar-hi activament aportant els seus punts de vista creatius al voltant d'itineraris que induiexen a certes reflexions esteticocritiques. Les mans i el fenomen tocar amb les mans centraran una de les intervencions, unes latres tindran com a protagonista l'accio de mirar i de veure l'entorn amb una altra mirada, també hi haurà cartels En Fanfare elaborats amb elements visuals i poètics o la celebracio d'un Laboratoire patacycliste per tal de general el procés artisitc col.lectiu.
Dialogist-Kantor treballa en diverses ciutats nordiques ( Amberes, Brussel.les, Berlin, principalment) des de fa ja cinc anys, dins d'un moviment de renovacio cri tica desl concepte d'art que aglutina nombroses col.lectius i moviments al voltant de centres d'art-total i de galeries poc convencionals on es reuneixen i materialitzen moltes d'aquestes intervencions.
Josep Lluis Peris Palau Comtal Cocentaina (Espana) 1998
------------------------------------------------------------------------------------------------------
<html>
<p><a class='iframe' href="http://dk500.tiddlyspot.com/index.html#jQuerySliderTest">Outside Webpage (Iframe)</a></p>
</html>
<script>
jQuery(".iframe").colorbox({iframe:true, width:"90%", height:"100%"});
</script>
.colorbox({rel:'a.brscPicasaLinkWithImage', slideshow:true})
https://picasaweb.google.com/105898452618087093313/Fumoir11_2011_PoriBoxKippis
<<tiddler PicasaJqueryincl>>
<html>
<h2 id="example">Example</h2>
<p>Click in the image and see the <strong>jQuery lightBox plugin</strong> in action.</p>
<div id="gallery">
<ul>
<li>
<a href="http://patacycliste.be/img.gif" title="Utilize a flexibilidade dos seletores da jQuery e crie um grupo de imagens como desejar. $('#gallery').lightBox();">
<img src="http://patacycliste.be/img.gif" width="72" height="72" alt="" />
</a>
</li>
</ul>
</div>
</html>
<script show>
jQuery('#gallery a').lightBox();
</script>
http://dk500.tiddlyspot.com/index.html#MunderEffectSwfPlayer
[[test with tumblr|http://museum00.tumblr.com/]]
#3eme colonne avec derniers updates par ex.
#print stuff tag vers print stuff & collages
/*
* jTweetsAnywhere V1.2.1
* http://thomasbillenstein.com/jTweetsAnywhere/
*
* Copyright 2010, Thomas Billenstein
* Licensed under the MIT license.
* http://thomasbillenstein.com/jTweetsAnywhere/license.txt
*/
(function($)
{
$.fn.jTweetsAnywhere = function(options)
{
// setup the default options
var options = $.extend(
{
/**
* The user's name who's tweet feed or list feed is displayed. This
* param is also used when a Twitter "Follow Button" is displayed. Usually
* this param is a string, but can also be an array of strings. If an array
* is supplied (and the params 'list' and 'searchParams' are null), a
* combined feed of all users is displayed.
*
* Sample: 'tbillenstein' or ['twitterapi', '...', '...']
*/
username: 'tbillenstein',
/**
* The name of a user's list where the tweet feed is generated from
*/
list: null,
/**
* A single search param string or an array of search params, to be used in
* a Twitter search call. All Twitter Search Params are supported
* See here for the details:
* http://apiwiki.twitter.com/Twitter-Search-API-Method%3A-search
*
* Sample: 'q=twitter' or ['q=twitter', 'geocode=48.856667,2.350833,30km']
*/
searchParams: null,
/**
* The number of tweets shown in the tweet feed. If this param is 0, no feed
* is displayed. For user or list feeds the maximum count is 20, for search
* results the maximum count is 100.
*
* Unlike in previous releases, since 1.2.0 jTweetsAnywhere is based on a
* tweets caching algorithm that will always deliver the requested count of
* tweets accepting that this request can only be fullfilled by calling Twitter
* more than once.
*
* IMPORTANT: Please always keep in mind, that the use of the Twitter API is
* rate limited. Non-authenticated users are rated IP-based and you have only
* 150 calls per hour available. Every retrieval of tweets counts and so does
* for example hovering over a profile image to show the hovercard.
* jTweetsAnywhere will always check the remaining count of free API calls before
* actually calling Twitter to avoid black listing your visitor's IP.
*/
count: 0,
/**
* A flag (true/false) that specifies whether to display a profile image in
* tweets. If the param is set to null (the default value), a profile image
* is displayed only if the feed represents a user's list or the result of a
* Twitter search.
*
* THIS OPTION IS DEPRECATED. You should use showTweetFeed.showProfileImages
* instead.
*/
tweetProfileImagePresent: null,
/**
* Each tweet that is loaded from Twitter will pass the tweetFilter. if
* the filter returns true, the tweet will be added to the tweets cache
* otherwise it is ignored. The defaultTweetFilter alsways retruns true
* but you can supply your own tweet filter to customize the tweet feed.
*/
tweetFilter: defaultTweetFilter,
/**
* A flag (true/false) that specifies whether to display a Tweet Feed
* or an object literal representing the configuration options for the
* Tweet Feed. This flag works in conjunction with the count parameter:
* - if count equals 0, no feed is displayed, ignoring showTweetFeed
* - if count not equals 0 and showTweetFeed equals false, no feed
* is displayed
* {
* expandHovercards: false, // Boolean - Show Hovercards in expanded mode.
*
* showTimestamp: true, // A flag (true/false) that specifies whether to display a tweet's timestamp
* // or an object literal representing the configuration options for the
* // timestamp.
* // {
* // refreshInterval: 0, // Time in seconds to be waited until the
* // // timestamps of the displayed tweets get refreshed
* // // 0 means no refreshing.
* // }
*
* showSource: false, // Boolean - Show info about the source of the tweet.
*
* showGeoLocation: true, // Boolean - Show geolocation info and link to Google maps.
*
* showInReplyTo: true, // Boolean - Show link to the "replied to" tweet (if available).
*
* showProfileImages: null, // A flag (true/false) that specifies whether to display a profile image in
* // tweets. If the param is set to null (the default value), a profile image
* // is displayed only if the feed represents a user's list or the result of a
* // Twitter search.
*
* showUserScreenNames: null, // A flag (true/false/null) that specifies whether to display a username in
* // tweets. If the param is set to null (the default value), a username
* // is displayed only if the feed represents a user's list or the result of a
* // Twitter search.
*
* showUserFullNames: false, // A flag (true/false/null) that specifies whether to display a user's full name
* // in tweets. If the param is set to null, a user's full name
* // is displayed only if the feed represents a user's list or the result of a
* // Twitter search.
*
* includeRetweets: true, // Boolean - Include native retweets in a user's tweet feed
*
* paging: // An object literal representing the configuration options for the
* { // paging support, that specifies how more/earlier tweets can be loaded
* mode: "none" // by using the supplied UI controls (more/next buttons, scrollbar).
* }, // Accepted values for mode are: "none" | "more" | "prev-next" | "endless-scroll"
* // if mode equals "endless-scroll" you have to set the height of the tweet feed
* // element (.jta-tweet-list) in your CSS to get a scrollbar! You should also set
* // the "overflow" attribute to "auto".
*
* autorefresh: // An object literal representing the configuration options for the
* { // autorefresh behaviour.
*
* // IMPORTANT: Please always keep in mind, that using the Twitter API is rate
* // limited. Non-authenticated users are rated IP-based and you have only 150
* // calls per hour available. Every retrieval of tweets counts and so does for
* // example hovering over a profile image to show the hovercard. jTweetsAnywhere will
* // always check the remaining count of free API calls before actually calling
* // Twitter to avoid black listing your visitor's IP.
*
* // However - choose your settings wisely to keep your visitors happy. An update
* // interval of 30 seconds on a feed that is updated averaged once per hour
* // does not make sense and is a total waste of remaining API calls!
*
* mode: "none", // Accepted values for mode are: "none" | "auto-insert" | "trigger-insert"
* // "none" (the default value) - disables the autorefresh feature
* // "auto-insert" - automatically insert the new tweets on top of the tweet feed
* // "trigger-insert" - if new tweets arrived, show or update a button that displays
* // the number of new tweets. These new tweets are inserted on top of the tweet
* // feed, if the user clicks on the button.
*
* interval: 60, // Time in seconds to be waited until the next request for new tweets. Minimum
* // value is 30.
*
* duration: 3600 // Time in seconds for how long the autorefresh will be active. After
* // this period of time, autorefreshing will stop. A value of -1 means
* // autorefresh for ever.
* }
* }
*/
showTweetFeed: true,
/**
* A flag (true/false) that specifies whether to display a Twitter "Follow
* Button".
*/
showFollowButton: false,
/**
* A flag (true/false) that specifies whether to display a Twitter "Connect
* Button" or an object literal representing the configuration options for
* the "Tweet Box".
* {
* size: 'medium' // String - The size of the Connect Button. Valid values are: small, medium, large, xlarge
* }
*/
showConnectButton: false,
/**
* A flag (true/false) that specifies whether to display Login Infos.
*/
showLoginInfo: false,
/**
* A flag (true/false) that specifies whether to display a Twitter "Tweet
* Box" or an object literal representing the configuration options for
* the "Tweet Box".
* {
* counter: true, // Boolean - Display a counter in the Tweet Box for counting characters
* width: 515, // Number - The width of the Tweet Box in pixels
* height: 65, // Number - The height of the Tweet Box in pixels
* label: "What's happening", // String - The text above the Tweet Box, a call to action
* defaultContent: <none>, // String - Pre-populated text in the Tweet Box. Useful for an @mention, a #hashtag, a link, etc.
* onTweet: <none> // Function - Specify a listener for when a tweet is sent from the Tweet Box. The listener receives two arguments: a plaintext tweet and an HTML tweet
* }
*/
showTweetBox: false,
/**
* A decorator is a function that is responsible for constructing a certain
* element of the widget. Most of the decorators return a HTML string.
* Exceptions are the mainDecorator, which defines the basic sequence of
* the widget's components, plus the linkDecorator, the usernameDecorator
* and the hashtagDecorator which return the string that is supplied as a
* function param, enriched with the HTML tags.
*
* For details, see the implementations of the default decorators. Each
* default decorator can be overwritten by your own implementation.
*/
mainDecorator: defaultMainDecorator,
tweetFeedDecorator: defaultTweetFeedDecorator,
tweetDecorator: defaultTweetDecorator,
tweetProfileImageDecorator: defaultTweetProfileImageDecorator,
tweetBodyDecorator: defaultTweetBodyDecorator,
tweetUsernameDecorator: defaultTweetUsernameDecorator,
tweetTextDecorator: defaultTweetTextDecorator,
tweetAttributesDecorator: defaultTweetAttributesDecorator,
tweetTimestampDecorator: defaultTweetTimestampDecorator,
tweetSourceDecorator: defaultTweetSourceDecorator,
tweetGeoLocationDecorator: defaultTweetGeoLocationDecorator,
tweetInReplyToDecorator: defaultTweetInReplyToDecorator,
tweetRetweeterDecorator: defaultTweetRetweeterDecorator,
tweetFeedControlsDecorator: defaultTweetFeedControlsDecorator,
tweetFeedControlsMoreBtnDecorator: defaultTweetFeedControlsMoreBtnDecorator,
tweetFeedControlsPrevBtnDecorator: defaultTweetFeedControlsPrevBtnDecorator,
tweetFeedControlsNextBtnDecorator: defaultTweetFeedControlsNextBtnDecorator,
tweetFeedAutorefreshTriggerDecorator: defaultTweetFeedAutorefreshTriggerDecorator,
tweetFeedAutorefreshTriggerContentDecorator: defaultTweetFeedAutorefreshTriggerContentDecorator,
connectButtonDecorator: defaultConnectButtonDecorator,
loginInfoDecorator: defaultLoginInfoDecorator,
loginInfoContentDecorator: defaultLoginInfoContentDecorator,
followButtonDecorator: defaultFollowButtonDecorator,
tweetBoxDecorator: defaultTweetBoxDecorator,
linkDecorator: defaultLinkDecorator,
usernameDecorator: defaultUsernameDecorator,
hashtagDecorator: defaultHashtagDecorator,
loadingDecorator: defaultLoadingDecorator,
errorDecorator: defaultErrorDecorator,
noDataDecorator: defaultNoDataDecorator,
/**
* Formatters are currently used for date format processing only.
*
* The tweetTimestampFormatter formats the tweet's timestamp to be shown
* in the tweet attributes section
*
* For details, see the implementation of the defaultTweetTimestampFormatter.
*/
tweetTimestampFormatter : defaultTweetTimestampFormatter,
/**
* The tweetTimestampTooltipFormatter formats the tweet's timestamp to be shown
* in the tooltip when hovering over the timestamp link.
*/
tweetTimestampTooltipFormatter : defaultTweetTimestampTooltipFormatter,
/**
* A visualizer is a function that is responsible for adding one or more
* elements to the DOM and thereby making them visible to the user.
* A visualizer might also be responsible to do the opposite effect:
* To remove one or more elements from the DOM.
*
* The tweetVisualizer gets called each time a tweet element should be
* appended or prepended to the tweet feed element.
*
* For details, see the implementation of the defaultTweetVisualizer.
*
* Each default visualizer can be overwritten by your own implementation.
*/
tweetVisualizer: defaultTweetVisualizer,
/**
* The loadingIndicatorVisualizer gets called each time data is retrieved
* from Twitter to visualize the loading indicator. This visualizer is also
* used to hide the loading indicator.
*
* For details, see the implementation of the defaultLoadingIndicatorVisualizer.
*/
loadingIndicatorVisualizer: defaultLoadingIndicatorVisualizer,
/**
* The autorefreshTriggerVisualizer will be called if the autorefresh
* trigger should be visualized or hidden.
*
* For details, see the implementation of the autorefreshTriggerVisualizer.
*/
autorefreshTriggerVisualizer: defaultAutorefreshTriggerVisualizer,
/**
* An event handler is a function that gets called whenever the event you
* are interested in, occurs.
*
* The onDataRequest event handler will be called immediatly before calling
* Twitter to retrieve new data and gives you the opportunity to deny
* the call by returning false from the function.
*
* This feature might be used in conjunction with the paging feature,
* especially when using the "endless-scroll" paging mode, to avoid the
* exhaustion of remaining Twitter API calls, before the rate limit is
* reached. The stats parameter contains statistical infos and counters
* that you can examine to base your decision whether to return true or
* false.
*/
onDataRequestHandler: defaultOnDataRequestHandler,
/**
* The onRateLimitData event handler is called each time
* jTweetsAnywhere retrieved the rate limit data from Twitter. The actual
* rate limit data is contained in the stats object.
*/
onRateLimitDataHandler: defaultOnRateLimitDataHandler,
_tweetFeedConfig:
{
expandHovercards: false,
showTimestamp:
{
refreshInterval: 0
},
showSource: false,
showGeoLocation: true,
showInReplyTo: true,
showProfileImages: null,
showUserScreenNames: null,
showUserFullNames: false,
includeRetweets: true,
paging:
{
mode: "none",
_limit: 0,
_offset: 0
},
autorefresh:
{
mode: "none",
interval: 60,
duration: 3600,
_startTime: null,
_triggerElement: null
},
_pageParam: 0,
_maxId: null,
_recLevel: 0,
_noData: false,
_clearBeforePopulate: false
},
_tweetBoxConfig:
{
counter: true,
width: 515,
height: 65,
label: "What's happening?",
defaultContent: '',
onTweet: function(textTweet, htmlTweet) {}
},
_connectButtonConfig:
{
size: "medium"
},
_baseSelector: null,
_baseElement: null,
_tweetFeedElement: null,
_tweetFeedControlsElement: null,
_followButtonElement: null,
_loginInfoElement: null,
_connectButtonElement: null,
_tweetBoxElement: null,
_loadingIndicatorElement: null,
_noDataElement: null,
_tweetsCache: [],
_autorefreshTweetsCache: [],
_stats:
{
dataRequestCount: 0,
rateLimitPreventionCount: 0,
rateLimit:
{
remaining_hits: 150,
hourly_limit: 150
}
}
}, options);
// no main decorator? nothing to do!
if (!options.mainDecorator)
{
return;
}
options._baseSelector = this.selector;
// if username is an array, create the search query and flatten username
if (typeof(options.username) != 'string')
{
if (!options.searchParams)
{
options.searchParams = ['q=from:' + options.username.join(" OR from:")];
}
options.username = options.username[0];
}
// if showTweetFeed is not set to a boolean value, we expect the configuration of
// the tweet feed
if (typeof(options.showTweetFeed) == 'object')
{
$.extend(true, options._tweetFeedConfig, options.showTweetFeed);
}
// if showTweetBox is not set to a boolean value, we expect the configuration of
// the TweetBox
if (typeof(options.showTweetBox) == 'object')
{
options._tweetBoxConfig = options.showTweetBox;
options.showTweetBox = true;
}
// if showConnectButton is not set to a boolean value, we expect the
// configuration of the Connect Button
if (typeof(options.showConnectButton) == 'object')
{
options._connectButtonConfig = options.showConnectButton;
options.showConnectButton = true;
}
// to be compatible, check the deprecated option 'tweetProfileImagePresent'
if (options._tweetFeedConfig.showProfileImages == null)
{
options._tweetFeedConfig.showProfileImages = options.tweetProfileImagePresent;
}
// if _tweetFeedConfig.showProfileImages is not set to a boolean value,
// we decide to show a profile image if the feed represents a user's
// list or the results of a Twitter search
if (options._tweetFeedConfig.showProfileImages == null)
{
options._tweetFeedConfig.showProfileImages = (options.list || options.searchParams) && options.tweetProfileImageDecorator;
}
// if _tweetFeedConfig.showUserScreenNames is not set to a boolean value,
// we decide to show a username if the feed represents a user's
// list or the results of a Twitter search or a tweet is a native retweet
if (options._tweetFeedConfig.showUserScreenNames == null)
{
if (options.list || options.searchParams)
{
options._tweetFeedConfig.showUserScreenNames = true;
}
if (!options.tweetUsernameDecorator)
{
options._tweetFeedConfig.showUserScreenNames = false;
}
}
// if _tweetFeedConfig.showUserFullNames is not set to a boolean value,
// we decide to show a user's full name if the feed represents a user's
// list or the results of a Twitter search or a tweet is a native retweet
if (options._tweetFeedConfig.showUserFullNames == null)
{
if (options.list || options.searchParams)
{
options._tweetFeedConfig.showUserFullNames = true;
}
if (!options.tweetUsernameDecorator)
{
options._tweetFeedConfig.showUserFullNames = false;
}
}
options.count = validateRange(options.count, 0, options.searchParams ? 100 : 20);
options._tweetFeedConfig.autorefresh.interval = Math.max(30, options._tweetFeedConfig.autorefresh.interval);
options._tweetFeedConfig.paging._offset = 0;
options._tweetFeedConfig.paging._limit = options.count;
// internally, the decision of what parts of a widget are to be
// displayed is based on the existence of the decorators
if (options.count == 0 || !options.showTweetFeed)
{
options.tweetFeedDecorator = null;
options.tweetFeedControlsDecorator = null;
}
if (options._tweetFeedConfig.paging.mode == 'none')
{
options.tweetFeedControlsDecorator = null;
}
if (!options.showFollowButton)
{
options.followButtonDecorator = null;
}
if (!options.showTweetBox)
{
options.tweetBoxDecorator = null;
}
if (!options.showConnectButton)
{
options.connectButtonDecorator = null;
}
if (!options.showLoginInfo)
{
options.loginInfoDecorator = null;
}
if (!options._tweetFeedConfig.showTimestamp)
{
options.tweetTimestampDecorator = null;
}
if (!options._tweetFeedConfig.showSource)
{
options.tweetSourceDecorator = null;
}
if (!options._tweetFeedConfig.showGeoLocation)
{
options.tweetGeoLocationDecorator = null;
}
if (!options._tweetFeedConfig.showInReplyTo)
{
options.tweetInReplyToDecorator = null;
}
// setup ajax
$.ajaxSetup({ cache: true });
return this.each(function()
{
// the DOM element, where to display the widget
options._baseElement = $(this);
// create the widget's necessary sub DOM elements
options._tweetFeedElement = options.tweetFeedDecorator ? $(options.tweetFeedDecorator(options)) : null;
options._tweetFeedControlsElement = options.tweetFeedControlsDecorator ? $(options.tweetFeedControlsDecorator(options)) : null;
options._followButtonElement = options.followButtonDecorator ? $(options.followButtonDecorator(options)) : null;
options._tweetBoxElement = options.tweetBoxDecorator ? $(options.tweetBoxDecorator(options)) : null;
options._connectButtonElement = options.connectButtonDecorator ? $(options.connectButtonDecorator(options)): null;
options._loginInfoElement = options.loginInfoDecorator ? $(options.loginInfoDecorator(options)) : null;
// add the widget to the DOM
options.mainDecorator(options);
populateTweetFeed(options);
populateAnywhereControls(options);
// bind event handlers to support paging
bindEventHandlers(options);
// install autorefresh support
options._tweetFeedConfig.autorefresh._startTime = new Date().getTime();
startAutorefresh(options);
startTimestampRefresh(options);
});
};
defaultMainDecorator = function(options)
{
// defines the default sequence of the widget's elements
if (options._tweetFeedElement)
{
options._baseElement.append(options._tweetFeedElement);
}
if (options._tweetFeedControlsElement)
{
options._baseElement.append(options._tweetFeedControlsElement);
}
if (options._connectButtonElement)
{
options._baseElement.append(options._connectButtonElement);
}
if (options._loginInfoElement)
{
options._baseElement.append(options._loginInfoElement);
}
if (options._followButtonElement)
{
options._baseElement.append(options._followButtonElement);
}
if (options._tweetBoxElement)
{
options._baseElement.append(options._tweetBoxElement);
}
};
defaultTweetFeedControlsDecorator = function(options)
{
// the default tweet feed's paging controls
var html = '';
if (options._tweetFeedConfig.paging.mode == 'prev-next')
{
if (options.tweetFeedControlsPrevBtnDecorator)
{
html += options.tweetFeedControlsPrevBtnDecorator(options);
}
if (options.tweetFeedControlsNextBtnDecorator)
{
html += options.tweetFeedControlsNextBtnDecorator(options);
}
}
else if (options._tweetFeedConfig.paging.mode == 'endless-scroll')
{
// nothing to do here atm
}
else
{
if (options.tweetFeedControlsMoreBtnDecorator)
{
html += options.tweetFeedControlsMoreBtnDecorator(options);
}
}
return '<div class="jta-tweet-list-controls">' + html + '</div>';
};
defaultTweetFeedControlsMoreBtnDecorator = function(options)
{
return '<span class="jta-tweet-list-controls-button jta-tweet-list-controls-button-more">' + 'More' + '</span>';
};
defaultTweetFeedControlsPrevBtnDecorator = function(options)
{
return '<span class="jta-tweet-list-controls-button jta-tweet-list-controls-button-prev">' + 'Prev' + '</span>';
};
defaultTweetFeedControlsNextBtnDecorator = function(options)
{
return '<span class="jta-tweet-list-controls-button jta-tweet-list-controls-button-next">' + 'Next' + '</span>';
};
defaultTweetFeedAutorefreshTriggerDecorator = function(count, options)
{
var html = '';
if (options.tweetFeedAutorefreshTriggerContentDecorator)
{
html = options.tweetFeedAutorefreshTriggerContentDecorator(count, options);
}
return '<li class="jta-tweet-list-autorefresh-trigger">' + html + '</li>';
};
defaultTweetFeedAutorefreshTriggerContentDecorator = function(count, options)
{
var content = '' + count + ' new ' + (count > 1 ? ' tweets' : ' tweet');
return '<span class="jta-tweet-list-autorefresh-trigger-content">' + content + '</span>';
};
defaultTweetFeedDecorator = function(options)
{
// the default placeholder for the tweet feed is an unordered list
return '<ul class="jta-tweet-list"></ul>';
};
defaultTweetDecorator = function(tweet, options)
{
// the default tweet is made of the optional user's profile image and the
// tweet body inside a list item element
var html = '';
if (options._tweetFeedConfig.showProfileImages)
{
html += options.tweetProfileImageDecorator(tweet, options);
}
if (options.tweetBodyDecorator)
{
html += options.tweetBodyDecorator(tweet, options);
}
html += '<div class="jta-clear"> </div>';
return '<li class="jta-tweet-list-item">' + html + '</li>';
};
defaultTweetProfileImageDecorator = function(tweet, options)
{
// if tweet is a native retweet, use the retweet's profile
var t = tweet.retweeted_status || tweet;
// the default profile image decorator simply adds a link to the user's Twitter profile
var screenName = t.user ? t.user.screen_name : false || t.from_user;
var imageUrl = t.user ? t.user.profile_image_url : false || t.profile_image_url;
var html =
'<a class="jta-tweet-profile-image-link" href="http://twitter.com/' + screenName + '" target="_blank">' +
'<img src="' + imageUrl + '" alt="' + screenName + '"' +
(isAnywherePresent() ? '' : (' title="' + screenName + '"')) +
'/>' +
'</a>';
return '<div class="jta-tweet-profile-image">' + html + '</div>';
};
defaultTweetBodyDecorator = function(tweet, options)
{
// the default tweet body contains the tweet text and the tweet's creation date
var html = '';
if (options.tweetTextDecorator)
{
html += options.tweetTextDecorator(tweet, options);
}
if (options.tweetAttributesDecorator)
{
html += options.tweetAttributesDecorator(tweet, options);
}
return '<div class="jta-tweet-body ' + (options._tweetFeedConfig.showProfileImages ? 'jta-tweet-body-list-profile-image-present' : '') + '">' + html + '</div>';
};
defaultTweetTextDecorator = function(tweet, options)
{
var tweetText = tweet.text;
// if usernames should be visible and tweet is a native retweet, use
// the original tweet text
if (tweet.retweeted_status &&
(
options._tweetFeedConfig.showUserScreenNames ||
options._tweetFeedConfig.showUserScreenNames == null ||
options._tweetFeedConfig.showUserFullNames ||
options._tweetFeedConfig.showUserFullNames == null
)
)
{
tweetText = tweet.retweeted_status.text;
}
// the default tweet text decorator optionally marks links, @usernames,
// and #hashtags
if (options.linkDecorator)
{
tweetText = options.linkDecorator(tweetText, options);
}
if (options.usernameDecorator)
{
tweetText = options.usernameDecorator(tweetText, options);
}
if (options.hashtagDecorator)
{
tweetText = options.hashtagDecorator(tweetText, options);
}
if (options._tweetFeedConfig.showUserScreenNames ||
options._tweetFeedConfig.showUserFullNames ||
tweet.retweeted_status &&
(
options._tweetFeedConfig.showUserScreenNames == null ||
options._tweetFeedConfig.showUserFullNames == null
)
)
{
tweetText = options.tweetUsernameDecorator(tweet, options) + ' ' + tweetText;
}
return '<span class="jta-tweet-text">' + tweetText + '</span>';
};
defaultTweetUsernameDecorator = function(tweet, options)
{
// if tweet is a native retweet, use the retweet's profile
var t = tweet.retweeted_status || tweet;
var screenName = t.user ? t.user.screen_name : false || t.from_user;
var fullName = t.user ? t.user.name : null;
var htmlScreenName;
if (screenName && (options._tweetFeedConfig.showUserScreenNames || (options._tweetFeedConfig.showUserScreenNames == null && tweet.retweeted_status)))
{
htmlScreenName =
'<span class="jta-tweet-user-screen-name">' +
'<a class="jta-tweet-user-screen-name-link" href="http://twitter.com/' + screenName + '" target="_blank">' +
screenName +
'</a>' +
'</span>';
}
var htmlFullName;
if (fullName && (options._tweetFeedConfig.showUserFullNames || (options._tweetFeedConfig.showUserFullNames == null && tweet.retweeted_status)))
{
htmlFullName =
'<span class="jta-tweet-user-full-name">' +
(htmlScreenName ? ' (' : '') +
'<a class="jta-tweet-user-full-name-link" href="http://twitter.com/' + screenName + '" name="' + screenName + '" target="_blank">' +
fullName +
'</a>' +
(htmlScreenName ? ')' : '') +
'</span>';
}
var html = "";
if (htmlScreenName)
{
html += htmlScreenName;
}
if (htmlFullName)
{
if (htmlScreenName)
{
html += ' ';
}
html += htmlFullName;
}
if (htmlScreenName || htmlFullName)
{
html =
'<span class="jta-tweet-user-name">' +
(tweet.retweeted_status ? 'RT ' : '') +
html +
'</span>';
}
return html;
};
defaultTweetAttributesDecorator = function(tweet, options)
{
var html = '';
if (options.tweetTimestampDecorator ||
options.tweetSourceDecorator ||
options.tweetGeoLocationDecorator ||
options.tweetInReplyToDecorator ||
(tweet.retweeted_status && options.tweetRetweeterDecorator)
)
{
html += '<span class="jta-tweet-attributes">';
if (options.tweetTimestampDecorator)
{
html += options.tweetTimestampDecorator(tweet, options);
}
if (options.tweetSourceDecorator)
{
html += options.tweetSourceDecorator(tweet, options);
}
if (options.tweetGeoLocationDecorator)
{
html += options.tweetGeoLocationDecorator(tweet, options);
}
if (options.tweetInReplyToDecorator)
{
html += options.tweetInReplyToDecorator(tweet, options);
}
if (tweet.retweeted_status && options.tweetRetweeterDecorator)
{
html += options.tweetRetweeterDecorator(tweet, options);
}
html += '</span>';
}
return html;
};
defaultTweetTimestampDecorator = function(tweet, options)
{
// the default tweet timestamp decorator does a little bit of Twitter like formatting.
// if tweet is a native retweet, use the retweet's timestamp
var tw = tweet.retweeted_status || tweet;
// reformat timestamp from Twitter, so IE is happy
var createdAt = formatDate(tw.created_at);
// format the timestamp by the tweetTimestampFormatter
var tweetTimestamp = options.tweetTimestampFormatter(createdAt);
var tweetTimestampTooltip = options.tweetTimestampTooltipFormatter(createdAt);
var screenName = tw.user ? tw.user.screen_name : false || tw.from_user;
var html =
'<span class="jta-tweet-timestamp">' +
'<a class="jta-tweet-timestamp-link" data-timestamp="' + createdAt +
'" href="http://twitter.com/' + screenName + '/status/' + tw.id + '" target="_blank" title="' +
tweetTimestampTooltip + '">' +
tweetTimestamp +
'</a>' +
'</span>';
return html;
};
defaultTweetTimestampTooltipFormatter = function(timeStamp)
{
var d = new Date(timeStamp);
return d.toLocaleString();
};
defaultTweetTimestampFormatter = function(timeStamp)
{
var now = new Date();
var diff = parseInt((now.getTime() - Date.parse(timeStamp)) / 1000);
var tweetTimestamp = '';
if (diff < 60)
{
tweetTimestamp += diff + ' second' + (diff == 1 ? '' : 's') + ' ago';
}
else if (diff < 3600)
{
var t = parseInt((diff + 30) / 60);
tweetTimestamp += t + ' minute' + (t == 1 ? '' : 's') + ' ago';
}
else if (diff < 86400)
{
var t = parseInt((diff + 1800) / 3600);
tweetTimestamp += t + ' hour' + (t == 1 ? '' : 's') + ' ago';
}
else
{
var d = new Date(timeStamp);
var period = 'AM';
var hours = d.getHours();
if (hours > 12)
{
hours -= 12;
period = 'PM';
}
var mins = d.getMinutes();
var minutes = (mins < 10 ? '0' : '') + mins;
var monthName = [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ];
tweetTimestamp += monthName[d.getMonth()] + ' ' + d.getDate();
if (d.getFullYear() < now.getFullYear())
{
tweetTimestamp += ', ' + d.getFullYear();
}
var t = parseInt((diff + 43200) / 86400);
tweetTimestamp += ' (' + t + ' day' + (t == 1 ? '' : 's') + ' ago)';
}
return tweetTimestamp;
};
exTimestampFormatter = function(timeStamp)
{
var diff = parseInt((new Date().getTime() - Date.parse(timeStamp)) / 1000);
var tweetTimestamp = '';
if (diff < 60)
{
tweetTimestamp += 'less than a minute ago';
}
else if (diff < 3600)
{
var t = parseInt((diff + 30) / 60);
tweetTimestamp += t + ' minute' + (t == 1 ? '' : 's') + ' ago';
}
else if (diff < 86400)
{
var t = parseInt((diff + 1800) / 3600);
tweetTimestamp += 'about ' + t + ' hour' + (t == 1 ? '' : 's') + ' ago';
}
else
{
var t = parseInt((diff + 43200) / 86400);
tweetTimestamp += 'about ' + t + ' day' + (t == 1 ? '' : 's') + ' ago';
var d = new Date(timeStamp);
var period = 'AM';
var hours = d.getHours();
if (hours > 12)
{
hours -= 12;
period = 'PM';
}
var mins = d.getMinutes();
var minutes = (mins < 10 ? '0' : '') + mins;
tweetTimestamp += ' (' + hours + ':' + minutes + ' ' + period + ' ' + (d.getMonth() + 1) + '/' + d.getDate() + '/' + d.getFullYear() + ')';
}
return tweetTimestamp;
};
defaultTweetSourceDecorator = function(tweet, options)
{
// if tweet is a native retweet, use the retweet's source
var tw = tweet.retweeted_status || tweet;
var source = tw.source.replace(/\<\;/gi,'<').replace(/\>\;/gi,'>').replace(/\"\;/gi,'"');
var html =
'<span class="jta-tweet-source">' +
' via ' +
'<span class="jta-tweet-source-link">' +
source +
'</span>' +
'</span>';
return html;
};
defaultTweetGeoLocationDecorator = function(tweet, options)
{
var html = '';
// if tweet is a native retweet, use the retweet's source
var tw = tweet.retweeted_status || tweet;
var q;
if (tw.geo && tw.geo.coordinates)
{
q = tw.geo.coordinates.join();
}
else if (tw.place && tw.place.full_name)
{
q = tw.place.full_name;
}
if (q)
{
var location = 'here';
if (tw.place && tw.place.full_name)
{
location = tw.place.full_name;
}
var link = 'http://maps.google.com/maps?q=' + q;
html =
'<span class="jta-tweet-location">' +
' from ' +
'<a class="jta-tweet-location-link" href="' + link + '" target="_blank">' +
location +
'</a>' +
'</span>';
}
return html;
};
defaultTweetInReplyToDecorator = function(tweet, options)
{
// if tweet is a native retweet, use the retweet's source
var tw = tweet.retweeted_status || tweet;
var html = '';
if (tw.in_reply_to_status_id && tw.in_reply_to_screen_name)
{
html =
'<span class="jta-tweet-inreplyto">' +
' ' +
'<a class="jta-tweet-inreplyto-link" href="http://twitter.com/' + tw.in_reply_to_screen_name + '/status/' + tw.in_reply_to_status_id + '" target="_blank">' +
'in reply to ' + tw.in_reply_to_screen_name +
'</a>' +
'</span>';
}
return html;
};
defaultTweetRetweeterDecorator = function(tweet, options)
{
var html = '';
if (tweet.retweeted_status)
{
var screenName = tweet.user ? tweet.user.screen_name : false || tweet.from_user;
var rtc = (tweet.retweeted_status.retweet_count || 0) - 1;
var link =
'<a class="jta-tweet-retweeter-link" href="http://twitter.com/' + screenName + '" target="_blank">' +
screenName +
'</a>';
var rtcount = ' and ' + rtc + (rtc > 1 ? ' others' : ' other');
html =
'<br/>' +
'<span class="jta-tweet-retweeter">' +
'Retweeted by ' + link +
(rtc > 0 ? rtcount : '') +
'</span>';
}
return html;
};
defaultConnectButtonDecorator = function(options)
{
// the default placeholder for the @Anywhere ConnectButton
return '<div class="jta-connect-button"></div>';
};
defaultLoginInfoDecorator = function(options)
{
// the default placeholder for the LoginInfo
return '<div class="jta-login-info"></div>';
};
defaultLoginInfoContentDecorator = function(options, T)
{
// the default markup of the LoginInfo content: the user's profile image, the
// user's screen_name and a "button" to sign out
var html = '';
if (T.isConnected())
{
var screenName = T.currentUser.data('screen_name');
var imageUrl = T.currentUser.data('profile_image_url');
html =
'<div class="jta-login-info-profile-image">' +
'<a href="http://twitter.com/' + screenName + '" target="_blank">' +
'<img src="' + imageUrl + '" alt="' + screenName + '" title="' + screenName + '"/>' +
'</a>' +
'</div>' +
'<div class="jta-login-info-block">' +
'<div class="jta-login-info-screen-name">' +
'<a href="http://twitter.com/' + screenName + '" target="_blank">' + screenName + '</a>' +
'</div>' +
'<div class="jta-login-info-sign-out">' +
'Sign out' +
'</div>' +
'</div>' +
'<div class="jta-clear"> </div>'
;
}
return html;
};
defaultFollowButtonDecorator = function(options)
{
// the default placeholder for the @Anywhere FollowButton
return '<div class="jta-follow-button"></div>';
};
defaultTweetBoxDecorator = function(options)
{
// the default placeholder for the @Anywhere TweetBox
return '<div class="jta-tweet-box"></div>';
};
defaultLinkDecorator = function(text, options)
{
// the regex to markup links
return text.replace(/((ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?)/gi,'<a href="$1" class="jta-tweet-a jta-tweet-link" target="_blank" rel="nofollow">$1<\/a>');
};
defaultUsernameDecorator = function(text, options)
{
// the regex to markup @usernames. if @Anywhere is present the task is left to
// them
return isAnywherePresent() ? text : text.replace(/@([a-zA-Z0-9_]+)/gi,'@<a href="http://twitter.com/$1" class="jta-tweet-a twitter-anywhere-user" target="_blank" rel="nofollow">$1<\/a>');
};
defaultHashtagDecorator = function(text, options)
{
// the regex to markup #hashtags
return text.replace(/#([a-zA-Z0-9_]+)/gi,'<a href="http://search.twitter.com/search?q=%23$1" class="jta-tweet-a jta-tweet-hashtag" title="#$1" target="_blank" rel="nofollow">#$1<\/a>');
};
defaultLoadingDecorator = function(options)
{
// the default loading decorator simply says: loading ...
return '<li class="jta-loading">loading ...</li>';
};
defaultErrorDecorator = function(errorText, options)
{
// the default error decorator shows the error message
return '<li class="jta-error">ERROR: ' + errorText + '</li>';
};
defaultNoDataDecorator = function(options)
{
// the default no-data decorator simply says: No more data
return '<li class="jta-nodata">No more data</li>';
};
defaultTweetFilter = function(tweet, options)
{
return true;
};
defaultTweetVisualizer = function(tweetFeedElement, tweetElement, inserter, options)
{
// insert (append/prepend) the tweetElement to the tweetFeedElement
tweetFeedElement[inserter](tweetElement);
};
defaultLoadingIndicatorVisualizer = function(tweetFeedElement, loadingIndicatorElement, options, callback)
{
defaultVisualizer(tweetFeedElement, loadingIndicatorElement, 'append', 'fadeIn', 600, 'fadeOut', 200, callback);
};
defaultAutorefreshTriggerVisualizer = function(tweetFeedElement, triggerElement, options, callback)
{
defaultVisualizer(tweetFeedElement, triggerElement, 'prepend', 'slideDown', 600, 'fadeOut', 200, callback);
};
defaultVisualizer = function(container, element, inserter, effectIn, durationIn, effectOut, durationOut, callback)
{
// if param container is null element has to be removed from
// the DOM, else element has to be inserted in container
// if param callback is not null, the callback function must be called
// in any case, if the visualizer is done
var cb = function()
{
if (callback)
{
callback();
}
};
if (container)
{
element.hide();
container[inserter](element);
element[effectIn](durationIn, cb);
}
else
{
element[effectOut](durationOut, function()
{
element.remove();
cb();
});
}
};
defaultOnDataRequestHandler = function(stats, options)
{
return true;
};
defaultOnRateLimitDataHandler = function(stats, options)
{
};
updateLoginInfoElement = function(options, T)
{
// update the content of the LoginInfo element
if (options._loginInfoElement && options.loginInfoContentDecorator)
{
options._loginInfoElement.children().remove();
options._loginInfoElement.append(options.loginInfoContentDecorator(options, T));
$(options._baseSelector + ' .jta-login-info-sign-out').bind('click', function()
{
twttr.anywhere.signOut();
});
}
};
getFeedUrl = function(options, flPaging)
{
// create the Twitter API URL based on the configuration options
var url = ('https:' == document.location.protocol ? 'https:' : 'http:');
if (options.searchParams)
{
url += '//search.twitter.com/search.json?' +
((options.searchParams instanceof Array) ? options.searchParams.join('&') : options.searchParams) +
'&rpp=100';
}
else if (options.list)
{
url += '//api.twitter.com/1/' + options.username + '/lists/' + options.list + '/statuses.json?per_page=20';
}
else
{
url += '//api.twitter.com/1/statuses/user_timeline.json?screen_name=' + options.username + '&count=20';
if (options._tweetFeedConfig.includeRetweets)
url += '&include_rts=true';
}
if (flPaging)
{
url +=
(options._tweetFeedConfig._maxId ? '&max_id=' + options._tweetFeedConfig._maxId : '') +
'&page=' + options._tweetFeedConfig._pageParam;
}
url += '&callback=?';
return url;
};
isAnywherePresent = function()
{
// check, if @Anywhere is present
return typeof(twttr) != 'undefined';
};
clearTweetFeed = function(options)
{
if (options._tweetFeedElement)
{
options._tweetFeedElement.empty();
}
};
populateTweetFeed = function(options)
{
// if a tweet feed is to be displayed, get the tweets and show them
if (options.tweetDecorator && options._tweetFeedElement)
{
getPagedTweets(options, function(tweets, options)
{
if (options._tweetFeedConfig._clearBeforePopulate)
{
clearTweetFeed(options);
}
hideLoadingIndicator(options, function()
{
// process the tweets
$.each(tweets, function(idx, tweet)
{
// decorate the tweet and give it to the tweet visualizer
options.tweetVisualizer(
options._tweetFeedElement,
$(options.tweetDecorator(tweet, options)),
'append',
options
);
});
if (options._tweetFeedConfig._noData && options.noDataDecorator && !options._tweetFeedConfig._noDataElement)
{
options._tweetFeedConfig._noDataElement = $(options.noDataDecorator(options));
options._tweetFeedElement.append(options._tweetFeedConfig._noDataElement);
}
if (options._tweetFeedConfig._clearBeforePopulate)
{
options._tweetFeedElement.scrollTop(0);
}
addHovercards(options);
});
});
}
};
populateTweetFeed2 = function(options)
{
if (options._tweetFeedElement && options._autorefreshTweetsCache.length > 0)
{
if (options._tweetFeedConfig.autorefresh.mode == 'trigger-insert')
{
if (options._tweetFeedConfig.autorefresh._triggerElement)
{
if (options.tweetFeedAutorefreshTriggerContentDecorator)
{
options._tweetFeedConfig.autorefresh._triggerElement.html(
options.tweetFeedAutorefreshTriggerContentDecorator(options._autorefreshTweetsCache.length, options)
);
}
}
else
{
if (options.tweetFeedAutorefreshTriggerDecorator)
{
options._tweetFeedConfig.autorefresh._triggerElement =
$(options.tweetFeedAutorefreshTriggerDecorator(options._autorefreshTweetsCache.length, options));
options._tweetFeedConfig.autorefresh._triggerElement.bind('click', function()
{
options.autorefreshTriggerVisualizer(
null,
options._tweetFeedConfig.autorefresh._triggerElement,
options,
function()
{
insertTriggerTweets(options);
}
);
options._tweetFeedConfig.autorefresh._triggerElement = null;
});
options.autorefreshTriggerVisualizer(options._tweetFeedElement, options._tweetFeedConfig.autorefresh._triggerElement, options);
}
}
}
else
{
insertTriggerTweets(options);
}
}
};
insertTriggerTweets = function(options)
{
// populate the tweet feed with tweets from the autorefresh cache
if (options.tweetDecorator && options._autorefreshTweetsCache.length > 0)
{
// process the autorefresh cache
while (options._autorefreshTweetsCache.length > 0)
{
// get the last tweet and remove it from the autorefresh cache
var tweet = options._autorefreshTweetsCache.pop();
// put that tweet on top of the tweets cache
options._tweetsCache.unshift(tweet);
// adjust paging offset
options._tweetFeedConfig.paging._offset++;
// decorate the tweet and give it to the tweet visualizer
options.tweetVisualizer(
options._tweetFeedElement,
$(options.tweetDecorator(tweet, options)),
'prepend',
options
);
}
addHovercards(options);
}
};
addHovercards = function(options)
{
if (isAnywherePresent())
{
// if @Anywhere is present, append Hovercards to @username and
// profile images
twttr.anywhere(function(T)
{
T(options._baseSelector + ' .jta-tweet-list').hovercards({expanded: options._tweetFeedConfig.expandHovercards});
T(options._baseSelector + ' .jta-tweet-profile-image img').hovercards(
{
expanded: options._tweetFeedConfig.expandHovercards,
username: function(node) { return node.alt; }
});
T(options._baseSelector + ' .jta-tweet-retweeter-link').hovercards(
{
expanded: options._tweetFeedConfig.expandHovercards,
username: function(node) { return node.text; }
});
T(options._baseSelector + ' .jta-tweet-user-screen-name-link').hovercards(
{
expanded: options._tweetFeedConfig.expandHovercards,
username: function(node) { return node.text; }
});
T(options._baseSelector + ' .jta-tweet-user-full-name-link').hovercards(
{
expanded: options._tweetFeedConfig.expandHovercards,
username: function(node) { return node.name; }
});
});
}
};
populateAnywhereControls = function(options)
{
if (isAnywherePresent())
{
twttr.anywhere(function(T)
{
// optionally add an @Anywhere TweetBox
if (options.tweetBoxDecorator)
{
T(options._baseSelector + ' .jta-tweet-box').tweetBox(options._tweetBoxConfig);
}
// optionally add an @Anywhere FollowButton
if (options.followButtonDecorator)
{
T(options._baseSelector + ' .jta-follow-button').followButton(options.username);
}
// optionally add an @Anywhere ConnectButton
if (options.connectButtonDecorator)
{
var o = $.extend(
{
authComplete: function(user)
{
// display/update login infos on connect/signin event
updateLoginInfoElement(options, T);
},
signOut: function()
{
// display/update login infos on signout event
updateLoginInfoElement(options, T);
}
}, options._connectButtonConfig);
T(options._baseSelector + ' .jta-connect-button').connectButton(o);
// display/update login infos
updateLoginInfoElement(options, T);
}
});
}
};
bindEventHandlers = function(options)
{
if (options.tweetFeedControlsDecorator)
{
if (options._tweetFeedConfig.paging.mode == 'prev-next')
{
$(options._baseSelector + ' .jta-tweet-list-controls-button-prev').bind('click', function()
{
if (!isLoading(options) && options._tweetFeedConfig.paging._offset > 0)
{
prevPage(options, true);
}
});
$(options._baseSelector + ' .jta-tweet-list-controls-button-next').bind('click', function()
{
if (!isLoading(options))
{
nextPage(options, true);
}
});
}
else if (options._tweetFeedConfig.paging.mode == 'endless-scroll')
{
options._tweetFeedElement.bind("scroll", function()
{
if (!isLoading(options) && ($(this)[0].scrollHeight - $(this).scrollTop() == $(this).outerHeight()))
{
nextPage(options, false);
}
});
}
else
{
$(options._baseSelector + ' .jta-tweet-list-controls-button-more').bind('click', function()
{
if (!isLoading(options))
{
nextPage(options, false);
}
});
}
}
};
nextPage = function(options, flClear)
{
doPage(options, flClear, Math.min(options._tweetFeedConfig.paging._offset + options._tweetFeedConfig.paging._limit, options._tweetsCache.length));
};
prevPage = function(options, flClear)
{
doPage(options, flClear, Math.max(0, options._tweetFeedConfig.paging._offset - options._tweetFeedConfig.paging._limit));
};
doPage = function(options, flClear, newOffset)
{
options._tweetFeedConfig.paging._offset = newOffset;
options._tweetFeedConfig._clearBeforePopulate = flClear;
populateTweetFeed(options);
};
startAutorefresh = function(options)
{
if (options._tweetFeedConfig.autorefresh.mode != 'none' &&
options._tweetFeedConfig.paging.mode != 'prev-next' &&
options._tweetFeedConfig.autorefresh.duration != 0 &&
(
options._tweetFeedConfig.autorefresh.duration < 0 ||
(new Date().getTime() - options._tweetFeedConfig.autorefresh._startTime) <= options._tweetFeedConfig.autorefresh.duration * 1000
)
)
{
window.setTimeout(function() { processAutorefresh(options); }, options._tweetFeedConfig.autorefresh.interval * 1000);
}
};
stopAutorefresh = function(options)
{
options._tweetFeedConfig.autorefresh.duration = 0;
};
processAutorefresh = function(options)
{
if (options._tweetFeedConfig.autorefresh.duration != 0)
{
// load the data ...
getRateLimitedData(options, true, getFeedUrl(options, false), function(data, options)
{
// reverse the sequence of the autorefresh tweets ...
var tweets = (data.results || data).slice(0);
tweets.reverse();
// ...then process them
$.each(tweets, function(idx, tweet)
{
// if this tweet is already in the standard tweets cache, ignore
if (!isTweetInCache(tweet, options))
{
// optionally filter tweet ...
if (options.tweetFilter(tweet, options))
{
// ... then put it to the top of the autorefresh cache
options._autorefreshTweetsCache.unshift(tweet);
}
}
});
populateTweetFeed2(options);
});
// restart autorefresh
startAutorefresh(options);
}
};
startTimestampRefresh = function(options)
{
if (
options.tweetTimestampDecorator &&
typeof(options._tweetFeedConfig.showTimestamp) == 'object' &&
options._tweetFeedConfig.showTimestamp.refreshInterval > 0
)
{
window.setTimeout(function() { processTimestampRefresh(options); }, options._tweetFeedConfig.showTimestamp.refreshInterval * 1000);
}
};
processTimestampRefresh = function(options)
{
$.each(options._tweetFeedElement.find('.jta-tweet-timestamp-link'), function(idx, element)
{
var dataTimestamp = $(element).attr('data-timestamp');
$(element).html(options.tweetTimestampFormatter(dataTimestamp));
});
startTimestampRefresh(options);
};
isTweetInCache = function(tweet, options)
{
var l = options._tweetsCache.length;
for (var i = 0; i < l; i++)
{
if (tweet.id == options._tweetsCache[i].id)
{
return true;
}
}
return false;
};
showLoadingIndicator = function(options)
{
if (options._tweetFeedElement && options.loadingDecorator && !options._loadingIndicatorElement)
{
options._loadingIndicatorElement = $(options.loadingDecorator(options));
options.loadingIndicatorVisualizer(options._tweetFeedElement, options._loadingIndicatorElement, options, null);
options._tweetFeedElement.scrollTop(1000000);
}
};
hideLoadingIndicator = function(options, callback)
{
if (options._loadingIndicatorElement)
{
options.loadingIndicatorVisualizer(null, options._loadingIndicatorElement, options, callback);
options._loadingIndicatorElement = null;
}
else
{
if (callback)
{
callback();
}
}
};
isLoading = function(options)
{
return options._loadingIndicatorElement != null;
};
formatDate = function(dateStr)
{
return dateStr.replace(/^([a-z]{3})( [a-z]{3} \d\d?)(.*)( \d{4})$/i, '$1,$2$4$3');
};
validateRange = function(num, lo, hi)
{
if (num < lo)
num = lo;
if (num > hi)
num = hi;
return num;
};
showError = function(options, errorText)
{
if (options.errorDecorator && options._tweetFeedElement)
{
options._tweetFeedElement.append(options.errorDecorator(errorText, options));
}
};
getPagedTweets = function(options, callback)
{
options._tweetFeedConfig._recLevel = 0;
getRecPagedTweets(options, options._tweetFeedConfig.paging._offset, options._tweetFeedConfig.paging._limit, callback);
};
getRecPagedTweets = function(options, offset, limit, callback)
{
++options._tweetFeedConfig._recLevel;
if (offset + limit <= options._tweetsCache.length ||
options._tweetFeedConfig._recLevel > 3 ||
options._tweetFeedConfig._noData
)
{
// if the requested data is already cached or the max. no. of
// consecutive API calls is reached, use the records
if (offset + limit > options._tweetsCache.length)
{
limit = Math.max(0, options._tweetsCache.length - offset);
}
var tweets = [];
for (var i = 0; i < limit; i++)
{
tweets[i] = options._tweetsCache[offset + i];
}
callback(tweets, options);
}
else
{
// ... if not, load the data, fill the cache and try again
++options._tweetFeedConfig._pageParam;
getRateLimitedData(options, false, getFeedUrl(options, true), function(data, options)
{
var tweets = data.results || data;
if (tweets.length == 0)
{
options._tweetFeedConfig._noData = true;
}
else
{
$.each(tweets, function(idx, tweet)
{
// Snowflake support: just update ids that are currently used
if (tweet.id_str) { tweet.id = tweet.id_str; }
if (tweet.in_reply_to_status_id_str) { tweet.in_reply_to_status_id = tweet.in_reply_to_status_id_str; }
// save the first tweet id for subsequent paging requests
if (!options._tweetFeedConfig._maxId)
{
options._tweetFeedConfig._maxId = tweet.id;
}
// optionally filter tweet ...
if (options.tweetFilter(tweet, options))
{
// then put it into the cache
options._tweetsCache.push(tweet);
}
});
}
getRecPagedTweets(options, offset, limit, callback);
});
}
};
getRateLimitedData = function(options, flAutorefresh, url, callback)
{
getRateLimit(options, function(rateLimit)
{
if (rateLimit && rateLimit.remaining_hits <= 0)
{
options._stats.rateLimitPreventionCount++;
hideLoadingIndicator(options, null);
return;
}
getData(options, flAutorefresh, url, callback);
});
};
getData = function(options, flAutorefresh, url, callback)
{
options._stats.dataRequestCount++;
if (!options.onDataRequestHandler(options._stats, options))
{
hideLoadingIndicator(options, null);
return;
}
if (!flAutorefresh)
{
showLoadingIndicator(options);
}
$.getJSON(url, function(data)
{
if (data.error)
{
// in case of an error, display the error message
showError(options, data.error);
}
else
{
callback(data, options);
}
});
};
getRateLimit = function(options, callback)
{
$.getJSON("http://api.twitter.com/1/account/rate_limit_status.json?callback=?", function(rateLimit)
{
options._stats.rateLimit = rateLimit;
options.onRateLimitDataHandler(options._stats, options);
callback(rateLimit);
});
};
})(jQuery);
<html>
<div id="tweet"></div>
</html>
<script>
jQuery('#tweet').jTweetsAnywhere({
username: 'patacycliste',
count:5,
});
</script>
/***
|''Name:''|twyp|
|''Description:''|search, play and associate youtube videos|
|''Author:''|Tobias Beer|
|''Version:''|0.9.7 (2010-10-25)|
|''Status:''|beta|
|''Source:''|http://twyp.tiddlyspace.com/#twyp|
|''Documentation:''|http://tobibeer.tiddlyspace.com/#twYp|
|''Readable source:''|http://tbsource.tiddlyspace.com/#twyp|
|''Requires:''|TW Version 2.5.3 or better|
!Example
{{{
<<twyp>>
}}}
<<twyp>>
!Code
***/
//{{{
(function(a){window.twyp={maxSearch:6,maxRelated:10,maxUser:10,vidWidth:380,vidHeight:320,restrictTo:"",field:"youtube",txtRelated:"Related",txtUser:"Best rated videos by ",txtPage:"Go to page ",lblShow:"Play %0",tipShow:"Click to play %0",lblHide:"Close video",tipHide:"Click to close video player",txtInfo:"by %0 | viewed: %1 | favourited: %2 | published: %3",txtRating:"rating: ",txtDuration:"duration: ",txtSearch:"-search-",lblSearch:"Please enter a search-term...",txtTag:"-category/tag-",lblTag:"Please enter a category or tag filter to constrain the search results by...",twypTemplate:"twyp##TEMPLATE",fmtSlider:'<<slider chk%0 twyp##TEMPLATE "Search videos" "Search videos on youtube and add one to the tiddler">>',fmtPlayer:'<h2><a class="tiddlyLinkExisting" href="#" title="add to current tiddler (hold CTRL to skip the prompt and use the title as is)" rel="%0">%1</a></h2> <object width="%2" height="%3"> <param name="movie" value="%0%4&fs=1&format=5&iv_load_policy=3&enablejsapi=1&playerapiid=%5"/> <param name="allowFullScreen" value="true" /> <param name="iv_load_policy" value="3" /> <param name="wmode" value="transparent" /> <param name="allowScriptAccess" value="always"> <embed src="%0%4&format=5&fs=1&iv_load_policy=3&enablejsapi=1&playerapiid=%5" type="application/x-shockwave-flash" allowscriptaccess="always" wmode="transparent" width="%2" height="%3" allowfullscreen="true"> </embed></object>',relRelated:"http://gdata.youtube.com/schemas/2007#video.related",mimeFlash:"application/x-shockwave-flash",feeds:"http://gdata.youtube.com/feeds/standardfeeds/",mapQuery:{rated:"top_rated",recent:"most_recent",popular:"most_popular",respond:"most_responded",discuss:"most_discussed",featured:"recently_featured",all:"videos"},usrSuffix:"/uploads",activeTwyp:null,shadows:[],appendScript:function(c,e,d){a("#"+e).remove();a("head").append(a("<script>").attr({src:c+"&alt=json-in-script&callback="+d,id:e,type:"text/javascript"}))},findHref:function(f,c){var e,d;for(e=0;d=f.link[e];e++){if(d.rel==c){return d.href}}return null},findMediaHref:function(g,f){var e,j,h,d;for(e=0;j=g.media$group.media$content[e];e++){if(j.type==f){d=j.url;h=d.indexOf("?");return h<1?d:d.substr(0,h)}}alert("?!?");return null},getResults:function(f,k,m){var j,d,i=1,h=a(f).closest(".twyp"),g=a(f).closest("[tiddler]"),e=twyp.activeTwyp=g.attr("twyp"),l=m;l=l!=""&&l!=twyp.txtSearch?l:"";if(k){j=f.category.value;j=j!=""&&j!=twyp.txtTag?"&category="+j:"";h.attr({id:e,field:g.attr("field"),search:l,cat:j,query:k})}else{l=h.attr("search");j=h.attr("cat");k=h.attr("query");i=parseInt(a(f).attr("page"))}d=twyp.feeds+twyp.mapQuery[k];if(k=="all"){d=d.replace("standardfeeds/","")}d+="?prettyprint=true&restriction="+twyp.restrictTo+"&max-results="+twyp.maxSearch+"&start-index="+(((i-1)*twyp.maxSearch)+1)+(l==""?"":"&vq="+l)+(j?j:"");twyp.appendScript(d,"twypResults","twyp.cbResults");twyp.updateNav(i,h)},cbResults:function(f){try{var d=a("#"+twyp.activeTwyp),c=a(".vids",d).empty();d.data("main",f.feed);a(f.feed.entry).each(function(j,m){if(!m.yt$noembed){var k=m.media$group.media$title.$t,h=a("<img/>"),o=a("<a/>"),n=m.media$group.media$description.$t,l=a("<p>").html(n);h.attr({src:m.media$group.media$thumbnail[0].url,title:twyp.info(m)}).click(twyp.clickPlay(j,"main",h[0]));o.attr({href:"#","class":"tiddlyLinkExisting"}).click(twyp.clickPlay(j,"main",o[0])).html(k);c.append(a("<div/>").attr("class","vid").append(a("<div/>").attr("class","desc").append(o).append(h).append(a("<span/>").append(a("<div/>").html(twyp.info(m,true)))).append(l).append(a("<div/>").attr("class","tagClear"))))}});if(a.fn.linkify){a("p",c).linkify()}}catch(g){alert(g)}},getRelated:function(e,h,g){var f=g.data(h).entry[e],d=twyp.findHref(f,twyp.relRelated),c=a(".vidRel",g).empty();if(d){d=d.split("?")[0];c.html("<h3>"+twyp.txtRelated+"</h3>");d+="?&restriction="+twyp.restrictTo+"&max-results="+twyp.maxRelated;twyp.appendScript(d,"twypRelated","twyp.cbMore")}},getByUser:function(e,d,c){a(".vidUser",e).empty().html("<h3>"+twyp.txtUser+c+"</h3>");twyp.appendScript(d+twyp.usrSuffix+"?&restriction="+twyp.restrictTo+"&max-results="+twyp.maxUser+"&orderby=rating","twypUser","twyp.cbMore")},cbMore:function(h){var d,c,j,f=a("#"+twyp.activeTwyp),g=h.feed.title.$t.indexOf("Videos related to")==0?"related":"user";f.data(g,h.feed);for(d=0;j=h.feed.entry[d];d++){c=a("<img/>");a(g=="user"?".vidUser":".vidRel",f).append(c.attr({src:j.media$group.media$thumbnail[0].url,rel:j.media$group.media$title.$t,title:twyp.info(j)+" | "+twyp.info(j,true)}).click(twyp.clickPlay(d,g,c[0])).bind("mouseover mouseout",function(k){var l=k?k:window.event,i=a("."+g+"Info");i.empty().html(l.type=="mouseover"?this.getAttribute("rel"):" ")}))}},info:function(h,g){var d,c,f;if(g){g=h.gd$rating,c=h.media$group.media$content[0].duration;return[g?twyp.txtRating+g.average.toString().substr(0,3)+" | ":"",twyp.txtDuration,Math.floor(c/60),":",String.zeroPad(c%60,2)].join("")}d=h.author,f=h.yt$statistics;return twyp.txtInfo.format([d?d[0].name.$t:"",f?f.viewCount:"n/a",f?f.favoriteCount:"n/a",h.published.$t.substr(0,10)])},clickPlay:function(d,e,c){return function(){twyp.playVideo(d,e,c);return false}},playVideo:function(d,i,g){twyp.activePlayer=null;twyp.newPlayer=true;var h=a(g).closest(".twyp"),k=h.find(".twplr"),j=h.data(i).entry[d],c=j.author,f=twyp.fmtPlayer.format([twyp.findMediaHref(j,twyp.mimeFlash),j.media$group.media$title.$t,twyp.vidWidth,twyp.vidHeight,"&autoplay=1",h.attr("id")]);k.html(f);k.find("a").first().attr("field",h.attr("field")).click(function(l){var m=l?l:window.event;twyp.addToTiddler(m,this)});k.append(a("<div/>").attr({"class":"vidDescr",title:(twyp.info(j)+twyp.info(j,true))}).html(j.media$group.media$description.$t));if(a.fn.linkify){a(".vidDescr",k).linkify()}twyp.getRelated(d,i,h);if(c&&c.length>0){twyp.getByUser(h,c[0].uri.$t,c[0].name.$t)}},updateNav:function(f,e){var g=f,c=twyp.txtPage,h=g-1<1?"disabled":"";a(".vidNext",e).css("display","inline").attr({page:g+1,title:c+(g+1)});a(".vidPrev",e).css("display","inline").attr({page:g-1,title:c+(g-1),disabled:h})},reset:function(c){var d=a(c).closest(".twyp");a(".vids, .colPlayer div[class]",d).empty();a(".twplr",d).html(" ");a(".resultsNav",d).hide()},addToTiddler:function(f,d){var h=story.findContainingTiddler(d),g=a(d),c=g.html();h=h?h.getAttribute("tiddler"):"";if(!h){return}if(!f.ctrlKey){c=prompt("Enter your desired video title",c)}if(!c){return}store.setValue(h,g.attr("field"),"[["+c+"|"+g.attr("rel")+"]]");if(config.options.chkAutoSave){story.saveTiddler(h)}},stateChange:function(g){var f,h=a(this),e=h.attr("last"),c=twyp.activePlayer.getVideoUrl(),d=c.indexOf("?v=")>0;c=c.split(d?"?v=":"#!v=")[1].split("&")[0];if(e!=c){h.attr("last",c);if(twyp.newPlayer){twyp.newPlayer=false;return}if(e){twyp.activePlayer.pauseVideo();f="http://gdata.youtube.com/feeds/api/videos/"+c+"?v=2";twyp.appendScript(f,"twypVideoInfo","twyp.getVideo")}}twyp.newPlayer=false},getVideo:function(d){var c=a("#"+twyp.activeTwyp);d.feed={entry:[d.entry]};c.data("video",d.feed);twyp.playVideo(0,"video",c.first())}};config.macros.twyp={handler:function(k,g,x,h,j,r){var y,d,i,o,z,v,l,t=story.findContainingTiddler(k),q=j.parseParams(null,null,true),u=getParam(q,"field",twyp.field),e=x.contains("notitle"),c=x.contains("slider"),n="twyp"+Math.random().toString().substr(3),m=x.contains("search");if(x.contains("player")){m=m?"<<twyp %0>>".format([j.replace("player","")]):"";t=t?t.getAttribute("tiddler"):"";v=getParam(q,"video",store.getValue(t,u));wikify(m,k);if(!v){return}o=v.indexOf("|");z=v.substr(2,o-2);i=["<html>",twyp.fmtPlayer.format([v.substr(o+1,v.length-o-3),z,getParam(q,"width",twyp.vidWidth),getParam(q,"height",twyp.vidHeight),c&!x.contains("noautoplay")?"&autoplay=1":"",n]),"</html>"].join("");if(c){d=a("<div/>");d.addClass("twypSlider");l=d[0];a(k).append(a("<a>"+twyp.lblShow.format([z])+"</a>").attr({href:"#",twyp:n,"class":"button",title:twyp.tipShow.format([z])}).click(function(w){var s=a(this),f=z,B=s.attr("twyp"),A=s.next();if(A.css("display")!="block"){s.attr({title:twyp.tipHide,video:f}).html(twyp.lblHide);A.attr("twyp",B);config.shadowTiddlers[B]=i;A.slideDown("slow")}else{f=s.attr("video");s.attr("title",twyp.tipShow.format([f])).html(twyp.lblShow.format([f]));delete config.shadowTiddlers[B];A.slideUp("slow")}})).append(d)}wikify(i,l?l:k);y=a("a",l?l:k).last();if(e){y.parent().hide().next().css("margin-top","0.5em")}else{y.click(function(f){var p=f?f:window.event;twyp.addToTiddler(p,this)})}}else{wikify(c?twyp.fmtSlider.format([n]):store.getTiddlerText(twyp.twypTemplate),k);a(".txtSearch",k).last().val(twyp.txtSearch).attr("title",twyp.lblSearch);a(".txtTag",k).last().val(twyp.txtTag).attr("title",twyp.lblTag);d=c?a("[tiddler]",k).last():a(k).closest("[tiddler]");d.attr({twyp:n,field:u,not:e})}}};story.closeTiddlerTWYP=story.closeTiddler;story.closeTiddler=function(c){a(".twypSlider",this.getTiddler(c)).each(function(e,d){delete config.shadowTiddlers[a(d).attr("twyp")]});story.closeTiddlerTWYP.apply(this,arguments)};try{a.getJSON("http://www.geoplugin.net/json.gp?jsoncallback=?",function(c){if(c){twyp.restrictTo=c.geoplugin_countryCode}})}catch(b){}window.onYouTubePlayerReady=function(c){a("object, embed",a("#"+c)).each(function(d){try{this.addEventListener("onStateChange","twyp.stateChange");twyp.activePlayer=this;a(this).attr("last",null)}catch(f){}})};config.shadowTiddlers.StyleSheetTwyp="/*{{{*/\n.twyp {font-size:12px;} \n.twyp .frmSearch{margin:10px 0 0 10px;} \n.twyp .txtSearch, .twyp .txtTag{width:100px;} \n.twyp input{border:1px solid #ddd;padding:1px 3px;cursor:pointer;} \n.twyp input:hover{border:1px solid #999;} \n.twyp .colResults {float:left;margin-top:0.5em;width:390px;padding-left:10px;} \n.twyp .vids {width:100%;} \n.twyp .vids img{margin:5px 0 5px 5px;width:100px;cursor:pointer;float:right;clear:none;} \n.twyp .vid{clear:both;font-size:0.9em;padding:5px;} \n.twyp .vid:hover{background:#ddd;} \n.twyp .desc a{display:block;padding:1px 3px;} \n.twyp .desc p{max-height:70px;overflow:hidden;margin-top:5px;display:block;max-width:380px;} \n.twyp .desc p a{display:inline;} \n.twyp .desc:hover p{width:270px;max-height:200px;overflow:auto;} \n.twyp .desc span {font-weight:bold;color:#666;} \n.twyp .resultsNav{text-align:right;margin-bottom:2em;} \n.twyp .resultsNav input, .btnSearch{margin:0.5em 0 0 0.5em;font-weight:bold;width:80px;} \n.twyp .colPlayer {float:left;width:390px;margin:0 5px;} \n.twplr .vidDescr {max-height:1.5em;overflow:hidden;} \n.twplr .vidDescr:hover {max-height:250px;overflow:auto;} \n.twyp .colPlayer img {margin:1px;cursor:pointer;width:72px;height:56px;} \n.twyp h2, .twyp h3 {margin-top: 0.6em;} \n.twyp .vidUser, .vidRel{margin:0 1em 0 0;} \n.twyp .userInfo, .twyp .relatedInfo{padding-right:20px;height:auto;overflow:hidden;font-weight:bold;color:#666;} \n.twypSlider {display:none;margin-bottom:10px;} \n.twypSlider object{display:block;} \n/*}}}*/";store.addNotification("StyleSheetTwyp",refreshStyles)})(jQuery);
//}}}
// /%
/***
!TEMPLATE
<html>
<div class="twyp">
<form class="frmSearch" onsubmit="twyp.getResults(this,this.query.value,this.search.value); return false;">
<select name="query">
<option value="all" selected="true">all videos</option>
<option value="rated">top rated</option>
<option value="recent">most recent</option>
<option value="popular">most popular</option>
<option value="discuss">most discussed</option>
<option value="respond">most responded</option>
<option value="featured">recently featured</option>
</select>
<input name="search" class="txtSearch" type="text" value="" onclick="this.select();">
<input name="category" class="txtTag" type="text" value="" onclick="this.select();">
<input type="submit" class="btnSearch" value="Search">
<input type="button" class="btnSearch" value="Reset" onclick="twyp.reset(this);">
</form>
<div class="colPlayer">
<div class="twplr"></div>
<div>
<div class="vidRel"></div>
<div class="relatedInfo"> </div>
<div class="vidUser"></div>
<div class="userInfo"> </div>
</div>
</div>
<div class="colResults">
<div class="vids"></div>
<form class="resultsNav">
<input type="button" class="vidPrev" value="« back" style="display: none;" onclick="twyp.getResults(this);"></input>
<input type="button" class="vidNext" value="next »" style="display: none;" onclick="twyp.getResults(this);"></input>
</form>
</div>
</div>
<div class="tagClear"></div>
</html>
!END*/
//%/
//{{{
//DK_Tiddlers at top using singlepagemode plugin
config.options.chkSinglePageMode=true;
//DK_limit open tiddlers with breadcrumb plugin
chkBreadcrumbsLimitOpenTiddlers=true;
txtBreadcrumbsLimitOpenTiddlers=3;
txtBreadcrumbsLimit=5;
//shortcuts
var c=config,co=c.options,cc=c.commands,cm=c.macros,cmg=c.messages,cv=c.views;
co.chkAnimate=false;
co.chkAutoSave=(window.location.protocol=="file:");
co.chkHttpReadOnly=false;//visitors can edit
co.chkSaveBackups=true;//backups in this folder
co.chkInsertTabs=true;//tab as tab when editing
co.txtBackupFolder='_backup';//autosave when local
co.txtIncrementalSearchMin=2;
co.chkUploadLog=false;
co.chkSidebarTabs=true;
readOnly=!co.chkAutoSave;
showBackstage=!readOnly;
cv.editor.tagChooser.text='tags...';
cv.editor.defaultText="";//no text for a new tiddler
cv.wikified.defaultText="";//no msg when no tiddler
cv.wikified.tag.labelTags="";
cv.wikified.tag.labelNoTags="";
cv.wikified.tag.openTag= "Open '%0'";
cv.wikified.tag.otherTags= "Others from '%0'";
merge(cm.toolbar,{moreLabel:'+',lessLabel:'-'});
merge(c.messages.backstage,{open:{text:''},close:{text:''}});
//see ViewTemplate
//language settings
c.glyphs.codes.star=["\u22C6","\u22C6"];
cc.syncing.text="sync";
cc.references.text="ref";
cc.permalink.text="url";
var show="Show an URL in the brower address bar that ";
cc.permalink.tooltip=show+"links to the currently displayed tiddler";
cm.permaview.prompt=show+"retrieves all the currently displayed tiddlers";
cm.permaview.label="permalink";
cm.list.missing.prompt="referenced without tiddler:\n";
cm.list.orphans.prompt="tiddlers without reference:\n";
cm.list.shadowed.prompt="default shadow tiddlers:\n";
cm.option.passwordCheckboxLabel="save on this computer";
cm.tagging.label="last updates:";
//rename buttons
config.macros.rB={};
config.macros.rB.handler = function(place,macroName,params,wikifier,paramString,tiddler){
if (place.lastChild.tagName!="BR"){
var nameId=params.shift().split("#");
var name=nameId[0];
var id=nameId[1];
var title=params[0];
elem=place.lastChild;
if (elem.tagName.toUpperCase()!="A") elem=elem.firstChild;
elem.firstChild.data = name;
if (id) elem.setAttribute('id',id);
if (title) elem.title = title;
}
}
Story.prototype.findOuterTiddler = function(e){
var l,t;
do{
t=e&&e.getAttribute?e.getAttribute('tiddler'):null;
l=t?e:l;
e=e.parentNode;
}while(e);
return l?l.getAttribute('tiddler'):'';
}
//}}}
[img(400px,auto)[alt_text|http://bit.ly/dkpiFI]]
@@^^ ~Dialogist-Kantor //Niveau de l'Art de la ville de Neuchâtel// 2010^^@@
[DK - Docs] Catal.log Archives online since OCT.2010 with permanent [[›Updates]] - incl. ->Laboratoires Patacyclistes (1992-1999) Pistologie Post- Pata (2000-2010..) - Bureau du Port Galleri (1999-2007) - [[Last Fumoir|5.Fumoir]] activities (2008-..) and Dialogist-Kantor docs.+ exercises since1992
/%
^^@@bgcolor(#ffff33):par ex/ Bureau du Port@@^^
Le Bureau du Port, installé à Bruxelles en 1999 est un atelier-galerie géré par le Dialogist - Kantor. Il fait suite aux réunions patacyclistes organisées de 1992 à 1999 en grande partie à Bruxelles, Anvers et Ostende. Depuis 2008, le Bureau du Port abandonne les aspects frontaux des présentations et tente, sous l'appellation FUMOIR, de se concentrer sur sa particularité: une stratégie de l'instant. Il se distingue par la fugacité des installations, des collaborations inattendues, un mélange des genres, un esthétisme décalé et une programmation aléatoire.%/
<<tiddler Dialogist-Kantor>>
@@bgcolor(#ccff99):#This is a temporary (?) ^^post-Swiss.Summer.Crash^^ ''patacycliste inconcevable cataloog'' //in progress// @@
contact DK at dialogistkantor[@]gmail.com
~~
powered by [[Tiddlywiki|http://www.tiddlywiki.com/]]
@@[[offline|http://tiddlyspot.com/?action=download&site=patacycliste]]@@~~
<<tiddler [[Bureau du Port (Affiches)]]>>
Patacycliste Documentation wiki by Dialogist-Kantor (revision 2010)
[<img(350px,auto)[alt_text|http://goo.gl/KDnBo]]
<<tiddler [[THANKUT by Natalie Banco]]>>
[img(440px,auto)[alt_text|https://lh4.googleusercontent.com/-SJO5fxPUGmM/Ty-5VODwapI/AAAAAAAADe4/z9Mts4wNN0w/s640/img_1638.jpg]]
^^@@bgcolor(#ffcc33):~Ramasse-Feuilles 1994@@^^
[img(440px,auto)[alt_text|http://bit.ly/dwSOy0]]
^^@@bgcolor(#ffcc33):SALON 5 Argos /photo ©~TMM2010@@^^
[img(440px,auto)[alt_text|https://lh4.googleusercontent.com/-SJO5fxPUGmM/Ty-5VODwapI/AAAAAAAADe4/z9Mts4wNN0w/s640/img_1638.jpg]]
^^@@bgcolor(#ffcc33):~Ramasse-Feuilles 1994@@^^
<<tiddler [[2011_Fool Time A Lot ( Pori / Finland )]]>>
[<img(200px, auto)[alt_text|http://bit.ly/d6Ve4p]]
[img(400px,auto)[alt_text|http://lh5.ggpht.com/-KJDHd-vK59Y/Tkw2whGKBZI/AAAAAAAACxI/v_8NsM8XoaE/s640/pauvre%252520magritte779.jpg]]
papers, prints, typos etc.
''DIALOGIST-KANTOR''
INCONCEVABLE CATALOOG
Opening 6 mei 16 uur
[img[alt_text|http://2.bp.blogspot.com/-E2C2fdylbYc/T5fp6lniGrI/AAAAAAAAAgo/5XN9TG5aFR0/s640/DKaffiVoorkant.jpg]]
[img[alt_text|http://www.beersel.be/free/signatuur/mailsignatuur_logo_teirlinck.gif]]
MUSEUM EN GALERIE Uwenberg 14 • 1650 Beersel
tel. 02 359 16 43
CORRESPONDENTIE Alsembergsteenweg 1046 • 1652 Alsemberg
Het Herman Teirlinckhuis is een initiatief van de gemeente Beersel.
<<tiddler [[2012_Pistologie / Savate Atlas]]>>
https://picasaweb.google.com/105898452618087093313/Freewheel#5683317868185509618
still available FREEWHEEL N°10 NOV.2011 ''" OCCUPY YOURSELF! "'' contact [[DK|ask/contact]]
@@bgcolor(#ffff33):
still availlable HINTEN SEIN VORNE DASEIN 100 ex 34 pp [[contact DK|ask/contact]]@@
https://picasaweb.google.com/105898452618087093313/HintenSein2010#5698604226476145682
https://picasaweb.google.com/105898452618087093313/HintenSein2010#5698604247367878434
https://picasaweb.google.com/105898452618087093313/HintenSein2010#5698604243244281810
FUMOIR 12 SUNDAY 11-12-2011 3PM
https://picasaweb.google.com/105898452618087093313/Fumoir12_SB#5682951603494703426
<html>
<p>INTERVIEW <br><a class='iframe' href="http://dk500.tiddlyspot.com/#[[Interview%20SB%20Fumoir11]]"> Interview de Stefan Bohnenberger par Josef Schlecht
au salon de réception de l‘hôtel Baur, à Zurique, le 18 Novembre 2011 </a> </p>
</html>
FUMOIR 12bis SUNDAY 18-12-2011 @@color(#cc0000):''5.30 PM''@@ ''SB FILMS + ~PIC-NIC (bring something plz :)''
https://picasaweb.google.com/105898452618087093313/Fumoir12_SB#5687148187375911858
^^MOHAMMED KADIR ON A DONKEY ( Fragment of the film SHIGERAT TRAILER by Stefan Bohnenberger from 2000 )^^
+++[show list of films|SB movies]
@@color(#993300):^^FILMS FOR ~PIC-NIC
BY STEFAN BOHNENBERGER
AT FUMOIR/ ROOKZAAL, BRUSSELS
DECEMBER 18, 2011
A
HINTEN SEIN VORNE DASEIN, 0:39, b&w, hd, Brussels 2010
SQUARE, 0:32, b&w, hd, Portugal 2010
~PROJECTION-PHENOMENA-PROJECTION, 0:34, b&w, hd, Brussels 2011
FREE MUSIC SIX HANDS, 0:40, b&w, hd, Brussels 2010
ENVIRMENTAL EXPERIENCE N°233, 2:27, b&w, hd, Brussels 2011
LOCAL FICTION, 4:08, b&w, super8, Brussels 2011
MESHNUKS DRUM EXERCISE (MFA soundtrack for a sequence of Meshnuk), 1:16, color, hd, Brussels 2010
PANORAMA SWING (MFA clip), 2:11, b&w, hd, Brussels 2011
BOCA DO INFERNO, 2:01, color, super8, Portugal 2006
VEILED AND THEN SHE COMES (MFA clip), 0:44, color, hd, Brussels 2010
RUSSIAN POETS, 0:21, b&w, hd, Portugal 2010
FAKE DERWISH, 1:04, b&w, hd, Brussels 2011
SPIRITISTIC MOMENT, 0:16, color, hd, Portugal 2010
SHORT CUT LABYRINTH, 8:04, color and b&w, super8 & dv, Brussels 2011
MFA PUNK PIECE (soundtrack for a sequence of Jodorowskis El Topo), 0:38, b&w, hd, Brussels 2011
CUT OUT FROM LES ALLUMETTES A INTUITION, 5:59, color, dv, Brussels 2011
FOR LAILA (soundtrack by Mat & Baron Stucki Jr.), 0:45, b&w, super8, Brussels 2010
CUT OUT FROM KLOPFENSTEINS STORY OF THE HAARLEM NIGHT (MFA soundtrack), 2:53, b&w, 16mm, Brussels 2011
B
SUCKED BY HOLES, 12:08, color and b&w, super8 & dv, Brussels 2007
~B-MOVIE, 15:00, b&w, super8, Brussels 2006
COIFFURE LILIANE (by collective L), 18:00, b&w, super8, Brussels 2007
C
THE BEST OF MFA'S EL TOPO VERSION (soundtrack for Jodorowski), 17:21, color and b&w, video, Brussels 2011
SIX SEQUENCES FROM THE SHIGERAT TRAILER, 6:26, color and b&w, super8 & dv, Brussels 2011
FULL OF DESIRE (MFA clip), 1:19, b&w, hd, Brussels 2011
CRUZIFICATION OF A BLANKET (MFA clip), 2:41, color, hd, Brussels 2010
SIX SEANCES WITH DR.STERNHELL, 5:48, b&w, Amsterdam 2011
CLIP MFA, 1:15, color, hd, Brussels 2010^^@@
===
<<tiddler PicasaJqueryincl>>
<<tiddler ColorBoxInclude>>