[[ELS Design Studios|http://www.elsdesign.com]] was formally established in 1995, and specializes in ''interaction design'', ''visual design'', and ''information architecture'' to produce interactive systems and information-rich presentations for businesses, organizations, and individuals. Our user-centric design approach, handcrafted production, and personalized service enable us to create ''powerful, effective interactive experiences'' for your application end-users and web site visitors.\n\n@@display:block;text-align:center;font-size:18pt;color:#0c0;font-family:"trebuchet ms";//Your web site or application can be more\nintuitive, expressive, functional... effective!//@@\n''We work closely //with// you to focus your imagination'' and identify well-defined, practical design goals for your project. Through a collaborative process, we help you to refine your message and set the right tone and personality for your site to match your creative and/or business sensibilities and ''ensure that your style, strategy, message and vision comes through'' in the final result.\n\nAt ELS Design Studios, our approach emphasizes the quality of the visitor experience by providing effective, robust, well-tested functionality, to deliver presentations that communicate effectively and help people to achieve their goals. We draw upon years of experience producing commercial software products to guide the planning, design, and development processes.\n\nThroughout the various stages of design and implementation, we provide guidance and recommendations for your decision-making processes, while insulating you from the arcane technological details that can divert your attention from achieving your project goals. We take the time to explain things clearly, so you can make informed decisions that will lead a highly-effective web site that is uniquely suited to your specific purposes.\n\n----\n@@font-size:12pt;Whether your site is presenting your personal creativity or furthering your business objectives, ''our role is to help you to realize YOUR vision'' for YOUR web site or application interface.@@\n----\n\n@@display:block;font-size:8pt;line-height:110%;The founder and principal designer, Eric L. Shulman, brings a wealth of direct, intensive experience in developing complex interactive systems. His designs emphasize both ease-of-use and rich functionality to deliver 'best-of-breed' user experiences. His professional and academic qualifications include an interdisciplinary degree in "Interactive Systems Design" from [[Carnegie-Mellon University|http://www.cmu.edu]] (1985), as well as many years of user interface and software design work on significant commercial products.\n\nAt [[Lotus Development Corporation|http://www.lotus.com]], he was directly involved in the innovation of new graphical interface techniques for "1-2-3", their flagship spreadsheet product. He has also been a Senior Research Engineer with [[OpenData, Inc.|http://www.opendata.com]], and as well as a key contributor in the Product Design Group at [[Clarify, Inc.|http://www.clarify.com]], where he developed comprehensive interface design standards for their suite of Customer Relationship Management (CRM) applications, and provided cross-team guidance and consultation for their marketing, engineering, quality assurance, and documentation organizations.@@\n
/***\n''AliasPlugin for TiddlyWiki version 1.2.x and 2.0''\n^^author: Eric Shulman - ELS Design Studios\nsource: http://www.TiddlyTools.com/#AliasPlugin\nlicense: [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]^^\n\nCreate text-substitution macros that define abbreviations and other "aliases", and then embed them in the rest of your tiddler content to quickly insert common terms, phrases and links without a lot of repetitive typing.\n\n!!!!!Usage\n<<<\nFirst, decide upon a suitable "alias" for the text to be substituted. This is usually a short keyword or other abbreviated term that is easily input with just a few keystrokes. You can use any alias you like, but don't include any spaces in the alias name, since it will be used as the name of the 'alias macro' that is created, and macro names cannot contain spaces.\n\n//Note: If you use an alias name that ''does'' contain spaces, they will be automatically replaced with underscores ("_"), so that the resulting alias name will still be a valid macro name//\n\nTo create alias definitions, embed << {{{alias //newname// //"text to display"//}}} >> macros in a tiddler. These macros don't actually produce any visible output, but simply define the alias macros that you want to use in your document, and thus they can be safely added to practically any tiddler without producing a change in that tiddler's appearance.\n\nIn order to ensure that your aliases are defined and available for use throughout your document, you should add your definitions to a tiddler that you are certain will be displayed when your TW is first loaded, such as MainMenu or SiteTitle (or, any tiddler listed in DefaultTiddlers).\n<<<\n!!!!!Examples\n<<<\n<<alias>> {{{<<alias>>}}}\nmissing alias name: fail safe, do nothing\n\n<<alias alias1>> {{{<<alias alias1>>}}}\nmissing text params, default to text=name (e.g., "<<alias1>>")\n\n<<alias alias2 simple multi-word text substitution>> {{{<<alias alias2 simple multi-word text substitution>>}}}\n<<alias2>>\n\n<<alias "alias3 with spaces" "spaces in aliasname converted to _">> {{{<<alias "alias3 with spaces" "spaces in aliasname converted to _ ">>}}}\n<<alias3_with_spaces>>\n\n<<alias alias4 "multi-line \ntext\nsubstitution">> {{{<<alias alias4 "multi-line\ntext\nsubstitution">>}}}\n<<alias4>>\n<<<\n!!!!!Installation\n<<<\nimport (or copy/paste) the following tiddlers into your document:\n''AliasPlugin'' (tagged with <<tag systemConfig>>)\n^^documentation and javascript for this plugin^^\n<<<\n!!!!!Revision History\n<<<\n''2005.10.09 [1.0.3]''\ncombined documentation and code into a single tiddler\n''2005.08.12 [1.0.0]''\ninitial release\n<<<\n!!!!!Credits\n<<<\nThis feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]]\n<<<\n!!!!!Code\n***/\n//{{{\nversion.extensions.alias= {major: 1, minor: 0, revision: 3, date: new Date(2005,10,9)};\nconfig.macros.alias= { };\nconfig.macros.alias.handler = function(place,macroName,params) {\n var alias=params.shift(); if (!alias) return; alias=alias.replace(/ /g,"_"); // don't allow spaces in alias\n if (config.macros[alias]==undefined) // create new macro (as needed)\n { \n config.macros[alias] = { };\n config.macros[alias].handler =\n function (place,macroName,params)\n { wikify(config.macros[macroName].text,place,null,null); }\n }\n config.macros[alias].text = params[0]?params.join(' '):alias; // set alias text\n}\n//}}}\n
''+++[Anoxia|Muestra el contenido del poema]\n@@color(navy): Anoxia lunar (alguien ciñe su cuello)\n La noche azulece penas muertas\n Ruedan corazones\n Gritan su lamento\n pero sólo cenizas vuelan\n en señal de atención.\n ¿Hay alguien allí?\n ¿Hay alguien?@@''\n
@@color(maroon):''Como arcilla que sos mis manos te modelan\n te amasan en cálidas caricias envolventes\n y no soy yo\n quien dirige el destino del ánfora surgente\n (allí depositaré mis más enfáticas miradas,\n mis amores pasados y futuros).\n Mis manos obedecen los designios quietos\n de tu cuerpo arcilla\n y a ellos me encomiendo.''@@
Larva fosforescente\n diminuta\n movediza\n que trepana galerías apretadas\n\n Arquitecta del colapso\n que diseña estructuras de derrumbe\n y construye poco a poco\n un caos de polvos y silencios\n\n El ojo pequeño de tu rabo iluminado\n dibuja laberintos en la noche de mi mente\n\n Tu micronésima trama de artesano oriental\n mina secretamente\n cualquier intento de sólida razón\n\n y a la espera del parpadeo de una estrella\n que desbarate el vacuo maniquí\n que tu carcoma paciente edificó\n permanezco inmutable\n (paradoja)\n\n Tal vez la brisa que aviente\n mis grises aserrines\n me lleve al lugar donde nacen las verdades\n\n O no\n O sólo me disipe\n o me escurra en la negra alcantarilla\n donde desaguan las cosas más vanales.\n (eso es lo más probable).
@@color(darkred): '' Pequeños signos\n garabatos en la noche\n tratan de mostrarme caminos\n métodos\n opciones\n\n círculos difusos\n pentagramas\n bocetos cuadrúpedos\n peces alados\n runas de silicio\n giran\n nadan\n se acercan y se alejan\n en la oscura felpa\n\n insisten\n\n insisten\n\n como a incómodos mosquitos los aparto\n\n ahora silban\n tararean\n titilan\n soplan\n\n no aceptan que hace ya tiempo\n asumí mi condición silvestre\n que no necesito un tratado\n de biotecnología\n para mi fotosíntesis\n que descalzo\n tranquilo\n afirmado en las plantas de mis pies\n voy disolviendo el cemento\n absorbiendo sus básicas moléculas\n que sé que un día\n el del equilibrio\n el de la revancha\n a mi vez seré absorbido\n como lo serán\n los portafolios y los celulares\n y sus atareados\n inadvertidos\n dueños.''@@
@@color(maroon): ''I\n\n La repentina sangre de la tarde\n trae en su llovizna\n de pompas transparentes\n pequeños arcones\n nostálgicos y amarillentos.\n\n II\n\n Cuando el hilo de cobre del ocaso\n tensa sus cálidos reflejos\n comienzan a asomar\n como lunas ambiguas\n tus profundos ojos negros.\n\n III\n\n Las dagas vespertinas quiebran\n los cristales más altos de las torres\n alargando sus sombras prepotentes\n que arrean en silencio\n pequeñas muchedumbres\n a las bocas de los subtes.\n\n IV\n\n El polvo se levanta en los potreros\n en un alboroto de piernas y balones\n el mate se instala en las veredas\n y el exceso de cuidado en las macetas\n se derrama desde los balcones.\n\n V\n\n Como implacables monolitos\n las sombras y el frío van creciendo\n mientras el viento arrumba en los umbrales\n hojas secas y niños harapientos.\n\n VI\n\n Plic\n el cielo desgrana sus certezas\n Plac\n estallando en las hojas\n Plic\n resbalando en las cortezas\n Plac\n y en ondas armónicas\n Plic\n la tarde se ríe\n Plac\n de mi idiotez melancólica\n Plic\n Plac\n Plic\n Plac.\n\n VII\n\n Quema sus ruedos en la huída\n la tarde apresurada,\n y en verdes y violetas pinceladas,\n confundida,\n trastroca sus celestes.\n\n Arden los bordes del oeste\n - crepuscular herida -\n con llamas de mi sangre peregrina,\n pena ecuestre\n sin rienda ni herradura.\n\n Y, por fin, llega la negrura\n con su habitual despliegue\n de estrellas y misterios que se vierten\n en la oscura\n marmita de mi alma\n\n y convierte\n hastío y amargura\n en luces que golpean mi ventana.\n\n VIII\n\n Cuando el sol sumerge su melena\n en la refractante laguna\n de rubores y mostos enlazados\n y la sensual mano del ocaso\n nos toma suavemente\n y nos lleva\n al cálido rincón de las intimidades\n algo se enciende:\n sobre los restos humeantes de su hoguera\n un nuevo fuego,\n recóndito,\n secreto,\n nos da una luz distinta.\n Desde esta nueva perspectiva,\n a través de estos cristales\n extraños,\n cautivantes,\n apreciamos las texturas,\n descubrimos las grietas diminutas\n que la calcinante vigilia cotidiana\n oculta con sus luces agresivas.\n\n No te duermas.\n No cierres los ojos.\n Asomáte.''@@
text/plain\n.txt .text .js .vbs .asp .cgi .pl\n----\ntext/html\n.htm .html .hta .htx .mht\n----\ntext/comma-separated-values\n.csv\n----\ntext/javascript\n.js\n----\ntext/css\n.css\n----\ntext/xml\n.xml .xsl .xslt\n----\nimage/gif\n.gif\n----\nimage/jpeg\n.jpg .jpe .jpeg\n----\nimage/png\n.png\n----\nimage/bmp\n.bmp\n----\nimage/tiff\n.tif .tiff\n----\naudio/basic\n.au .snd\n----\naudio/wav\n.wav\n----\naudio/x-pn-realaudio\n.ra .rm .ram\n----\naudio/x-midi\n.mid .midi\n----\naudio/mp3\n.mp3\n----\naudio/m3u\n.m3u\n----\nvideo/x-ms-asf\n.asf\n----\nvideo/avi\n.avi\n----\nvideo/mpeg\n.mpg .mpeg\n----\nvideo/quicktime\n.qt .mov .qtvr\n----\napplication/pdf\n.pdf\n----\napplication/rtf\n.rtf\n----\napplication/postscript\n.ai .eps .ps\n----\napplication/wordperfect\n.wpd\n----\napplication/mswrite\n.wri\n----\napplication/msexcel\n.xls .xls3 .xls4 .xls5 .xlw\n----\napplication/msword\n.doc\n----\napplication/mspowerpoint\n.ppt .pps\n----\napplication/x-director\n.swa\n----\napplication/x-shockwave-flash\n.swf\n----\napplication/x-zip-compressed\n.zip\n----\napplication/x-gzip\n.gz\n----\napplication/x-rar-compressed\n.rar\n----\napplication/octet-stream\n.com .exe .dll .ocx
/***\n''AttachFilePlugin for TiddlyWiki version 2.x''\n^^author: Eric Shulman - ELS Design Studios\nsource: http://www.TiddlyTools.com/#AttachFilePlugin\nlicense: [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]^^\n\nStore or link binary files (such as jpg, gif, pdf or even mp3) within your TiddlyWiki document and then use them as images or links from within your tiddler content. Binary file content can be stored in three different locations:\n<<<\n#embedded in the attachment tiddler (encoded as base64)\n#on your filesystem (a 'local link' path/filename)\n#on a web server (a 'remote link' URL)\n<<<\nThe plugin creates an "attachment tiddler" for each file you attach. Regardless of where you store the binary content, your document can refer to the attachment tiddler rather than using a direct file or URL reference in your embedded image or external links, so that changing document locations will not require updating numerous tiddlers or copying files from one system to another.\n\n@@display:block;font-size:8pt;line-height:110%;Note: although you can edit an attachment tiddler, ''don't change any of the encoded content below the attachment header'', as it has been prepared for use in the rest of your document, and even changing a single character can make the attachment unusable. //If needed, you ''can'' edit the header information or even the MIME type declaration in the attachment data, but be very careful not to change any of the base64-encoded binary data.//@@\n!!!!!Inline interface (live)\n><<attach demoID>>\n!!!!!Usage\n<<<\nWhen you attach a file, a tiddler (tagged with<<tag attachment>>) is generated (using the source filename as the tiddler's title). The tiddler contains //''base64 text-encoded binary data''//, surrounded by {{{/%...%/}}} comment markers (so they are not visible when viewing the tiddler). The tiddler also includes summary details about the file: when it was attached, by whom, etc. and, if the attachment is an image file (jpg, gif, or png), the image is automatically displayed below the summary information.\n\nWith embedded data, your TW document can be completely self-contained...unfortunately, embedding just a few moderately-sized binary files using base64 text-encoding can dramatically increase the size of your document. To avoid this problem, you can create attachment tiddlers that define external local filesystem (file://) and/or remote web server (http://) 'reference' links, without embedding the binary data directly in the tiddler (i.e., uncheck "embed data" in the 'control panel').\n\nThese links provide an alternative source for the binary data: if embedded data is not found (or you are running on Internet Explorer, which does not currently support using embedded data), then the plugin tries the local filesystem reference. If a local file is not found, then the remote reference (if any) is used. This "fallback" approach also lets you 'virtualize' the external links in your document, so that you can access very large binary content such as PDFs, MP3's, and even *video* files, by using just a 'remote reference link' without embedding any data or downloading huge files to your hard disk.\n\nOf course, when you //do// download an attached file, the local copy will be used instead of accessing a remote server each time, thereby saving bandwidth and allowing you to 'go mobile' without having to edit any tiddlers to alter the link locations...\n\nLastly, though not completed (but nearly there), the plugin includes an integrated 'uploader' that will let you create a 'remote link' attachment tiddler AND transfer the local file to a remote server location in the same step!\n<<<\n!!!!!Syntax / Examples\n<<<\nTo embed attached files as images or link to them from other tiddlers, use the standard ~TiddlyWiki image syntax ({{{[img[tooltip|filename]]}}}), linked image syntax ({{{[img[tooltip|filename][tiddlername]]}}}) , or "external link" syntax ({{{[[text|URL]]}}}), replacing the filename or URL that is normally entered with the title of an attachment tiddler.\n\nembedded image data:\n>{{{[img[Meow|AttachFileSample]]}}}\n>[img[Meow|AttachFileSample]]\nembedded image data with link to larger remote image:\n>{{{[img[click for larger view|AttachFileSample][AttachFileSample2]]}}}\n>[img[click for larger view|AttachFileSample][AttachFileSample2]]\n'external' link to embedded image data:\n>{{{[[click to view attachment|AttachFileSample]]}}}\n>[[click to view attachment|AttachFileSample]]\n'external' link to remote image:\n>{{{[[click to view attachment|AttachFileSample2]]}}}\n>[[click to view attachment|AttachFileSample2]]\nregular ~TiddlyWiki links to attachment tiddlers:\n>{{{[[AttachFileSample]]}}} [[AttachFileSample]]\n>{{{[[AttachFileSample2]]}}} [[AttachFileSample2]]\n<<<\n!!!!!Defining MIME types and Server Scripts\n<<<\nWhen you select a source file, a ''[[MIME|http://en.wikipedia.org/wiki/MIME]]'' file type is automatically suggested, based on filename extension. The AttachFileMIMETypes tiddler defines the list of MIME types that will be recognized by the plugin. Each MIME type definition consists of exactly two lines of text: the official MIME type designator (e.g., "text/plain", "image/gif", etc.), and a space-separated list of file extensions associated with that type. List entries are separated by "----" (horizontal rules).\n\nTo upload files, a script must first be installed on a remote server so it can receive and store the files online. The AttachFileServerScripts tiddler defines the list of ''server scripts'' that will be available for you to select from when attaching and uploading a file. The list format is as described above for MIME types, except that the first line is simply the text that will appear in the ''server scripts'' droplist, while the second line is the fully-qualified URL for submitting files to that server (e.g., {{{http://www.xyz.com/path/to/cgi-bin/upload.cgi}}} or something similar).\n<<<\n!!!!!Known Limitations\n<<<\n* ''Internet Explorer does not support the use of //embedded// data for TW file attachments. However, you can still use the local/remote link definitions to create file attachments that are stored externally''\n## //while it is easy to read text files, reading binary files is not supported by IE's FileSystemObject (FSO) methods, and other file I/O techniques are subject to security barriers or require additional MS proprietary technologies (like ASP or VB) that make implementation more difficult.//\n## //IE does not support the data: URI scheme, and cannot render the embedded images or links. This would seem to be an insurmountable shortcoming in the browser. Let's hope it is added in the next version...//\n<<<\n!!!!!Installation\n<<<\nImport (or copy/paste) the following tiddlers into your document:\n* AttachFilePlugin (tagged with <<tag systemConfig>>)\n* AttachFilePluginFormatters ("distribution library") (tagged with <<tag systemConfig>>)\n* AttachFileSample and AttachFileSample2 //(sample attachment tiddler containing an image file)//\n* AttachFileMIMETypes //(defines known binary file types)//\n* AttachFileServerScripts //(remote upload server locations)//\n<<<\n!!!!!Revision History\n<<<\n''2006.05.21 [3.4.1]'' in getAttachment(), fixed substring() to extract data: URI (was losing last character, which broken rendering of SOME images)\n''2006.05.20 [3.4.0]'' hijack core getRecursiveTiddlerText() to support rendering attachments in stylesheets (e.g. {{{url([[AttachFileSample]])}}})\n''2006.05.20 [3.3.6]'' add "description" feature to easily include notes in attachment tiddler (you can always edit to add them later... but...)\n''2006.05.19 [3.3.5]'' add "attach as" feature to change default name for attachment tiddlers. Also, new optional param to specify tiddler name (disables editing)\n''2006.05.16 [3.3.0]'' completed XMLHttpRequest handling for GET or POST to configurable server scripts\n''2006.05.13 [3.2.0]'' added interface for ''upload'' feature. Major rewrite of code for clean object definitions. Major improvements in UI interaction and validation.\n''2006.05.09 [3.1.1]'' add wikifer support for using attachments in links from "linked image" syntax: {{{[img[tip|attachment1][attachment2]]}}}\n''2006.05.09 [3.1.0]'' lots of code changes: new options for attachments that use embedded data and/or links to external files (local or remote)\n''2006.05.03 [3.0.2]'' added {{{/%...%/}}} comments around attachment data to hide it when viewing attachment tiddler. Based on a suggestion by Russ Lipton.\n''2006.02.05 [3.0.1]'' wrapped wikifier hijacks in initAttachmentFormatters() function to eliminate globals and avoid FireFox 1.5.0.1 crash bug when referencing globals\n''2005.12.27 [3.0.0]'' Update for TW2.0. Automatically add 'excludeMissing' tag to attachments\n''2005.12.16 [2.2.0]'' Dynamically create/remove attachPanel as needed to ensure only one instance of interface elements exists, even if there are multiple instances of macro embedding.\n''2005.11.20 [2.1.0]'' added wikifier handler extensions for "image" and "prettyLink" to render tiddler attachments\n''2005.11.09 [2.0.0]'' begin port from old ELS Design plugin/adaptation hybrid based on ~TW1.2.33\n''2005.08.05 [1.1.0]'' moved CSS and HTML definitions into plugin code tiddler instead of using separate tiddlers\n''2005.07.27 [1.0.2]'' core update 1.2.29: custom overlayStyleSheet() replaced with new core setStylesheet()\n''2005.07.23 [1.0.1]'' added parameter checks and corrected addNotification() usage\n''2005.07.20 [1.0.0]'' Initial Release\n<<<\n!!!!!Credits\n<<<\nThis feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]]\n<<<\n!!!!!Code\n***/\n// // version\n//{{{\nversion.extensions.attach = {major: 3, minor: 4, revision: 1, date: new Date(2006,5,21)};\n//}}}\nconfig.macros.attach = {\n// // configuration\n//{{{\n hideUpload: false,\n//}}}\n// // lingo\n//{{{\n label: "attach file",\n tooltip: "Attach a file to this document",\n linkTooltip: "Attachment: ",\n\n scriptList: "AttachFileServerScripts",\n typeList: "AttachFileMIMETypes",\n\n titlePrompt: " enter tiddler title...",\n MIMEPrompt: "<option value=''>select MIME type...</option><option value='editlist'>[edit list...]</option>",\n localPrompt: " enter local path/filename...",\n URLPrompt: " enter remote URL...",\n scriptPrompt: "<option value=''>select server script...</option><option value='editlist'>[edit list...]</option>",\n targetPrompt: " enter remote path/filename...",\n\n tiddlerErr: "Please enter a tiddler title",\n sourceErr: "Please enter a source path/filename",\n storageErr: "Please select a storage method: embedded, local or remote",\n MIMEErr: "Unrecognized file format. Please select a MIME type",\n localErr: "Please enter a local path/filename",\n URLErr: "Please enter a remote URL",\n scriptErr: "Please select a server script",\n targetErr: "Please enter a remote target path/filename",\n notSupportedErr: "Sorry, this browser does not support embedded data.\snPlease uncheck 'embed data' and use a local and/or remote link instead.",\n\n sourceReport: "| source file|{{{%0}}}|\sn",\n nosourceReport: "| source file|//none//|\sn",\n dateReport: "| attached on|%0 by %1|\sn",\n notesReport: "| description|%0|\sn",\n dataReport: "| embedded data|[[%0|%0]] - {{{type=%1, size=%2 bytes, encoded=%3 bytes}}}|\sn",\n nodataReport: "| embedded data|//none//|\sn",\n localReport: "| local link|/%LOCAL_LINK%/[[%0|%1]]|\sn",\n nolocalReport: "| local link|//none//|\sn",\n URLReport: "| remote link|/%REMOTE_LINK%/[[%0|%0]]|\sn",\n noURLReport: "| remote link|//none//|\sn",\n\n uploadReport: "upload\sn<<<\sn__server script__\sn''%0''\sn{{{%1}}}\sn__remote path/filename__\sn{{{%2}}}\sn__transfer log__\sn%3/%RESULT%/\sn<<<\sn",\n\n imageReport: "image\sn<<<\snusage: {{{[img[tooltip|%0]] or [img[tooltip|%0][link]]}}}\sn[img[tooltip|%0]]\sn<<<\sn",\n dataBlock: "\sn/% DO NOT EDIT BELOW THIS POINT\sn---BEGIN_DATA---\sn%0;base64,\sn%1\sn---END_DATA---\sn%/",\n//}}}\n// // macro definition\n//{{{\n handler:\n function(place,macroName,params) {\n if (params && !params[0]) { createTiddlyButton(place,this.label,this.tooltip,this.toggleAttachPanel); return; }\n var id=params.shift();\n this.createAttachPanel(place,id+"_attachPanel",params);\n document.getElementById(id+"_attachPanel").style.position="static";\n document.getElementById(id+"_attachPanel").style.display="block";\n },\n//}}}\n//{{{\n createAttachPanel:\n function(place,panel_id,params) {\n if (!panel_id || !panel_id.length) var panel_id="_attachPanel";\n // remove existing panel (if any)\n var panel=document.getElementById(panel_id); if (panel) panel.parentNode.removeChild(panel);\n // set styles for this panel\n setStylesheet(this.css,"attachPanel");\n // create new panel\n var title=""; if (params && params[0]) title=params.shift();\n var types=this.MIMEPrompt+this.formatListOptions(store.getTiddlerText(this.typeList)); // get MIME types\n var scripts=this.scriptPrompt+this.formatListOptions(store.getTiddlerText(this.scriptList)); // get server scripts\n panel=createTiddlyElement(place,"span",panel_id,"attachPanel",null);\n var html=this.html.replace(/%id%/g,panel_id);\n html=html.replace(/%title%/g,title);\n html=html.replace(/%disabled%/g,title.length?"disabled":"");\n html=html.replace(/%types%/g,types);\n html=html.replace(/%scripts%/g,scripts);\n panel.innerHTML=html;\n return panel;\n },\n//}}}\n//{{{\n toggleAttachPanel:\n function (e) {\n if (!e) var e = window.event;\n var parent=resolveTarget(e).parentNode;\n var panel = document.getElementById("_attachPanel");\n if (panel==undefined || panel.parentNode!=parent)\n panel=config.macros.attach.createAttachPanel(parent,"_attachPanel");\n var isOpen = panel.style.display=="block";\n if(config.options.chkAnimate)\n anim.startAnimating(new Slider(panel,!isOpen,e.shiftKey || e.altKey,"none"));\n else\n panel.style.display = isOpen ? "none" : "block" ;\n e.cancelBubble = true;\n if (e.stopPropagation) e.stopPropagation();\n return(false);\n },\n//}}}\n//{{{\n formatListOptions:\n function(text,getparams) {\n if (!text || !text.trim().length) return "";\n // get server script list content from tiddler\n var parts=text.split("\sn----\sn");\n var out="";\n this.scriptParams=["","",""]; // first 3 list items: blank, prompt, editlist\n for (var p=0; p<parts.length; p++) {\n var lines=parts[p].split("\sn");\n var label=lines.shift(); // 1st line=display text\n var URL=lines.shift(); // 2nd line=item value\n var params=lines.join("\sn").replace(/<<<\sn/g,"").replace(/\sn<<</g,""); // extra lines=script params inside blockquotes\n this.scriptParams.push(params?params:"");\n out +='<option value="%1">%0</option>'.format([label,URL]);\n }\n return out;\n },\n//}}}\n// // interface definition\n//{{{\n css:\n ".attachPanel { display: none; position:absolute; z-index:10; width:35em; right:105%; top:0em;\s\n background-color: #eee; color:#000; font-size: 8pt; line-height:110%;\s\n border:1px solid black; border-bottom-width: 3px; border-right-width: 3px;\s\n padding: 0.5em; margin:0em; -moz-border-radius:1em; }\s\n .attachPanel form { display:inline;border:0;padding:0;margin:0; }\s\n .attachPanel select { width:99%;margin:0px;font-size:8pt;line-height:110%;}\s\n .attachPanel input { width:98%;padding:0px;margin:0px;font-size:8pt;line-height:110%}\s\n .attachPanel textarea { width:98%;margin:0px;height:2em;font-size:8pt;line-height:110%}\s\n .attachPanel table { width:100%;border:0;margin:0;padding:0;color:inherit; }\s\n .attachPanel tbody, .attachPanel tr, .attachPanel td { border:0;margin:0;padding:0;color:#000; }\s\n .attachPanel .box { border:1px solid black; padding:.3em; margin:.3em 0px; background:#f8f8f8; -moz-border-radius:5px; }\s\n .attachPanel .chk { width:auto;border:0; }\s\n .attachPanel .btn { width:auto; }\s\n .attachPanel .btn2 { width:49%; }\s\n ",\n//}}}\n//{{{\n html:\n '<form>\s\n attach from source file <input type="file" name="source" size=56 onChange="config.macros.attach.onChangeSource(this)">\s\n <div class="box">\s\n <table><tr><td style="text-align:right;width:1%;white-space:nowrap">\s\n embed data <input type=checkbox class=chk name="useData"\s\n onclick="if (!this.form.MIMEType.value.length)\s\n this.form.MIMEType.selectedIndex=this.checked?1:0; "> \s\n </td><td>\s\n <select size=1 name="MIMEType" \s\n onchange="this.title=this.value; if (this.value==\s'editlist\s')\s\n { this.selectedIndex=this.form.useData.checked?1:0; story.displayTiddler(null,config.macros.attach.typeList,2); return; }">\s\n <option value=""></option>\s\n %types%\s\n </select>\s\n </td></tr><tr><td style="text-align:right;width:1%;white-space:nowrap">\s\n local link <input type=checkbox class=chk name="useLocal"\s\n onclick="this.form.local.value=this.form.local.defaultValue=this.checked?config.macros.attach.localPrompt:\s'\s';"> \s\n </td><td>\s\n <input type=text name="local" size=15 autocomplete=off value=""\s\n onchange="this.form.useLocal.checked=this.value.length" \s\n onkeyup="this.form.useLocal.checked=this.value.length" \s\n onfocus="if (!this.valuelength) this.value=config.macros.attach.localPrompt; this.select()">\s\n </td></tr><tr><td style="text-align:right;width:1%;white-space:nowrap">\s\n remote link <input type=checkbox class=chk name="useURL"\s\n onclick="this.form.URL.value=this.form.URL.defaultValue=this.checked?config.macros.attach.URLPrompt:\s'\s';\s\n config.macros.attach.toggleUploadControls(\s'%id%\s',this.checked);"> \s\n </td><td>\s\n <input type=text name="URL" size=15 autocomplete=off value=""\s\n onfocus="if (!this.value.length) this.value=config.macros.attach.URLPrompt; this.select()"\s\n onchange="this.form.useURL.checked=this.value.length;\s\n config.macros.attach.toggleUploadControls(\s'%id%\s',this.value.length);"\s\n onkeyup="this.form.useURL.checked=this.value.length;\s\n config.macros.attach.toggleUploadControls(\s'%id%\s',this.value.length);">\s\n </td></tr><tr><td style="text-align:right;width:1%;white-space:nowrap">\s\n <div id="%id%_upcheck" style="display:none">\s\n upload file <input type=checkbox class=chk name="upload"\s\n onclick="this.form.uploadScript.selectedIndex=this.checked?1:0;\s\n this.form.uploadScript.title=\s'\s';\s\n this.form.uploadTarget.disabled=!this.checked;\s\n this.form.uploadTarget.value=this.form.uploadTarget.defaultValue=this.checked?config.macros.attach.targetPrompt:\s'\s';\s"> \s\n </div>\s\n </td><td>\s\n <div id="%id%_uplist" style="display:none">\s\n <select size=1 name="uploadScript"\s\n onchange="this.title=this.value; if (this.value==\s'editlist\s')\s\n { this.selectedIndex=this.form.upload.checked?1:0; story.displayTiddler(null,config.macros.attach.scriptList,2); return; }\s\n this.form.upload.checked=this.value.length;\s\n if (!this.form.uploadTarget.value.length && this.value.length)\s\n this.form.uploadTarget.value=this.form.uploadTarget.defaultValue=config.macros.attach.targetPrompt;\s\n this.form.uploadTarget.disabled=!this.value.length;">\s\n <option value=""></option>\s\n %scripts%\s\n </select>\s\n </div>\s\n </td></tr><tr><td style="text-align:right;width:1%;white-space:nowrap">\s\n <div id="%id%_saveas" style="display:none">save as </div>\s\n </td><td>\s\n <input type=text name="uploadTarget" id="%id%_uptarget" size=15 autocomplete=off value="" disabled\s\n onfocus="if (!this.value.length) this.value=config.macros.attach.targetPrompt; this.select()" style="display:none">\s\n </td></tr></table>\s\n </div>\s\n <table><tr><td style="text-align:right;width:1%;white-space:nowrap">\s\n attach as \s\n </td><td colspan=2>\s\n <input type=text name="tiddlertitle" size=15 autocomplete=off value="%title%"\s\n onkeyup="if (!this.value.length) { this.value=config.macros.attach.titlePrompt; this.select(); }"\s\n onfocus="if (!this.value.length) this.value=config.macros.attach.titlePrompt; this.select()" %disabled%>\s\n </td></tr><tr><td style="text-align:right;width:1%;white-space:nowrap">\s\n description \s\n </td><td colspan=2>\s\n <input type=text name="notes" size=15 autocomplete=off>\s\n </td></tr><tr><td style="text-align:right;width:1%;white-space:nowrap">\s\n add tags \s\n </td><td>\s\n <input type=text name="tags" size=15 autocomplete=off value="" onfocus="this.select()">\s\n </td><td style="width:40%;text-align:right">\s\n <input type=button class=btn2 value="attach"\s\n onclick="config.macros.attach.onClickAttach(this)"><!--\s\n --><input type=button class=btn2 value="close"\s\n onclick="var panel=document.getElementById(\s'%id%\s'); if (panel) panel.parentNode.removeChild(panel);">\s\n </td></tr></table>\s\n </form>',\n//}}}\n// // control processing\n//{{{\n onChangeSource:\n function(here) {\n var form=here.form;\n var list=form.MIMEType;\n var theFilename = form.source.value;\n var theExtension = theFilename.substr(theFilename.lastIndexOf('.')).toLowerCase();\n for (var i=0; i<list.options.length; i++)\n if (list.options[i].value.indexOf(theExtension)!=-1) {\n list.selectedIndex = i;\n form.useData.checked = true;\n form.useLocal.checked = true;\n form.local.value = theFilename;\n break;\n }\n theFilename=theFilename.replace(/\s\s/g,"/"); // fixup: change \s to /\n if (!form.tiddlertitle.disabled)\n form.tiddlertitle.value=theFilename.substr(theFilename.lastIndexOf('/')+1); // get tiddlername from filename\n },\n//}}}\n//{{{\n toggleUploadControls:\n function(id,show) {\n if (config.macros.attach.hideUpload) return;\n document.getElementById(id+'_upcheck').style.display\n =document.getElementById(id+'_uplist').style.display\n =document.getElementById(id+'_saveas').style.display\n =document.getElementById(id+'_uptarget').style.display\n =show?'block':'none';\n },\n//}}}\n//{{{\n onClickAttach:\n function (here) {\n clearMessage();\n // get input values\n var form=here.form;\n var theDate=(new Date()).formatString(config.macros.timeline.dateFormat);\n var theSource = form.source.value!=form.source.defaultValue?form.source.value:"";\n var theTitle=form.tiddlertitle.value;\n var theLocal = form.local.value!=form.local.defaultValue?form.local.value:"";\n var theURL = form.URL.value!=form.URL.defaultValue?form.URL.value:"";\n var theNotes = form.notes.value;\n var theTags = "attachment excludeMissing "+form.tags.value;\n var useData=form.useData.checked;\n var useLocal=form.useLocal.checked;\n var useURL=form.useURL.checked;\n var upload=form.upload.checked;\n var theMIMEType = form.MIMEType.value.length?form.MIMEType.options[form.MIMEType.selectedIndex].text:"";\n // validate checkboxes and get filename\n if (useData||upload) {\n if (theSource.length) { if (!theLocation) var theLocation=theSource; }\n else { alert(this.sourceErr); form.source.focus(); return false; }\n }\n if (useLocal) {\n if (theLocal.length) { if (!theLocation) var theLocation = theLocal; }\n else { alert(this.localErr); form.local.focus(); return false; }\n }\n if (useURL) {\n if (theURL.length) { if (!theLocation) var theLocation = theURL; }\n else { alert(this.URLErr); form.URL.focus(); return false; }\n }\n if (!(useData||useLocal||useURL))\n { form.useData.focus(); alert(this.storageErr); return false; }\n if (!theLocation)\n { form.source.focus(); alert(this.sourceErr); return false; }\n if (!theTitle || !theTitle.trim().length || theTitle==this.titlePrompt)\n { form.tiddlertitle.focus(); alert(this.tiddlerErr); return false; }\n if (upload) {\n var theScript = form.uploadScript.value!=form.uploadScript.defaultValue?form.uploadScript.value:"";\n if (!theScript.length) { alert(this.scriptErr); form.uploadScript.focus(); return false; }\n var theServer = form.uploadScript.options[form.uploadScript.selectedIndex].text;\n var theParams = this.scriptParams[form.uploadScript.selectedIndex];\n var theTarget = form.uploadTarget.value!=form.uploadTarget.defaultValue?form.uploadTarget.value:"";\n if (!theTarget.length) { alert(this.targetErr); form.uploadTarget.focus(); return false; }\n }\n // if not already selected, determine MIME type based on filename extension (if any)\n if (!theMIMEType.length && theLocation.lastIndexOf('.')!=-1) {\n var theExt = theLocation.substr(theLocation.lastIndexOf('.')).toLowerCase();\n var theList=form.MIMEType;\n for (var i=0; i<theList.options.length; i++)\n if (theList.options[i].value.indexOf(theExt)!=-1)\n { var theMIMEType=theList.options[i].text; theList.selectedIndex=i; break; }\n }\n // encode the data\n if (useData) {\n if (!theMIMEType.length) {\n alert(this.MIMEErr);\n form.MIMEType.selectedIndex=1; form.MIMEType.focus();\n return false;\n }\n var theData = this.readFile(theSource); if (!theData) { alert(this.notSupportedErr); return false; }\n displayMessage('encoding '+theSource);\n var theEncoded = this.encodeBase64(theData);\n displayMessage('file size='+theData.length+' bytes, encoded size='+theEncoded.length+' bytes');\n }\n // upload the file\n if (upload) var uploadresult=this.uploadFile(theTitle,theSource,theMIMEType,theServer,theScript,theParams,theTarget);\n // generate tiddler and refresh\n var theText = "";\n theText +=theSource.length?this.sourceReport.format([theSource]):this.nosourceReport;\n theText +=this.dateReport.format([theDate,config.options.txtUserName]);\n theText +=theNotes.length?this.notesReport.format([theNotes]):"";\n theText +=useData?this.dataReport.format([theTitle,theMIMEType,theData.length,theEncoded.length]):this.nodataReport;\n theText +=useLocal?this.localReport.format([theLocal,'file:///'+theLocal.replace(/\s\s/g,"/")]):this.nolocalReport;\n theText +=useURL?this.URLReport.format([theURL]):this.noURLReport;\n theText +=(theMIMEType.substr(0,5)=="image")?this.imageReport.format([theTitle]):"";\n theText +=upload?uploadresult:"";\n theText +=useData?this.dataBlock.format([theMIMEType,theEncoded]):"";\n store.saveTiddler(theTitle,theTitle,theText,config.options.txtUserName,new Date(),theTags);\n document.getElementById("attachPanel").style.display="none";\n story.displayTiddler(null,theTitle);\n story.refreshTiddler(theTitle,null,true);\n displayMessage('attached "'+theTitle+'"');\n return true;\n },\n//}}}\n// // base64 conversion\n//{{{\n encodeBase64:\n function (theData) {\n if (!theData) return null;\n // encode as base64\n var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";\n var out = ""; //This is the output\n var chr1, chr2, chr3 = ""; //These are the 3 bytes to be encoded\n var enc1, enc2, enc3, enc4 = ""; //These are the 4 encoded bytes\n for (var count=0,i=0; i<theData.length; )\n {\n chr1 = theData.charCodeAt(i++); //Grab the first byte\n chr2 = theData.charCodeAt(i++); //Grab the second byte\n chr3 = theData.charCodeAt(i++); //Grab the third byte\n enc1 = chr1 >> 2;\n enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);\n enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);\n enc4 = chr3 & 63;\n if (isNaN(chr2))\n enc3 = enc4 = 64;\n else if (isNaN(chr3))\n enc4 = 64;\n out += keyStr.charAt(enc1)+keyStr.charAt(enc2)+keyStr.charAt(enc3)+keyStr.charAt(enc4);\n chr1 = chr2 = chr3 = "";\n enc1 = enc2 = enc3 = enc4 = "";\n count+=4; if (count>60) { out+='\sn'; count=0; } // add line break every 60 chars for readability\n }\n return out;\n },\n//}}}\n// // I/O functions\n//{{{\n readFile:\n function(filePath) {\n if(!window.Components) { return(null); }\n try {\n netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");\n var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);\n file.initWithPath(filePath);\n if (!file.exists()) { alert("File not found: "+filePath); return(null); }\n var inputStream = Components.classes["@mozilla.org/network/file-input-stream;1"].createInstance(Components.interfaces.nsIFileInputStream);\n inputStream.init(file, 0x01, 00004, null);\n var bInputStream = Components.classes["@mozilla.org/binaryinputstream;1"].createInstance(Components.interfaces.nsIBinaryInputStream);\n bInputStream.setInputStream(inputStream);\n return(bInputStream.readBytes(inputStream.available()));\n }\n catch(e) { alert("An error occured while attempting to attach\sn"+filePath+"\sn\sn" + e); }\n return(null);\n },\n//}}}\n//{{{\n writeFile:\n function(filepath,data) {\n // TBD: decode base64 and write data to specified local path/filename\n return(false);\n },\n//}}}\n//{{{\n uploadFile:\n function(title,source,MIMEType,server,URL,scriptparams,target) {\n displayMessage("begin upload: \s""+title+"\s"");\n if (URL==undefined || !URL.length)\n return this.uploadReport.format([server,URL,target,"error: missing script URL"]);\n var x; // XML object\n try {x = new XMLHttpRequest()}\n catch(e) {\n try {x = new ActiveXObject("Msxml2.XMLHTTP")}\n catch (e) {\n try {x = new ActiveXObject("Microsoft.XMLHTTP")}\n catch (e) { return this.uploadReport.format([server,URL,target,"error: could not create XMLHttpRequest object"]); }\n }\n }\n var starttime=new Date();\n x.onreadystatechange = function() {\n if (x.readyState == 4) {\n var endtime=new Date();\n var elapsed=(endtime-starttime+1)/1000;\n displayMessage("end upload: \s""+title+"\s" ("+elapsed+" seconds)");\n var response="\sn''"+endtime.formatString("DD MMM YYYY 0hh:0mm:0ss")+"'' - upload ended (elapsed="+elapsed+" seconds).\sn";\n; response+="status code="+x.status+"\snserver response:\sn{{{\sn"+x.responseText+"\sn}}}\sn";\n var tiddler=store.getTiddler(title);\n if (tiddler) {\n var marker="/%RESULT%/"; var pos=tiddler.text.indexOf(marker);\n if (pos!=-1) {\n tiddler.set(null,tiddler.text.substr(0,pos)+response+tiddler.text.substr(pos+marker.length));\n story.displayTiddler(null,title); story.refreshTiddler(title,null,true); store.setDirty(true);\n } \n }\n }\n }\n if ((document.location.protocol=="file:") && (typeof(netscape)!="undefined")) { // UniversalBrowserRead only works from a local file context\n try { netscape.security.PrivilegeManager.enablePrivilege('UniversalBrowserRead')}\n catch (e) { displayMessage(e.description?e.description:e.toString()); }\n }\n try {\n var data=this.readFile(source);\n if (!data) return this.uploadReport.format([server,URL,target,"could not read local source file"]);\n scriptparams=scriptparams.replace(/%TARGET%/g,target).replace(/%TYPE%/g,MIMEType).replace(/%SIZE%/g,data.length);\n if (scriptparams.indexOf("\sn")==-1) { // single-line params=GET\n x.open("GET",URL,true);\n scriptparams=scriptparams.replace(/%DATA%/g,encodeURIComponent(data));\n x.setRequestHeader('Content-type','application/x-www-form-urlencoded');\n }\n else { // multi-line params=POST\n x.open("POST",URL,true);\n var boundary="----------AttachFilePluginDataBoundary----------";\n scriptparams="\sn"+scriptparams.replace(/%BOUNDARY%/g,boundary).replace(/%DATA%/g,data)+"\sn";\n x.setRequestHeader('Content-Length',scriptparams.length);\n x.setRequestHeader('Content-Type','multipart/form-data; boundary='+boundary);\n }\n x.send(scriptparams);\n // DEBUG alert("params\sn-----\sn"+scriptparams+"\sn-----\sn"); // wffl DEBUG\n }\n catch (e) { displayMessage(e.description?e.description:e.toString()); }\n var response="''"+starttime.formatString("DD MMM YYYY 0hh:0mm:0ss")+"'' - upload started...";\n return this.uploadReport.format([server,URL,target,response]);\n }\n};\n//}}}\n\n/***\n!!!!!Formatters\n|NOTE: These functions are also defined separately in a small, "run-time library" plugin: AttachFilePluginFormatters, which provides "stand-alone" processing for //rendering// attachment tiddlers, but does not include the AttachTiddlers control panel and supporting functions. To reduce your document size, you can include AttachFilePluginFormatters ''instead of'' AttachFilePlugin when distributing documents that contain attachments, as long you don't intend to create any new attachment tiddlers to your document.|\n\n''Extends wikify() formatters to process attachment tiddler references''\n* embedded images: {{{[img[tooltip|image]]}}}\n* linked embedded images: {{{[img[tooltip|image][link]]}}}\n* external/"pretty" links: {{{[[label|link]]}}}\n\n***/\n//{{{\nif (config.macros.attach==undefined) config.macros.attach= { };\n//}}}\n//{{{\nif (config.macros.attach.isAttachment==undefined) config.macros.attach.isAttachment=function (title) {\n var tiddler = store.getTiddler(title);\n if (tiddler==undefined || tiddler.tags==undefined) return false;\n return (tiddler.tags.find("attachment")!=null);\n}\n//}}}\n//{{{\nif (config.macros.attach.getAttachment==undefined) config.macros.attach.getAttachment=function(title) {\n var text = store.getTiddlerText(title);\n var result=""; var pos=0; var endpos=0;\n\n var startmarker="---BEGIN_DATA---\sn";\n var endmarker="\sn---END_DATA---";\n if (!config.browser.isIE && (pos=text.indexOf(startmarker))!=-1 && (endpos=text.indexOf(endmarker))!=-1) {\n var out="data:"+(text.substring(pos+startmarker.length,endpos)).replace(/\s\sn/g,''); // strip embedded newlines\n return out;\n }\n if ((pos=text.indexOf("/%LOCAL_LINK%/"))!=-1) // fallback to local link\n return text.substring(text.indexOf("|",pos)+1,text.indexOf("]]",pos)); \n if ((pos=text.indexOf("/%REMOTE_LINK%/"))!=-1) // fallback to remote URL\n return text.substring(text.indexOf("|",pos)+1,text.indexOf("]]",pos));\n\n // fallback for backward-compatibility:\n // before 3.2.0 encoded datablock was located between ----'s instead of using embedded 'keyword markers' in the tiddler content\n var data=text.split('\sn----\sn');\n if (!config.browser.isIE && data[1] && data[1].length) // NOTE: IE does not support the "data:" URI scheme\n return "data:"+data[1].replace(/\s\sn/g,'');\n\n return "";\n}\n//}}}\n//{{{\nif (config.macros.attach.init_formatters==undefined) config.macros.attach.init_formatters=function() {\n if (this.initialized) return;\n // find the formatter for "image" and replace the handler\n for (var i=0; i<config.formatters.length && config.formatters[i].name!="image"; i++);\n if (i<config.formatters.length) config.formatters[i].handler=function(w) {\n var lookaheadRegExp = new RegExp(this.lookahead,"mg");\n lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = lookaheadRegExp.exec(w.source);\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart) // Simple bracketted link\n {\n var e = w.output;\n if(lookaheadMatch[5])\n {\n if(store.tiddlerExists(lookaheadMatch[5]))\n // ELS: ADDED\n if (config.macros.attach.isAttachment(lookaheadMatch[5]))\n {\n e = createExternalLink(w.output,lookaheadMatch[5]);\n e.href=config.macros.attach.getAttachment(lookaheadMatch[5]);\n e.title = config.macros.attach.linkTooltip + lookaheadMatch[5];\n }\n else\n // ELS: END\n e = createTiddlyLink(w.output,lookaheadMatch[5],false);\n else\n e = createExternalLink(w.output,lookaheadMatch[5]);\n }\n var img = createTiddlyElement(e,"img");\n if(lookaheadMatch[1])\n img.align = "left";\n else if(lookaheadMatch[2])\n img.align = "right";\n if(lookaheadMatch[3])\n img.title = lookaheadMatch[3];\n img.src = lookaheadMatch[4];\n // ELS: ADDED\n if (config.macros.attach.isAttachment(lookaheadMatch[4]))\n img.src=config.macros.attach.getAttachment(lookaheadMatch[4]);\n // ELS: END\n w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;\n }\n }\n//}}}\n//{{{\n // find the formatter for "prettyLink" and replace the handler\n for (var i=0; i<config.formatters.length && config.formatters[i].name!="prettyLink"; i++);\n if (i<config.formatters.length) config.formatters[i].handler=function(w) {\n var lookaheadRegExp = new RegExp(this.lookahead,"mg");\n lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = lookaheadRegExp.exec(w.source)\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart && lookaheadMatch[2])\n { // Simple bracketted link\n var link = createTiddlyLink(w.output,lookaheadMatch[1],false);\n w.outputText(link,w.nextMatch,w.nextMatch + lookaheadMatch[1].length);\n w.nextMatch += lookaheadMatch[1].length + 2;\n }\n else if(lookaheadMatch && lookaheadMatch.index == w.matchStart && lookaheadMatch[3])\n { // Pretty bracketted link\n var e;\n if(store.tiddlerExists(lookaheadMatch[4]))\n // ELS: ADDED\n if (config.macros.attach.isAttachment(lookaheadMatch[4]))\n {\n e = createExternalLink(w.output,lookaheadMatch[4]);\n e.href=config.macros.attach.getAttachment(lookaheadMatch[4]);\n e.title = config.macros.attach.linkTooltip + lookaheadMatch[4];\n }\n else\n // ELS: END\n e = createTiddlyLink(w.output,lookaheadMatch[4],false);\n else\n e = createExternalLink(w.output,lookaheadMatch[4]);\n w.outputText(e,w.nextMatch,w.nextMatch + lookaheadMatch[1].length);\n w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;\n }\n }\n this.initialized=true;\n}\n//}}}\n//{{{\nconfig.macros.attach.init_formatters(); // load time init\n//}}}\n//{{{\nif (TiddlyWiki.prototype.coreGetRecursiveTiddlerText==undefined) {\n TiddlyWiki.prototype.coreGetRecursiveTiddlerText = TiddlyWiki.prototype.getRecursiveTiddlerText;\n TiddlyWiki.prototype.getRecursiveTiddlerText = function(title,defaultText,depth) {\n return config.macros.attach.isAttachment(title)?\n config.macros.attach.getAttachment(title):this.coreGetRecursiveTiddlerText(title,defaultText,depth);\n }\n}\n//}}}
/***\n''AttachFilePluginFormatters for TiddlyWiki version 2.x''\n^^author: Eric Shulman - ELS Design Studios\nsource: http://www.TiddlyTools.com/#AttachFilePluginFormatters\nsee also: http://www.TiddlyTools.com/#AttachFilePlugin\nlicense: [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]^^\n\nYou can include this small //''run time library''// in your documents to render ''attachment tiddlers'' created by the AttachFilePlugin. Attachment tiddlers are tagged with<<tag attachment>>and contain binary file content (e.g., jpg, gif, pdf, mp3, etc.) that can be stored directly as base64 text-encoded data or loaded from external files stored on a local filesystem or remote web server.\n\nThis plugin extends the behavior of the following TiddlyWiki core "wikify()" formatters:\n* embedded images: {{{[img[tooltip|image]]}}}\n* linked embedded images: {{{[img[tooltip|image][link]]}}}\n* external/"pretty" links: {{{[[label|link]]}}}\n\n''Please refer to AttachFilePlugin (source: http://www.TiddlyTools.com/#AttachFilePlugin) for additional information.''\n!!!!!Revision History\n<<<\n''2006.06.15 [3.4.1.0]'' sync with AttachFilePlugin v3.4.1\n''2006.05.20 [3.4.0.0]'' sync with AttachFilePlugin v3.4.0\n''2006.05.13 [3.2.0.0]'' created from AttachFilePlugin v3.2.0\n<<<\n!!!!!Code\n***/\n//{{{\nif (config.macros.attach==undefined) config.macros.attach= { };\n//}}}\n//{{{\nif (config.macros.attach.isAttachment==undefined) config.macros.attach.isAttachment=function (title) {\n var tiddler = store.getTiddler(title);\n if (tiddler==undefined || tiddler.tags==undefined) return false;\n return (tiddler.tags.find("attachment")!=null);\n}\n//}}}\n//{{{\nif (config.macros.attach.getAttachment==undefined) config.macros.attach.getAttachment=function(title) {\n var text = store.getTiddlerText(title);\n var result=""; var pos=0; var endpos=0;\n\n var startmarker="---BEGIN_DATA---\sn";\n var endmarker="\sn---END_DATA---";\n if (!config.browser.isIE && (pos=text.indexOf(startmarker))!=-1 && (endpos=text.indexOf(endmarker))!=-1) {\n var out="data:"+(text.substring(pos+startmarker.length,endpos)).replace(/\s\sn/g,''); // strip embedded newlines\n return out;\n }\n if ((pos=text.indexOf("/%LOCAL_LINK%/"))!=-1) // fallback to local link\n return text.substring(text.indexOf("|",pos)+1,text.indexOf("]]",pos)); \n if ((pos=text.indexOf("/%REMOTE_LINK%/"))!=-1) // fallback to remote URL\n return text.substring(text.indexOf("|",pos)+1,text.indexOf("]]",pos));\n\n // fallback for backward-compatibility:\n // before 3.2.0 encoded datablock was located between ----'s instead of using embedded 'keyword markers' in the tiddler content\n var data=text.split('\sn----\sn');\n if (!config.browser.isIE && data[1] && data[1].length) // NOTE: IE does not support the "data:" URI scheme\n return "data:"+data[1].replace(/\s\sn/g,'');\n\n return "";\n}\n//}}}\n//{{{\nif (config.macros.attach.init_formatters==undefined) config.macros.attach.init_formatters=function() {\n if (this.initialized) return;\n // find the formatter for "image" and replace the handler\n for (var i=0; i<config.formatters.length && config.formatters[i].name!="image"; i++);\n if (i<config.formatters.length) config.formatters[i].handler=function(w) {\n var lookaheadRegExp = new RegExp(this.lookahead,"mg");\n lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = lookaheadRegExp.exec(w.source);\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart) // Simple bracketted link\n {\n var e = w.output;\n if(lookaheadMatch[5])\n {\n if(store.tiddlerExists(lookaheadMatch[5]))\n // ELS: ADDED\n if (config.macros.attach.isAttachment(lookaheadMatch[5]))\n {\n e = createExternalLink(w.output,lookaheadMatch[5]);\n e.href=config.macros.attach.getAttachment(lookaheadMatch[5]);\n e.title = config.macros.attach.linkTooltip + lookaheadMatch[5];\n }\n else\n // ELS: END\n e = createTiddlyLink(w.output,lookaheadMatch[5],false);\n else\n e = createExternalLink(w.output,lookaheadMatch[5]);\n }\n var img = createTiddlyElement(e,"img");\n if(lookaheadMatch[1])\n img.align = "left";\n else if(lookaheadMatch[2])\n img.align = "right";\n if(lookaheadMatch[3])\n img.title = lookaheadMatch[3];\n img.src = lookaheadMatch[4];\n // ELS: ADDED\n if (config.macros.attach.isAttachment(lookaheadMatch[4]))\n img.src=config.macros.attach.getAttachment(lookaheadMatch[4]);\n // ELS: END\n w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;\n }\n }\n//}}}\n//{{{\n // find the formatter for "prettyLink" and replace the handler\n for (var i=0; i<config.formatters.length && config.formatters[i].name!="prettyLink"; i++);\n if (i<config.formatters.length) config.formatters[i].handler=function(w) {\n var lookaheadRegExp = new RegExp(this.lookahead,"mg");\n lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = lookaheadRegExp.exec(w.source)\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart && lookaheadMatch[2])\n { // Simple bracketted link\n var link = createTiddlyLink(w.output,lookaheadMatch[1],false);\n w.outputText(link,w.nextMatch,w.nextMatch + lookaheadMatch[1].length);\n w.nextMatch += lookaheadMatch[1].length + 2;\n }\n else if(lookaheadMatch && lookaheadMatch.index == w.matchStart && lookaheadMatch[3])\n { // Pretty bracketted link\n var e;\n if(store.tiddlerExists(lookaheadMatch[4]))\n // ELS: ADDED\n if (config.macros.attach.isAttachment(lookaheadMatch[4]))\n {\n e = createExternalLink(w.output,lookaheadMatch[4]);\n e.href=config.macros.attach.getAttachment(lookaheadMatch[4]);\n e.title = config.macros.attach.linkTooltip + lookaheadMatch[4];\n }\n else\n // ELS: END\n e = createTiddlyLink(w.output,lookaheadMatch[4],false);\n else\n e = createExternalLink(w.output,lookaheadMatch[4]);\n w.outputText(e,w.nextMatch,w.nextMatch + lookaheadMatch[1].length);\n w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;\n }\n }\n this.initialized=true;\n}\n//}}}\n//{{{\nconfig.macros.attach.init_formatters(); // load time init\n//}}}\n//{{{\nif (TiddlyWiki.prototype.coreGetRecursiveTiddlerText==undefined) {\n TiddlyWiki.prototype.coreGetRecursiveTiddlerText = TiddlyWiki.prototype.getRecursiveTiddlerText;\n TiddlyWiki.prototype.getRecursiveTiddlerText = function(title,defaultText,depth) {\n return config.macros.attach.isAttachment(title)?\n config.macros.attach.getAttachment(title):this.coreGetRecursiveTiddlerText(title,defaultText,depth);\n }\n}\n//}}}
| source file|{{{...\sels\smeow.gif}}}|\n| attached on|15 May 2006 by ELSDesignStudios|\n| embedded data|[[meow.gif|AttachFileSample]] - {{{type=image/gif, size=3399 bytes, encoded=4602 bytes}}}|\n| local link|/%LOCAL_LINK%/[[els/meow.gif|els/meow.gif]]|\n| remote link|/%REMOTE_LINK%/[[http://www.TiddlyTools.com/els/meow.gif|http://www.TiddlyTools.com/els/meow.gif]]|\nimage\n<<<\nusage: {{{[img[tooltip|AttachFileSample]] or [img[tooltip|AttachFileSample][link]]}}})\n[img[tooltip|AttachFileSample]]\n<<<\n\n/% DO NOT EDIT BELOW THIS POINT\n---BEGIN_DATA---\nimage/gif;base64,\nR0lGODlhOABQAPcAAAAACAAAEAAICAgICAgLDBAQCAQQGRAIEBgICBAQEBAQGBAY\nFBoOEhwUFCEYEBgYGA4cIBkgGyEcHCEhISkYGCkcHCEpHCklIRAgMRkmNSElKSEp\nNikeKykpKSExQiE5QjEhJTEpITEpKSkpMSkxISk1KTExITExKSktNTEpMTEpOTEx\nMSk5MSkxOSkxQik5PTkrKTkxMTE8KTFCMTExOTExQjE5PTFCPTk3MzlCMTkxQjk5\nQkI0MzlGPUg9M01JNi88TTlEUkI8REJCSkZDRFBDQkY/UFA/TjNMUkNOS1JKSkpW\nRj1KWEpKWj9OXEVZZlhMRlVLVVpSUlReUFdSYFVhX1JSa1VfbmBbU11ia2dcV3Fj\nXVpldWVkb2tnb3tnbGZ1ZHV6aWVwe3d5c2N4iXN3gntzgHeBiYd2dYWHeoh/jIKL\nkJWEfZmUh5CNlJ+VkICPn46XpZiSo5WfoJycnKaemaGcqKWlpZWnraWtqa2qoq2l\nrZavvKW4xK2lta2ws/8A/7WcjLWllLWlpbWlrb2tnMatnLWtpbWtrb2trbWttb2t\ntbWtvbW1pca1pbW1ra21va21xrW1tbW1vbW1xrW9tb21rb21tb21vb21xr29rb29\ntca9sca1vc69rda9ra29wa3GxrW9vbW9xq29zrHGyrPB0rXG1r29vb29xr29zr3G\nvb3Gxr3Gzr3G1sa9vcbGtc7GtdbGtcbGvc7GvdbGvd7Gvca9xsa9zsbGxsbGzsbG\n1s7DyNbGxtbGzs7G1rjQ2MbO0sbO3sbW1s7Owc7OzsbW3sbe3s7O1s7W0tbQx+HU\nzNDQ29bW1tvb1ufa1sPW6dDW4dbW3trY4sni7dbk797e3tbx9N7n3ufe3t7e597n\n597i7+fe597s9N73++fn3ufn5+fn7+fv5+fv7+/e5+/r4vfr4ufn9+fv9+fv/+/n\n7+/v8/Pz7/fv9+/v/+f3++f//+/39+/3/+//9+////f37/f39/f3//f/9/f////3\n7//39//3////9////yH5BAEAAIAALAAAAAA4AFAAQAj+AAEJHEiwoMGDCBMqXIiw\niA8tXbxIgXHhgY+FICSIiCFFihIeXRgm9OKlDJMqYs506UIDRIUKD7w8kLCiAw0q\n0ao8WCFhwgQqDx7E+EJHm0gpUaI0ibKDBo0dXeakazEkxYUOGjRMSQOmQw874eR9\nIHNPXrFba5Y8CLNDyYULGlZQRVjtzJCmTnew2AGp2j19gAGTC6ctnLvDZfWR07Aj\nCJAd4fTduxctFapbiDKTQ7gjSZcsT6PQqLmCxhA78v4GnuxOHuGzeei8kVLkh5I1\nb9y80XPp0q1s+lK7E3eQjSIvbqJAEiPGjR0/c9REqyavtTx9rVtn09asmJsvbMb+\nuLlcrFn3YsqsiRM33M3CDlkUsWMnT978cM206Y/WjH+187cEGOArqKCiCCJ00DEH\nHXXkIdJBEgQVlEsS1iThAwlg+EAXcNgBySiQQILKJWOM8YYy2Tyo4oqA5HELMtxx\nVwyLNA5UxAUxxPBWjTjGIIIWNSKUhhddUFFFU0O89BZjQ9DQwYUPVKABCEJg8cYZ\nK5aRxRNM0JDCCimkQMUONXUAwlVOKbGDGHhAMEczgemjTV2jXeCTBqZFoZASVDDR\nxGildTbHX3zUgJeTZ0Cimj5kBLHDEEM0IU59cd6TDmHm7WFQNHDAwcVoT5m2Qg2t\nAJPYau6wY01/2ohTjDb+Z91hhiK3FMiILnkcWIw1iLlz0BuPquHEFaDWtEMVclyX\nWpz1pUNONdKkkkoWyEGSqyKXvYJeNtmEo6pRCEkyaX3ykMPOYOWSw41+2rDTGjnd\nNoMMMsXoUkw05SFzXnlnFaiIikpOIIEUbrzaSit+RPFWByK4ocoordzC74iKKHLG\nFmm4kQciQSIkgQQIIEAAAQ+Q/IDIIieQAAFROPcHI9heUodh2ujT8c0CzcEdt8Ph\n7DONGgwxxs+A7BADEUT4SOMEMWyBBRYiEA2ID16oYYYZDsXwQGNOMHGFFUz4ucMF\nND2qRBdmeDEE0Uq0IccWSuDQwdwXXrBCkxVFKOH+VVB8UceMNHohxhVNipDCEBqk\noIGUTu70AA4P3PUEYG6cEQXiM0lwwRBryKNiF1dcwYQQDK+wQxZijGYmnk+tsEIV\nGrgTZ6VniMHUCHZ3EAWQCWlRxe+X47BCy8UEc08GcmfVwVUxLDHFECPoE01TTWhj\nTRQimBBDEW64QUYTZczBhBcJCTFEFKODSkMUZcAJWDWMjDJHGW4089df3DiRBRDg\nwzE7YPLgji5uIQmEzIMaeHgU+nbwqCaEaFEAXI82rqOav8gDLgOzjj5c9YpbXEIR\n2bjHLQ5yBjdw4QxjGs0OOvA6MQSjGrNLjX2akQ1U0KEMXlACDYh0uS3M4Q3+CeoA\nHbKBmHuE4yBJ6EEXUveomiBuCKhwA3AqOJmypIMb+ILEH1ChhTXoIUEbqwMiXsEL\nZThjOOEgB8cO4gYqKOEMDNxhFKjQBFmFw4IAZM25uJOKMWyhi35gxFk6WAxnqOcw\n5wKcQdAgJz84shrVcIMfRpEOSMqjGtGoTnVSJY78dIcRf2ADFPwgsbM0Q2LmaRVm\nGNKGYmzSPvYxFzsqOZ12dSsbACrlq85Sq1sQ6EBrfBAReHI1baTjUuGIhjZ0UZkC\n3cI89CqPeQrkBzq4IQ1nWMOCCsijoPhgBUKoQstokJUJQOkBSlADJVqRimKgghEw\ne4MW0KCxZvisIif+QwCUMnShkD2ABmaQAyQoMYoCXYINdCgGcKRmEAkRQAErI4DK\ngiIHP/wBEoy4hDvN0wxfMXRFo7CXNYh4j492TBG7VJVJV1oQKDBUCzi6WZQuUAai\n+UAEPvDRBWikEaTxIGo/EwIP/igFH0hARZoTwRC+8AUtFEFqPlCCFryghZtSRE8H\n6cIOHnABH0iBWl4wwxGgupIiKUEIPqjAqKhihSY4igYjMGcHUrCDKIS1hFKTAlVF\nAwIq1W19NMCnhCRQgRBAAQ28SIPP1nCGNBTDaXfZQQoq8LGgYAVSILjQBC6wAyEQ\nAQ11SFGNuvC7P+2ACXO4i+kipNYHdIBMppn+hxteRyYqCEwCOJDCHDyqIixoQQxu\nleyXojA3rFxgBK57ixcmcNozAOYeeAjCGWZiN7hM4AmjUFEVmpCFJrjuSxEhE1ZA\nYLq7KQFS0RjU/+5xhjI0YQcauEBesKoQM2QBUp113dzm4CjFZaVM8RWCGwA4u3sA\nowmq1cAE8GQF+iJECXNkwg6E11kmuCEdGSATCLISlyqAwXkQSI0TuACHdBTjDh0A\ngwmw0EAyiWElCilCEvDrlKfsoAzC0Ecc9uI6DXDVxxPwwgjuAQc8NSEa3UiDMngh\nu3v8oXZ3QIYX/KCQIdCxKYGiQhei8dw5tHEIXqjCHGAImHR8QAhAuEL+FsrwP8E0\nQxdwVogC71JjIXShFdcJDH6sUQxFQJAccHCvE87Qh0WVJRrhCJCBFEKNK0yYgZ3N\nwgrcAIl0zK414qAPAPPsXQvBSR7TrNiBJKGPNyAkGsbgA1NcxwLXuQEPwrA0s9wR\nDms8N1XuOOYQJLCF/ESDPwOsVR7glCoSliEOZWCgapNwJDm0AoKSqc49FEGFMtyh\nVqhIWArWoAgF5WEPLmqDfGTXM4M8oQxXSF2kxpSFHbTADX/wS6XIBatmSKILQzAc\npMIkhTSo4Q1pGGM2NqmYg1xhd2sYTQqcdAEqJMENmSywJtnBnVsoopomagMQGVSH\nQVziFc1AETn+qmNPg1CBCkFwQxC+RKa71bUMsnvuZDRZrmog45138HKu6FCxzGhr\nVdkQRzhEexAiZRMFe2nSClB3B21AsIrycNav34lDN9wiDwW6TBmdEQ720NoaCTmD\nGqgghnbvQA7ppt8twnKq+rwLktHIgxbaAIU1+AEVxSgGL3hRSF5tkFt3QEgsdOyG\nO1zUDWVgxK/1lQ53jbwsnNzOKf2giDdAgQ54zzu/aLgePi9kMqZIRzBGMYpfV6Px\nlaxGu7BjH3FkwxqrwvYYftDO7jxTl2dBRBsYcongkKtcs4w63AszmGaIA1ZnyTtH\nzaN5iQVIEXpwj0iw4Abr1OdcFKcPu/T+I/lc8rJftapYbOrAItNhQRHyyLS5CMOf\nfb0qGvqqV949WDE63MEN2qRDbGgUg+WtQARbdnr/cUq6wAg5NwfK1H7TdAl+kAd5\n4AYYswYJ8gpBQllcNTdj4AWMEAxyAAE+JiFKIB6jcAvBUC8jAjNugAUmQgfBVCNB\nAVsLVwVZwAQPYE5Q8hZ/MAqM0AonqAiDoAXioQdEFyTnVIRBoTIJoAAg0AVyYAeR\nACIjgghh8AaoMFI+gyEhgwAJoE9QQgBaqAAvWAaBdBmXcQd1ACdl8VE6kk8ZsoVJ\nCFEJMGl2MAdzADOv8AYdpQ+8wFIDUTIj44VBAQgeQlC1ogvNgAouykAHFMiHCkEJ\nqtAK0rQqjKgipWcNvyE7k6gip8QOXTeEmcgQbAAI3VByNBIQAAA7\n---END_DATA---\n%/
| source file|{{{D:\shtml\stiddlytools\sels\smeow2.jpg}}}|\n| attached on|15 May 2006 by ELSDesignStudios|\n| embedded data|//none//|\n| local link|/%LOCAL_LINK%/[[els/meow2.jpg|els/meow2.jpg]]|\n| remote link|/%REMOTE_LINK%/[[http://www.TiddlyTools.com/els/meow2.jpg|http://www.TiddlyTools.com/els/meow2.jpg]]|\nimage\n<<<\nusage: {{{[img[tooltip|AttachFileSample2]] or [img[tooltip|AttachFileSample2][link]]}}})\n[img[tooltip|AttachFileSample2]]\n<<<\n
test store.php\nhttp://www.tiddlytools.com/store.php\n<<<\n--%BOUNDARY%\nContent-disposition: form-data;name="UploadPlugin";\n\nbackupDir=;user=;password=;uploaddir=upload;\n--%BOUNDARY%\nContent-disposition: form-data;name="userfile";filename="%TARGET%"\nContent-Type: %TYPE%\nContent-Length: %SIZE%\n\n%DATA%\n--%BOUNDARY%--\n<<<\n----\npublish for public web access\nhttp://www.tiddlytools.com/response.txt\n<<<\n?file=%TARGET%&data=%DATA%\n<<<\n----\npublish for password-protected web access\nhttp://www.tiddlytools.com/response.txt\n<<<\n?file=%TARGET%&data=%DATA%\n<<<\n----\nsend to WebTPS report server (encrypted)\nhttps://www.WebTPS.com/reports/upload.asp\n<<<\n?workgroup=Y2K&key=3141592653589&file=%TARGET%\n<<<\n----\nsend to my Flickr account\nhttp://www.flickr.com/\n<<<\n\n<<<
/***\n''AutoSync Plugin for TiddlyWiki version 1.2.x and 2.0''\n^^author: Eric Shulman - ELS Design Studios\nsource: http://www.TiddlyTools.com/#AutoSyncPlugin\nlicense: [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]^^\n\nLive Publishing! "Simul-cast" changes in your document by ''automatically submitting tiddler data to a web server'' whenever you complete editing of a tiddler. AutoSyncPlugin requires installation of compatible server-side scripting to transmit, receive and store the updated tiddler data on the server. The plugin can be configured for use with different server-side scripts by setting the contents of specially-named tiddlers to match your web server ([[SiteHost]]) and script location ([[SitePost]]), as well as provide any flags, keywords, etc. ([[SiteParams]]) that may be required by the server-side scripting.\n\nSee //Usage// below for more information.\n\n!!!!!Configuration\n<<<\n<<option chkAutoSync>> incrementally auto-post tiddler changes to remote server\n<<option chkAutoSyncConfirm>> confirm before posting each change\n<script>\nvar t="SiteHost";\nconfig.options.txtSiteHost=store.getTiddlerText(t);\nif (!config.options.txtSiteHost) config.options.txtSiteHost=t;\nvar t="SitePost";\nconfig.options.txtSitePost=store.getTiddlerText(t);\nif (!config.options.txtSitePost) config.options.txtSitePost=t;\nvar t="SiteParams";\nconfig.options.txtSiteParams=store.getTiddlerText(t);\nif (!config.options.txtSiteParams) config.options.txtSiteParams=t;\n</script>\nSiteHost\n<<option txtSiteHost>><script>var s=place.lastChild.style;s.width="100%"</script>\nSitePost\n<<option txtSitePost>><script>var s=place.lastChild.style;s.width="100%"</script>\nSiteParams\n<<option txtSiteParams>><script>var s=place.lastChild.style;s.width="100%"</script>\n<<<\n!!!!!Usage\n<<<\nThe following "special tiddlers" are used by this plugin to assemble the URL to the remote server.\n* SiteHost\nhost name/address for remote server\nexample: {{{www.server.com}}} or {{{192.168.1.1}}}\n* SitePost\nremote path/filename for submitting changes\nexample: {{{/cgi-bin/submit.cgi}}}\n* SiteParams\nextra arguments (if any) needed for server-side receiving script.\nexample: {{{id=jsmith@server.com}}}\n\nIn addition to the above URL pieces, the constructed URL automatically incorporates parameters for title, modifier, modified, tags, and, of course, the data itself. When fully assembled, the resulting URL will be something like:\n{{{http://192.168.1.1/cgi-bin/submit.cgi\n?title=TiddlerTitle\n&modifier=YourName\n&modified=2005.12.07\n&tags=whatever\n&id=jsmith@server.com\n&data=...}}}\n\n<<<\n!!!!!Installation\n<<<\nImport (or copy/paste) the following tiddlers into your document:\n''AutoSyncPlugin'' (tagged with <<tag systemConfig>>)\n<<<\n!!!!!Revision History\n<<<\n''2005.12.04 [0.0.5]''^^\ninitial BETA release\n^^\n<<<\n!!!!!Credits\n<<<\nThis feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]]\n<<<\n!!!!!Code\n***/\n// // 1.2.x compatibility\n//{{{\nif (!window.story) window.story=window;\nif (!store.getTiddler) store.getTiddler=function(title){return store.tiddlers[title]}\nif (!store.addTiddler) store.addTiddler=function(tiddler){store.tiddlers[tiddler.title]=tiddler}\nif (!store.deleteTiddler) store.deleteTiddler=function(title){delete store.tiddlers[title]}\n//}}}\n\n//{{{\n\nif (config.options.chkAutoSync==undefined)\n config.options.chkAutoSync=false;\nif (config.options.chkAutoSyncConfirm==undefined)\n config.options.chkAutoSyncConfirm=true;\n\nstore.autoSync_SaveTiddler=store.saveTiddler;\nstore.saveTiddler = function(title,newTitle,newBody,modifier,modified,tags) {\n\n // call the core TW function\n var result = store.autoSync_SaveTiddler(title,newTitle,newBody,modifier,modified,tags);\n var tiddler=store.getTiddler(newTitle);\n if (!config.options.chkAutoSync) return result;\n\n // PROTOCOL\n var theProtocol="http:";\n // HOST\n var theHost=store.getTiddlerText("SiteHost");\n if (!theHost || !theHost.length) theHost=document.location.host;\n if (!theHost || !theHost.length) theHost="SiteHost";\n // POST\n var thePost=store.getTiddlerText("SitePost");\n if (!thePost || !thePost.length) thePost="/SitePost";\n // PARAMS\n var theParams = "title="+encodeURIComponent(newTitle);\n theParams += "&modifier="+encodeURIComponent(modifier);\n theParams += "&modified="+encodeURIComponent(modified);\n theParams += "&tags="+encodeURIComponent(tiddler.getTags());\n // EXTRA PARAMS\n var theExtraParams="";\n var t=store.getTiddlerText("SiteParams"); if (t && t.length) theExtraParams = "&"+t;\n // DATA\n var theData = "&data="+encodeURIComponent(tiddler.saveToDiv());\n // construct URL\n var theURL=theProtocol+"//"+theHost+thePost+"?"+theParams+theExtraParams+theData\n // CONFIRM\n var OK=!config.options.chkAutoSyncConfirm;\n if (!OK) {\n // confirmation message\n var msg="Is it OK to send '"+newTitle+"' to "+theProtocol+"//"+theHost+thePost+"\sn";\n msg += "size: "+theData.length+" bytes\sn";\n msg += "modifier: "+modifier+"\sn";\n msg += "modified: "+modified+"\sn";\n msg += "tags: "+tiddler.getTags()+"\sn";\n msg += "extra parameters: "+(theExtraParams.length?theExtraParams:"(none)")+"\sn";\n OK = confirm(msg);\n }\n if (!OK) return;\n\n // create fresh hidden FRAME\n var f=document.getElementById("autoSyncFrame");\n if (f) document.body.removeChild(f);\n f=document.createElement("iframe"); f.id="autoSyncFrame";\n f.style.width="0px"; f.style.height="0px"; f.style.border="0px";\n document.body.appendChild(f);\n\n // load the FRAME to submit the URL to the server\n var d=f.document;\n if (f.contentDocument) d=f.contentDocument; // For NS6\n else if (f.contentWindow) d=f.contentWindow.document; // For IE5.5 and IE6\n d.location.replace(theURL);\n}\n//}}}\n
/***\n''Auto Tagger Plugin for TiddlyWiki version 1.2.x and 2.0''\n^^author: Eric Shulman - ELS Design Studios\nsource: http://www.TiddlyTools.com/#AutoTaggerPlugin\nlicense: [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]^^\n\nAutomatically tag tiddlers with their original creation date and author and optionally scan the tiddler content for any tags that are embedded as text. Makes cross-referencing your tiddlers a snap!\n\n!!!!!Usage\n<<<\nWhen ~AutoTagger is present, it automatically ''generates 'creation date' and 'creator' tag values'' for all newly created tiddlers, so that this information is retained even after a tiddler has been updated many times. In addition, if you enter ''//auto//'' as a tiddler tag value, ~AutoTagger ''scans the tiddler content'' (including title) for all existing tags, and ''automatically adds any embedded tags that it finds''.\n\nAfter they have been added to the tiddler, the new tags are treated just as if you had entered them by hand and can be edited to make any changes you want. Of course, as long as the "auto" tag is still present on a tiddler, ~AutoTagger will re-scan that tiddler's content each time it is edited. If you DO edit the generated tags, you can remove the "auto" tag from the tiddler to prevent it from being re-scanned when you press 'done' to finish editing.\n\n//Note: the special-purpose ''"systemConfig" tag is not added automatically, even if matched in the tiddler content'', since this tag should be added manually to ensure it is always used appropriately.//\n\n//Note: if you have set the "auto" tag on a tiddler, and then add several tags to your document, those tags will ''not'' be automatically added to the tiddler until you actually edit that tiddler and press 'done' to trigger an AutoTagger scan.//\n<<<\n!!!!!Configuration\n<<<\nThe ~AutoTagger plugin comes with a ''self-contained control panel''. Use these controls to enable or disable automatic 'creation date' or 'creator' tagging, modify the default date formatting, or redefine the special 'scan trigger' tag value (so you can use "auto" as a normal tag value in your document).\n\n<<option chkAutoTagAuthor>> add 'created by' tag //(when a tiddler is first created)//\n<<option chkAutoTagDate>> add 'creation date' tag, using date format: <<option txtAutoTagFormat>>\n<<option chkAutoTagEditor>> add 'edited by' tag //(when a tiddler is updated)//\nscan tiddler content for new tags when tagged with: <<option txtAutoTagTrigger>>\n----\n//date formatting syntax://\n^^//''DDD'' - day of week in full (eg, "Monday"), ''DD'' - day of month, ''0DD'' - adds leading zero//^^\n^^//''MMM'' - month in full (eg, "July"), ''MM'' - month number, ''0MM'' - adds leading zero//^^\n^^//''YYYY'' - full year, ''YY'' - two digit year//^^\n<<<\n!!!!!Installation\n<<<\nimport (or copy/paste) the following tiddlers into your document:\n''AutoTaggerPlugin'' (tagged with <<tag systemConfig>>)\n<<<\n!!!!!Revision History\n<<<\n''2006.06.15 [1.3.2]'' hijack TiddlyWiki.prototype.saveTiddler instead of store.saveTiddler. Permits other plugins to also hijack the function (thanks to Simon Baird for finding this!)\n''2006.05.31 [1.3.1]'' Re-assemble tags into a space-separated string (use encodeTiddlyLink to add {{{[[...]]}}} as needed) before passing it on to core (or other hijacked function)\n''2005.10.09 [1.3.0]'' Added 'edited by' tagging. Combined documentation and code into a single tiddler\n''2005.08.16 [1.2.0]'' Added optional scanning for tags in tiddler content (based on suggestion from Jacques Turbé)\n''2005.08.15 [1.1.0]'' Added 'created by' tag generation (based on suggestion from Elise Springer). Renamed from DateTag to AutoTagger\n''2005.08.15 [1.0.0]'' Initial Release\n<<<\n!!!!!Credits\n<<<\nThis feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]].\n<<<\n!!!!!Code\n***/\n//{{{\nversion.extensions.autoTagger = {major: 1, minor: 3, revision: 2, date: new Date(2006,6,14)};\n\nif (config.options.chkAutoTagDate==undefined)\n config.options.chkAutoTagDate=false;\nif (config.options.chkAutoTagEditor==undefined)\n config.options.chkAutoTagEditor=false;\nif (config.options.chkAutoTagAuthor==undefined)\n config.options.chkAutoTagAuthor=false;\nif (config.options.txtAutoTagTrigger==undefined)\n config.options.txtAutoTagTrigger="auto";\nif (config.options.txtAutoTagFormat==undefined)\n config.options.txtAutoTagFormat="YYYY.0MM.0DD";\n\n// hijack saveTiddler()\nTiddlyWiki.prototype.coreSaveTiddler=TiddlyWiki.prototype.saveTiddler;\nTiddlyWiki.prototype.saveTiddler=function(title,newTitle,newBody,modifier,modified,tags)\n{\n // get the tags as passed from the tiddler editor\n var newTags = [];\n if (tags) newTags = (typeof tags == "string") ? tags.readBracketedList() : tags;\n\n // if saving a new tiddler, add 'creation date' tag\n if (config.options.chkAutoTagDate && (store.getTiddler(title)==undefined))\n newTags.pushUnique(new Date().formatString(config.options.txtAutoTagFormat));\n // if saving a new tiddler, add 'created by' tag\n if (config.options.chkAutoTagAuthor && (store.getTiddler(title)==undefined))\n newTags.pushUnique(config.options.txtUserName);\n // if saving an existing tiddler, add 'edited by' tag\n if (config.options.chkAutoTagEditor && (store.getTiddler(title)))\n newTags.pushUnique(config.options.txtUserName);\n\n // if tagged for scanning, find tags embedded in text of tiddler title/body\n var allTags = store.getTags();\n if ((config.options.txtAutoTagTrigger!="") && (newTags.find(config.options.txtAutoTagTrigger)!=null))\n for (var t=0; t<allTags.length; t++)\n {\n // note: don't automatically tag a tiddler with 'systemConfig' or 'systemTiddler'\n if ((allTags[t][0]=='systemConfig') || (allTags[t][0]=='systemTiddler'))\n continue;\n if ((newBody.indexOf(allTags[t][0])!=-1) || (newTitle.indexOf(allTags[t][0])!=-1))\n newTags.pushUnique(allTags[t][0]);\n }\n\n // encode tags with [[...]] (as needed)\n for (var t=0; t<newTags.length; t++) newTags[t]=String.encodeTiddlyLink(newTags[t]);\n\n // reassemble tags into a string (for other plugins that require a string) and pass it all on\n return this.coreSaveTiddler(title,newTitle,newBody,modifier,modified,newTags.join(" "));\n}\n//}}}
Luego de jugar a nada\n cuando las tristes máscaras agrietadas\n caen con otoñal futilidad\n y el carrusel vacío silencia su letanía\n paso a paso me adentro en las oscuras mieles de la noche\n penetro blandamente la membrana azabache de lo íntimo\n y, ya suspendido en la ingravidez vibrante\n donde los contrastes afilan sus dagas contundentes,\n ansioso espero la llegada del ave.\n\n Con alas de petróleo\n en sensual y tierno abrazo\n me envuelve, me atesora\n su plumaje de sombras\n acaricia mi frente agradecida\n el abismo de sus ojos se clava en mi mirada\n\n (estoy listo)\n\n en circular impulso me lanza al infinito\n y, como celestial peana,\n voy arrancando chispas a la nada\n\n ¡Oh, noche!\n ¡Oh, tinieblas de estrellada calma!\n ¡Aquí están mis entrañas\n esperando el zarpazo vital con que desgarrás\n los nudos de mi alma!\n\n ¡ofrezco a tus cuchillas\n el furor espeso de mi sangre!\n ¡quiero vaciarme en luces\n para aplacar la ira de mis hambres!\n\n ¡Oh, noche!\n ¡Oh, muerte con que nazco de la nada!\n ¡Oh, pájaro de fuego\n donde se quema la abulia cotidiana!\n ¡cascada de silencio que aturde\n el carnaval hipócrita que surje con el alba!\n Tus dientes acerados laceran mi carne ávida\n y el grito de tu fauce sideral\n despierta mi mente anquilosada.\n\n ¡Oh, noche!\n ¡Oh, estrellas!\n ¡Oh, muerte-vida generosa y despiadada!\n\n ¡estoy en llamas!\n
En un rayo pálido,\n por ese camino de luna de destino inexorable,\n sentirás que bajo\n y, acodado en alféizar de tus ojos,\n conversaré con ese abismo amado,\n arrojaré mis monedas\n esperando que llegue al fin la barca\n que nos lleve a un horizonte de arenas y turpiales,\n de remolinos de suaves amapolas\n en donde extraviar para siempre las distancias.\n
/* background image and font color adjustments for viewer */\n.viewer { background-image: url('[[BlackMarbleBackground]]'); background-color:#111; border: 2px solid #999; -moz-border-radius:1em; padding:1em; }\n.viewer { color: #fff; }\n.viewer a:link, .viewer a:visited { color: #ccf !important; }\n.viewer a:hover { color: #fff; }\n.viewer .button { color: #def !important; }\n.viewer .button:hover { color: #fff; }\n.viewer th { color: #ffffff; }\n.viewer code { color: #ccc; }\n.viewer pre { color: #000; }\n.viewer hr { color: #666; }\n.viewer .highlight, .viewer .marked { color: #fff; }\n.viewer .tabSelected { background-color: #014; color:#fff; border-color:#999; border-width:2px; padding-bottom:2px !important; }\n.viewer .tabUnselected { background-color: #236; color:#999; border-color:#666}\n.viewer .tabContents { background-color: #014; color:#fff; border-color:#999; border-width:2px }\n.tagging .button, .tagged .button { color: #009; }\n
| source file|{{{D:\shtml\stiddlytools\sels\smarble_black.jpg}}}|\n| attached on|20 May 2006 by ELSDesignStudios|\n| embedded data|//none//|\n| local link|//none//|\n| remote link|/%REMOTE_LINK%/[[els/marble_black.jpg|els/marble_black.jpg]]|\nimage\n<<<\nusage: {{{[img[tooltip|BlackMarbleBackground]] or [img[tooltip|BlackMarbleBackground][link]]}}}\n[img[tooltip|BlackMarbleBackground]]\n<<<\n
Me quito estas ropas\n impregnadas de adjetivos acres\n y salgo desnudo al odio\n su música escurre barros\n por un canal ajeno a mi frecuencia\n y quedo solo.\n\n Camino por el centro de la calle\n y el paisaje al final es un gran hoyo...\n Si alguien lo sabe, por favor me lo diga:\n ¿qué son estas columnas de palabras?\n ¿por qué, queriendo decir nada,\n siempre hay algo?\n Quiero ser incoherente y no hay caso,\n siempre habrá un carril para mí.\n Cuando decida suicidarme\n se habrá abolido la muerte.\n Adiós, entonces,\n seré un boludo eterno.\n Así sea.\n
/***\nBreadcrumbsPlugin\nauthor: Alan Hecht (with 2.0 update from 'jack' and revisions by Bram Chen)\nsource: http://groups.google.com/group/TiddlyWikiDev/msg/c23edb5f3c0d8b7e\n***/\n//{{{\nversion.extensions.breadCrumbs = {major: 1, minor: 0, revision: 1,\ndate: new Date("Feb 4, 2006")};\nconfig.breadCrumbs = [];\n\nwindow.onClickTiddlerLink_orig_breadCrumbs = window.onClickTiddlerLink;\nwindow.onClickTiddlerLink = function(e){\n window.onClickTiddlerLink_orig_breadCrumbs(e);\n addCrumb(e);\n\n}\n\nfunction addCrumb(e){\n if (!e) var e = window.event;\n var thisCrumb = "[[" + resolveTarget(e).getAttribute("tiddlyLink") + "]]";\n var ind = config.breadCrumbs.find(thisCrumb);\n if(ind == null)\n config.breadCrumbs.push(thisCrumb);\n else\n config.breadCrumbs.length = ind++;\n refreshCrumbs();\n\n}\n\nfunction refreshCrumbs(){\n var crumbArea = document.getElementById("breadCrumbs");\n if (!crumbArea) {\n var crumbArea = document.createElement("div");\n crumbArea.id = "breadCrumbs";\n crumbArea.style.visibility= "hidden";\n var targetArea = document.getElementById("tiddlerDisplay");\n targetArea.parentNode.insertBefore(crumbArea,targetArea);\n }\n crumbArea.style.visibility = "visible";\n removeChildren(crumbArea);\n createTiddlyButton(crumbArea,"Home",null,restartHome);\n wikify(" | " + config.breadCrumbs.join(' > '),crumbArea)\n\n}\n\nfunction restartHome(){\n story.closeAllTiddlers();\n restart();\n config.breadCrumbs = [];\n var crumbArea = document.getElementById("breadCrumbs");\n crumbArea.style.visibility = "hidden";\n crumbArea.parentNode.removeChild(crumbArea);\n}\n//}}}
/* background images */\n/* colors and borders */\n#breadCrumbs { color:#ccc; }\n#breadCrumbs a { color:#ccf; }\n#titleLine { color: #fff; }\n#titleLine a { color: #009900; }\n#mainMenu { color: #fff; }\n#mainMenu .tiddlyLink { color: #def; }\n#mainMenu .tiddlyLink:hover { color: #fff; }\n#mainMenu .externalLink { color: #def; }\n#mainMenu .externalLink:hover { color: #fff; }\n#mainMenu .button, #mainMenu A { color: #def; }\n#mainMenu .button:hover, #mainMenu A:hover { color: #fff; }\n#messageArea { color: #006; }\n#messageArea a:link, #messageArea a:visited { color: #006; }\n#messageArea a:hover { color: #f00; }\n#messageArea a:active { color: #006; }\n#popup { color: #000; }\n#popup a { color: #006; }\n#popup a:hover { color: #006; }\n#popup hr { color: #666; }\n.tabContents { color: #000; }\n.tiddler .button { color: #ccf; }\n.tiddler .button:hover { color: #fff; }\n.tiddler .button:active { color: #fff; }\n.title { color: #def; }\n.toolbar { color: #aaa; }\n.footer { color: #888; }\n.selectedTiddler .footer { color: #ddd; }\n.viewer { color: #fff; }\n.viewer a:link, .viewer a:visited { color: #69c; }\n.viewer a:hover { color: #fff; }\n.viewer .button { color: #def; }\n.viewer .button:hover { color: #fff; }\n.viewer th { color: #fff; }\n.viewer td { color: #fff; }\n.viewer pre, .viewer code { color: #f00; }\n.viewer hr { color: #666; }\n.highlight, .marked { color: #fff; }\n.editor { color: #402C74; }\n.editorFooter { color: #aaa; }\n.editorFooter A { color: #930; }\n.editorFooter A:hover { color: #cf6; }\n.editorFooter A:active { color: #fff; }\n#sidebar { color: #fff; }\n#sidebarOptions .button, #sidebarOptions A { color: #def; }\n#sidebarOptions .button:hover, #sidebarOptions A { color: #fff; }\n#sidebarOptions .button:active, #sidebarOptions A { color: #fff; }\n#sidebarOptions .sliderPanel { color: #fff; }\n#sidebarOptions .sliderPanel A { color: #def; }\n#sidebarOptions .sliderPanel .tabSelected a { color: #33f; }\n#sidebarOptions .sliderPanel .tabContents a { color:#33f; }\n#sidebarOptions .sliderPanel A:hover { color: #fff; }\n#sidebarOptions .sliderPanel A:active { color: #fff; }\n#sidebarOptions .calendar A { color:#33f; }\n.sidebarSubHeading { color: #300; }\n#sidebarTabs .tabSelected { color: #cf6; }\n#sidebarTabs .tabUnselected { color: #cf6; }\n#sidebarTabs .tabContents .tiddlyLink { color: #66f; }\n#sidebarTabs .tabContents .tiddlyLink:hover { color: #fff; } \n#sidebarTabs .tabContents .button { color: #66f; }\n#sidebarTabs .tabContents .button:hover { color: #fff; }\n#licensePanel A { color: #66f; }\n#licensePanel A:hover { color: #fff; }\n#licensePanel A:active { color: #fff; }\n.errorNoSuchMacro { color: #ff0; }\n.zoomer { color: #fff; }\n\n.floatingPanel .button,\n.floatingPanel a:link,\n.floatingPanel a:visited,\n.viewer .floatingPanel .button,\n.viewer .floatingPanel a:link,\n.viewer .floatingPanel a:visited {\n color: #009 !important;\n}\n.floatingPanel a:hover,\n.viewer .floatingPanel .button,\n.viewer .floatingPanel a:hover {\n color: #fff !important;\n}
// // override cookie settings for CalendarPlugin:\n//{{{\nconfig.options.txtCalFirstDay=6;\nconfig.options.txtCalStartOfWeekend=5;\n//}}}
/***\n''Name:'' Calendar plugin\n''Author:'' SteveRumsby\n\n// // updated by Jeremy Sheeley to add cacheing for reminders\n// // see http://www.geocities.com/allredfaq/reminderMacros.html\n\n''Configuration:''\n\n|''First day of week:''|<<option txtCalFirstDay>>|(Monday = 0, Sunday = 6)|\n|''First day of weekend:''|<<option txtCalStartOfWeekend>>|(Monday = 0, Sunday = 6)|\n\n''Syntax:'' \n|{{{<<calendar>>}}}|Produce a full-year calendar for the current year|\n|{{{<<calendar year>>}}}|Produce a full-year calendar for the given year|\n|{{{<<calendar year month>>}}}|Produce a one-month calendar for the given month and year|\n|{{{<<calendar thismonth>>}}}|Produce a one-month calendar for the current month|\n|{{{<<calendar lastmonth>>}}}|Produce a one-month calendar for last month|\n|{{{<<calendar nextmonth>>}}}|Produce a one-month calendar for next month|\n\n***/\n// //Modify this section to change the text displayed for the month and day names, to a different language for example. You can also change the format of the tiddler names linked to from each date, and the colours used.\n\n// // ''Changes by ELS 2005.10.30:''\n// // config.macros.calendar.handler()\n// // ^^use "tbody" element for IE compatibility^^\n// // ^^IE returns 2005 for current year, FF returns 105... fix year adjustment accordingly^^\n// // createCalendarDays()\n// // ^^use showDate() function (if defined) to render autostyled date with linked popup^^\n// // calendar stylesheet definition\n// // ^^use .calendar class-specific selectors, add text centering and margin settings^^\n\n//{{{\nconfig.macros.calendar = {};\n\nconfig.macros.calendar.monthnames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];\nconfig.macros.calendar.daynames = ["M", "T", "W", "T", "F", "S", "S"];\n\nconfig.macros.calendar.weekendbg = "#c0c0c0";\nconfig.macros.calendar.monthbg = "#e0e0e0";\nconfig.macros.calendar.holidaybg = "#ffc0c0";\n\n//}}}\n// //''Code section:''\n// (you should not need to alter anything below here)//\n//{{{\nif(config.options.txtCalFirstDay == undefined)\n config.options.txtCalFirstDay = 0;\nif(config.options.txtCalStartOfWeekend == undefined)\n config.options.txtCalStartOfWeekend = 5;\n\nconfig.macros.calendar.tiddlerformat = "0DD/0MM/YYYY"; // This used to be changeable - for now, it isn't// <<smiley :-(>> \n\nversion.extensions.calendar = { major: 0, minor: 6, revision: 0, date: new Date(2006, 1, 22)};\nconfig.macros.calendar.monthdays = [ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n\nconfig.macros.calendar.holidays = [ ]; // Not sure this is required anymore - use reminders instead\n//}}}\n\n// //Is the given date a holiday?\n//{{{\nfunction calendarIsHoliday(date)\n{\n var longHoliday = date.formatString("0DD/0MM/YYYY");\n var shortHoliday = date.formatString("0DD/0MM");\n\n for(var i = 0; i < config.macros.calendar.holidays.length; i++) {\n if(config.macros.calendar.holidays[i] == longHoliday || config.macros.calendar.holidays[i] == shortHoliday) {\n return true;\n }\n }\n return false;\n}\n//}}}\n\n// //The main entry point - the macro handler.\n// //Decide what sort of calendar we are creating (month or year, and which month or year)\n// // Create the main calendar container and pass that to sub-ordinate functions to create the structure.\n// ELS 2005.10.30: added creation and use of "tbody" for IE compatibility and fixup for year >1900//\n// ELS 2005.10.30: fix year calculation for IE's getYear() function (which returns '2005' instead of '105')//\n// ELS 2006.05.29: add journalDateFmt handling//\n//{{{\nconfig.macros.calendar.handler = function(place,macroName,params)\n{\n var calendar = createTiddlyElement(place, "table", null, "calendar", null);\n var tbody = createTiddlyElement(calendar, "tbody", null, null, null);\n var today = new Date();\n var year = today.getYear();\n if (year<1900) year+=1900;\n \n // get format for journal link by reading from SideBarOptions (ELS 5/29/06 - based on suggestion by Martin Budden)\n var text = store.getTiddlerText("SideBarOptions");\n this.journalDateFmt = "DD-MMM-YYYY";\n var re = new RegExp("<<(?:newJournal)([^>]*)>>","mg"); var fm = re.exec(text);\n if (fm && fm[1]!=null) { var pa=fm[1].readMacroParams(); if (pa[0]) this.journalDateFmt = pa[0]; }\n\n if (params[0] == "thismonth")\n {\n cacheReminders(new Date(year, today.getMonth(), 1, 0, 0), 31);\n createCalendarOneMonth(tbody, year, today.getMonth());\n } \n else if (params[0] == "lastmonth") {\n var month = today.getMonth()-1; if (month==-1) { month=11; year--; }\n cacheReminders(new Date(year, month, 1, 0, 0), 31);\n createCalendarOneMonth(tbody, year, month);\n }\n else if (params[0] == "nextmonth") {\n var month = today.getMonth()+1; if (month>11) { month=0; year++; }\n cacheReminders(new Date(year, month, 1, 0, 0), 31);\n createCalendarOneMonth(tbody, year, month);\n }\n else {\n if (params[0]) year = params[0];\n if(params[1])\n {\n cacheReminders(new Date(year, params[1]-1, 1, 0, 0), 31);\n createCalendarOneMonth(tbody, year, params[1]-1);\n }\n else\n {\n cacheReminders(new Date(year, 0, 1, 0, 0), 366);\n createCalendarYear(tbody, year);\n }\n }\n window.reminderCacheForCalendar = null;\n}\n//}}}\n//{{{\n//This global variable is used to store reminders that have been cached\n//while the calendar is being rendered. It will be renulled after the calendar is fully rendered.\nwindow.reminderCacheForCalendar = null;\n//}}}\n//{{{\nfunction cacheReminders(date, leadtime)\n{\n if (window.findTiddlersWithReminders == null)\n return;\n window.reminderCacheForCalendar = {};\n var leadtimeHash = [];\n leadtimeHash [0] = 0;\n leadtimeHash [1] = leadtime;\n var t = findTiddlersWithReminders(date, leadtimeHash, null, 1);\n for(var i = 0; i < t.length; i++) {\n //just tag it in the cache, so that when we're drawing days, we can bold this one.\n window.reminderCacheForCalendar[t[i]["matchedDate"]] = "reminder:" + t[i]["params"]["title"]; \n }\n}\n//}}}\n//{{{\nfunction createCalendarOneMonth(calendar, year, mon)\n{\n var row = createTiddlyElement(calendar, "tr", null, null, null);\n createCalendarMonthHeader(calendar, row, config.macros.calendar.monthnames[mon] + " " + year, true, year, mon);\n row = createTiddlyElement(calendar, "tr", null, null, null);\n createCalendarDayHeader(row, 1);\n createCalendarDayRowsSingle(calendar, year, mon);\n}\n//}}}\n\n//{{{\nfunction createCalendarMonth(calendar, year, mon)\n{\n var row = createTiddlyElement(calendar, "tr", null, null, null);\n createCalendarMonthHeader(calendar, row, config.macros.calendar.monthnames[mon] + " " + year, false, year, mon);\n row = createTiddlyElement(calendar, "tr", null, null, null);\n createCalendarDayHeader(row, 1);\n createCalendarDayRowsSingle(calendar, year, mon);\n}\n//}}}\n\n//{{{\nfunction createCalendarYear(calendar, year)\n{\n var row;\n row = createTiddlyElement(calendar, "tr", null, null, null);\n var back = createTiddlyElement(row, "td", null, null, null);\n var backHandler = function() {\n removeChildren(calendar);\n createCalendarYear(calendar, year-1);\n };\n createTiddlyButton(back, "<", "Previous year", backHandler);\n back.align = "center";\n\n var yearHeader = createTiddlyElement(row, "td", null, "calendarYear", year);\n yearHeader.align = "center";\n yearHeader.setAttribute("colSpan", 19);\n\n var fwd = createTiddlyElement(row, "td", null, null, null);\n var fwdHandler = function() {\n removeChildren(calendar);\n createCalendarYear(calendar, year+1);\n };\n createTiddlyButton(fwd, ">", "Next year", fwdHandler);\n fwd.align = "center";\n\n createCalendarMonthRow(calendar, year, 0);\n createCalendarMonthRow(calendar, year, 3);\n createCalendarMonthRow(calendar, year, 6);\n createCalendarMonthRow(calendar, year, 9);\n}\n//}}}\n\n//{{{\nfunction createCalendarMonthRow(cal, year, mon)\n{\n var row = createTiddlyElement(cal, "tr", null, null, null);\n createCalendarMonthHeader(cal, row, config.macros.calendar.monthnames[mon], false, year, mon);\n createCalendarMonthHeader(cal, row, config.macros.calendar.monthnames[mon+1], false, year, mon);\n createCalendarMonthHeader(cal, row, config.macros.calendar.monthnames[mon+2], false, year, mon);\n row = createTiddlyElement(cal, "tr", null, null, null);\n createCalendarDayHeader(row, 3);\n createCalendarDayRows(cal, year, mon);\n}\n//}}}\n\n//{{{\nfunction createCalendarMonthHeader(cal, row, name, nav, year, mon)\n{\n var month;\n if(nav) {\n var back = createTiddlyElement(row, "td", null, null, null);\n back.align = "center";\n back.style.background = config.macros.calendar.monthbg;\n\n/*\n back.setAttribute("colSpan", 2);\n\n var backYearHandler = function() {\n var newyear = year-1;\n removeChildren(cal);\n cacheReminders(new Date(newyear, mon , 1, 0, 0), 31);\n createCalendarOneMonth(cal, newyear, mon);\n };\n createTiddlyButton(back, "<<", "Previous year", backYearHandler);\n*/\n var backMonHandler = function() {\n var newyear = year;\n var newmon = mon-1;\n if(newmon == -1) { newmon = 11; newyear = newyear-1;}\n removeChildren(cal);\n cacheReminders(new Date(newyear, newmon , 1, 0, 0), 31);\n createCalendarOneMonth(cal, newyear, newmon);\n };\n createTiddlyButton(back, "<", "Previous month", backMonHandler);\n\n\n month = createTiddlyElement(row, "td", null, "calendarMonthname", name)\n// month.setAttribute("colSpan", 3);\n month.setAttribute("colSpan", 5);\n\n var fwd = createTiddlyElement(row, "td", null, null, null);\n fwd.align = "center";\n fwd.style.background = config.macros.calendar.monthbg; \n\n// fwd.setAttribute("colSpan", 2);\n var fwdMonHandler = function() {\n var newyear = year;\n var newmon = mon+1;\n if(newmon == 12) { newmon = 0; newyear = newyear+1;}\n removeChildren(cal);\n cacheReminders(new Date(newyear, newmon , 1, 0, 0), 31);\n createCalendarOneMonth(cal, newyear, newmon);\n };\n createTiddlyButton(fwd, ">", "Next month", fwdMonHandler);\n/*\n var fwdYear = createTiddlyElement(row, "td", null, null, null);\n var fwdYearHandler = function() {\n var newyear = year+1;\n removeChildren(cal);\n cacheReminders(new Date(newyear, mon , 1, 0, 0), 31);\n createCalendarOneMonth(cal, newyear, mon);\n };\n createTiddlyButton(fwd, ">>", "Next year", fwdYearHandler);\n*/\n } else {\n month = createTiddlyElement(row, "td", null, "calendarMonthname", name)\n month.setAttribute("colSpan", 7);\n }\n month.align = "center";\n month.style.background = config.macros.calendar.monthbg;\n}\n//}}}\n\n//{{{\nfunction createCalendarDayHeader(row, num)\n{\n var cell;\n for(var i = 0; i < num; i++) {\n for(var j = 0; j < 7; j++) {\n var d = j + (config.options.txtCalFirstDay - 0);\n if(d > 6) d = d - 7;\n cell = createTiddlyElement(row, "td", null, null, config.macros.calendar.daynames[d]);\n\n if(d == (config.options.txtCalStartOfWeekend-0) || d == (config.options.txtCalStartOfWeekend-0+1))\n cell.style.background = config.macros.calendar.weekendbg;\n }\n }\n}\n//}}}\n\n//{{{\nfunction createCalendarDays(row, col, first, max, year, mon)\n{\n var i;\n for(i = 0; i < col; i++) {\n createTiddlyElement(row, "td", null, null, null);\n }\n var day = first;\n for(i = col; i < 7; i++) {\n var d = i + (config.options.txtCalFirstDay - 0);\n if(d > 6) d = d - 7;\n var daycell = createTiddlyElement(row, "td", null, null, null);\n var isaWeekend = ((d == (config.options.txtCalStartOfWeekend-0) || d == (config.options.txtCalStartOfWeekend-0+1))? true:false);\n\n if(day > 0 && day <= max) {\n var celldate = new Date(year, mon, day);\n // ELS 2005.10.30: use <<date>> macro's showDate() function to create popup\n if (window.showDate) {\n showDate(daycell,celldate,"popup","DD",config.macros.calendar.journalDateFmt,true, isaWeekend); // ELS 5/29/06 - use journalDateFmt \n } else {\n if(isaWeekend) daycell.style.background = config.macros.calendar.weekendbg;\n var title = celldate.formatString(config.macros.calendar.tiddlerformat);\n if(calendarIsHoliday(celldate)) {\n daycell.style.background = config.macros.calendar.holidaybg;\n }\n if(window.findTiddlersWithReminders == null) {\n var link = createTiddlyLink(daycell, title, false);\n link.appendChild(document.createTextNode(day));\n } else {\n var button = createTiddlyButton(daycell, day, title, onClickCalendarDate);\n }\n }\n }\n day++;\n }\n}\n//}}}\n\n// //We've clicked on a day in a calendar - create a suitable pop-up of options.\n// //The pop-up should contain:\n// // * a link to create a new entry for that date\n// // * a link to create a new reminder for that date\n// // * an <hr>\n// // * the list of reminders for that date\n//{{{\nfunction onClickCalendarDate(e)\n{\n var button = this;\n var date = button.getAttribute("title");\n var dat = new Date(date.substr(6,4), date.substr(3,2)-1, date.substr(0, 2));\n\n date = dat.formatString(config.macros.calendar.tiddlerformat);\n var popup = createTiddlerPopup(this);\n popup.appendChild(document.createTextNode(date));\n var newReminder = function() {\n var t = store.getTiddlers(date);\n displayTiddler(null, date, 2, null, null, false, false);\n if(t) {\n document.getElementById("editorBody" + date).value += "\sn<<reminder day:" + dat.getDate() +\n " month:" + (dat.getMonth()+1) +\n " year:" + (dat.getYear()+1900) + " title: >>";\n } else {\n document.getElementById("editorBody" + date).value = "<<reminder day:" + dat.getDate() +\n " month:" + (dat.getMonth()+1) +\n " year:" + (dat.getYear()+1900) + " title: >>";\n }\n };\n var link = createTiddlyButton(popup, "New reminder", null, newReminder); \n popup.appendChild(document.createElement("hr"));\n\n var t = findTiddlersWithReminders(dat, [0,14], null, 1);\n for(var i = 0; i < t.length; i++) {\n link = createTiddlyLink(popup, t[i].tiddler, false);\n link.appendChild(document.createTextNode(t[i].tiddler));\n }\n}\n//}}}\n\n//{{{\nfunction calendarMaxDays(year, mon)\n{\n var max = config.macros.calendar.monthdays[mon];\n if(mon == 1 && (year % 4) == 0 && ((year % 100) != 0 || (year % 400) == 0)) {\n max++;\n }\n return max;\n}\n//}}}\n\n//{{{\nfunction createCalendarDayRows(cal, year, mon)\n{\n var row = createTiddlyElement(cal, "tr", null, null, null);\n\n var first1 = (new Date(year, mon, 1)).getDay() -1 - (config.options.txtCalFirstDay-0);\n if(first1 < 0) first1 = first1 + 7;\n var day1 = -first1 + 1;\n var first2 = (new Date(year, mon+1, 1)).getDay() -1 - (config.options.txtCalFirstDay-0);\n if(first2 < 0) first2 = first2 + 7;\n var day2 = -first2 + 1;\n var first3 = (new Date(year, mon+2, 1)).getDay() -1 - (config.options.txtCalFirstDay-0);\n if(first3 < 0) first3 = first3 + 7;\n var day3 = -first3 + 1;\n\n var max1 = calendarMaxDays(year, mon);\n var max2 = calendarMaxDays(year, mon+1);\n var max3 = calendarMaxDays(year, mon+2);\n\n while(day1 <= max1 || day2 <= max2 || day3 <= max3) {\n row = createTiddlyElement(cal, "tr", null, null, null);\n createCalendarDays(row, 0, day1, max1, year, mon); day1 += 7;\n createCalendarDays(row, 0, day2, max2, year, mon+1); day2 += 7;\n createCalendarDays(row, 0, day3, max3, year, mon+2); day3 += 7;\n }\n}\n//}}}\n\n//{{{\nfunction createCalendarDayRowsSingle(cal, year, mon)\n{\n var row = createTiddlyElement(cal, "tr", null, null, null);\n\n var first1 = (new Date(year, mon, 1)).getDay() -1 - (config.options.txtCalFirstDay-0);\n if(first1 < 0) first1 = first1+ 7;\n var day1 = -first1 + 1;\n var max1 = calendarMaxDays(year, mon);\n\n while(day1 <= max1) {\n row = createTiddlyElement(cal, "tr", null, null, null);\n createCalendarDays(row, 0, day1, max1, year, mon); day1 += 7;\n }\n}\n//}}}\n\n// //ELS 2005.10.30: added styles\n//{{{\nsetStylesheet(".calendar, .calendar table, .calendar th, .calendar tr, .calendar td { text-align:center; } .calendar, .calendar a { margin:0px !important; padding:0px !important; }", "calendarStyles");\n//}}}\n
I\n\n Aquí estoy\n debatiéndome entre la nostalgia\n y la sensualidad de una taza de café\n mientra allí abajo\n los chicos del subte\n inhalan en sus bolsitas\n el vértigo mansador de su paz imposible\n\n II\n\n ¿Qué paz puedo tener\n si se que estás ahí\n junto a mi ventanilla\n listo para saltar?\n Pero se que no lo harás\n - el sabor del peligro\n impide que cortes\n mi cuello indiferente\n mi cuello cómplice -.\n\n III\n\n Meto la mano en el bolsillo\n de mi campera\n sabiendo que lo hallaré.\n Efectivamente está\n y saco el cigarrillo.\n Guardo el paquete nuevamente.\n Qué hermosa sensación\n de seguridad saber\n que las cosas están\n allí, y no en otro lado.\n En el cajón de mi cómoda\n están las medias azules,\n ciertamente allí,\n y no en otro lado.\n En la caja gris\n mis blancos pañuelos,\n allí, y no en otro lado.\n Se, por ejemplo,\n que mis documentos\n están en el bolsillo\n trasero-izquierdo\n de mi pantalón,\n el reloj, lógicamente,\n en mi muñeca izquierda,\n precisamente allí,\n y no en otro lado.\n\n Todo\n todo\n segura\n efectiva\n previsiblemente allí,\n y no en otro lado.\n\n Pero vos\n ¿dónde estás?\n ¿qué credencial te da\n vía libre en toda la ciudad,\n en todas las ciudades?\n ¿Por qué aparecés\n en esa esquina repentina\n haciéndome sentir\n perdidamente desnudo?\n ¿Por qué estás allí,\n justo allí,\n y no en otro lado?\n\n IV\n\n Me esfuerzo, me concentro,\n trato de abstraerme\n para que el estro místico me colme,\n para capturar las claras imágenes\n de las esferas puras donde la belleza mora\n y desde su levedad intangible nos espera.\n\n Elevo mis ojos y mis manos\n deseando que, en algún momento,\n el arco voltaico de su beso\n me transporte a esa isla de placeres.\n\n Pero tropiezo con vos\n que, acurrucado en el umbral mugriento\n de un negocio ya sin dueño,\n durmiendo tu orfandad acusadora,\n cerrás un grillete de fuego en mi tobillo,\n y con el bloque de cemento\n de tus rodillas sucias,\n de tu remerita en hilachas\n y la bolsita que asoma,\n hiriente, en tu bolsillo\n -donde aspirás los vapores quemantes del olvido-,\n con la misma impiedad de tu abandono\n me arrojás a la cloaca de tu vida.
Aquí el abuelo\n del abuelo de mi abuelo\n se hizo piedra,\n tierra y pastos.\n Filtró con las lluvias su memoria\n hasta las napas más profundas\n retornando al germen de su historia.\n\n Aquí la madre\n de la madre de mi madre\n de niña corrió por las laderas\n de este paisaje, testigo de los títulos\n que el dios silvestre,\n legitimado en siglos\n de equilibrada permanencia,\n otorgó naturalmente\n a este pueblo curtido por el viento,\n el sol, la nieve\n y las matanzas\n de la invasión salvaje y extranjera.\n\n Aquí resistió esta raza\n mientras pudo, como pudo,\n la imposición de credos y costumbres,\n lenguajes,\n mezquindades pintadas de progreso;\n conservando,\n aún en el mísero aislamiento,\n aún ante el despojo consumado,\n ante la indiferencia ruin\n del asistencialismo,\n ante la humillación\n de negocios y casas de descanso\n bautizados\n con nombres que pretenden evocarlos;\n consevando, pues,\n la inocencia de los pájaros,\n la tenacidad parca de las maras,\n la dignidad del cardo.\n\n Aquí, ahora,\n con la legalidad obscena de los bárbaros,\n cercan cerros, bosques,\n cercan lagos,\n esgrimiendo papeles impregnados\n en sangre de mis ancestros,\n manchados por la tos tuberculosa\n de mis hijos,\n de mis hermanas y hermanos.\n\n Aquí y ahora yo pregunto\n ¿puede una jaula atrapar al viento?\n ¿puede el sol encerrarse en un cacharro?\n ¿quién puede decirle al monte\n que ahora tiene dueño?\n ¿cuánta leña precisan sus hogares?\n ¿cabe en alguno de sus bolsillos\n la inmensidad del cielo?\n ¿puede alguien reclamar, acaso,\n la patria potestad de los elementos?\n ¿cuánto de eso uno se lleva\n en el minuto postrero?\n\n Pregunto y no hay respuestas,\n porque a los ojos de los usurpadores\n no existo,\n no soy siquiera viento.\n Para ellos no produzco ni silencio.\n\n Y allí están,\n mis abuelas y abuelos,\n acercándose centímetro a centímetro\n en la lenta progresión de los glaciares,\n mirando\n desde la fría transparencia de los hielos,\n desde el ojo profundo de los lagos,\n desde la zumbante planicie de la estepa\n y las austeras faldas de los cerros,\n cómo la falta de respeteo\n al agua, al árbol, a la tierra,\n a todas las entidades que allí habitan,\n se instala, se acrecienta,\n se afianza y multiplica.\n Y el grito mudo de su pena,\n como un viento que a su paso\n agita arenas milenarias,\n va entristeciendo al desierto.
/***\n''CheckboxPlugin for TiddlyWiki version 2.0''\n^^author: Eric Shulman\nsource: http://www.TiddlyTools.com/#CheckboxPlugin \nlicense: [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]^^\n\nAdd checkboxes to your tiddler content. Checkbox states can be preserved in the document by either automatically modifying the tiddler content or setting/removing tags on specified tiddlers, or they may be saved as local cookies by assigning an optional 'chkID' to the checkbox. Add custom javascript for programmatic initialization and onClick handling for any checkbox. Also provides access to checkbox DOM element data and tracks the checkbox state in TiddlyWiki's config.options[] internal data.\n\n!!!!!Usage\n<<<\nThe checkbox syntax, including all optional parameters, is contained inside a matched set of [ and ] brackets.\n{{{ [x=id(title|tag){init_script}{onclick_script}] }}}\n\nAn alternative syntax lets you place the optional parameters ''outside'' the [ and ] brackets, and is provided for backward-compatibility with existing content that may include checkbox definitions based on earlier releases of this plugin:\n{{{ [x]=id(title|tag){init_script}{onclick_script} }}}\n\n//{{{\n[ ]or[_] and [x]or[X]\n//}}}\nSimple checkboxes. The current unchecked/checked state is indicated by the character between the {{{[}}} and {{{]}}} brackets ("_" means unchecked, "X" means checked). When you click on a checkbox, the current state is retained by directly modifying the tiddler content to place the corresponding "_" or "X" character in between the brackets\n//{{{\n[x=id]\n//}}}\nAssign an optional ID to the checkbox so you can use {{{document.getElementByID("id")}}} to manipulate the checkbox DOM element, as well as tracking the current checkbox state in {{{config.options["id"]}}}. If the ID starts with "chk" the checkbox state will also be saved in a cookie, so it can be automatically restored whenever the checkbox is re-rendered (overrides any default {{{[x]}}} or {{{[_]}}} value). If a cookie value is kept, the "_" or "X" character in the tiddler content remains unchanged, and is only applied as the default when a cookie-based value is not currently defined.\n//{{{\n[x(title|tag)] or [x(title:tag)]\n//}}}\nInitializes and tracks the current checkbox state by setting or removing ("TogglyTagging") a particular tag value from a specified tiddler. If you omit the tiddler title (and the | or : separator), the specified tag is assigned to the current tiddler. If you omit the tag value, as in {{{(title|)}}}, the default tag, {{{checked}}}, is assumed. Omitting both the title and tag, {{{()}}}, tracks the checkbox state by setting the "checked" tag on the current tiddler. When tag tracking is used, the "_" or "X" character in the tiddler content remains unchanged, and is not used to set or track the checkbox state. If a tiddler title named in the tag does not exist, the checkbox state defaults to //unselected//. When the checkbox is subsequently changed to //selected//, it will automatically (and silently) create the missing tiddler and then add the tag to it. //''NOTE: beginning with version 2.1.2 of this plugin, the "|" separator is the preferred separator between the title and tag name, as it avoids syntactic ambiguity when ":" is used within tiddler titles or tag names.''//\n//{{{\n[x{javascript}{javascript}]\n//}}}\nYou can define optional javascript code segments to add custom initialization and/or 'onClick' handling to a checkbox. The current checkbox state (and it's other DOM attributes) can be set or read from within these code segments by reference to the default context-object, 'this'.\n\nThe first code segment will be executed when the checkbox is initially displayed, so that you can programmatically determine it's starting checked/unchecked state. The second code segment (if present) is executed whenever the checkbox is clicked, so that you can perform programmed responses or intercept and override the checkbox state based on complex logic using the TW core API or custom functions defined in plugins (e.g. testing a particular tiddler title to see if certain tags are set or setting some tags when the checkbox is clicked).\n\nNote: if you want to use the default checkbox initialization processing with a custom onclick function, use this syntax: {{{ [x=id{}{javascript}] }}} \n<<<\n!!!!!Configuration\n<<<\nNormally, when a checkbox state is changed, the affected tiddlers are automatically re-rendered, so that any checkbox-dependent dynamic content can be updated. There are three possible tiddlers to be re-rendered, depending upon where the checkbox is placed, and what kind of storage method it is using.\n*''container'': the tiddler in which the checkbox is displayed. (e.g., this tiddler)\n*''tagged'': the tiddler that is being tagged (e.g., "~MyTask" when tagging "~MyTask:done")\n*''tagging'': the "tag tiddler" (e.g., "~done" when tagging "~MyTask:done")\nYou can set the default refresh handling for all checkboxes in your document by using the following javascript syntax either in a systemConfig plugin, or as an inline script. (Substitute true/false values as desired):\n{{{config.checkbox.refresh = { tagged:true, tagging:true, container:true };}}}\n\nYou can also override these defaults for any given checkbox by using an initialization function to set one or more of the refresh options. For example:\n{{{[_{this.refresh.container=false}]}}}\n<<<\n!!!!!Examples\n<<<\n//{{{\n[X] label\n[_] label\n//}}}\n>checked and unchecked static default values\n>[X] label\n>[_] label\n//{{{\n[_=demo] label\n//}}}\n>document-based value (id='demo', no cookie)\n>[_=demo] label\n//{{{\n[_=chkDemo] label\n//}}}\n>cookie-based value (id='chkDemo')\n>[_=chkDemo] label\n//{{{\n[_(CheckboxPlugin|demotag)]\n[_(CheckboxPlugin|demotag){this.refresh.tagged=this.refresh.container=false}]\n//}}}\n>tag-based value (TogglyTagging)\n>[_(CheckboxPlugin|demotag)] toggle 'demotag' (and refresh tiddler display)\n>[_(CheckboxPlugin|demotag){this.refresh.tagged=this.refresh.container=false}] toggle 'demotag' (no refresh)\n>current tags: <script>return store.getTiddler(story.findContainingTiddler(place).id.substr(7)).tags.toString();</script>\n><script label="click to view current tags">alert(store.getTiddler(story.findContainingTiddler(place).id.substr(7)).tags.toString());return false</script>\n//{{{\n[X{this.checked=true}{alert(this.checked?"on":"off")}] message box with checkbox state\n//}}}\n>custom init and onClick functions\n>[X{this.checked=true}{alert(this.checked?"on":"off")}] message box with checkbox state\nRetrieving option values:\nconfig.options['demo']=<script>return config.options['demo']?"true":"false";</script>\nconfig.options['chkDemo']=<script>return config.options['chkDemo']?"true":"false";</script>\n\n!!!!!Installation\nimport (or copy/paste) the following tiddlers into your document:\n''CheckboxPlugin'' (tagged with <<tag systemConfig>>)\n<<<\n!!!!!Revision History\n<<<\n2006.05.04 - 2.1.3\nfix use of findContainingTiddler() to check for a non-null return value, so that checkboxes won't crash when used outside of tiddler display context (such as in header, sidebar or mainmenu)\n\n2006.03.11 - 2.1.2\nadded "|" as delimiter to tag-based storage syntax (e.g. "tiddler|tag") to avoid parsing ambiguity when tiddler titles or tag names contain ":". Using ":" as a delimiter is still supported but is deprecated in favor of the new "|" usage. Based on a problem reported by JeffMason.\n\n2006.02.25 - 2.1.0\nadded configuration options to enable/disable forced refresh of tiddlers when toggling tags\n\n2006.02.23 - 2.0.4\nwhen toggling tags, force refresh of the tiddler containing the checkbox.\n\n2006.02.23 - 2.0.3\nwhen toggling tags, force refresh of the 'tagged tiddler' so that tag-related tiddler content (such as "to-do" lists) can be re-rendered.\n\n2006.02.23 - 2.0.2\nwhen using tag-based storage, allow use [[ and ]] to quote tiddler or tag names that contain spaces:\n"""[x([[Tiddler with spaces]]:[[tag with spaces]])]"""\n\n2006.01.10 - 2.0.1\nwhen toggling tags, force refresh of the 'tagging tiddler'. For example, if you toggle the "systemConfig" tag on a plugin, the corresponding "systemConfig" TIDDLER will be automatically refreshed (if currently displayed), so that the 'tagged' list in that tiddler will remain up-to-date.\n\n2006.01.04 - 2.0.0\nupdate for ~TW2.0\n\n2005.12.27 - 1.1.2\nFix lookAhead regExp handling for """[x=id]""", which had been including the "]" in the extracted ID. \nAdded check for "chk" prefix on ID before calling saveOptionCookie()\n\n2005.12.26 - 1.1.2\nCorrected use of toUpperCase() in tiddler re-write code when comparing """[X]""" in tiddler content with checkbox state. Fixes a problem where simple checkboxes could be set, but never cleared.\n\n2005.12.26 - 1.1.0\nRevise syntax so all optional parameters are included INSIDE the [ and ] brackets. Backward compatibility with older syntax is supported, so content changes are not required when upgrading to the current version of this plugin. Based on a suggestion by GeoffSlocock\n\n2005.12.25 - 1.0.0\nadded support for tracking checkbox state using tags ("TogglyTagging")\nRevised version number for official post-beta release.\n\n2005.12.08 - 0.9.3\nsupport separate 'init' and 'onclick' function definitions.\n\n2005.12.08 - 0.9.2\nclean up lookahead pattern\n\n2005.12.07 - 0.9.1\nonly update tiddler source content if checkbox state is actually different. Eliminates unnecessary tiddler changes (and 'unsaved changes' warnings)\n\n2005.12.07 - 0.9.0\ninitial BETA release\n<<<\n!!!!!Credits\n<<<\nThis feature was created by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]]\n<<<\n!!!!!Code\n***/\n//{{{\nversion.extensions.CheckboxPlugin = {major: 2, minor: 1, revision:3 , date: new Date(2006,5,4)};\n//}}}\n\n// // 1.2.x compatibility\n//{{{\nif (!window.story) window.story=window;\nif (!store.getTiddler) store.getTiddler=function(title){return store.tiddlers[title]}\nif (!store.addTiddler) store.addTiddler=function(tiddler){store.tiddlers[tiddler.title]=tiddler}\nif (!store.deleteTiddler) store.deleteTiddler=function(title){delete store.tiddlers[title]}\n//}}}\n\n//{{{\nconfig.checkbox = { refresh: { tagged:true, tagging:true, container:true } };\nconfig.formatters.push( {\n name: "checkbox",\n match: "\s\s[[xX_ ][\s\s]\s\s=\s\s(\s\s{]",\n lookahead: "\s\s[([xX_ ])(\s\s])?(=[^\s\ss\s\s(\s\s]{]+)?(\s\s([^\s\s)]*\s\s))?({[^}]*})?({[^}]*})?(\s\s])?",\n handler: function(w)\n {\n var lookaheadRegExp = new RegExp(this.lookahead,"mg");\n lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = lookaheadRegExp.exec(w.source)\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart)\n {\n // get params\n var checked=lookaheadMatch[1];\n var id=lookaheadMatch[3];\n var tag=lookaheadMatch[4];\n var fn_init=lookaheadMatch[5];\n var fn_click=lookaheadMatch[6];\n // create checkbox element\n var c = document.createElement("input");\n c.setAttribute("type","checkbox");\n c.onclick=onClickCheckbox;\n c.srcpos=w.matchStart+1; // remember location of "X"\n c.container=story.findContainingTiddler(w.output); if (c.container) c.container=c.container.id.substr(7); // tiddler containing checkbox\n c.refresh = { };\n c.refresh.container=config.checkbox.refresh.container;\n c.refresh.tagged=config.checkbox.refresh.tagged;\n c.refresh.tagging=config.checkbox.refresh.tagging;\n w.output.appendChild(c);\n // set default state\n c.checked=(checked.toUpperCase()=="X");\n // get/set state by ID\n if (id) {\n c.id=id.substr(1); // trim off leading "="\n if (config.options[c.id]!=undefined)\n c.checked=config.options[c.id];\n else\n config.options[c.id]=c.checked;\n }\n // get/set state by tag\n if (tag) {\n c.tiddler=c.container;\n c.tag=tag.substr(1,tag.length-2).trim(); // trim off parentheses\n var pos=c.tag.indexOf("|"); if (pos==-1) var pos=c.tag.indexOf(":");\n if (pos==0) { c.tag=tag.substr(1); }\n if (pos>0) { c.tiddler=c.tag.substr(0,pos).replace(/\s[\s[/g,"").replace(/\s]\s]/g,""); c.tag=c.tag.substr(pos+1); }\n c.tag.replace(/\s[\s[/g,"").replace(/\s]\s]/g,"");\n if (!c.tag.length) c.tag="checked";\n var t=store.getTiddler(c.tiddler);\n c.checked = (t && t.tags)?(t.tags.find(c.tag)!=null):false;\n }\n if (fn_init) c.fn_init=fn_init.trim().substr(1,fn_init.length-2); // trim off surrounding { and } delimiters\n if (fn_click) c.fn_click=fn_click.trim().substr(1,fn_click.length-2);\n c.init=true; c.onclick(); c.init=false; // compute initial state and save in tiddler/config/cookie\n w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;\n }\n }\n }\n)\n//}}}\n\n//{{{\nfunction onClickCheckbox()\n{\n if (this.fn_init)\n // custom function hook to set initial state (run only once)\n { try { eval(this.fn_init); this.fn_init=null; } catch(e) { displayMessage("Checkbox init error: "+e.toString()); } }\n else if (this.fn_click)\n // custom function hook to override or react to changes in checkbox state\n { try { eval(this.fn_click) } catch(e) { displayMessage("Checkbox click error: "+e.toString()); } }\n if (this.id)\n // save state in config AND cookie (only when ID starts with 'chk')\n { config.options[this.id]=this.checked; if (this.id.substr(0,3)=="chk") saveOptionCookie(this.id); }\n if ((!this.id || this.id.substr(0,3)!="chk") && !this.tag) {\n // save state in tiddler content only if not using cookie or tag tracking\n var t=story.findContainingTiddler(this); if (t) {\n var t=store.getTiddler(t.id.substr(7));\n if (this.checked!=(t.text.substr(this.srcpos,1).toUpperCase()=="X")) { // if changed\n t.set(null,t.text.substr(0,this.srcpos)+(this.checked?"X":"_")+t.text.substr(this.srcpos+1),null,null,t.tags);\n store.setDirty(true);\n }\n }\n }\n if (this.tag) {\n var t=store.getTiddler(this.tiddler);\n if (!t) { t=(new Tiddler()); t.set(this.tiddler,"",config.options.txtUserName,(new Date()),null); store.addTiddler(t); } \n var tagged=(t.tags && t.tags.find(this.tag)!=null);\n if (this.checked && !tagged) { t.tags.push(this.tag); store.setDirty(true); }\n if (!this.checked && tagged) { t.tags.splice(t.tags.find(this.tag),1); store.setDirty(true); }\n // if tag state has been changed, force a display update\n if (this.checked!=tagged) {\n if (this.refresh.tagged) story.refreshTiddler(this.tiddler,null,true); // the TAGGED tiddler\n if (this.refresh.tagging) story.refreshTiddler(this.tag,null,true); // the TAGGING tiddler\n }\n }\n // refresh containing tiddler (but not during initial rendering, or we get an infinite loop!)\n if (!this.init && this.refresh.container && this.container!=this.tiddler)\n story.refreshTiddler(this.container,null,true); // the tiddler CONTAINING the checkbox\n return true;\n}\n//}}}
5 things to do every day:\n[x(questions)] Ask questions\n[x(answers)] Seek answers\n[x(fun)] Have fun\n[x(difference)] Make a difference\n[x(smile)] Smile\n\n<script label="reset checklist">\n var t=store.getTiddler(story.findContainingTiddler(place).id.substr(7));\n if (t && t.tags) {\n var newTags=[];\n for (var i=0; i<t.tags.length; i++) {\n switch (t.tags[i]) {\n case "questions":\n case "answers":\n case "fun":\n case "difference":\n case "smile":\n break;\n default:\n newTags.push(t.tags[i]);\n }\n }\n store.saveTiddler(t.title,null,null,null,null,newTags);\n story.refreshTiddler(t.title,null,true); // force\n }\n return false;\n</script>
/***\n!! CollapseTiddlersPlugin\n^^Author: Bradley Meck^^\n^^Source: http://gensoft.revhost.net/Collapse.html^^\n\n|ELS 2/24/2006: added fallback to "CollapsedTemplate if "WebCollapsedTemplate" is not found |\n|ELS 2/6/2006: added check for 'readOnly' flag to use alternative "WebCollapsedTemplate" |\n\n***/\n\nconfig.commands.collapseTiddler = {\ntext: "fold",\ntooltip: "Collapse this tiddler",\nhandler: function(event,src,title)\n{\nvar e = story.findContainingTiddler(src);\nif(e.getAttribute("template") != config.tiddlerTemplates[DEFAULT_EDIT_TEMPLATE]){\nvar t = (readOnly&&store.tiddlerExists("WebCollapsedTemplate"))?"WebCollapsedTemplate":"CollapsedTemplate";\nif (!store.tiddlerExists(t)) { alert("Can't find 'CollapsedTemplate'"); return; }\nif(e.getAttribute("template") != t ){\ne.setAttribute("oldTemplate",e.getAttribute("template"));\nstory.displayTiddler(null,title,t);\n}\n}\n}\n}\n\nconfig.commands.expandTiddler = {\ntext: "unfold",\ntooltip: "Expand this tiddler",\nhandler: function(event,src,title)\n{\nvar e = story.findContainingTiddler(src);\nstory.displayTiddler(null,title,e.getAttribute("oldTemplate"));\n}\n}\n\nconfig.macros.collapseAll = {\nhandler: function(place,macroName,params,wikifier,paramString,tiddler){\ncreateTiddlyButton(place,"Collapse All","",function(){\nstory.forEachTiddler(function(title,tiddler){\nif(tiddler.getAttribute("template") != config.tiddlerTemplates[DEFAULT_EDIT_TEMPLATE])\nvar t = (readOnly&&store.tiddlerExists("WebCollapsedTemplate"))?"WebCollapsedTemplate":"CollapsedTemplate";\nif (!store.tiddlerExists(t)) { alert("Can't find 'CollapsedTemplate'"); return; }\nstory.displayTiddler(null,title,t);\n})})\n}\n}\n\nconfig.macros.expandAll = {\nhandler: function(place,macroName,params,wikifier,paramString,tiddler){\ncreateTiddlyButton(place,"Expand All","",function(){\nstory.forEachTiddler(function(title,tiddler){\nvar t = (readOnly&&store.tiddlerExists("WebCollapsedTemplate"))?"WebCollapsedTemplate":"CollapsedTemplate";\nif (!store.tiddlerExists(t)) { alert("Can't find 'CollapsedTemplate'"); return; }\nif(tiddler.getAttribute("template") == t) story.displayTiddler(null,title,tiddler.getAttribute("oldTemplate"));\n})})\n}\n}\n\nconfig.commands.collapseOthers = {\ntext: "focus",\ntooltip: "Expand this tiddler and collapse all others",\nhandler: function(event,src,title)\n{\nvar e = story.findContainingTiddler(src);\nstory.forEachTiddler(function(title,tiddler){\nif(tiddler.getAttribute("template") != config.tiddlerTemplates[DEFAULT_EDIT_TEMPLATE]){\nvar t = (readOnly&&store.tiddlerExists("WebCollapsedTemplate"))?"WebCollapsedTemplate":"CollapsedTemplate";\nif (!store.tiddlerExists(t)) { alert("Can't find 'CollapsedTemplate'"); return; }\nif (e==tiddler) t=e.getAttribute("oldTemplate");\n//////////\n// ELS 2006.02.22 - removed this line. if t==null, then the *current* view template, not the default "ViewTemplate", will be used.\n// if (!t||!t.length) t=!readOnly?"ViewTemplate":"WebViewTemplate";\n//////////\nstory.displayTiddler(null,title,t);\n}\n})\n}\n}
<div class='toolbar' macro='toolbar expandTiddler collapseOthers -closeTiddler closeOthers +editTiddler permalink references jump'></div>\n<div class='title' macro='view title'></div><span macro='tiddler DoubleClickForFocus'></span>
/%comment%/\n+++[add a comment...]>\n <html><textarea id="comment" rows="10" style="width:100%"></textarea>\n <input type="button" value="submit comment" onclick="addTiddlerComment(this.previousSibling.previousSibling);"></html><script>\n place.lastChild.firstChild.value="Enter your comment text here";</script>\n===\n<script>\nwindow.addTiddlerComment = function(place) {\n if (!window.story) window.story=window; if (!store.getTiddler) store.getTiddler=function(title) {return this.tiddlers[title]}\n var title = story.findContainingTiddler(place).id.substr(7);\n var tiddler=store.getTiddler(title);\n var pos=tiddler.text.indexOf("/%"+place.id+"%/");\n if (pos==-1) pos=tiddler.text.length;\n var txt="!!!!!comment from "+config.options.txtUserName+" on "+(new Date()).toLocaleString()+"\sn<<<\sn"+place.value+'\sn<<<\sn';\n tiddler.set(null,tiddler.text.substr(0,pos)+txt+tiddler.text.substr(pos));\n story.refreshTiddler(title,1,true);\n store.setDirty(true);\n}\n</script>
En el conglomerado de bordes agresivos,\n donde las miradas huyen recelosas\n y, tras los afelpados parapetos\n que la desconfianza erige, temerosa,\n miramos transcurrir los sinsabores\n como culpas ajenas,\n como malignas aves que nos rondan\n para asegurar el quiebre de los sueños.\n Allí un gorrión,\n ajeno a nuestros miedos,\n inmune a las asperezas del asfalto,\n con cuatro papelitos y un manojo\n de magnetofónicas hilachas\n contruye su nido\n y es el dueño.\n
<html><hide linebreaks>\n<form method=post target=email action="http://www.elsdesign.com/cgi-bin/mailtext.cgi" style="display:inline">\n<input type=hidden name=to value="tiddlytools@elsdesign.com">\n<input type=hidden name=subject value="TiddlyTools feedback">\n<input type=hidden name=prefix value="#IP">\n<input type=hidden name=url value="javascript:window.close();">\n<input type=text name=from style="width:49%" value="your name" onfocus="this.select()"><!--\n--><input type=text name=reply style="width:49%" value="your email address" onfocus="this.select()"><br>\n<font size=-2>Your message:</font><br>\n<textarea rows=7 cols=50 name=text style="width:98%" onfocus="this.select()"></textarea><br>\n<font size=-2>Enter your information, then press </font><input type=submit value="send"></form></html>\n----\n@@display:block;font-size:7pt;line-height:110%;Note: If you are reporting a problem with a TiddlyTools plugin, please provide a ''full, verifiable URL'' for your document, along with an accurate, helpful ''summary description'' of the problem. ''Step-by-step procedures for reproducing the problem'' are essential to finding the cause and determining a fix (if any). However, don't assume that your particular computing environment can be readily replicated... you may be asked to ''actively participate'' in the debugging process by providing detailed diagnostic information (error messages, screen snapshots, etc) as well ''testing any potential fixes prior to their release'' to the general public.@@
/***\nCopyTiddlerPlugin\nAuthor: TimMorgan\nSource: http://ziddlywiki.org/#CopyTiddlerPlugin\n\nadds a "copy" option to duplicate a tiddler\n***/\n//{{{\nconfig.shadowTiddlers.EditTemplate = "<div class='toolbar' macro='toolbar +saveTiddler -cancelTiddler copyTiddler deleteTiddler'></div>\sn<div class='title' macro='view title'></div>\sn<div class='editor' macro='edit title'></div>\sn<div class='editor' macro='edit text'></div>\sn<div class='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser'></span></div>";\n\nconfig.commands.copyTiddler = {\n text: 'copy',\n hideReadOnly: true,\n tooltip: 'Make a copy of this tiddler',\n handler: function(event,src,title) {\n story.displayTiddler(null,title,DEFAULT_VIEW_TEMPLATE);\n var tiddler = store.fetchTiddler(title);\n var newTitle = 'Copy of ' + title;\n var newTiddler = store.createTiddler(newTitle);\n newTiddler.text = tiddler.text;\n newTiddler.tags = tiddler.tags;\n story.displayTiddler(null,newTitle,DEFAULT_EDIT_TEMPLATE);\n story.focusTiddler(newTitle,"title");\n return false;\n }\n};\n//}}}
Por el corredor de las verdes azucenas\n camino hacia la catedral de los ligustros,\n los juncos y las enredaderas\n donde las hojas disparan los destellos\n que hipnotizan el alma, la marean\n y el perfume y el color del follaje\n y las flores y el olor de la savia\n y el vapor y las miasmas de vivas podredumbres\n en seductoras ondas se trepan por mi cuerpo.\n\n En el salvaje recinto de tenues resplandores\n donde el duende del rocío esparce sus perlas\n y un murmullo verde cuenta historias de asombro\n gozoso me recuesto en la vaporosa alfombra\n y siento la caricia del musgo y los helechos\n contemplo los adornos de líquenes y hongos\n las cortinas de hojas para el recojimiento\n y mis entrañas sienten el fluir de la vida\n en suaves vibraciones\n y veo las bacterias que en libre movimiento\n transforman las sustancias\n licuan los sedimentos\n escucho la corriente del alimento líquido\n por la carne leñosa subir y reventar\n en brotes de potente verdor y exhuberantes formas\n oigo el secreto trabajo de hormigas y termitas\n el hilar de la araña\n el suave respirar de los gorriones\n y lentamente un aliento poderoso\n penetra por mis poros\n me invade\n me revuelve\n y degusto y huelo\n y toco\n escucho\n veo\n ese todo eterno\n pacífico\n verdadero.
Un fantasma de plata recorrió las calles\noscuras y sin ruidos\ny en la noche sin estrellas ni faroles\nretumbó el trueno detrás del caserío.\n
El acero de la lluvia golpeó la espalda del bosque\nque en un sacudón breve\ndejó brillar por un instante\nsu joven y antiguo rostro.
No nos diferencia del animal sencillo\nni la risa\nni el amor\nni el intelecto\n \nsólo los sueños.
Me desarma tu melancolía\nporque se parece a la mía.
El amor: esa planta carnívora...
@@color(dargreen):''He escuchado el llanto de la hierba y no pude evitarlo.''@@
Miro las estrellas y me veo como en el fondo de un balde.
¿Por qué discriminar la locura?\n¿acaso la lluvia no es la esquizofrenia del agua?
Afuera brillan las estrellas y yo estoy sentado aquí tratando de escribir alguna estupidez.
Zozobro en esta noche\nmás profundamente\nque en el sargazo de tus brazos.
Nada ha cambiado desde la última vez que salió el sol.La noche fué larga, espesa, monótona.\nAún conservo mi pasaje de ida. Nada ha cambiado...\n
Yo torcía mi mirada hacia el viento del oeste, esperando sentir ese olor a fuego humedecido, esperando recobrar la infancia incierta. Incierta como el sueño de un cadáver sin raíces.
Quiero, Yorga, abofetearte con palabras, sacudirte a versos estridentes y gritos esponjosos para que me ayudes a ver el fondo de mis ojos, me enseñes a hablar. A pronunciar el camino que mi viaje duerme.
''A veces la conciencia cruje como los muebles en la noche. Entonces me introduzco, inspecciono y compruebo que, por suerte, no todo está en orden.''
[img[http://h1.ripway.com/CondeYorga/cosas/cucarachas.gif]][img[http://h1.ripway.com/CondeYorga/cosas/cucarachas.gif]]\n Paciente nos ronda\n nos acecha\n con todas sus formas y sus nombres:\n luz y sombras\n sonidos y silencio\n bondad\n amor\n justicia\n\n la belleza.\n\n Cazadora tenaz\n pero frustrada.\n\n Belleza poliédrica.\n\n Nos muerde los costados\n nos tira de las mangas\n nos da de puñetazos\n nos besa y acaricia.\n\n Y en estampida oscura\n crujiente y asustada\n corremos a escondernos\n en nuestros negros huecos\n húmedos y fríos\n donde, con método y cariño,\n criamos nuestras larvas.\n[img[http://h1.ripway.com/CondeYorga/cosas/cucarachas.gif]][img[http://h1.ripway.com/CondeYorga/cosas/cucarachas.gif]]
/***\n''Date Plugin for TiddlyWiki version 2.x''\n^^author: Eric Shulman - ELS Design Studios\nsource: http://www.TiddlyTools.com/#DatePlugin\nlicense: [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]^^\n^^last update: <<date tiddler "DDD, MMM DDth, YYYY hh:0mm:0ss">>^^\n\nThere are quite a few calendar generators, reminders, to-do lists, 'dated tiddlers' journals, blog-makers and GTD-like schedule managers that have been built around TW. While they all have different purposes, and vary in format, interaction, and style, in one way or another each of these plugins displays and/or uses date-based information to make finding, accessing and managing relevant tiddlers easier. This plugin provides a general approach to embedding dates and date-based links/menus within tiddler content.\n\nYou can ''specify a date using a combination of year, month, and day number values or mathematical expressions (such as "Y+1" or "D+30")'', and then just display it as formatted date text, or create a ''link to a 'dated tiddler''' for quick blogging, or create a ''popup menu'' containing the dated tiddler link plus links to ''tiddlers that were changed'' as well as any ''scheduled reminders'' for that date.\n!!!!!Usage\n<<<\nWhen installed, this plugin defines a macro: {{{<<date [mode] [date] [format] [linkformat]>>}}}. All of the macro parameters are optional and, in it's simplest form, {{{<<date>>}}}, it is equivalent to the ~TiddlyWiki core macro, {{{<<today>>}}}.\n\nHowever, where {{{<<today>>}}} simply inserts the current date/time in a predefined format (or custom format, using {{{<<today [format]>>}}}), the {{{<<date>>}}} macro's parameters take it much further than that:\n* [mode] is either ''display'', ''link'' or ''popup''. If omitted, it defaults to ''display''. This param let's you select between simply displaying a formatted date, or creating a link to a specific 'date titled' tiddler or a popup menu containing a dated tiddler link, plus links to changes and reminders.\n* [date] lets you enter ANY date (not just today) as ''year, month, and day values or simple mathematical expressions'' using pre-defined variables, Y, M, and D for the current year, month and day, repectively. You can display the modification date of the current tiddler by using the keyword: ''tiddler'' in place of the year, month and day parameters. Use ''tiddler://name-of-tiddler//'' to display the modification date of a specific tiddler. You can also use keywords ''today'' or ''filedate'' to refer to these //dynamically changing// date/time values. \n* [format] and [linkformat] uses standard ~TiddlyWiki date formatting syntax. The default is "YYYY.0MM.0DD"\n>^^''DDD'' - day of week in full (eg, "Monday"), ''DD'' - day of month, ''0DD'' - adds leading zero^^\n>^^''MMM'' - month in full (eg, "July"), ''MM'' - month number, ''0MM'' - adds leading zero^^\n>^^''YYYY'' - full year, ''YY'' - two digit year, ''hh'' - hours, ''mm'' - minutes, ''ss'' - seconds^^\n>^^//note: use of hh, mm or ss format codes is only supported with ''tiddler'', ''today'' or ''filedate'' values//^^\n* [linkformat] - specify an alternative date format so that the title of a 'dated tiddler' link can have a format that differs from the date's displayed format\n\nIn addition to the macro syntax, DatePlugin also provides a public javascript API so that other plugins that work with dates (such as calendar generators, etc.) can quickly incorporate date formatted links or popups into their output:\n\n''{{{showDate(place, date, mode, format, linkformat, autostyle, weekend)}}}'' \n\nNote that in addition to the parameters provided by the macro interface, the javascript API also supports two optional true/false parameters:\n* [autostyle] - when true, the font/background styles of formatted dates are automatically adjusted to show the date's status: 'today' is boxed, 'changes' are bold, 'reminders' are underlined, while weekends and holidays (as well as changes and reminders) can each have a different background color to make them more visibly distinct from each other.\n* [weekend] - true indicates a weekend, false indicates a weekday. When this parameter is omitted, the plugin uses internal defaults to automatically determine when a given date falls on a weekend.\n<<<\n!!!!!Examples\n<<<\nThe current date: <<date>>\nThe current time: <<date today "0hh:0mm:0ss">>\nToday's blog: <<date link today "DDD, MMM DDth, YYYY">>\nRecent blogs/changes/reminders: <<date popup Y M D-1 "yesterday">> <<date popup today "today">> <<date popup Y M D+1 "tomorrow">>\nThe first day of next month will be a <<date Y M+1 1 "DDD">>\nThis tiddler (DatePlugin) was last updated on: <<date tiddler "DDD, MMM DDth, YYYY">>\nThe SiteUrl was last updated on: <<date tiddler:SiteUrl "DDD, MMM DDth, YYYY">>\nThis document was last saved on <<date filedate "DDD, MMM DDth, YYYY at 0hh:0mm:0ss">>\n<<date 2006 07 24 "MMM DDth, YYYY">> will be a <<date 2006 07 24 "DDD">>\n<<<\n!!!!!Installation\n<<<\nimport (or copy/paste) the following tiddlers into your document:\n''DatePlugin'' (tagged with <<tag systemConfig>>)\n<<<\n!!!!!Revision History\n<<<\n''2006.05.09 [2.2.1]'' added "todaybg" handling to set background color of current date. Also, honor excludeLists tag when getting lists of tiddlers. Based on suggestions by Mark Hulme.\n''2006.05.05 [2.2.0]'' added "linkedbg" handling to set background color when a 'dated tiddler' exists. Based on a suggestion by Mark Hulme.\n''2006.03.08 [2.1.2]'' add 'override leadtime' flag param in call to findTiddlersWithReminders(), and add "Enter a title" default text to new reminder handler. Thanks to Jeremy Sheeley for these additional tweaks.\n''2006.03.06 [2.1.0]'' hasReminders() nows uses window.reminderCacheForCalendar[] when present. If calendar cache is not present, indexReminders() now uses findTiddlersWithReminders() with a 90-day look ahead to check for reminders. Also, switched default background colors for autostyled dates: reminders are now greenish ("c0ffee") and holidays are now reddish ("ffaace").\n''2006.02.14 [2.0.5]'' when readOnly is set (by TW core), omit "new reminders..." popup menu item and, if a "dated tiddler" does not already exist, display the date as simple text instead of a link.\n''2006.02.05 [2.0.4]'' added var to variables that were unintentionally global. Avoids FireFox 1.5.0.1 crash bug when referencing global variables\n''2006.01.18 [2.0.3]'' In 1.2.x the tiddler editor's text area control was given an element ID=("tiddlerBody"+title), so that it was easy to locate this field and programmatically modify its content. With the addition of configuration templates in 2.x, the textarea no longer has an ID assigned. To find this control we now look through all the child nodes of the tiddler editor to locate a "textarea" control where attribute("edit") equals "text", and then append the new reminder to the contents of that control.\n''2006.01.11 [2.0.2]'' correct 'weekend' override detection logic in showDate()\n''2006.01.10 [2.0.1]'' allow custom-defined weekend days (default defined in config.macros.date.weekend[] array)\nadded flag param to showDate() API to override internal weekend[] array\n''2005.12.27 [2.0.0]'' Update for TW2.0\nAdded parameter handling for 'linkformat'\n''2005.12.21 [1.2.2]'' FF's date.getYear() function returns 105 (for the current year, 2005). When calculating a date value from Y M and D expressions, the plugin adds 1900 to the returned year value get the current year number. But IE's date.getYear() already returns 2005. As a result, plugin calculated date values on IE were incorrect (e.g., 3905 instead of 2005). Adding +1900 is now conditional so the values will be correct on both browsers.\n''2005.11.07 [1.2.1]'' added support for "tiddler" dynamic date parameter\n''2005.11.06 [1.2.0]'' added support for "tiddler:title" dynamic date parameter\n''2005.11.03 [1.1.2]'' when a reminder doesn't have a specified title parameter, use the title of the tiddler that contains the reminder as "fallback" text in the popup menu. Based on a suggestion from BenjaminKudria.\n''2005.11.03 [1.1.1]'' Temporarily bypass hasReminders() logic to avoid excessive overhead from generating the indexReminders() cache. While reminders can still appear in the popup menu, they just won't be indicated by auto-styling the date number that is displayed. This single change saves approx. 60% overhead (5 second delay reduced to under 2 seconds).\n''2005.11.01 [1.1.0]'' corrected logic in hasModifieds() and hasReminders() so caching of indexed modifieds and reminders is done just once, as intended. This should hopefully speed up calendar generators and other plugins that render multiple dates...\n''2005.10.31 [1.0.1]'' documentation and code cleanup\n''2005.10.31 [1.0.0]'' initial public release\n''2005.10.30 [0.9.0]'' pre-release\n<<<\n!!!!!Credits\n<<<\nThis feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]].\n<<<\n!!!!!Code\n***/\n//{{{\nversion.extensions.date = {major: 2, minor: 2, revision: 1, date: new Date(2006,5,9)};\n//}}}\n\n//{{{\nconfig.macros.date = {\n format: "YYYY.0MM.0DD", // default date display format\n linkformat: "YYYY.0MM.0DD", // 'dated tiddler' link format\n linkedbg: "#babb1e", // "babble"\n todaybg: "#ffab1e", // "fable"\n weekendbg: "#c0c0c0", // "cocoa"\n holidaybg: "#ffaace", // "face"\n modifiedsbg: "#bbeeff", // "beef"\n remindersbg: "#c0ffee", // "coffee"\n holidays: [ "01/01", "07/04", "07/24", "11/24" ], // NewYearsDay, IndependenceDay(US), Eric's Birthday (hooray!), Thanksgiving(US)\n weekend: [ 1,0,0,0,0,0,1 ] // [ day index values: sun=0, mon=1, tue=2, wed=3, thu=4, fri=5, sat=6 ]\n};\n//}}}\n\n//{{{\nconfig.macros.date.handler = function(place,macroName,params)\n{\n // do we want to see a link, a popup, or just a formatted date?\n var mode="display";\n if (params[0]=="display") { mode=params[0]; params.shift(); }\n if (params[0]=="popup") { mode=params[0]; params.shift(); }\n if (params[0]=="link") { mode=params[0]; params.shift(); }\n // get the date\n var now = new Date();\n var date = now;\n if (!params[0] || params[0]=="today")\n { params.shift(); }\n else if (params[0]=="filedate")\n { date=new Date(document.lastModified); params.shift(); }\n else if (params[0]=="tiddler")\n { date=store.getTiddler(story.findContainingTiddler(place).id.substr(7)).modified; params.shift(); }\n else if (params[0].substr(0,8)=="tiddler:")\n { var t; if ((t=store.getTiddler(params[0].substr(8)))) date=t.modified; params.shift(); }\n else {\n var y = eval(params.shift().replace(/Y/ig,(now.getYear()<1900)?now.getYear()+1900:now.getYear()));\n var m = eval(params.shift().replace(/M/ig,now.getMonth()+1));\n var d = eval(params.shift().replace(/D/ig,now.getDate()+0));\n date = new Date(y,m-1,d);\n }\n // date format with optional custom override\n var format=this.format; if (params[0]) format=params.shift();\n var linkformat=this.linkformat; if (params[0]) linkformat=params.shift();\n showDate(place,date,mode,format,linkformat);\n}\n//}}}\n\n//{{{\nwindow.showDate=showDate;\nfunction showDate(place,date,mode,format,linkformat,autostyle,weekend)\n{\n if (!mode) mode="display";\n if (!format) format=config.macros.date.format;\n if (!linkformat) linkformat=config.macros.date.linkformat;\n if (!autostyle) autostyle=false;\n\n // format the date output\n var title = date.formatString(format);\n var linkto = date.formatString(linkformat);\n\n // just show the formatted output\n if (mode=="display") { place.appendChild(document.createTextNode(title)); return; }\n\n // link to a 'dated tiddler'\n var link = createTiddlyLink(place, linkto, false);\n link.appendChild(document.createTextNode(title));\n link.title = linkto;\n link.date = date;\n link.format = format;\n link.linkformat = linkformat;\n\n // if using a popup menu, replace click handler for dated tiddler link\n // with handler for popup and make link text non-italic (i.e., an 'existing link' look)\n if (mode=="popup") {\n link.onclick = onClickDatePopup;\n link.style.fontStyle="normal";\n }\n\n // format the popup link to show what kind of info it contains (for use with calendar generators)\n if (!autostyle) return;\n if (hasModifieds(date))\n { link.style.fontStyle="normal"; link.style.fontWeight="bold"; }\n if (hasReminders(date))\n { link.style.textDecoration="underline"; }\n if(isToday(date))\n { link.style.border="1px solid black"; }\n\n if( (weekend!=undefined?weekend:isWeekend(date)) && (config.macros.date.weekendbg!="") )\n { place.style.background = config.macros.date.weekendbg; }\n if(isHoliday(date)&&(config.macros.date.holidaybg!=""))\n { place.style.background = config.macros.date.holidaybg; }\n if (hasModifieds(date)&&(config.macros.date.modifiedsbg!=""))\n { place.style.background = config.macros.date.modifiedsbg; }\n if (store.tiddlerExists(linkto)&&(config.macros.date.linkedbg!=""))\n { place.style.background = config.macros.date.linkedbg; }\n if (hasReminders(date)&&(config.macros.date.remindersbg!=""))\n { place.style.background = config.macros.date.remindersbg; }\n if(isToday(date)&&(config.macros.date.todaybg!=""))\n { place.style.background = config.macros.date.todaybg; }\n}\n//}}}\n\n//{{{\nfunction isToday(date) // returns true if date is today\n { var now=new Date(); return ((now-date>=0) && (now-date<86400000)); }\n\nfunction isWeekend(date) // returns true if date is a weekend\n { return (config.macros.date.weekend[date.getDay()]); }\n\nfunction isHoliday(date) // returns true if date is a holiday\n{\n var longHoliday = date.formatString("0MM/0DD/YYYY");\n var shortHoliday = date.formatString("0MM/0DD");\n for(var i = 0; i < config.macros.date.holidays.length; i++) {\n var holiday=config.macros.date.holidays[i];\n if (holiday==longHoliday||holiday==shortHoliday) return true;\n }\n return false;\n}\n//}}}\n\n//{{{\n// Event handler for clicking on a day popup\nfunction onClickDatePopup(e)\n{\n if (!e) var e = window.event;\n var theTarget = resolveTarget(e);\n var popup = createTiddlerPopup(this);\n if(popup) {\n // always show dated tiddler link (or just date, if readOnly) at the top...\n if (!readOnly || store.tiddlerExists(this.date.formatString(this.linkformat)))\n createTiddlyLink(popup,this.date.formatString(this.linkformat),true);\n else\n createTiddlyText(popup,this.date.formatString(this.linkformat));\n addModifiedsToPopup(popup,this.date,this.format);\n addRemindersToPopup(popup,this.date,this.linkformat);\n }\n scrollToTiddlerPopup(popup,false);\n e.cancelBubble = true;\n if (e.stopPropagation) e.stopPropagation();\n return(false);\n}\n//}}}\n\n//{{{\nfunction indexModifieds() // build list of tiddlers, hash indexed by modification date\n{\n var modifieds= { };\n var tiddlers = store.getTiddlers("title","excludeLists");\n for (var t = 0; t < tiddlers.length; t++) {\n var date = tiddlers[t].modified.formatString("YYYY0MM0DD")\n if (!modifieds[date])\n modifieds[date]=new Array();\n modifieds[date].push(tiddlers[t].title);\n }\n return modifieds;\n}\nfunction hasModifieds(date) // returns true if date has modified tiddlers\n{\n if (!config.macros.date.modifieds) config.macros.date.modifieds = indexModifieds();\n return (config.macros.date.modifieds[date.formatString("YYYY0MM0DD")]!=undefined);\n}\n\nfunction addModifiedsToPopup(popup,when,format)\n{\n if (!config.macros.date.modifieds) config.macros.date.modifieds = indexModifieds();\n var indent=String.fromCharCode(160)+String.fromCharCode(160);\n var mods = config.macros.date.modifieds[when.formatString("YYYY0MM0DD")];\n if (mods) {\n mods.sort();\n var e=createTiddlyElement(popup,"div",null,null,"changes:");\n for(var t=0; t<mods.length; t++) {\n var link=createTiddlyLink(popup,mods[t],false);\n link.appendChild(document.createTextNode(indent+mods[t]));\n createTiddlyElement(popup,"br",null,null,null);\n }\n }\n}\n//}}}\n\n//{{{\nfunction indexReminders(date,leadtime) // build list of tiddlers with reminders, hash indexed by reminder date\n{\n var reminders = { };\n if(window.findTiddlersWithReminders!=undefined) { // reminder plugin is installed\n // DEBUG var starttime=new Date();\n var t = findTiddlersWithReminders(date, [0,leadtime], null, null, 1);\n for(var i=0; i<t.length; i++) reminders[t[i].matchedDate]=true;\n // DEBUG var out="Found "+t.length+" reminders in "+((new Date())-starttime+1)+"ms\sn";\n // DEBUG out+="startdate: "+date.toLocaleDateString()+"\sn"+"leadtime: "+leadtime+" days\sn\sn";\n // DEBUG for(var i=0; i<t.length; i++) { out+=t[i].matchedDate.toLocaleDateString()+" "+t[i].params.title+"\sn"; }\n // DEBUG alert(out);\n }\n return reminders;\n}\n\nfunction hasReminders(date) // returns true if date has reminders\n{\n if (window.reminderCacheForCalendar)\n return window.reminderCacheForCalendar[date]; // use calendar cache\n if (!config.macros.date.reminders)\n config.macros.date.reminders = indexReminders(date,90); // create a 90-day leadtime reminder cache\n return (config.macros.date.reminders[date]);\n}\n\nfunction addRemindersToPopup(popup,when,format)\n{\n if(window.findTiddlersWithReminders==undefined) return; // reminder plugin not installed\n\n var indent = String.fromCharCode(160)+String.fromCharCode(160);\n var reminders=findTiddlersWithReminders(when, [0,31],null,null,1);\n var e=createTiddlyElement(popup,"div",null,null,"reminders:"+(!reminders.length?" none":""));\n for(var t=0; t<reminders.length; t++) {\n link = createTiddlyLink(popup,reminders[t].tiddler,false);\n var diff=reminders[t].diff;\n diff=(diff<1)?"Today":((diff==1)?"Tomorrow":diff+" days");\n var txt=(reminders[t].params["title"])?reminders[t].params["title"]:reminders[t].tiddler;\n link.appendChild(document.createTextNode(indent+diff+" - "+txt));\n createTiddlyElement(popup,"br",null,null,null);\n }\n if (readOnly) return; // omit "new reminder..." link\n var link = createTiddlyLink(popup,indent+"new reminder...",true); createTiddlyElement(popup,"br");\n var title = when.formatString(format);\n link.title="add a reminder to '"+title+"'";\n link.onclick = function() {\n // show tiddler editor\n story.displayTiddler(null, title, 2, null, null, false, false);\n // find body 'textarea'\n var c =document.getElementById("tiddler" + title).getElementsByTagName("*");\n for (var i=0; i<c.length; i++) if ((c[i].tagName.toLowerCase()=="textarea") && (c[i].getAttribute("edit")=="text")) break;\n // append reminder macro to tiddler content\n if (i<c.length) {\n if (store.tiddlerExists(title)) c[i].value+="\sn"; else c[i].value="";\n c[i].value += "<<reminder";\n c[i].value += " day:"+when.getDate();\n c[i].value += " month:"+(when.getMonth()+1);\n c[i].value += " year:"+when.getFullYear();\n c[i].value += ' title:"Enter a title" >>';\n }\n };\n}\n//}}}\n
En el humeante campo de batalla,\n bajo un sombrío manto de nubes implacables,\n el cuerpo del guerrero derrotado yace.\n Alza al cielo los ojos doloridos\n y busca el horizonte.\n\n Detrás de la justicia avasallada,\n como perro fiel al amo castigado,\n tu figura gris, de lluvia permanente,\n camina sin descanso.\n\n Y aunque mil veces el carro prepotente\n enlode tu estandarte,\n otras tantas\n -las manos temblorosas-\n se izare luminoso.\n\n ¡Oh, caballero vencido y obstinado,\n recurrente en batallas signadas por tu llanto!\n ¡Eterno luchador de ideas oxidadas,\n a tu lado Aníbal, Alejandro,\n son, apenas, palomas aleladas!\n\n Alza el guerrero los ojos doloridos\n y busca el horizonte,\n coje escudo, yelmo y armadura,\n enfrenta ahora el crepúsculo sangrante\n y su silueta negra, triste, silenciosa,\n se aleja en pos de la próxima derrota.
He visto las amapolas en el reino de las rocas,\n la sonrisa tibia en la tormenta de puños,\n y ví florecer un imposible en las grietas del mundo.\n este sufrimiento mío,\n señores,\n no es autocompasivo,\n es un grito de alerta a los ojos dormidos.\n\n Este delirio infantil,\n esta credulidad ingenua,\n no quiebran mis cristales,\n afianzan mis raíces\n y hace que de mis poros,\n trepando por mi cuerpo,\n aromando el aire en giros multicolores,\n broten coronas radiantes\n de mariposas y flores.
[[Welcome]][[PáginaPrincipal]]
Era un cúmulo de nubes esperando\n ese soplo que le diera en las costillas,\n era un bosque quejumbroso y en astillas\n vislumbraba su futuro y su pasado\n\n era mole de granito y su cantera\n machacaba su disgregado destino\n y la espiga ya cuajada que en el silo\n acumula sus horneadas venideras\n\n era océano que, en lluvias repartido,\n en la sed de los cultivos se saciare\n e, incidiendo contra el viento, era un ave\n sin anclajes que en el cielo se haría brillo\n\n mas el hombre su miseria al hombre opone\n y lo que debiera ser algo evidente,\n tan sencillo, tan a mano, contundente,\n lo demuele y (duro parto) lo pospone.
/***\n''DeliciousPlayTaggerPlugin for TiddlyWiki version 1.2.x and 2.0''\n^^author: Eric Shulman - ELS Design Studios\nsource: http://www.TiddlyTools.com/#DeliciousPlayTaggerPlugin\nadapted from original source: http://del.icio.us/js/playtagger\nlicense: [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]^^\n\n!!!!!Usage\n\nThis plugin defines an object class "Delicious.Mp3", which defines methods for adding the del.icio.us "play tagger" to any mp3 URLs embedded in tiddler content. Simply place """<<deliciousPlayTagger>>""" into the tiddler content ''following any links to mp3 URLs'', and they will be 'del.icio.us'ly tagged to be played with the flash player.\n\n!!!!!Example\nMy favorite [[Friday Night Music|http://www.FridayNightMusic.com]] "Free Jazz" improv compositions:\nhttp://www.elsdesign.com/fnm/audio/030502-5.mp3 ("In The Shadows")\nhttp://www.elsdesign.com/fnm/audio/001103-4.mp3 ("The Sky's The Limit")\nhttp://www.elsdesign.com/fnm/audio/020830-6.mp3 ("Good Morning, Elijah")\n\n<<deliciousPlayTagger>>\n!!!!!Installation\n<<<\nimport (or copy/paste) the following tiddlers into your document:\n''DeliciousPlayTaggerPlugin'' (tagged with <<tag systemConfig>>)\n^^documentation and javascript for this plugin^^\n<<<\n!!!!!Revision History\n<<<\n''2006.02.21 [1.0.0]''\ninitial release\n<<<\n!!!!!Credits\n<<<\nThis feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]]\nadapted from original source code located at: http://del.icio.us/js/playtagger\n<<<\n!!!!!Code\n***/\n//{{{\nversion.extensions.deliciousPlayTagger= {major: 1, minor: 0, revision: 0, date: new Date(2006,2,21)};\n\nconfig.macros.deliciousPlayTagger = { };\nconfig.macros.deliciousPlayTagger.handler = function(place,macroName,params) { Delicious.Mp3.go(place); }\n\nif(typeof(Delicious) == 'undefined') Delicious = {}\nDelicious.Mp3 = {\n playimg: null,\n player: null,\n go: function(place) { // ELS 2006.02.21: added 'place' param\n if (!place) var place=document;\n var all = place.getElementsByTagName('a')\n for (var i = 0, o; o = all[i]; i++) {\n if(o.href.match(/\s.mp3$/i)) {\n var img = document.createElement('img')\n img.src = 'http://del.icio.us/static/img/mp3/play.gif'; img.title = 'listen'\n img.height = img.width = 12\n img.style.marginRight = '0.5em'\n img.style.cursor = 'pointer'\n img.onclick = Delicious.Mp3.makeToggle(img, o.href)\n o.parentNode.insertBefore(img, o)\n }}},\n toggle: function(img, url) {\n if (Delicious.Mp3.playimg == img) Delicious.Mp3.destroy()\n else {\n if (Delicious.Mp3.playimg) Delicious.Mp3.destroy()\n var a = img.nextSibling, c=''\n if (document.defaultView && document.defaultView.getComputedStyle) c = document.defaultView.getComputedStyle(a,null).getPropertyValue('color')\n else if (a.currentStyle) c = a.currentStyle['color']\n c = c.replace(/^rgb|[ ()]/g, '')\n var hex = c.match(/^#?([a-f0-9]{6})$/), hexSm = c.match(/^#?([a-f0-9]{3})$/), rgb = c.match(/^([0-9]+),([0-9]+),([0-9]+)$/)\n if (rgb) { var c16 = "0123456789abcdef", c=''; for(var i=1,d;d=rgb[i];i++) { var j=d%16; c=c+c16.charAt((d-j)/16)+c16.charAt(j) } }\n else if (hex) c = hex[1]\n else if (hexSm) c = hexSm[1].charAt(0) + hexSm[1].charAt(0) + hexSm[1].charAt(1) + hexSm[1].charAt(1) + hexSm[1].charAt(2) + hexSm[1].charAt(2)\n else c = "000000"\n img.src = 'http://del.icio.us/static/img/mp3/stop.gif'; Delicious.Mp3.playimg = img;\n Delicious.Mp3.player = document.createElement('span')\n Delicious.Mp3.player.innerHTML = '<object style="vertical-align:bottom;margin-right:0.2em" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"' +\n 'codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0"' +\n 'width="100" height="14" id="player" align="middle">' +\n '<param name="wmode" value="transparent" />' +\n '<param name="allowScriptAccess" value="sameDomain" />' +\n '<param name="flashVars" value="theLink='+url+'&fontColor='+c+'" />' +\n '<param name="movie" value="http://del.icio.us/static/swf/playtagger.swf" /><param name="quality" value="high" />' +\n '<embed style="vertical-align:bottom;margin-right:0.2em" src="http://del.icio.us/static/swf/playtagger.swf" flashVars="theLink='+url+'&fontColor='+c+'"'+\n 'quality="high" wmode="transparent" width="100" height="14" name="player"' +\n 'align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash"' +\n ' pluginspage="http://www.macromedia.com/go/getflashplayer" /></object>'\n img.parentNode.insertBefore(Delicious.Mp3.player, img.nextSibling)\n }},\n destroy: function() {\n Delicious.Mp3.playimg.src = 'http://del.icio.us/static/img/mp3/play.gif'; Delicious.Mp3.playimg = null\n Delicious.Mp3.player.removeChild(Delicious.Mp3.player.firstChild); Delicious.Mp3.player.parentNode.removeChild(Delicious.Mp3.player); Delicious.Mp3.player = null\n },\n makeToggle: function(img, url) { return function(){ Delicious.Mp3.toggle(img, url) }}\n}\n\n//}}}
Estiro mi mano y te recobro\n del frágil laberinto\n donde los sueños flotan\n esperando cuajar en deseos satisfechos\n y siento tu piel\n que como un cálido imán me va llevando\n a un paisaje de ensueño\n de increíble delicia\n\n mis palmas te buscan y te encuentran\n tierna\n dócil\n generosa\n torrente de caricias donde naufraga mi pena\n hasta perderse en las aguas profundas de tu cuerpo\n que me recibe\n flor abierta\n cuyo néctar roba mi voluntad\n encadena mis sentidos\n a la dulce mazmorra\n centro de todos los vientos\n\n y empujo y empujás\n empujo empujo\n quiero fundirme con tus huesos\n hollar tu piel\n sorber tus besos\n y mordés y muerdo\n y besás y beso\n y te aprieto los pechos\n los devoro\n no me alcanzan las manos\n y no me alcanza el cuerpo\n para abarcarte toda\n y empujo y empujás\n empujás empujás\n me clavás las uñas en la espalda\n saltás como posesa prendida a mi cintura\n el universo arde\n se derrite el aire\n las entrañas queman en dulce cataclismo\n y gritás y grito\n se quiebran los cimientos\n y el mudo se derrumba sonriente en nuestro abismo\n lo devastamos todo en la explosión del alivio\n\n los elementos se calman\n al compás de los suspiros\n me besás\n te beso\n sonreimos.
+++[Desplegar|Muestra el contenido oculto]\n* contenido desplegable\n* content\n +++[Segundo nivel]\n aaa\n===\n----\n\n+++[Item2]\ncontenido del Item 2
En la penumbra del húmedo recinto\n donde el gris de las paredes muta\n en aberrantes fantasmas borroneados\n y a penas sospecho el brillo de mis ojos;\n donde le aire es un vapor mohoso\n y el techo se aleja en espectral silencio,\n no se si muero un sueño desolado\n o sueño una muerte de oscuro desvelo.\n\n De espaldas en el suelo,\n el cuerpo helado,\n esperando algún suceso indefinido\n con todos mis sentidos preparados,\n permanezco quieto,\n permeable,\n azorado.\n\n Busco en los intersticios de las sombras\n algún críptico signo de presencia,\n el furtivo aleteo de una idea,\n una grieta en este espacio suspendido\n en la telaraña tirante de las horas\n por donde se filtre, a mi rescate,\n la mínima aguja de un destello.\n\n Pero el presente es ausencia\n ingravidez\n mutismo\n quietud ensimismada\n sordidez\n autismo.\n\n Y en el rincón más oscuro\n del gélido claustro en que me encuentro\n el diminuto estruendo de una gota\n ondula acuosamente el aire circundante\n resaltando las montruosas dimensiones\n del silencio.\n\n[[ver|http://h1.ripway.com/CondeYorga/cosas/gota.jpg]]
Ding\n\n suena nuestra hora\n en la noche\n esperamos\n\n dong\n\n es la madrugada\n seguimos esperando\n\n ding\n\n el sol nos abraza\n aún es la hora\n aún es la espera\n\n dong\n\n los gorriones vuelven a sus nidos\n otra vez es la hora\n esperamos\n\n ding\n\n ocsurece\n\n dong\n\n es de noche\n\n ding dong\n\n y morimos\n\n ding dong ding dong ding\n
/***\n''DisableWikiLinksPlugin for TiddlyWiki version 1.2.x and 2.0''\n^^author: Eric Shulman - ELS Design Studios\nsource: http://www.TiddlyTools.com/#DisableWikiLinksPlugin\nlicense: [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]^^\n\nThis plugin allows you to disable TiddlyWiki's automatic WikiWord linking behavior, so that WikiWords embedded in tiddler content will be rendered as regular text, instead of being automatically converted to tiddler links. To create a tiddler link when automatic linking is disabled, you must enclose the link text within {{{[[...]]}}}. Note: WikiWords contained in default ''shadow'' tiddlers will still be automatically linked. An additional checkbox option lets you disable these automatic links as well, though this is not recommended, since it can make it more difficult to access some TiddlyWiki standard default content (such as AdvancedOptions or SideBarTabs)\n\n!!!!!Configuration\n<<<\nSelf-contained control panel:\n<<option chkDisableWikiLinks>> Disable automatic WikiWord tiddler links\n<<option chkDontDisableShadowWikiLinks>> ... except in shadow tiddler content\n<<<\n!!!!!Installation\n<<<\nimport (or copy/paste) the following tiddlers into your document:\n''DisableWikiLinksPlugin'' (tagged with <<tag systemConfig>>)\n<<<\n!!!!!Revision History\n<<<\n''2006.05.24 [1.1.0]'' added option to NOT bypass automatic wikiword links when displaying default shadow content (default is to auto-link shadow content)\n''2006.02.05 [1.0.1]'' wrapped wikifier hijack in init function to eliminate globals and avoid FireFox 1.5.0.1 crash bug when referencing globals\n''2005.12.09 [1.0.0]'' initial release\n<<<\n!!!!!Credits\n<<<\nThis feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]]\n<<<\n!!!!!Code\n***/\n//{{{\nversion.extensions.disableWikiLinks= {major: 1, minor: 1, revision: 0, date: new Date(2006,5,24)};\n\nif (config.options.chkDisableWikiLinks==undefined) config.options.chkDisableWikiLinks= false;\nif (config.options.chkDontDisableShadowWikiLinks==undefined) config.options.chkDontDisableShadowWikiLinks=true;\n\n// find the formatter for wikiLink and replace handler with 'pass-thru' rendering\ninitDisableWikiLinksFormatter();\nfunction initDisableWikiLinksFormatter() {\n for (var i=0; i<config.formatters.length && config.formatters[i].name!="wikiLink"; i++);\n config.formatters[i].coreHandler=config.formatters[i].handler;\n config.formatters[i].handler=function(w) {\n // if not enabled, just do standard WikiWord link formatting\n var skipShadow=(config.options.chkDontDisableShadowWikiLinks && w.tiddler && store.isShadowTiddler(w.tiddler.title) && !store.tiddlerExists(w.tiddler.title));\n if (!config.options.chkDisableWikiLinks || skipShadow) return this.coreHandler(w);\n // supress any leading "~" (if present)\n var skip=(w.matchText.substr(0,1)==config.textPrimitives.unWikiLink)?1:0;\n w.outputText(w.output,w.matchStart+skip,w.nextMatch)\n }\n}\n//}}}\n
Muchas de los nuevos servicios y características adicionales de GOOGLE sólo aparecen en las páginas angloescritas (no cabe la forma "angloparlante") de GOOGLE y los hispanoparlantes (supongo que pasa con todos los demás idiomas) nos enteramos de ello de casualidad. Tal es el caso de GOOGLE PAGES, la opción CHAT de GMAIL, y algún que otro agregado. De GOOGLE PAGES me enteré hace muy poco y cuando quise utilizar el servicio el sistema informó que no está disponible debido a la alta demanda, servicio del que fuimos excluídos ya antes de conocer su existencia. Se supone que si la empresa tiene filiales en distintos países debería ofrecer las mismas facilidades en todas, pero evidentemente no es así, al punto de que GOOGLE se ha hecho cómplice de la censura - y por consiguiente de la represión - en CHINA al eliminar de sus búsquedas determinados sitios a instancias del gobierno chino (ver http://www.genbeta.com/archivos/2006/01/26-google-censura-las-busquedas-.php y http://www.breitbart.com/news/2006/01/24/D8FBCF686.html , etc. sólo busquen en el mismísimo GOOGLE, jejej).\nUna cosa es adaptar el color de los contenidos a la idiosincracia de un país y otra meterle gato por liebre, porque uno tiene una idea de un producto (proporcionada por los mismos creadores) y confía de antemano, pero te ofrecen maíz y te dan mierda.\nEn fin ¿alguien conoce una buena alternativa a GOOGLE? Deberíamos mandarlo a cagar, lástima que - dentro de las sobras que nos tocan - sigue siendo tan eficiente, loparió...
<script label="display all tiddlers">\n var tiddlers=store.getTiddlers('title');\n var titles=[];\n for (var t=0;t<tiddlers.length; t++)\n titles.push(tiddlers[t].title);\n story.closeAllTiddlers();\n story.displayTiddlers(null,titles);\n return false;\n</script>
@@display:inline;+++^40em^[changes]...<<moveablePanel>>changes\n @@display:block;font-size:8pt;line-height:110%;<<tiddler DocumentChanges>><<tiddler GroupBox>>@@===\n +++^40em^[download|save this document on your computer]...<<moveablePanel>>download\n @@display:block;font-size:8pt;line-height:110%;<<tiddler DocumentDownload>><<tiddler GroupBox>>@@===\n +++^40em^[credits]...<<moveablePanel>>credits and acknowledgements\n @@display:block;font-size:8pt;line-height:110%;<<tiddler DocumentCredits>><<tiddler GroupBox>>@@===\n@@\n----\n@@font-size:14pt;Welcome!@@ @@font-size:8pt;~TiddlyTools was last updated on <<date filedate "DDD MMM DDth, YYYY at 0hh:0mm:0ss">>@@\n@@display:block;font-size:8pt;line-height:110%;~TiddlyTools presents ''Technologies, Techniques, Tricks, Tips, Tweaks and Tutorials'' for ~TiddlyWiki readers, authors and developers, using a combination of ''plugins, macros, scripts, templates, and stylesheets'' from [[ELS Design Studios|About ELS Design]] (and other sources) to customize the default features and functions provided by the ~TiddlyWiki standard distribution.\n\nYou can install these ~TiddlyWiki "accessories" into ''//your//'' documents to add just a few new features and functions or assemble your own complete ''custom ~TiddlyWiki applications''. You can also download ~TiddlyWiki ''starter documents'' with selected bundles of accessories, pre-installed and optimized for various activities, ready for you to fill in your own content \n\n[>img[ELS Design Studios|els/banner_small.gif]] //Just copy the accessories, documents and files that fit your needs and start growing your own ~TiddlyWiki content right away!//\n<<tiddler GroupBox>>@@
<<calendar>>
[[recently changed tiddlers:|DocumentChanges]]\n<script>\n var field="modified";\n var dir=-1; // +1==ascending, -1==descending\n var tiddlers=store.getTiddlers(field);\n tiddlers.sort(function(a,b){if(a[field]==b[field])return(0);else return(a[field]<b[field])?-dir:dir;});\n var limit=15; // set to tiddlers.length to list *all* tiddlers\n var clipsize=500; // # of chars to display from each tiddler\n var out="";\n for (var i=0; i<limit; i++) {\n var title=tiddlers[i].title;\n var author=tiddlers[i].modifier\n var size=tiddlers[i].text.length;\n var mod=tiddlers[i].modified.formatString("0MM/0DD/YY 0hh:0mm");\n var clip=tiddlers[i].text.substr(0,clipsize);\n var edit='<html><a href="javascript:;" onclick="story.displayTiddler(null,\s''+title+'\s',2);return false;">'+(readOnly?'view':'edit')+' source...</a></html>';\n out+=mod+' +++['+title+']>[['+title+']] ('+size+' bytes) '+edit+'\sn^^modified on '+mod+' by '+author+'^^\sn';\n out+='//'+clipsize+' character source excerpt://\sn----\sn'+'@@font-size:7pt;"""'+clip+'"""@@'+'===\sn'+((i!=limit-1)?'\sn':'');\n }\n return(out);\n</script>
This document is based on ''[[TiddlyWiki|http://www.TiddlyWiki.com/]] version <<version>>'' by Jeremy Ruston with program enhancements and installable plugins developed by Eric Shulman from [[ELS Design Studios|http://www.elsdesign.com/]]. Additional plugins from other sources have also been installed in this document. Much thanks go to the creators of these features for their fine contributions to the ~TiddlyWiki developer and user communities.
To download this document, ''//right-click//'' on any of the following links and then select ''//Save link as...//'' from the popup menu:\n* ''[[complete document|#]]'': includes all ~TiddlyTools content (plugins, scripts, stylesheets, templates, etc.) except for background images and embedded graphics\n* ''[[background images|backgrounds.zip]]'': background images for stylesheets [unzip into 'els' subdirectory]. //note: some images (c) Eric L Shulman - "limited personal use" is permitted. ''re-distribution or commercial use of these images is prohibited.''//
[[installed plugins|DocumentPlugins]]...\n----\n<script>\n var here=story.findContainingTiddler(place);\n var field="modified";\n var dir=-1; // +1==ascending, -1==descending\n var tiddlers=store.getTiddlers(field);\n tiddlers.sort(function(a,b){if(a[field]==b[field])return(0);else return(a[field]<b[field])?-dir:dir;});\n var limit=tiddlers.length; // set to tiddlers.length to list *all* tiddlers\n var clipsize=500; // # of chars to display from each tiddler\n var out="";\n for (var i=0; i<limit; i++) {\n if ((tiddlers[i].tags.find("systemConfig")==null)&&(tiddlers[i].tags.join(" ").indexOf("plugin")==-1)) continue;\n var title=tiddlers[i].title;\n var author=tiddlers[i].modifier\n var size=tiddlers[i].text.length;\n var mod=tiddlers[i].modified.formatString("0MM/0DD/YY 0hh:0mm");\n var clip=tiddlers[i].text.substr(0,clipsize);\n var chk='[X('+title+':basicTools){this.refresh.container=false}]basics[X('+title+':editingTools){this.refresh.container=false}]editing[X('+title+':authoringTools){this.refresh.container=false}]authoring[X('+title+':addonTools){this.refresh.container=false}]addons';\n var edit='<html><a href="javascript:;" onclick="story.displayTiddler(null,\s''+title+'\s',2);return false;">'+(readOnly?'view':'edit')+' source...</a></html>';\n out+='@@display:block;white-space:nowrap;'+mod+' '+chk+' +++['+title+']>[['+title+']] ('+size+' bytes) '+edit+'\sn^^modified on '+mod+' by '+author+'^^\sn';\n out+='//'+clipsize+' character source excerpt://\sn----\sn'+'@@font-size:7pt;white-space:normal;"""'+clip+'"""@@===\sn\sn@@';\n }\n return(out);\n</script>
!!!!Simple reminders that fire on the same month/day of every year.\n*<<reminder month:1 day:1 title:"New Year's Day" >>\n*<<reminder month:2 day:2 title:"Groundhog Day" >>\n\n!!!!Offset reminders\nThese are all holidays that are specified as the Nth DAYOFWEEK in Month.\n*President's Day is the third Monday of February \n**<<reminder month:2 day:15 offsetdayofweek:1 title:"President's Day">>\n*Mother's Day is the second Sunday of May\n**<<reminder month:5 day:8 offsetdayofweek:0 title:"Mother's Day">>\n\n*Memorial Day is the last Monday of May (note that offsetdayofweek is a negative number, meaning match backwards)\n**<<reminder month:5 day:31 offsetdayofweek:-1 title:"Memorial Day">>\n\n!!!Ignore these\nThese are just here to fill in the common US holidays\n*<<reminder month:2 day:14 title:"Valentine's Day" >>\n*<<reminder month:4 day:1 title:"April Fool's Day" >>\n*<<reminder month:4 day:15 title:"Tax day">>\n*<<reminder month:4 day:22 title:"Earth Day">>\n*<<reminder month:6 day:14 title:"Flag Day" >>\n*Father's Day is the third Sunday of June \n**<<reminder month:6 day:15 offsetdayofweek:0 title:"Father's Day">>\n*<<reminder month:7 day:4 title:"Independence Day" >>\n*Labor Day is the first Monday of September\n**<<reminder month:9 day:1 offsetdayofweek:1 title:"Labor Day">>\n*Columbus Day is the second Monday of October\n**<<reminder month:10 day:8 offsetdayofweek:1 title:"Columbus Day">>\n*<<reminder month:10 day:31 title:"Halloween" >>\n*<<reminder month:11 day:11 title:"Veteran's Day" >>\n*Thanksgiving(US) is the third Thursday of November\n**<<reminder month:11 day:24 offsetdayofweek:4 title:"Thanksgiving (US)">>\n*<<reminder month:12 day:25 title:"Christmas Day" >>
<script>\n if (!story.findContainingTiddler(place)) return;\n var t=story.findContainingTiddler(place); // get the tiddler element\n for (var i=0; i<t.childNodes.length; i++)\n if (hasClass(t.childNodes[i],"viewer")) t.ondblclick=null; // disable double-click\n</script>
<script>\n var t=story.findContainingTiddler(place); // get the tiddler element\n if (!t) return;\n for (var i=0; i<t.childNodes.length; i++)\n if (hasClass(t.childNodes[i],"title"))\n // if CollapseTiddlerPlugin is installed, double-click on title to 'focus' a tiddler\n if (config.commands.collapseOthers.handler!=undefined)\n t.ondblclick=function(){config.commands.collapseOthers.handler(null,place,t.id.substr(7));}\n</script>
/* margins, padding, borders, position, z-index, etc... */\n[[StyleSheetLayout]] /* TW shadow */\n[[StyleSheetColors]] /* TW shadow */\n[[StyleSheetPrint]] /* TW shadow */\n[[LayoutAdjustments]]\n[[FontAdjustments]]\n\n[[Gray]]\n[[BrightText]]\n[[BlackMarble]]\n\n\n/* background */\nbody {\nbackground-color: #000066 !important;\nbackground-image: url('[[Edge of Night Background]]') !important;\nbackground-attachment: fixed !important;\n}\n#titleLine, #sidebar {\nbackground-color: transparent !important;\nbackground-image: none !important;\nborder-color:transparent !important;\nborder: 0px solid #014 !important;\n}\n#siteTitle { color:#ace; }\n#siteSubtitle { color:#0c0; }\n#titleLine a { color: #ccf; }\n\n.floatingPanel, #messageArea, .attachPanel, #importPanel, #exportPanel { background: #eee !important;}\n\n*[class="TOCList"] { background-color: transparent; color:#fff; border-color:transparent !important; }\n\n.viewer h1,.viewer h2,.viewer h3,.viewer h4,.viewer h5 { background: #def; color:#006; }\n
| source file|{{{...els\ssunset.jpg}}}|\n| attached on|20 May 2006 by ELSDesignStudios|\n| embedded data|//none//|\n| local link|//none//|\n| remote link|/%REMOTE_LINK%/[[els/sunset.jpg|els/sunset.jpg]]|\nimage\n<<<\nusage: {{{[img[tooltip|Edge of Night Background]] or [img[tooltip|Edge of Night Background][link]]}}}\n[img[tooltip|Edge of Night Background]]\n<<<\n
/***\n!!!Usage:\n{{{<<editTiddler TiddlerName>>}}}\n!!!Created:\n2006.04.28 ELS\n!!!Code:\n***/\n//{{{\nconfig.macros.editTiddler={\n handler: function(place,macroName,params) {\n createTiddlyButton(place,"edit","edit tiddler: "+params[0],this.onclick).which=params[0];\n },\n onclick: function(e) {\n story.displayTiddler(null,this.which,DEFAULT_EDIT_TEMPLATE);\n }\n}\n//}}}
Hoy debo transmutar mi nada multiforme\n debo renacer mi fuego sedentario\n para repartir partículas de luz\n refulgentes átomos de amor\n que en intangible fisión\n proyecten su risa múltiple y candente\n hasta partir el núcleo de la desdicha
AGUA\n\n Caldo de natividades\n contenedor de universos\n sangre y risa de la tierra\n\n AIRE\n\n Albúmina de las aves\n y perchero de mis ojos\n soporte de los crepúsculos\n\n TIERRA\n\n Madre del pan primigenio\n y cuna de mis despojos\n retorno, eterno retorno\n\n FUEGO\n\n Gatillo de novedades\n bestia de renovación\n hechicero de la noche\n\n LLUVIA\n\n Vertical procesión de dijes acerados\n lenta y espesa o frenético verdugo\n nodriza de la plata y del azul incógnito\n\n VIENTO\n\n Cincel de rocosidades\n demente modelador de nubes\n azote del árbol que lo encara\n\n ROCA\n\n Puñetazo grotesco de la tierra\n rostro parco de abuelos en penumbras\n pretensión de inmutable permanencia\n pero destino de suelo\n\n LUZ\n\n Como un manto que des-cubre\n marea indetenible\n llega aniquilando fantasmas\n trocando conjeturas por crudeza\n\n INSECTOS\n\n Protoingenieros efímeros y eternos\n pinacoteca infinita en las pieles diminutas\n museo del camuflaje\n herederos del desastre\n\n PLANTAS\n\n Voraz urdimbre de silente paso\n o estoico esqueleto que perdura\n siempre refugio y alacena\n
En chisporroteantes espirales\n subiré a las nubes y las teñiré de rojo,\n beberé el sol hasta agotarlo\n y, en fuego convertido,\n quemaré mis rencores y mis odios.\n Saltaré al espacio\n y, como un escarabajo de vuelo atolondrado,\n rebotando en planetas y constelaciones,\n quebraré el tiempo en astillas diminutas\n y, amasándolo con el agua maldita de tus ojos,\n haré una arcilla nueva\n para moldear ese mundo diferente\n de calandrias, rubíes y azucenas.
Aún quema en mi mano el tacto de la tuya\n arden las delgadas falanges\n la curva del carpo\n las líneas que sin tocar sentí.\n\n Mi cuello más desnudo que nunca\n siente la caricia del no-soplo\n del no-beso.\n Delgadez cuya empatía\n con nostalgia se adhirió a la mía.\n\n Tu voz se perdió en la promesa\n y se llevó la mía\n por la tibias circunvalaciones de tu oído\n ¿hasta dónde habrá llegado?\n ¿se alojó en alguno de tus órganos?\n ¿o traspasó tu escudo y tu sustancia\n perdiéndose en la bruma de tus miedos?\n\n De todos los nudos que nos sujetaban\n desaté el equivocado\n y te soltaste\n y grité muy quedo "quedate"\n y dijiste-escudo "no confío"\n y pateé la puerta sin culparte\n en honor a mis incapacidades.\n\n Mas aún estoy\n el hueco de mi mano con tu forma\n y en mi oído la promesa de tu voz\n aquí están\n para cuando quieras conformarlos\n\n y el hueco de mi cuello\n en perenne aspiración\n para cuando llegue tu soplido\n y mi ventrículo izquierdo\n y mis pasos\n y mi mitad de la noche\n y mi mitad del Atlántico\n y la respuesta de mis ojos\n y mi voz.\n
<<exportTiddlers inline>>
/***\n''Export Tiddlers Plugin for TiddlyWiki version 2.0''\n^^author: Eric Shulman - ELS Design Studios\nsource: http://www.TiddlyTools.com/#ExportTiddlersPlugin\nlicense: [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]^^\n\nWhen many people edit copies of the same TiddlyWiki document, the ability to easily copy and share these changes so they can then be redistributed to the entire group is very important. This ability is also very useful when moving your own tiddlers from document to document (e.g., when upgrading to the latest version of TiddlyWiki, or 'pre-loading' your favorite stylesheets into a new 'empty' TiddlyWiki document.)\n\nExportTiddlersPlugin let you ''select and extract tiddlers from your ~TiddlyWiki documents and save them to a local file'' or a remote server (requires installation of compatible server-side scripting, still under development...). An interactive control panel lets you specify a destination, and then select which tiddlers to export. A convenient 'selection filter' helps you pick desired tiddlers by specifying a combination of modification dates, tags, or tiddler text to be matched or excluded. ''Tiddler data can be output as ~TiddlyWiki "storeArea ~DIVs" that can be imported into another ~TiddlyWiki or as ~RSS-compatible XML that can be published for RSS syndication.''\n\n!!!!!Inline interface (live)\n<<<\n<<exportTiddlers inline>>\n<<<\n!!!!!Usage\n<<<\nOptional "special tiddlers" used by this plugin:\n* SiteUrl^^\nURL for official server-published version of document being viewed (used in XML export)\ndefault: //none//^^\n* SiteHost^^\nhost name/address for remote server (e.g., "www.server.com" or "192.168.1.27")\ndefault: //none//^^\n* SitePost^^\nremote path/filename for submitting changes (e.g., "/cgi-bin/submit.cgi")\ndefault: //none//^^\n* SiteParams^^\narguments (if any) for server-side receiving script\ndefault: //none//^^\n* SiteNotify^^\naddresses (if any) for sending automatic server-side email notices\ndefault: //none//^^\n* SiteID^^\nusername or other authorization identifier for login-controlled access to remote server\ndefault: current TiddlyWiki username (e.g., "YourName")^^\n* SiteDate^^\nstored date/time stamp for most recent published version of document\ndefault: current document.modified value (i.e., the 'file date')^^\n<<<\n!!!!!Example\n<<<\n<<exportTiddlers>>\n<<<\n!!!!!Installation\n<<<\nImport (or copy/paste) the following tiddlers into your document:\n''ExportTiddlersPlugin'' (tagged with <<tag systemConfig>>)\n\ncreate/edit ''SideBarOptions'': (sidebar menu items) \n^^Add {{{<<exportTiddlers>>}}} macro^^\n<<<\n!!!!!Revision History\n<<<\n''2006.05.11 [2.2.2]''\nin createExportPanel, removed call to addNotification() to no longer auto-refresh the list every time a tiddler is changed. Instead, call refreshExportList(0) only when the panel is first rendered and each time it is made visible. Prevents unneeded feedback messages from being displayed and increases overall document performance, since the listbox is no longer being updated each time a tiddler is saved.\n''2006.05.02 [2.2.1]''\nUse displayMessage() to show number of selected tiddlers instead of updating listbox 'header' item after each selection. Prevents awkward 'scroll-to-top' behavior that made multi-select via ctrl-click nearly impossible. Reported by Paul Reiber.\n''2006.04.29 [2.2.0]''\nNew features: "Notes" are free-form text that is inserted in the header of a TWDIV export file. When exporting to a server, the "notify" checkbox indicates that server-side script processing should send an email message when the export file is stored on the server. Comma-separated addresses may be typed in, or pre-defined in the SiteNotify tiddler.\n''2006.03.29 [2.1.3]''\nadded calls to convertUnicodeToUTF8() for generated output, so it better handles international characters.\n''2006.02.12 [2.1.2]''\nadded var to unintended global 'tags' in matchTags(). Avoids FF1501 bug when filtering by tags. (based on report by TedPavlic)\n''2006.02.04 [2.1.1]''\nadded var to variables that were unintentionally global. Avoids FireFox 1.5.0.1 crash bug when referencing global variables\n''2006.02.02 [2.1.0]''\nAdded support for output of complete TiddlyWiki documents. Let's you use ExportTiddlers to generate 'starter' documents from selected tiddlers.\n''2006.01.21 [2.0.1]''\nDefer initial panel creation and only register a notification function when panel first is created\nin saveChanges 'hijack', create panel as needed. Note: if window.event is not available to identify the click location, the export panel is positioned relative to the 'tiddlerDisplay' element of the TW document.\n''2005.12.27 [2.0.0]''\nUpdate for TW2.0\nDefer initial panel creation and only register a notification function when panel first is created\n''2005.12.24 [0.9.5]''\nMinor adjustments to CSS to force correct link colors regardless of TW stylesheet selection\n''2005.12.16 [0.9.4]''\nDynamically create/remove exportPanel as needed to ensure only one instance of interface elements exists, even if there are multiple instances of macro embedding.\n''2005.11.15 [0.9.2]''\nadded non-Ajax post function to bypass javascript security restrictions on cross-domain I/O. Moved AJAX functions to separate tiddler (no longer needed here). Generalized HTTP server to support UnaWiki servers\n''2005.11.08 [0.9.1]''\nmoved HTML, CSS and control initialization into exportInit() function and call from macro handler instead of at load time. This allows exportPanel to be placed within the same containing element as the "export tiddlers" button, so that relative positioning can be achieved.\n''2005.10.28 [0.9.0]''\nadded 'select opened tiddlers' feature\nBased on a suggestion by Geoff Slocock\n''2005.10.24 [0.8.3]''\nCorrected hijack of 'save changes' when using http:\n''2005.10.18 [0.8.2]''\nadded AJAX functions\n''2005.10.18 [0.8.1]''\nCorrected timezone handling when filtering for date ranges.\nImproved error checking/reporting for invalid filter values and filters that don't match any tiddlers.\nExporting localfile-to-localfile is working for IE and FF\nExporting server-to-localfile works in IE (after ActiveX warnings), but has security issues in FF\nCross-domain exporting (localfile/server-to-server) is under development\nCookies to remember filter settings - coming soon\nMore style tweaks, minor text changes and some assorted layout cleanup.\n''2005.10.17 [0.8.0]''\nFirst pre-release.\n''2005.10.16 [0.7.0]''\nfilter by tags\n''2005.10.15 [0.6.0]''\nfilter by title/text\n''2005.10.14 [0.5.0]''\nexport to local file (DIV or XML)\n''2005.10.14 [0.4.0]''\nfilter by start/end date\n''2005.10.13 [0.3.0]''\npanel interaction\n''2005.10.11 [0.2.0]''\npanel layout\n''2005.10.10 [0.1.0]''\ncode framework\n''2005.10.09 [0.0.0]''\ndevelopment started\n<<<\n!!!!!Credits\n<<<\nThis feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]]\n<<<\n!!!!!Code\n***/\n// // +++[version]\n//{{{\nversion.extensions.exportTiddlers = {major: 2, minor: 2, revision: 2, date: new Date(2006,5,2)};\n//}}}\n// //===\n\n// // +++[macro handler]\n//{{{\nconfig.macros.exportTiddlers = {\n label: "export tiddlers",\n prompt: "Copy selected tiddlers to an export document",\n datetimefmt: "0MM/0DD/YYYY 0hh:0mm:0ss" // for "filter date/time" edit fields\n};\n\nconfig.macros.exportTiddlers.handler = function(place,macroName,params) {\n if (params[0]!="inline")\n { createTiddlyButton(place,this.label,this.prompt,onClickExportMenu); return; }\n var panel=createExportPanel(place);\n panel.style.position="static";\n panel.style.display="block";\n}\n\nfunction createExportPanel(place) {\n var panel=document.getElementById("exportPanel");\n if (panel) { panel.parentNode.removeChild(panel); }\n setStylesheet(config.macros.exportTiddlers.css,"exportTiddlers");\n panel=createTiddlyElement(place,"span","exportPanel",null,null)\n panel.innerHTML=config.macros.exportTiddlers.html;\n exportShowPanel(document.location.protocol);\n exportInitFilter();\n refreshExportList(0);\n return panel;\n}\n\nfunction onClickExportMenu(e)\n{\n if (!e) var e = window.event;\n var parent=resolveTarget(e).parentNode;\n var panel = document.getElementById("exportPanel");\n if (panel==undefined || panel.parentNode!=parent)\n panel=createExportPanel(parent);\n var isOpen = panel.style.display=="block";\n if(config.options.chkAnimate)\n anim.startAnimating(new Slider(panel,!isOpen,e.shiftKey || e.altKey,"none"));\n else\n panel.style.display = isOpen ? "none" : "block" ;\n if (panel.style.display!="none") refreshExportList(0); // update list when panel is made visible\n e.cancelBubble = true;\n if (e.stopPropagation) e.stopPropagation();\n return(false);\n}\n//}}}\n// //===\n\n// // +++[Hijack saveChanges] diverts 'notFileUrlError' to display export control panel instead\n//{{{\nwindow.coreSaveChanges=window.saveChanges;\nwindow.saveChanges = function()\n{\n if (document.location.protocol=="file:") { coreSaveChanges(); return; }\n var e = window.event;\n var parent=e?resolveTarget(e).parentNode:document.body;\n var panel = document.getElementById("exportPanel");\n if (panel==undefined || panel.parentNode!=parent) panel=createExportPanel(parent);\n exportShowPanel(document.location.protocol);\n if (parent==document.body) { panel.style.left="30%"; panel.style.top="30%"; }\n panel.style.display = "block" ;\n}\n//}}}\n// //===\n\n// // +++[IE needs explicit scoping] for functions called by browser events\n//{{{\nwindow.onClickExportMenu=onClickExportMenu;\nwindow.onClickExportButton=onClickExportButton;\nwindow.exportShowPanel=exportShowPanel;\nwindow.exportShowFilterFields=exportShowFilterFields;\nwindow.refreshExportList=refreshExportList;\n//}}}\n// //===\n\n// // +++[CSS] for floating export control panel\n//{{{\nconfig.macros.exportTiddlers.css = '\s\n#exportPanel {\s\n display: none; position:absolute; z-index:12; width:35em; right:105%; top:6em;\s\n background-color: #eee; color:#000; font-size: 8pt; line-height:110%;\s\n border:1px solid black; border-bottom-width: 3px; border-right-width: 3px;\s\n padding: 0.5em; margin:0em; -moz-border-radius:1em;\s\n}\s\n#exportPanel a, #exportPanel td a { color:#009; display:inline; margin:0px; padding:1px; }\s\n#exportPanel table { width:100%; border:0px; padding:0px; margin:0px; font-size:8pt; line-height:110%; background:transparent; }\s\n#exportPanel tr { border:0px;padding:0px;margin:0px; background:transparent; }\s\n#exportPanel td { color:#000; border:0px;padding:0px;margin:0px; background:transparent; }\s\n#exportPanel select { width:98%;margin:0px;font-size:8pt;line-height:110%;}\s\n#exportPanel input { width:98%;padding:0px;margin:0px;font-size:8pt;line-height:110%; }\s\n#exportPanel textarea { width:98%;padding:0px;margin:0px;overflow:auto;font-size:8pt; }\s\n#exportPanel .box { border:1px solid black; padding:3px; margin-bottom:5px; background:#f8f8f8; -moz-border-radius:5px; }\s\n#exportPanel .topline { border-top:2px solid black; padding-top:3px; margin-bottom:5px; }\s\n#exportPanel .rad { width:auto;border:0 }\s\n#exportPanel .chk { width:auto;border:0 }\s\n#exportPanel .btn { width:auto; }\s\n#exportPanel .btn1 { width:98%; }\s\n#exportPanel .btn2 { width:48%; }\s\n#exportPanel .btn3 { width:32%; }\s\n#exportPanel .btn4 { width:24%; }\s\n#exportPanel .btn5 { width:19%; }\s\n';\n//}}}\n// //===\n\n// // +++[HTML] for export control panel interface\n//{{{\nconfig.macros.exportTiddlers.html = '\s\n<!-- output target and format -->\s\n<table cellpadding="0" cellspacing="0"><tr><td width=50%>\s\n export to\s\n <select size=1 id="exportTo" onchange="exportShowPanel(this.value);">\s\n <option value="file:" SELECTED>this computer</option>\s\n <option value="http:">web server (http)</option>\s\n <option value="https:">secure web server (https)</option>\s\n <option value="ftp:">file server (ftp)</option>\s\n </select>\s\n</td><td width=50%>\s\n output format\s\n <select id="exportFormat" size=1>\s\n <option value="DIV">TiddlyWiki export file</option>\s\n <option value="TW">TiddlyWiki document</option>\s\n <option value="XML">RSS feed (XML)</option>\s\n </select>\s\n</td></tr></table>\s\n\s\n<!-- export to local file -->\s\n<div id="exportLocalPanel" style="margin-top:5px;">\s\nlocal path/filename<br>\s\n<input type="file" id="exportFilename" size=57 style="width:100%"><br>\s\n</div><!--panel-->\s\n\s\n<!-- export to http server -->\s\n<div id="exportHTTPPanel" style="display:none;margin-top:5px;">\s\n<table><tr><td align=left>\s\n server location, script, and parameters<br>\s\n</td><td align=right>\s\n <input type="checkbox" class="chk" id="exportNotify"\s\n onClick="document.getElementById(\s'exportSetNotifyPanel\s').style.display=this.checked?\s'block\s':\s'none\s'"> notify\s\n</td></tr></table>\s\n<input type="text" id="exportHTTPServerURL" onfocus="this.select()"><br>\s\n<div id="exportSetNotifyPanel" style="display:none">\s\n send email notices to<br>\s\n <input type="text" id="exportNotifyTo" onfocus="this.select()"><br>\s\n</div>\s\n</div><!--panel-->\s\n\s\n<!-- export to ftp server -->\s\n<div id="exportFTPPanel" style="display:none;margin-top:5px;">\s\n<table cellpadding="0" cellspacing="0" width="32%"><tr valign="top"><td>\s\n host server<br>\s\n <input type="text" id="exportFTPHost" onfocus="this.select()"><br>\s\n</td><td width="32%">\s\n username<br>\s\n <input type="text" id="exportFTPID" onfocus="this.select()"><br>\s\n</td><td width="32%">\s\n password<br>\s\n <input type="password" id="exportFTPPW" onfocus="this.select()"><br>\s\n</td></tr></table>\s\nFTP path/filename<br>\s\n<input type="text" id="exportFTPFilename" onfocus="this.select()"><br>\s\n</div><!--panel-->\s\n\s\n<!-- notes -->\s\nnotes<br>\s\n<textarea id="exportNotes" rows=3 cols=40 style="height:4em;margin-bottom:5px;" onfocus="this.select()"></textarea> \s\n\s\n<!-- list of tiddlers -->\s\n<table><tr align="left"><td>\s\n select:\s\n <a href="JavaScript:;" id="exportSelectAll"\s\n onclick="onClickExportButton(this)" title="select all tiddlers">\s\n all </a>\s\n <a href="JavaScript:;" id="exportSelectChanges"\s\n onclick="onClickExportButton(this)" title="select tiddlers changed since last save">\s\n changes </a> \s\n <a href="JavaScript:;" id="exportSelectOpened"\s\n onclick="onClickExportButton(this)" title="select tiddlers currently being displayed">\s\n opened </a> \s\n <a href="JavaScript:;" id="exportToggleFilter"\s\n onclick="onClickExportButton(this)" title="show/hide selection filter">\s\n filter </a> \s\n</td><td align="right">\s\n <a href="JavaScript:;" id="exportListSmaller"\s\n onclick="onClickExportButton(this)" title="reduce list size">\s\n – </a>\s\n <a href="JavaScript:;" id="exportListLarger"\s\n onclick="onClickExportButton(this)" title="increase list size">\s\n + </a>\s\n</td></tr></table>\s\n<select id="exportList" multiple size="10" style="margin-bottom:5px;"\s\n onchange="refreshExportList(this.selectedIndex)">\s\n</select><br>\s\n</div><!--box-->\s\n\s\n<!-- selection filter -->\s\n<div id="exportFilterPanel" style="display:none">\s\n<table><tr align="left"><td>\s\n selection filter\s\n</td><td align="right">\s\n <a href="JavaScript:;" id="exportHideFilter"\s\n onclick="onClickExportButton(this)" title="hide selection filter">hide</a>\s\n</td></tr></table>\s\n<div class="box">\s\n<input type="checkbox" class="chk" id="exportFilterStart" value="1"\s\n onclick="exportShowFilterFields(this)"> starting date/time<br>\s\n<table cellpadding="0" cellspacing="0"><tr valign="center"><td width="50%">\s\n <select size=1 id="exportFilterStartBy" onchange="exportShowFilterFields(this);">\s\n <option value="0">today</option>\s\n <option value="1">yesterday</option>\s\n <option value="7">a week ago</option>\s\n <option value="30">a month ago</option>\s\n <option value="site">SiteDate</option>\s\n <option value="file">file date</option>\s\n <option value="other">other (mm/dd/yyyy hh:mm)</option>\s\n </select>\s\n</td><td width="50%">\s\n <input type="text" id="exportStartDate" onfocus="this.select()"\s\n onchange="document.getElementById(\s'exportFilterStartBy\s').value=\s'other\s';">\s\n</td></tr></table>\s\n<input type="checkbox" class="chk" id="exportFilterEnd" value="1"\s\n onclick="exportShowFilterFields(this)"> ending date/time<br>\s\n<table cellpadding="0" cellspacing="0"><tr valign="center"><td width="50%">\s\n <select size=1 id="exportFilterEndBy" onchange="exportShowFilterFields(this);">\s\n <option value="0">today</option>\s\n <option value="1">yesterday</option>\s\n <option value="7">a week ago</option>\s\n <option value="30">a month ago</option>\s\n <option value="site">SiteDate</option>\s\n <option value="file">file date</option>\s\n <option value="other">other (mm/dd/yyyy hh:mm)</option>\s\n </select>\s\n</td><td width="50%">\s\n <input type="text" id="exportEndDate" onfocus="this.select()"\s\n onchange="document.getElementById(\s'exportFilterEndBy\s').value=\s'other\s';">\s\n</td></tr></table>\s\n<input type="checkbox" class="chk" id=exportFilterTags value="1"\s\n onclick="exportShowFilterFields(this)"> match tags<br>\s\n<input type="text" id="exportTags" onfocus="this.select()">\s\n<input type="checkbox" class="chk" id=exportFilterText value="1"\s\n onclick="exportShowFilterFields(this)"> match titles/tiddler text<br>\s\n<input type="text" id="exportText" onfocus="this.select()">\s\n</div> <!--box-->\s\n</div> <!--panel-->\s\n\s\n<!-- action buttons -->\s\n<div style="text-align:center">\s\n<input type=button class="btn3" onclick="onClickExportButton(this)"\s\n id="exportFilter" value="apply filter">\s\n<input type=button class="btn3" onclick="onClickExportButton(this)"\s\n id="exportStart" value="export tiddlers">\s\n<input type=button class="btn3" onclick="onClickExportButton(this)"\s\n id="exportClose" value="close">\s\n</div><!--center-->\s\n';\n//}}}\n// //===\n\n// // +++[initialize interface]>\n// // +++[exportShowPanel(which)]\n//{{{\nfunction exportShowPanel(which) {\n var index=0; var panel='exportLocalPanel';\n switch (which) {\n case 'file:':\n case undefined:\n index=0; panel='exportLocalPanel'; break;\n case 'http:':\n index=1; panel='exportHTTPPanel'; break;\n case 'https:':\n index=2; panel='exportHTTPPanel'; break;\n case 'ftp:':\n index=3; panel='exportFTPPanel'; break;\n default:\n alert("Sorry, export to "+which+" is not yet available");\n break;\n }\n exportInitPanel(which);\n document.getElementById('exportTo').selectedIndex=index;\n document.getElementById('exportLocalPanel').style.display='none';\n document.getElementById('exportHTTPPanel').style.display='none';\n document.getElementById('exportFTPPanel').style.display='none';\n document.getElementById(panel).style.display='block';\n}\n//}}}\n// //===\n\n// // +++[exportInitPanel(which)]\n//{{{\nfunction exportInitPanel(which) {\n switch (which) {\n case "file:": // LOCAL EXPORT PANEL: file/path:\n // ** no init - security issues in IE **\n break;\n case "http:": // WEB EXPORT PANEL\n case "https:": // SECURE WEB EXPORT PANEL\n // url\n if (store.tiddlerExists("unawiki_download")) {\n var theURL=store.getTiddlerText("unawiki_download");\n theURL=theURL.replace(/\s[\s[download\s|/,'').replace(/\s]\s]/,'');\n var title=(store.tiddlerExists("unawiki_host"))?"unawiki_host":"SiteHost";\n var theHost=store.getTiddlerText(title);\n if (!theHost || !theHost.length) theHost=document.location.host;\n if (!theHost || !theHost.length) theHost=title;\n }\n // server script/params\n var title=(store.tiddlerExists("unawiki_host"))?"unawiki_host":"SiteHost";\n var theHost=store.getTiddlerText(title);\n if (!theHost || !theHost.length) theHost=document.location.host;\n if (!theHost || !theHost.length) theHost=title;\n // get POST\n var title=(store.tiddlerExists("unawiki_post"))?"unawiki_post":"SitePost";\n var thePost=store.getTiddlerText(title);\n if (!thePost || !thePost.length) thePost="/"+title;\n // get PARAMS\n var title=(store.tiddlerExists("unawiki_params"))?"unawiki_params":"SiteParams";\n var theParams=store.getTiddlerText(title);\n if (!theParams|| !theParams.length) theParams=title;\n var serverURL = which+"//"+theHost+thePost+"?"+theParams;\n document.getElementById("exportHTTPServerURL").value=serverURL;\n // get NOTIFY\n var theAddresses=store.getTiddlerText("SiteNotify");\n if (!theAddresses|| !theAddresses.length) theAddresses="SiteNotify";\n document.getElementById("exportNotifyTo").value=theAddresses;\n break;\n case "ftp:": // FTP EXPORT PANEL\n // host\n var siteHost=store.getTiddlerText("SiteHost");\n if (!siteHost || !siteHost.length) siteHost=document.location.host;\n if (!siteHost || !siteHost.length) siteHost="SiteHost";\n document.getElementById("exportFTPHost").value=siteHost;\n // username\n var siteID=store.getTiddlerText("SiteID");\n if (!siteID || !siteID.length) siteID=config.options.txtUserName;\n document.getElementById("exportFTPID").value=siteID;\n // password\n document.getElementById("exportFTPPW").value="";\n // file/path\n document.getElementById("exportFTPFilename").value="";\n break;\n }\n}\n//}}}\n// //===\n\n// // +++[exportInitFilter()]\n//{{{\nfunction exportInitFilter() {\n // start date\n document.getElementById("exportFilterStart").checked=false;\n document.getElementById("exportStartDate").value="";\n // end date\n document.getElementById("exportFilterEnd").checked=false;\n document.getElementById("exportEndDate").value="";\n // tags\n document.getElementById("exportFilterTags").checked=false;\n document.getElementById("exportTags").value="";\n // text\n document.getElementById("exportFilterText").checked=false;\n document.getElementById("exportText").value="";\n // show/hide filter input fields\n exportShowFilterFields();\n}\n//}}}\n// //===\n\n// // +++[exportShowFilterFields(which)]\n//{{{\nfunction exportShowFilterFields(which) {\n var show;\n\n show=document.getElementById('exportFilterStart').checked;\n document.getElementById('exportFilterStartBy').style.display=show?"block":"none";\n document.getElementById('exportStartDate').style.display=show?"block":"none";\n var val=document.getElementById('exportFilterStartBy').value;\n document.getElementById('exportStartDate').value\n =getFilterDate(val,'exportStartDate').formatString(config.macros.exportTiddlers.datetimefmt);\n if (which && (which.id=='exportFilterStartBy') && (val=='other'))\n document.getElementById('exportStartDate').focus();\n\n show=document.getElementById('exportFilterEnd').checked;\n document.getElementById('exportFilterEndBy').style.display=show?"block":"none";\n document.getElementById('exportEndDate').style.display=show?"block":"none";\n var val=document.getElementById('exportFilterEndBy').value;\n document.getElementById('exportEndDate').value\n =getFilterDate(val,'exportEndDate').formatString(config.macros.exportTiddlers.datetimefmt);\n if (which && (which.id=='exportFilterEndBy') && (val=='other'))\n document.getElementById('exportEndDate').focus();\n\n show=document.getElementById('exportFilterTags').checked;\n document.getElementById('exportTags').style.display=show?"block":"none";\n\n show=document.getElementById('exportFilterText').checked;\n document.getElementById('exportText').style.display=show?"block":"none";\n}\n//}}}\n// //===\n// //===\n\n// // +++[onClickExportButton(which): control interactions]\n//{{{\nfunction onClickExportButton(which)\n{\n // DEBUG alert(which.id);\n var theList=document.getElementById('exportList'); if (!theList) return;\n var count = 0;\n var total = store.getTiddlers('title').length;\n switch (which.id)\n {\n case 'exportFilter':\n count=filterExportList();\n var panel=document.getElementById('exportFilterPanel');\n if (count==-1) { panel.style.display='block'; break; }\n document.getElementById("exportStart").disabled=(count==0);\n clearMessage(); displayMessage("filtered "+formatExportMessage(count,total));\n if (count==0) { alert("No tiddlers were selected"); panel.style.display='block'; }\n break;\n case 'exportStart':\n exportTiddlers();\n break;\n case 'exportHideFilter':\n case 'exportToggleFilter':\n var panel=document.getElementById('exportFilterPanel')\n panel.style.display=(panel.style.display=='block')?'none':'block';\n break;\n case 'exportSelectChanges':\n var lastmod=new Date(document.lastModified);\n for (var t = 0; t < theList.options.length; t++) {\n if (theList.options[t].value=="") continue;\n var tiddler=store.getTiddler(theList.options[t].value); if (!tiddler) continue;\n theList.options[t].selected=(tiddler.modified>lastmod);\n count += (tiddler.modified>lastmod)?1:0;\n }\n document.getElementById("exportStart").disabled=(count==0);\n clearMessage(); displayMessage(formatExportMessage(count,total));\n if (count==0) alert("There are no unsaved changes");\n break;\n case 'exportSelectAll':\n for (var t = 0; t < theList.options.length; t++) {\n if (theList.options[t].value=="") continue;\n theList.options[t].selected=true;\n count += 1;\n }\n document.getElementById("exportStart").disabled=(count==0);\n clearMessage(); displayMessage(formatExportMessage(count,count));\n break;\n case 'exportSelectOpened':\n for (var t = 0; t < theList.options.length; t++) theList.options[t].selected=false;\n var tiddlerDisplay = document.getElementById("tiddlerDisplay");\n for (var t=0;t<tiddlerDisplay.childNodes.length;t++) {\n var tiddler=tiddlerDisplay.childNodes[t].id.substr(7);\n for (var i = 0; i < theList.options.length; i++) {\n if (theList.options[i].value!=tiddler) continue;\n theList.options[i].selected=true; count++; break;\n }\n }\n document.getElementById("exportStart").disabled=(count==0);\n clearMessage(); displayMessage(formatExportMessage(count,total));\n if (count==0) alert("There are no tiddlers currently opened");\n break;\n case 'exportListSmaller': // decrease current listbox size\n var min=5;\n theList.size-=(theList.size>min)?1:0;\n break;\n case 'exportListLarger': // increase current listbox size\n var max=(theList.options.length>25)?theList.options.length:25;\n theList.size+=(theList.size<max)?1:0;\n break;\n case 'exportClose':\n document.getElementById('exportPanel').style.display='none';\n break;\n }\n}\n//}}}\n// //===\n\n// // +++[list display]\n//{{{\nfunction formatExportMessage(count,total)\n{\n var txt=total+' tiddler'+((total!=1)?'s':'')+" - ";\n txt += (count==0)?"none":(count==total)?"all":count;\n txt += " selected for export";\n return txt;\n}\n\nfunction refreshExportList(selectedIndex)\n{\n var theList = document.getElementById("exportList");\n var sort;\n if (!theList) return;\n // get the sort order\n if (!selectedIndex) selectedIndex=0;\n if (selectedIndex==0) sort='modified';\n if (selectedIndex==1) sort='title';\n if (selectedIndex==2) sort='modified';\n if (selectedIndex==3) sort='modifier';\n\n // get the alphasorted list of tiddlers\n var tiddlers = store.getTiddlers('title');\n // unselect headings and count number of tiddlers actually selected\n var count=0;\n for (var i=0; i<theList.options.length; i++) {\n if (theList.options[i].value=="") theList.options[i].selected=false;\n count+=theList.options[i].selected?1:0;\n }\n // disable "export" button if no tiddlers selected\n document.getElementById("exportStart").disabled=(count==0);\n // update listbox heading to show selection count\n if (theList.options.length) { clearMessage(); displayMessage(formatExportMessage(count,tiddlers.length)); }\n\n // if a [command] item, reload list... otherwise, no further refresh needed\n if (selectedIndex>3) return;\n\n // clear current list contents\n while (theList.length > 0) { theList.options[0] = null; }\n // add heading and control items to list\n var i=0;\n var indent=String.fromCharCode(160)+String.fromCharCode(160);\n theList.options[i++]=\n new Option(tiddlers.length+" tiddlers in document", "",false,false);\n theList.options[i++]=\n new Option(((sort=="title" )?">":indent)+' [by title]', "",false,false);\n theList.options[i++]=\n new Option(((sort=="modified")?">":indent)+' [by date]', "",false,false);\n theList.options[i++]=\n new Option(((sort=="modifier")?">":indent)+' [by author]', "",false,false);\n // output the tiddler list\n switch(sort)\n {\n case "title":\n for(var t = 0; t < tiddlers.length; t++)\n theList.options[i++] = new Option(tiddlers[t].title,tiddlers[t].title,false,false);\n break;\n case "modifier":\n case "modified":\n var tiddlers = store.getTiddlers(sort);\n // sort descending for newest date first\n tiddlers.sort(function (a,b) {if(a[sort] == b[sort]) return(0); else return (a[sort] > b[sort]) ? -1 : +1; });\n var lastSection = "";\n for(var t = 0; t < tiddlers.length; t++)\n {\n var tiddler = tiddlers[t];\n var theSection = "";\n if (sort=="modified") theSection=tiddler.modified.toLocaleDateString();\n if (sort=="modifier") theSection=tiddler.modifier;\n if (theSection != lastSection)\n {\n theList.options[i++] = new Option(theSection,"",false,false);\n lastSection = theSection;\n }\n theList.options[i++] = new Option(indent+indent+tiddler.title,tiddler.title,false,false);\n }\n break;\n }\n theList.selectedIndex=selectedIndex; // select current control item\n}\n//}}}\n// //===\n\n// // +++[list filtering]\n//{{{\nfunction getFilterDate(val,id)\n{\n var result=0;\n switch (val) {\n case 'site':\n var timestamp=store.getTiddlerText("SiteDate");\n if (!timestamp) timestamp=document.lastModified;\n result=new Date(timestamp);\n break;\n case 'file':\n result=new Date(document.lastModified);\n break;\n case 'other':\n result=new Date(document.getElementById(id).value);\n break;\n default: // today=0, yesterday=1, one week=7, two weeks=14, a month=31\n var now=new Date(); var tz=now.getTimezoneOffset()*60000; now-=tz;\n var oneday=86400000;\n if (id=='exportStartDate')\n result=new Date((Math.floor(now/oneday)-val)*oneday+tz);\n else\n result=new Date((Math.floor(now/oneday)-val+1)*oneday+tz-1);\n break;\n }\n // DEBUG alert('getFilterDate('+val+','+id+')=='+result+"\snnow="+now);\n return result;\n}\n\nfunction filterExportList()\n{\n var theList = document.getElementById("exportList"); if (!theList) return -1;\n\n var filterStart=document.getElementById("exportFilterStart").checked;\n var val=document.getElementById("exportFilterStartBy").value;\n var startDate=getFilterDate(val,'exportStartDate');\n\n var filterEnd=document.getElementById("exportFilterEnd").checked;\n var val=document.getElementById("exportFilterEndBy").value;\n var endDate=getFilterDate(val,'exportEndDate');\n\n var filterTags=document.getElementById("exportFilterTags").checked;\n var tags=document.getElementById("exportTags").value;\n\n var filterText=document.getElementById("exportFilterText").checked;\n var text=document.getElementById("exportText").value;\n\n if (!(filterStart||filterEnd||filterTags||filterText)) {\n alert("Please set the selection filter");\n document.getElementById('exportFilterPanel').style.display="block";\n return -1;\n }\n if (filterStart&&filterEnd&&(startDate>endDate)) {\n var msg="starting date/time:\sn"\n msg+=startDate.toLocaleString()+"\sn";\n msg+="is later than ending date/time:\sn"\n msg+=endDate.toLocaleString()\n alert(msg);\n return -1;\n }\n\n // scan list and select tiddlers that match all applicable criteria\n var total=0;\n var count=0;\n for (var i=0; i<theList.options.length; i++) {\n // get item, skip non-tiddler list items (section headings)\n var opt=theList.options[i]; if (opt.value=="") continue;\n // get tiddler, skip missing tiddlers (this should NOT happen)\n var tiddler=store.getTiddler(opt.value); if (!tiddler) continue; \n var sel=true;\n if ( (filterStart && tiddler.modified<startDate)\n || (filterEnd && tiddler.modified>endDate)\n || (filterTags && !matchTags(tiddler,tags))\n || (filterText && (tiddler.text.indexOf(text)==-1) && (tiddler.title.indexOf(text)==-1)))\n sel=false;\n opt.selected=sel;\n count+=sel?1:0;\n total++;\n }\n return count;\n}\n//}}}\n\n//{{{\nfunction matchTags(tiddler,cond)\n{\n if (!cond||!cond.trim().length) return false;\n\n // build a regex of all tags as a big-old regex that \n // OR's the tags together (tag1|tag2|tag3...) in length order\n var tgs = store.getTags();\n if ( tgs.length == 0 ) return results ;\n var tags = tgs.sort( function(a,b){return (a[0].length<b[0].length)-(a[0].length>b[0].length);});\n var exp = "(" + tags.join("|") + ")" ;\n exp = exp.replace( /(,[\sd]+)/g, "" ) ;\n var regex = new RegExp( exp, "ig" );\n\n // build a string such that an expression that looks like this: tag1 AND tag2 OR NOT tag3\n // turns into : /tag1/.test(...) && /tag2/.test(...) || ! /tag2/.test(...)\n cond = cond.replace( regex, "/$1\s\s|/.test(tiddlerTags)" );\n cond = cond.replace( /\ssand\ss/ig, " && " ) ;\n cond = cond.replace( /\ssor\ss/ig, " || " ) ;\n cond = cond.replace( /\ss?not\ss/ig, " ! " ) ;\n\n // if a boolean uses a tag that doesn't exist - it will get left alone \n // (we only turn existing tags into actual tests).\n // replace anything that wasn't found as a tag, AND, OR, or NOT with the string "false"\n // if the tag doesn't exist then /tag/.test(...) will always return false.\n cond = cond.replace( /(\ss|^)+[^\s/\s|&!][^\ss]*/g, "false" ) ;\n\n // make a string of the tags in the tiddler and eval the 'cond' string against that string \n // if it's TRUE then the tiddler qualifies!\n var tiddlerTags = (tiddler.tags?tiddler.tags.join("|"):"")+"|" ;\n try { if ( eval( cond ) ) return true; }\n catch( e ) { displayMessage("Error in tag filter '" + e + "'" ); }\n return false;\n}\n//}}}\n// //===\n\n// // +++[output data formatting]>\n// // +++[exportHeader(format)]\n//{{{\nfunction exportHeader(format)\n{\n switch (format) {\n case "TW": return exportTWHeader();\n case "DIV": return exportDIVHeader();\n case "XML": return exportXMLHeader();\n }\n}\n//}}}\n// //===\n\n// // +++[exportFooter(format)]\n//{{{\nfunction exportFooter(format)\n{\n switch (format) {\n case "TW": return exportDIVFooter();\n case "DIV": return exportDIVFooter();\n case "XML": return exportXMLFooter();\n }\n}\n//}}}\n// //===\n\n// // +++[exportTWHeader()]\n//{{{\nfunction exportTWHeader()\n{\n // Get the URL of the document\n var originalPath = document.location.toString();\n // Check we were loaded from a file URL\n if(originalPath.substr(0,5) != "file:")\n { alert(config.messages.notFileUrlError); return; }\n // Remove any location part of the URL\n var hashPos = originalPath.indexOf("#"); if(hashPos != -1) originalPath = originalPath.substr(0,hashPos);\n // Convert to a native file format assuming\n // "file:///x:/path/path/path..." - pc local file --> "x:\spath\spath\spath..."\n // "file://///server/share/path/path/path..." - FireFox pc network file --> "\s\sserver\sshare\spath\spath\spath..."\n // "file:///path/path/path..." - mac/unix local file --> "/path/path/path..."\n // "file://server/share/path/path/path..." - pc network file --> "\s\sserver\sshare\spath\spath\spath..."\n var localPath;\n if(originalPath.charAt(9) == ":") // pc local file\n localPath = unescape(originalPath.substr(8)).replace(new RegExp("/","g"),"\s\s");\n else if(originalPath.indexOf("file://///") == 0) // FireFox pc network file\n localPath = "\s\s\s\s" + unescape(originalPath.substr(10)).replace(new RegExp("/","g"),"\s\s");\n else if(originalPath.indexOf("file:///") == 0) // mac/unix local file\n localPath = unescape(originalPath.substr(7));\n else if(originalPath.indexOf("file:/") == 0) // mac/unix local file\n localPath = unescape(originalPath.substr(5));\n else // pc network file\n localPath = "\s\s\s\s" + unescape(originalPath.substr(7)).replace(new RegExp("/","g"),"\s\s");\n // Load the original file\n var original = loadFile(localPath);\n if(original == null)\n { alert(config.messages.cantSaveError); return; }\n // Locate the storeArea div's\n var posOpeningDiv = original.indexOf(startSaveArea);\n var posClosingDiv = original.lastIndexOf(endSaveArea);\n if((posOpeningDiv == -1) || (posClosingDiv == -1))\n { alert(config.messages.invalidFileError.format([localPath])); return; }\n return original.substr(0,posOpeningDiv+startSaveArea.length)\n}\n//}}}\n// //===\n\n// // +++[exportDIVHeader()]\n//{{{\nfunction exportDIVHeader()\n{\n var out=[];\n var now = new Date();\n var title = convertUnicodeToUTF8(wikifyPlain("SiteTitle").htmlEncode());\n var subtitle = convertUnicodeToUTF8(wikifyPlain("SiteSubtitle").htmlEncode());\n var user = convertUnicodeToUTF8(config.options.txtUserName.htmlEncode());\n var twver = version.major+"."+version.minor+"."+version.revision;\n var pver = version.extensions.exportTiddlers.major+"."\n +version.extensions.exportTiddlers.minor+"."+version.extensions.exportTiddlers.revision;\n out.push("<html><body>");\n out.push("<style type=\s"text/css\s">");\n out.push("#storeArea {display:block;margin:1em;}");\n out.push("#storeArea div");\n out.push("{padding:0.5em;margin:1em;border:2px solid black;height:10em;overflow:auto;}");\n out.push("#javascriptWarning");\n out.push("{width:100%;text-align:left;background-color:#eeeeee;padding:1em;}");\n out.push("</style>");\n out.push("<div id=\s"javascriptWarning\s">");\n out.push("TiddlyWiki export file<br>");\n out.push("Source: <b>"+convertUnicodeToUTF8(document.location.toString())+"</b><br>");\n out.push("Title: <b>"+title+"</b><br>");\n out.push("Subtitle: <b>"+subtitle+"</b><br>");\n out.push("Created: <b>"+now.toLocaleString()+"</b> by <b>"+user+"</b><br>");\n out.push("TiddlyWiki "+twver+" / "+"ExportTiddlersPlugin "+pver+"<br>");\n out.push("Notes:<hr><pre>"+document.getElementById("exportNotes").value.replace(regexpNewLine,"<br>")+"</pre>");\n out.push("</div>");\n out.push("<div id=\s"storeArea\s">");\n return out;\n}\n//}}}\n// //===\n\n// // +++[exportDIVFooter()]\n//{{{\nfunction exportDIVFooter()\n{\n var out=[];\n out.push("</div></body></html>");\n return out;\n}\n//}}}\n// //===\n\n// // +++[exportXMLHeader()]\n//{{{\nfunction exportXMLHeader()\n{\n var out=[];\n var now = new Date();\n var u = store.getTiddlerText("SiteUrl",null);\n var title = convertUnicodeToUTF8(wikifyPlain("SiteTitle").htmlEncode());\n var subtitle = convertUnicodeToUTF8(wikifyPlain("SiteSubtitle").htmlEncode());\n var user = convertUnicodeToUTF8(config.options.txtUserName.htmlEncode());\n var twver = version.major+"."+version.minor+"."+version.revision;\n var pver = version.extensions.exportTiddlers.major+"."\n +version.extensions.exportTiddlers.minor+"."+version.extensions.exportTiddlers.revision;\n out.push("<" + "?xml version=\s"1.0\s"?" + ">");\n out.push("<rss version=\s"2.0\s">");\n out.push("<channel>");\n out.push("<title>" + title + "</title>");\n if(u) out.push("<link>" + convertUnicodeToUTF8(u.htmlEncode()) + "</link>");\n out.push("<description>" + subtitle + "</description>");\n out.push("<language>en-us</language>");\n out.push("<copyright>Copyright " + now.getFullYear() + " " + user + "</copyright>");\n out.push("<pubDate>" + now.toGMTString() + "</pubDate>");\n out.push("<lastBuildDate>" + now.toGMTString() + "</lastBuildDate>");\n out.push("<docs>http://blogs.law.harvard.edu/tech/rss</docs>");\n out.push("<generator>TiddlyWiki "+twver+" plus ExportTiddlersPlugin "+pver+"</generator>");\n return out;\n}\n//}}}\n// //===\n\n// // +++[exportXMLFooter()]\n//{{{\nfunction exportXMLFooter()\n{\n var out=[];\n out.push("</channel></rss>");\n return out;\n}\n//}}}\n// //===\n\n// // +++[exportData()]\n//{{{\nfunction exportData(theList,theFormat)\n{\n // scan export listbox and collect DIVs or XML for selected tiddler content\n var out=[];\n for (var i=0; i<theList.options.length; i++) {\n // get item, skip non-selected items and section headings\n var opt=theList.options[i]; if (!opt.selected||(opt.value=="")) continue;\n // get tiddler, skip missing tiddlers (this should NOT happen)\n var thisTiddler=store.getTiddler(opt.value); if (!thisTiddler) continue; \n if (theFormat=="TW") out.push(convertUnicodeToUTF8(thisTiddler.saveToDiv()));\n if (theFormat=="DIV") out.push(convertUnicodeToUTF8(thisTiddler.title+"\sn"+thisTiddler.saveToDiv()));\n if (theFormat=="XML") out.push(convertUnicodeToUTF8(thisTiddler.saveToRss()));\n }\n return out;\n}\n//}}}\n// //===\n// //===\n\n// // +++[exportTiddlers(): output selected data to local or server]\n//{{{\nfunction exportTiddlers()\n{\n var theList = document.getElementById("exportList"); if (!theList) return;\n\n // get the export settings\n var theProtocol = document.getElementById("exportTo").value;\n var theFormat = document.getElementById("exportFormat").value;\n\n // assemble output: header + tiddlers + footer\n var theData=exportData(theList,theFormat);\n var count=theData.length;\n var out=[]; var txt=out.concat(exportHeader(theFormat),theData,exportFooter(theFormat)).join("\sn");\n var msg="";\n switch (theProtocol) {\n case "file:":\n var theTarget = document.getElementById("exportFilename").value.trim();\n if (!theTarget.length) msg = "A local path/filename is required\sn";\n if (!msg && saveFile(theTarget,txt))\n msg=count+" tiddler"+((count!=1)?"s":"")+" exported to local file";\n else if (!msg)\n msg+="An error occurred while saving to "+theTarget;\n break;\n case "http:":\n case "https:":\n var theTarget = document.getElementById("exportHTTPServerURL").value.trim();\n if (!theTarget.length) msg = "A server URL is required\sn";\n if (document.getElementById('exportNotify').checked)\n theTarget+="¬ify="+encodeURIComponent(document.getElementById('exportNotifyTo').value);\n if (document.getElementById('exportNotes').value.trim().length)\n theTarget+="¬es="+encodeURIComponent(document.getElementById('exportNotes').value);\n if (!msg && exportPost(theTarget+encodeURIComponent(txt)))\n msg=count+" tiddler"+((count!=1)?"s":"")+" exported to "+theProtocol+" server";\n else if (!msg)\n msg+="An error occurred while saving to "+theTarget;\n break;\n case "ftp:":\n default:\n msg="Sorry, export to "+theLocation+" is not yet available";\n break;\n }\n clearMessage(); displayMessage(msg,theTarget);\n}\n//}}}\n// //===\n\n// // +++[exportPost(url): cross-domain post] uses hidden iframe to submit url and capture responses\n//{{{\nfunction exportPost(url)\n{\n var f=document.getElementById("exportFrame"); if (f) document.body.removeChild(f);\n f=document.createElement("iframe"); f.id="exportFrame";\n f.style.width="0px"; f.style.height="0px"; f.style.border="0px";\n document.body.appendChild(f);\n var d=f.document;\n if (f.contentDocument) d=f.contentDocument; // For NS6\n else if (f.contentWindow) d=f.contentWindow.document; // For IE5.5 and IE6\n d.location.replace(url);\n return true;\n}\n//}}}\n// //===\n
Hieren estos peñones que se alzan\n como cuadrangulares condenas al deseo\n cortando el horizonte.\n Mazas que se abaten urgiendo lo superfluo.\n Ríos de cemento...\n Ríos de cemento cortando el horizonte.
body\n { font-family: verdana,arial,helvetica; }\n#messageArea\n { font-size: 8pt; }\n#titleLine a, #titleLine .button,\n#titleLine .tiddlyLinkExisting, #titleLine .tiddlyLinkNonExisting\n { font-weight: normal; font-style: normal; }\n#siteTitle .externalLink, #siteSubtitle .tiddlyLinkExisting\n { font-style:italic; text-decoration:none; }\n.popup a, .popup .button,\n.popup .tiddlyLinkExisting, .popup .tiddlyLinkNonExisting\n { font-weight: normal; font-style: normal; }\n.title\n { font-size: 12pt; }\n.viewer\n { font-size: 9pt; }\n.editor input, .editor textarea\n { font-size: 8pt;}\n#sidebarOptions input[type="text"]\n { font-size:8pt; }\n.viewer pre, .viewer code\n { font-size:8pt; }\n.viewer blockquote\n { font-size:8pt; }
El oleaje lento de la selva\n me empuja\n en un vals invisible\n de minutos verdes\n\n en suaves remolinos amorosos\n me envuelve\n terciopelo fresco\n lujurioso\n y en un instante carnívoro\n me sujeta y me engulle\n me lleva a su destino borboteante\n de bacterias ansiosas\n donde la vida es un mudo brote perezoso\n un grito desgarrante tras las hojas\n un certero zarpaso\n un alboroto de alas\n una furtiva carrera de insectos\n en minúscula estampida\n\n un religioso silencio\n collage apretujado de volátiles graznidos\n de cavernales ecos misteriosos\n de susurrantes hojas agitadas\n ensordece mis ojos\n trasladando a mis oídos\n la abigarrada textura de su rostro\n\n la bóveda\n de un verde tibio\n apaciguado\n es una sonrisa verde de dientes movedizos\n boca anhelante\n sexo abierto que espera en mi visita\n la descarga del amor elemental\n para maravillarme\n dejarme atónito de luces\n movimiento\n siseos huidizos\n\n sus largos tentáculos de anémona terrestre\n en giros\n contragiros\n pasean por mi cuerpo\n la generosa expresión de su presencia\n\n la vertiginosa masa\n en un flujo y reflujo secreto y permanente\n balancea su libido milenario y leñoso\n\n bajo el acolchado manto de hojas descompuestas\n y cáscaras de insectos\n las plantas entrelazan sus dedos subterráneos\n escarban el cuerpo hechido de la tierra\n con un deseo urgente\n inmóvil\n sigiloso\n\n no existe en este mundo\n de pasiones mudas y esmeraldas\n la angustia y el vacío\n la asfixia complicada\n no puedo hallar entre sus pliegues\n la complejidad del alma\n\n se ha transformado cristal\n en espectante araña\n en soledad compuesta\n en solidaridad callada\n se ha hecho corteza\n voz de jaguar\n agua.
Hoy siento la furia reventar mi pecho\n siento un enojo universal y negro\n quiero ser marejada de odio\n y corroer la sonrisa de los ángeles\n un huracán de piedras\n un alud de puños\n despiadado\n\n hoy soy un grito que rebota\n en el último rincón del infinito\n y destroza los tímpanos del tiempo\n\n hoy no hay bosques que me calmen\n no hay miradas\n no hay música\n ni manos\n ni niños en las calles\n no hay nada\n ¡NADA!\n\n hoy lo mato todo\n mato la primavera\n el rocío\n las preguntas\n mato la ingenuidad y la codicia\n mato insectos\n lluvias y aforismos\n\n nada se salva\n ni yo mismo\n\n quiero\n en una nube nauseabunda\n desparramarme por el mundo\n y ahogar ojos\n corazones\n ser un explosivo cometa\n que apunte al centro de la tierra\n una esfera de fuego\n vengadora o justiciera\n\n hoy no te acerques a mí\n porque mi ira es ciega\n molecular\n sensible como una telaraña\n y puede desatarla\n una tos\n un guiño\n un llanto\n un suspiro\n una mirada\n\n hoy me siento inclemente\n despiadado\n corruptor\n cloacal\n volcánico\n soy un resumen de la muerte\n extracto de maldad\n gas tóxico\n mercurio\n lluvia ácida\n\n y no hay nada que me calme\n canciones\n besos\n aves o caminatas\n no hay nada\n frases antológicas\n teoremas\n lluvias\n logaritmos\n nada\n quiero que mi fuego lo consuma todo\n a mí mismo\n quiero ser cenizas\n polvo cósmico\n radiación intergaláctica\n vibración\n génesis nueva\n para recrearlo todo\n de la nada.
Como al borde de una añosa fuente\n sonora y pedregosa\n al borde de tus ojos me arrimo mansamente\n\n en el arduo mediodía intrascendente\n bebo de vos como un mendigo\n como un huérfano que en tu pródiga mirada\n halla por fin la respuesta siempre denegada\n\n mis dedos\n trémulos de sed\n juegan en las ondas azules de tu agua\n\n ¡Oh, rumor de piedras en correntosa calma!\n ¡boscoso canto!\n ¡amanecer nocturno que mi deseo llama!\n Tus ojos bebederos me sedan y me inflaman.\n\n La oscura mano de tu mirada vasta\n me acuna\n me acaricia\n y me arroja sin clemencia al cepo de tu alma.\n\n ¡Oh, carbón cristalino y líquido!\n ¡pantera en llamas!\n ¡nube de tordos filosa y cruel,\n suave y callada!\n\n Sin tu benévola sombra el mundo me devasta.\n\n ¡Oh, reja de arado en el barbecho de mis ansias!\n Con el hierro de tus ojos\n labrás amores florecidos\n en el erial de mi pecho invadido por la grama.
Ayer, vestido de antiguas lluvias\n salí a humedecer la noche con esperanzas frescas\n sólo hallé el río de tus ojos\n que me llevó\n como a un galeón náufrago\n enredado en los líquenes\n y las algas tibias de tu pelo\n al horizonte solitario de la espera.\n
Globos en el aire\n globos tranparentes\n cristalinos como la voz del agua\n quietos como la espera\n flotan\n flotan\n no los agita la corriente de ojos\n ni las ondas mudas del aliento\n esperan\n no, sólo están\n la percepcion del mundo los ignora\n y ellos flotan\n flotan\n la gente pasa\n sufre\n goza\n muere\n sin ver\n y ellos perduran\n invisibles sobre los vapores de la agonía\n no hay manos que quieran alcanzarlos\n oleadas de latidos escurren a su alrededor\n pero los globos flotan\n solos\n libres\n desapercibidos\n intactos\n no los ven\n ¡no los ven!\n pero se ven\n los veo\n sin esperarnos nos esperan.
/***\n''GotoPlugin for TiddlyWiki version 2.x''\n^^author: Eric Shulman - ELS Design Studios\nsource: http://www.TiddlyTools.com/#GotoPlugin\nlicense: [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]^^\n\n''View a tiddler by typing its title and pressing //enter//.'' Input just enough to uniquely match a single tiddler title and ''press //enter// to auto-complete the title for you!!'' If multiple titles match your input, a list is displayed. You can scroll-and-click (or use arrows+enter) to select/view a tiddler, or press //escape// to close the listbox to resume typing. When the listbox is ''//not//'' being displayed, press //escape// to clear the current text input and start over.\n\nNote: ''At any time, you can move the focus directly to the text input field by using the ~ALT-G keyboard shortcut.''\n!!!!!Example\n<<<\nsyntax: {{{<<goto quiet inputstyle liststyle>>}}}\nAll parameters are optional.\n* ''quiet'' prevents //automatic// display of the list as each character is typed. To view the list when ''quiet'', use //down// or //enter//.\n* ''inputstyle'' and ''liststyle'' are CSS declarations that modify the default input and listbox styles. Note: styles containing spaces must be surrounded by ({{{"..."}}} or {{{'...'}}}) or ({{{[[...]]}}}).\n{{{<<goto>>}}}\n<<goto>>\n{{{<<goto quiet>>}}}\n<<goto quiet>>\n{{{<<goto width:20em width:20em>>}}}\n<<goto width:20em width:20em>>\n<<<\n!!!!!Configuration\n<<<\nThe following ~TiddlyWiki search options (see AdvancedOptions) are applied when matching tiddler titles:\n><<option chkRegExpSearch>> use regular expressions (text patterns)\n><<option chkCaseSensitiveSearch>> use case sensitive matching\nYou can also create a tiddler tagged with <<tag systemConfig>> to control listing of tiddlers/shadows/tags, as well as the maximum height of the listbox. //The default values are shown below://\n//{{{\nconfig.macros.goto.includeTiddlers=true;\nconfig.macros.goto.includeShadows=true;\nconfig.macros.goto.includeTags=true;\nconfig.macros.goto.listMaxSize=10;\n//}}}\n<<<\n!!!!!Installation\n<<<\nimport (or copy/paste) the following tiddlers into your document:\n''GotoPlugin'' (tagged with <<tag systemConfig>>)\n<<<\n!!!!!Revisions\n<<<\n''2006.05.10 [1.1.2]'' when filling listbox, set selection to 'heading' item... auto-select first tiddler title when down/enter moves focus into listbox\n''2006.05.08 [1.1.1]'' added accesskey ("G") to input field html (also set when field gets focus). Also, inputKeyHandler() skips non-printing/non-editing keys. \n''2006.05.08 [1.1.0]'' added heading to listbox for better feedback (also avoids problems with 1-line droplist)\n''2006.05.07 [1.0.0]'' list matches against tiddlers/shadows/tags. input field auto-completion... 1st enter=complete matching input (or show list)... 2nd enter=view tiddler. optional "quiet" param controls when listbox appears.\n''2006.05.06 [0.5.0]'' added handling for enter (13), escape(27), and down(40) keys. Change 'ondblclick' to 'onclick' for list handler to view tiddlers (suggested by Florian Cauvin - prevents unintended trigger of tiddler editor). shadow titles inserted into list instead of appended to the end.\n''2006.05.05 [0.0.0]'' started\n<<<\n!!!!!Credits\n>This feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]]\n!!!!!Code\n***/\n//{{{\nversion.extensions.goto= {major: 1, minor: 1, revision: 2, date: new Date(2006,5,10)};\nconfig.macros.goto= { \n handler:\n function(place,macroName,params) {\n var quiet=(params[0] && params[0]=="quiet"); if (quiet) params.shift();\n var instyle=params.shift(); if (!instyle) instyle="";\n var liststyle=params.shift(); if (!liststyle) liststyle="";\n createTiddlyElement(place,"span").innerHTML\n =this.html.replace(/%quiet%/,quiet).replace(/%instyle%/,instyle).replace(/%liststyle%/,liststyle);\n },\n\n html:\n '<form onsubmit="return false" style="display:inline;margin:0;padding:0">\s\n <input name=goto type=text autocomplete="off" accesskey="G" style="%instyle%"\s\n onfocus="this.setAttribute(\s'accessKey\s',\s'G\s'); this.select();"\s\n onkeyup="return config.macros.goto.inputKeyHandler(event,this,this.form.list,%quiet%);">\s\n <select name=list style="%liststyle%;display:none;position:absolute"\s\n onchange="if (!this.selectedIndex) this.selectedIndex=1;"\s\n onblur="this.style.display=\s'none\s';"\s\n onkeyup="return config.macros.goto.selectKeyHandler(event,this,this.form.goto);"\s\n onclick="return config.macros.goto.openItem(this.value,this.form.goto,this);">\s\n </select>\s\n </form>',\n \n getItems:\n function() {\n var items=[];\n var tiddlers=store.reverseLookup("tags","excludeSearch",false,"title");\n if (this.includeTiddlers) for(var t=0; t<tiddlers.length; t++) items.push(tiddlers[t].title);\n if (this.includeShadows) for (var t in config.shadowTiddlers) items.pushUnique(t);\n if (this.includeTags) { var tags=store.getTags(); for(var t=0; t<tags.length; t++) items.pushUnique(tags[t][0]); }\n return items;\n },\n includeTiddlers: true, includeShadows: true, includeTags: true,\n\n getItemSuffix:\n function(t) {\n if (store.tiddlerExists(t)) return ""; // tiddler\n if (store.isShadowTiddler(t)) return " (shadow)"; // shadow\n return " (tag)"; // tag \n },\n\n openItem:\n function(title,here,list) {\n if (!title.length) return; here.value=title; list.style.display='none'; story.displayTiddler(null,title); return false;\n },\n\n inputKeyHandler:\n function(event,here,list,quiet) {\n var key=event.keyCode;\n // non-printing chars... bubble up, except: backspace=8, enter=13, escape=27, space=32, down=40, delete=46\n if (key<48) switch(key) { case 8: case 13: case 27: case 32: case 40: case 46: break; default: return true; }\n // escape... hide list (2nd esc=reset input)\n if (key==27) { if (list.style.display=="none") here.value=here.defaultValue; else list.style.display="none"; return false; }\n // blank input... if down/enter... fall through (list all)... else, hide list\n if (!here.value.length && !(key==40 || key==13)) { list.style.display="none"; return false; }\n // find matching items...\n var pattern=config.options.chkRegExpSearch?here.value:here.value.escapeRegExp();\n var re=new RegExp(pattern,config.options.chkCaseSensitiveSearch?"mg":"img");\n var found = []; var items=this.getItems(); for(var t=0; t<items.length; t++) if(items[t].search(re)!=-1) found.push(items[t]);\n // matched one item... enter... not *exact* match... autocomplete input field\n if (found.length==1 && quiet && key==13 && here.value!=found[0]) { list.style.display="none"; here.value=found[0]; return false; }\n // no match/exact match... enter... create/show it\n if (found.length<2 && key==13) return this.openItem(found.length?found[0]:here.value,here,list);\n // quiet/no match... hide list...\n list.style.display=(!quiet && found.length)?"block":"none";\n // no matches... key bubbles up\n if (!found.length) return true;\n // down/enter... show/move to list...\n if (key==40 || key==13) { list.style.display="block"; list.focus(); }\n // list is showing... fill list...\n if (list.style.display!="none") {\n while (list.length > 0) list.options[0]=null; // clear list...\n found.sort();\n list.options[0]=new Option(found.length==1?this.listMatchMsg:this.listHeading.format([found.length]),"",false,false);\n for (var t=0; t<found.length; t++) // fill list...\n list.options[t+1]=new Option(found[t]+this.getItemSuffix(found[t]),found[t],false,false);\n list.size=(found.length<this.listMaxSize?found.length:this.listMaxSize)+1; // resize list...\n list.selectedIndex=(key==40 || key==13)?1:0;\n }\n return true; // key bubbles up\n },\n listMaxSize: 10,\n listHeading: 'Found %0 matching titles:',\n listMatchMsg: 'Press enter to open tiddler...',\n\n selectKeyHandler:\n function(event,list,editfield) {\n if (event.keyCode==27) // escape... hide list, move to edit field\n { editfield.focus(); list.style.display="none"; return false; }\n if (event.keyCode==13 && list.value.length) // enter... view selected item\n { this.openItem(list.value,editfield,list); return false; }\n return true;\n }\n}\n//}}}
body { background: #eee; }\n\n#titleLine {\n color: #fff;\n background: #300;\n background-color: #000;\n border-bottom: 5px solid #090;\n}\n\n#titleLine a {\n color: #090;\n}\n\n#mainMenu {\n color: #000;\n}\n\n#mainMenu .tiddlyLink {\n color: #006;\n}\n\n#mainMenu .tiddlyLink:hover {\n background: #999;\n color: #fff;\n}\n\n#mainMenu .externalLink {\n color: #006;\n}\n\n#mainMenu .externalLink:hover {\n background: #006;\n color: #fff;\n}\n\n#mainMenu .button, #mainMenu A {\n color: #006;\n}\n\n#mainMenu .button:hover #mainMenu A:hover {\n color: #fff;\n background: #006;\n}\n\n#messageArea {\n background: #ccc;\n color: #000;\n border: 1px solid black;\n -moz-border-radius: 1em;\n}\n\n#messageArea a:link, #messageArea a:visited {\n color: #006;\n}\n\n#messageArea a:hover {\n color: #006;\n}\n\n#messageArea a:active {\n color: #00f;\n}\n\n.popup {\n color: #009;\n background: #eee;\n border: 1px solid #000;\n -moz-border-radius-topright: 5px;\n -moz-border-radius-bottomleft: 5px;\n -moz-border-radius-bottomright: 5px;\n}\n\n.popup hr {\n color: #000;\n background: #ddd;\n border: 0;\n}\n\n.popup li.disabled {\n color: #999;\n}\n\n.popup li a, .popup li a:visited {\n color: #300;\n}\n\n.popup li a:hover {\n background: #006;\n color: #fff;\n}\n\n.tabSelected {\n background: #eee;\n}\n\n.tabUnselected {\n background: #ccc;\n}\n\n.tabContents {\n background: transparent;\n}\n\n.tiddler .button {\n color: #006;\n}\n\n.tiddler .button:hover {\n color: #fff;\n background: #006;\n}\n\n.tiddler .button:active {\n color: #fff;\n background: #006;\n}\n\n.toolbar {\n color: #aaa;\n}\n\n.footer {\n color: #ddd;\n}\n\n.selectedTiddler .footer {\n color: #888;\n}\n\n.viewer {\n color: #000;\n}\n\n.viewer a:link, .body a:visited {\n color: #006;\n}\n\n.viewer a:hover {\n color: #fff;\n background: #006;\n}\n\n.viewer .button {\n background: transparent;\n color: #006;\n border: 0;\n}\n\n.viewer .button:hover {\n background: #006;\n color: #fff;\n}\n\n.viewer blockquote {\n border-left: 1px solid #666;\n}\n\n.viewer h1,.viewer h2,.viewer h3,.viewer h4,.viewer h5 {\n background: #999; color:#eee;\n}\n\n.viewer table {\n border: 1px solid #ccc;\n}\n\n.viewer th {\n background: #ccc;\n border: 1px solid #ccc;\n color: #fff;\n}\n\n.viewer td, .viewer tr {\n border: 1px solid #ccc;\n}\n\n.viewer pre {\n color: #000; border: 0px; background: #f8f8f8;\n font-size:8pt; line-height:110%;\n}\n\n.viewer code {\n color: #630;\n}\n\n.viewer hr {\n margin: 1px; padding:1px;\n border-top: solid 1px #666;\n border-left: none;\n border-right: none;\n border-bottom: none;\n color: #666;\n}\n\n.highlight, .marked {\n color: #000;\n background: #ffe72f; /*???*/\n}\n\n.editor {\n color: #402C74; /*???*/\n}\n\n.editor input {\n border: 1px solid #000;\n}\n\n.editor textarea {\n border: 1px solid #000;\n width: 100%;\n}\n\n.editorFooter {\n color: #aaa;\n}\n\n.editorFooter A {\n color: #006;\n}\n\n.editorFooter A:hover {\n color: #fff;\n background: #006;\n}\n\n.editorFooter A:active {\n color: #fff;\n background: #006;\n}\n\n#sidebar {\n color: #000;\n}\n\n#sidebarOptions {\n background: transparent;\n}\n\n#sidebarOptions .button, #sidebarOptions A {\n color: #006;\n}\n\n#sidebarOptions .button:hover, #sidebarOptions A:hover {\n color: #fff;\n background: #006;\n}\n\n#sidebarOptions .button:active, #sidebarOptions A:active {\n color: #fff;\n background: #006;\n}\n\n#sidebarOptions .sliderPanel {\n background: #ddd;\n}\n\n#sidebarOptions .sliderPanel A {\n color: #006;\n}\n\n#sidebarOptions .sliderPanel A:hover {\n color: #fff;\n background: #006;\n}\n\n#sidebarOptions .sliderPanel A:active {\n color: #fff;\n background: #006;\n}\n\n.sidebarSubHeading {\n color: #300;\n}\n\n#sidebarTabs {\n background: transparent;\n}\n\n#sidebarTabs .tabSelected {\n color: #006;\n background: #fff;\n}\n\n#sidebarTabs .tabUnselected {\n color: #006;\n background: transparent;\n}\n\n#sidebarTabs .tabContents {\n background: transparent;\n}\n\n\n#sidebarTabs .txtMoreTab .tabSelected {\n background: #fff;\n}\n\n#sidebarTabs .txtMoreTab .tabUnselected {\n background: transparent;\n}\n\n#sidebarTabs .txtMoreTab .tabContents {\n background: transparent;\n}\n\n#sidebarTabs .tabContents .tiddlyLink {\n color: #006;\n}\n\n#sidebarTabs .tabContents .tiddlyLink:hover {\n background: #006;\n color: #fff;\n}\n\n#sidebarTabs .tabContents .button {\n color: #006;\n}\n\n#sidebarTabs .tabContents .button:hover {\n color: #fff;\n background: #006;\n}\n\n.sparkline {\n background: #eea;\n border: 0;\n}\n\n.sparktick {\n background: #930;\n}\n\n.errorNoSuchMacro {\n color: #ff0;\n background: #f00;\n}\n\n.zoomer {\n color: #963;\n border: 1px solid #963;\n}\n\n/* ----------------------------- */\n\n.sliderPanel .tabSelected {\n background-color: #fff;\n border: 1px solid black;\n}\n.sliderPanel .tabUnselected {\n background-color: #ddd;\n border: 1px solid black;\n}\n.sliderPanel .tabContents {\n background-color: transparent;\n}\n.viewer .tabSelected {\n background-color: #eee; border-color:#000;\n}\n.viewer .tabUnselected {\n background-color: #ddd; border-color:#666;\n}\n.viewer .tabContents {\n background-color: #eee; border-color:#000;\n}\n.body {\n background:#ffffff;\n border: 1px solid black;\n}\n#messageArea,\n#siteMenu .sliderPanel .tabContents {\n background-color: transparent;\n}\n#sidebarOptions .sliderPanel { background-color: #eee; }
Welcome\n----\nHola\n----\nHala\n----\nShalom\n----\nNi hao\n----\nKumusta\n----\n'Allo\n----\nG'day\n----\nHoi\n----\nBon giorno\n----\nHi\n----\nHej\n----\nOlá\n----\nSalut\n----\nHello\n----\nHoi\n----\nOi\n----\nHoi\n----\nAloha\n----\nBonjour\n----\nGuten Tag\n----\nShalom\n----\nNamaste\n----\nCiao
<script>\n var s=place.parentNode.style;\n s.padding=".5em";\n s.MozBorderRadius="1em";\n s.background="#fff";\n s.border="1px solid #000";\n s.color="#000 !important";\n</script>
El cielo lloraba sus sangres aguachentas,\n cuerdas delirantres agitaban el aire,\n el sol era un ojo de apagada tristeza\n y oscuros secretos murmuraban las aves.\n\n Un gélido soplo erizaba las pieles\n de sórdidos perros, demonios de la tarde,\n trayendo el aroma macabro de las hieles\n y vapores de muerte, odio y desastre.\n\n El Horror se cierne como una lluvia espesa\n quebrantando almas, ahogando voluntades.\n Los seres de los mundos inferiores reinan,\n soltaron su jauría de calamidades.\n\n La Niña de rostro verdoso y carcomido,\n de cuencas vacías y manos descarnadas,\n con lúgubre tono dice "vení conmigo",\n desapareciendo en las brumas de la nada.\n\n Y una escalinata de gradas enmohecidas,\n como una gran boca de aliento putrefacto,\n a mis pies se abre, infecta, envilecida,\n llevándome al centro de un recinto nefasto.\n\n El Horror despierta y, en demente aquelarre,\n vísceras y ojos se untan en los cuerpos,\n cuerpos indecibles, de formas irreales,\n seres aberrantes de espíritus abyectos.\n\n En su danza ritual de obscenos movimientos,\n rondando la hoguera de vivas llamas verdes,\n aúllan y gritan, balancean sus miembros,\n y el Nombre Prohibido surje, se eleva y crece.\n\n En la superficie, la bóveda celeste\n lastimeramente se resquebraja y cruje,\n el aire tiene el Rojo de todas las muertes\n y el suelo se cubre de nervaduras azules.\n\n El Horror se instaló y el Dios Aborrecible\n despereza su hambre, por siglos acallada,\n y un sideral bramido de morboso timbre\n sacude el universo: la Maldad estalla.\n\n Enjambres malignos oscurecen el cielo,\n nubes del averno que, libres ya, se esparcen.\n Alimañas viscosas atacan los cuellos\n de las gentes que, secas al instante, caen.\n\n Y los mares hierven en sulfurosas lavas,\n las ciudades tiemblan en colosal derrumbe\n y en volutas de polvo y gritos se desarman\n arrastradas a un río de vil podredumbre.\n\n El Horror, entonces, salió de su letargo,\n milenios esperando, ya llegó el momento\n en que el mundo se rinde, por fin, al abrazo\n de Aquél cuyo nombre pensar está vedado.\n\n El Horror se yergue, alto en el horizonte,\n su gran silueta es la imagen del espanto\n y un coro de tétricas voces monocordes\n canta en un idioma extraño "¡El ha llegado!".
/***\n''HTML Formatting Plugin for TiddlyWiki version 1.2.x and 2.0''\n^^author: Eric Shulman - ELS Design Studios\nsource: http://www.TiddlyTools.com/#HTMLFormattingPlugin\nlicense: [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]^^\n\nThe shorthand Wiki-style formatting syntax of ~TiddlyWiki is very convenient and enables most content to be reasonably well presented. However, there are times when tried-and-true HTML formatting syntax allows more more precise control of the content display.\n\nWhen HTML formatting syntax is embedded within a tiddler (in between {{{<}}}{{{html>}}} and {{{<}}}{{{/html>}}} markers) TiddlyWiki passes this content to the browser for processing as 'native' HTML. However, TiddlyWiki does not also process the HTML source content for any embedded wiki-formatting syntax it may contain. This means that while you can use HTML formatted content, you cannot mix wiki-formatted content within the HTML formatting.\n!!!!!Usage\n<<<\nThe ~HTMLFormatting plugin allows you to freely ''mix wiki-style formatting syntax within HTML formatted content'' by extending the action of the standard TiddlyWiki formatting handler.\n\nWhen a tiddler is about to be displayed, ~TiddlyWiki looks for tiddler content contained within ''<{{{html}}}>'' and ''<{{{/html}}}>'' HTML tags. This content (if any) is passed directly to the browser's internal "rendering engine" to process as ~HTML-formatted content. Once the HTML formatting has been processed, all the pieces of text occuring in between the HTML formatting are then processed by the ~TiddlyWiki rendering engine, one piece at a time, so that normal wiki-style formatting can be applied to the individual text pieces.\n<<<\n!!!!!Line breaks\n<<<\nOne major difference between Wiki formatting and HTML formatting is how "line breaks" are processed. Wiki formatting treats all line breaks as literal content to be displayed //as-is//. However, because HTML normally ignores line breaks and actually processes them as simple "word separators" instead, many people who write HTML include extra line breaks in their documents, just to make the "source code" easier to read.\n\nEven though you can use HTML tags within your tiddler content, the default treatment for line breaks still follows the Wiki-style rule (i.e., all new lines are displayed as-is). When adding HTML content to a tiddler (especially if you cut-and-paste it from another web page), you should take care to avoid adding extra line breaks to the text.\n\nIf removing all the extra line breaks from your HTML content would be a big hassle, you can quickly //override the default Wiki-style line break rule// so that the line breaks use the standard HTML rules instead. Placing a ''<{{{hide linebreaks}}}>'' tag within the tiddler's HTML content changes all line breaks to spaces before rendering the content, so that the literal line breaks will be processed as simple word-breaks instead.\n\nNote: this does //not// alter the actual tiddler content that is stored in the document, just the manner in which it is displayed. Any line breaks contained in the tiddler will still be there when you edit its content. Also, to include a literal line break when the ''<{{{hide linebreaks}}}>'' tag is present, you will need to use a ''<{{{br}}}>'' or ''<{{{p}}}>'' HTML tag instead of simply typing a line break.\n<<<\n!!!!!How it works\n<<<\nThe TW core support for HTML does not let you put ANY wiki-style syntax (including TW macros) *inside* the <html>...</html> block. Everything\nbetween <html> and </html> is handed to the browser for processing and that is it. Fortunately, this plugin ADDS the ability to let you put wiki-syntax (including macros) inside the html. It does this by first giving the tiddler source content to the browser to process the HTML, and then handling any wiki-based syntax that remains afterward.\n\nHowever, not all wiki syntax can be safely passed through the browser's parser. Specifically, any TW macros inside the HTML will get 'eaten' by the browser since the macro brackets, """<<...>>""" use the "<" and ">" that normally delimit the HTML/XML syntax recognized by the browser's parser.\n\nSimilarly, you can't use InlineJavascript within the HTML because the """<script>...</script>""" syntax will also be consumed by the browser and there will be nothing left to process afterward. Note: unfortunately, even though the browser removes the """<script>...</script>""" sequence, it doesn't actually execute the embedded javascript code that it removes, so any scripts contained inside of <html> blocks in TW are currently being ignored. :-(\n\nAs a work-around to allow TW *macros* (but not inline scripts) to exist inside of <html> formatted blocks of content, the plugin first converts the """<<""" and """>>""" into "%%(" and ")%%", making them "indigestible" so they can pass unchanged through the belly of the beast (the browser's HTML parser).\n\nAfter the browser has done its job, the wiki syntax sequences (including the "undigested" macros) are contained in #text nodes in the browser-generated DOM elements. The plugin then recursively locates and processes each #text node, converts the %%( and )%% back into """<< and >>""", passes the result to wikify() for further rendering of the wiki-formatted syntax into a containing SPAN that replaces the previous #text node. At the end of this process, none of the encoded %%( and )%% sequences remain in the rendered tiddler output.\n<<<\n!!!!!Installation\n<<<\nimport (or copy/paste) the following tiddlers into your document:\n''HTMLFormattingPlugin'' (tagged with <<tag systemConfig>>)\n^^documentation and javascript for HTMLFormatting handling^^\n<<<\n!!!!!Revision History\n<<<\n''2006.05.28 [2.1.3]''\nin wikifyTextNodes(), decode the *value* of TEXTAREA nodes, but don't wikify() its children. (thanks to "ayj" for bug report)\n''2006.02.19 [2.1.2]''\nin wikifyTextNodes(), put SPAN element into tiddler DOM (replacing text node), BEFORE wikifying the text content. This ensures that the 'place' passed to any macros is correctly defined when the macro is evaluated, so that calls to story.findContainingTiddler(place) will work as expected. (Thanks for bug report from GeoffSlocock)\n''2006.02.05 [2.1.1]''\nwrapped wikifier hijack in init function to eliminate globals and avoid FireFox 1.5.0.1 crash bug when referencing globals\n''2005.12.01 [2.1.0]''\ndon't wikify #TEXT nodes inside SELECT and TEXTAREA elements\n''2005.11.06 [2.0.1]''\ncode cleanup\n''2005.10.31 [2.0.0]''\nreplaced hijack wikify() with hijack config.formatters["html"] and simplified recursive WikifyTextNodes() code\n''2005.10.09 [1.0.2]''\ncombined documentation and code into a single tiddler\n''2005.08.05 [1.0.1]''\nmoved HTML and CSS definitions into plugin code instead of using separate tiddlers\n''2005.07.26 [1.0.1]''\nRe-released as a plugin.\nAdded <{{{html}}}>...</{{{nohtml}}}> and <{{{hide newlines}}}> handling\n''2005.07.20 [1.0.0]''\nInitial Release (as code adaptation)\n<<<\n!!!!!Credits\n<<<\nThis feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]]\n<<<\n!!!!!Code\n***/\n//{{{\nversion.extensions.HTMLFormatting = {major: 2, minor: 1, revision: 3, date: new Date(2006,5,28)};\n\n// find the formatter for HTML and replace the handler\ninitHTMLFormatter();\nfunction initHTMLFormatter()\n{\n for (var i=0; i<config.formatters.length && config.formatters[i].name!="html"; i++);\n if (i<config.formatters.length) config.formatters[i].handler=function(w) {\n var lookaheadRegExp = new RegExp(this.lookahead,"mg");\n lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = lookaheadRegExp.exec(w.source)\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {\n var html=lookaheadMatch[1];\n // optionally suppress wiki-style literal handling of newlines\n // strip any carriage returns added by Internet Explorer's textarea edit field\n // encode newlines as \sn so Internet Explorer's HTML parser won't eat them\n // encode macro brackets (<< and >>) so HTML parser won't eat them\n if (html.indexOf('<hide linebreaks>')!=-1) html=html.replace(regexpNewLine,' ');\n html=html.replace(regexpCarriageReturn,'');\n html=html.replace(regexpNewLine,'\s\sn');\n html=html.replace(/<</g,'%%(').replace(/>>/g,')%%');\n // create span to hold HTML\n // parse HTML and normalize the results\n // walk node tree and call wikify() on each text node\n var e = createTiddlyElement(w.output,"span");\n e.innerHTML=html;\n e.normalize(); \n wikifyTextNodes(e);\n // advance to next parse position\n w.nextMatch=lookaheadMatch.index + lookaheadMatch[0].length;\n }\n }\n}\n\n// wikify text nodes remaining after HTML content is processed (pre-order recursion)\nfunction wikifyTextNodes(theNode)\n{\n // textarea node doesn't get wikified, just decoded... \n if (theNode.nodeName.toLowerCase()=='textarea')\n theNode.value=theNode.value.replace(/\s%%\s(/g,'<<').replace(/\s)\s%%/g,'>>').replace(regexpBackSlashEn,'\sn');\n else for (var i=0;i<theNode.childNodes.length;i++) {\n var theChild=theNode.childNodes.item(i);\n if (theChild.nodeName.toLowerCase()=='option') continue;\n if (theChild.nodeName.toLowerCase()=='select') continue;\n wikifyTextNodes(theChild);\n if (theChild.nodeName=='#text') {\n var txt=theChild.nodeValue;\n // decode macro brackets and newlines\n txt=txt.replace(/\s%%\s(/g,'<<').replace(/\s)\s%%/g,'>>').replace(regexpBackSlashEn,'\sn');\n // replace text node with wikified() span\n var newNode=createTiddlyElement(null,"span");\n theNode.replaceChild(newNode,theChild);\n wikify(txt,newNode);\n }\n }\n}\n//}}}\n
No me calmarán tus ojos ni tu llanto\n (no me calma el mío)\n no me calman las lluvias ni los huracanes\n no la soledad\n no el amigo\n la música y su fino estilete\n no me calma\n aludes de gritos abatiendo murallas de silencios\n no me calman\n la letra, pretenciosa odalisca de los símbolos,\n no me calma\n la frenética carrera a contramano\n abrasarme al sol evaporando pestes\n no me calma.\n Colecciones de recuerdos como monstruosos insectos\n los saltos en las demenciales arcadas de la noche\n las batallas de los hipogrifos en la melena de Andrómeda\n los ondulantes planeos de las mantarrayas\n los fantásticos ojos abisales\n los ridículos demonios\n la verde vorágine del trópico\n no me calman\n ni beberme todo junto\n ni el inevitable vómito\n ni la pregunta eterna\n ni su mísera respuesta.\n\nHarapos\n Hervores y harapos\n manos florecidas\n (dolientes mis manos)\n sangre repartida\n entre espeso monte\n y profundas aguas\n no hay sur y no hay norte\n que me dé la calma.\n\n Harapos y hervores\n y amor excesivo\n y exceso de flores\n y falta de olvido.
<script>\n var s=place.parentNode.style;\n s.backgroundImage="none";\n s.backgroundColor="transparent"\n s.borderColor="transparent";\n s.borderWidth=0;\n s.margin=0;\n s.padding=0;\n</script>
<script>\n var t=story.findContainingTiddler(place);\n if (t && t.id!="tiddlerHideTiddlerTags")\n for (var i=0; i<t.childNodes.length; i++)\n if (hasClass(t.childNodes[i],"tagging")||hasClass(t.childNodes[i],"tagged"))\n t.childNodes[i].style.display="none";\n</script>
<script>\n // get the tiddler element\n var t=story.findContainingTiddler(place);\n if (t && t.id!="tiddlerHideTiddlerTitle") \n for (var i=0; i<t.childNodes.length; i++)\n if (hasClass(t.childNodes[i],"title")||hasClass(t.childNodes[i],"subtitle"))\n t.childNodes[i].style.display="none";\n</script>
<script>\n var t=story.findContainingTiddler(place);\n if (t && t.id!="tiddlerHideTiddlerToolbar")\n for (var i=0; i<t.childNodes.length; i++)\n if (hasClass(t.childNodes[i],"toolbar"))\n t.childNodes[i].style.display="none";\n</script>
Caliente enredadera\n sanguijuela vital\n el amor nos aprisiona sin dar tregua\n y en abrazo mortal enlaza nuestros cuerpos\n confunde nuestros jugos alientos y colores\n dirije con sus manos nuestras manos\n que en busca de las llaves de la vida\n remueven y excavan en la tierra\n del cuerpo enemigo y compañero\n reduce el unverso a dos planetas\n y puede el cielo derretirse\n la tierra estallar y devorarnos\n el sol apagarse en un sollozo\n o la selva secarse de repente\n que de este eterno abrazo creador\n en chorros vilentos de luz embriagadora\n surgirá la materia de la vida\n inundando los oscuros rincones anhelantes\n que detienen el mundo\n lo mueven\n le dan forma\n entonces sí llega la paz\n ya bien ganada\n y nos dejamos llevar en dulce muerte.
Quisiera detener este momento\n de ambarina transparencia\n y así\n con la luz de la tarde\n reflejada en tus moléculas\n guardar el holograma de tu risa\n y en las noches\n como un niño que cubierto por las sábanas\n abre su caja de secretos\n dejarla brillar\n en mágica constelación de sensaciones.
La natural y bella hormiga\n se asomó por su seguro agujero\n recorrió su certero camino\n se detuvo ante la verde hoja\n la tomó con sus brillantes pinzas\n y volvió por el seguro camino\n se metió en su verde agujero\n dejó la brillante hoja en la alacena\n cerrando el ciclo de su natural tarea.\n Después llegó el certero DDT.\n
Huyeron de mí\n las blancas mansedumbres de la tarde\n y en un viscoso mar\n proyectó la noche su oscura lengua\n de estrellada incertidumbre\n\n ¡cómo quisiera, aquí, contigo,\n oler el perfume de las almas,\n que vos,\n con tu mirada de anochecido nácar,\n saciaras la avidez de mis preguntas\n y que tus dedos sabios de melancolía\n rastrillaran mis cabellos indefensos!\n\n ¡oh, copa frutal en la que abrevan\n las alegres bandadas de mis ansias!\n\n ¡trigal nocturno\n que olea en concéntricos amores!\n\n ¡espuma de carbón\n que en triunfante algarabía\n salpica mis pupilas\n absortas en la clara marisma cenital de tu mirada!\n\n juremos esta noche no jurar por nada\n\n amemos con entusiasmo de niños en las plazas\n estos negros artificios de fuegos misteriosos,\n estos cálidos suspiros que suben de las casas,\n humo testimonial de la lucha que descansa.\n\n ¡oh, amada\n es preciso que ahora nos busquemos\n y en un encuentro de rosas y guitarras\n nos amemos en el fosforescente lecho\n de la noche calma\n cuando las noctilucas suben de los mares\n en rosados remolinos de luminosos fantasmas!\n\n ¡oh, amada\n amémonos con la furia del naranjo,\n con la vastedad del vuelo sin destino!\n\n ¿no sentís acaso el clamor de los setos\n que con pequeñas voces verdes\n te llama\n ¡amaaadaaa...!\n\n o el frenético pregón de las calles mojadas\n que con ecos de cavernas dice al vacío\n ¡amaaadaaa...aadaa....adaa!?\n\n esta noche mi mirada te persigue\n como un gato implacable,\n te circunda mi anhelo sin eclipses\n como un pequeño planeta\n lluvioso y selvático.\n\n en esta noche arácnida,\n en su rincón más oscuro,\n las fauces de mi amor esperan devorarte\n ¡oh, amada!
Entre los escombros\n detrás de los carteles caídos\n entre tanto humo de miserias\n algo se mueve\n desapercibido\n tapado por los ruidos del derrumbe\n\n nadie lo ve\n (nadie queda,\n nadie)\n\n las aves\n hace edades infintas que murieron\n de cansasncio\n buscando un hueco en que anidar\n\n los perros\n hambreados por la ausecia de carronia\n secan sus cueros en las carpas de su muerte\n\n sin embargo algo se mueve\n con el viento recorre el páramo olvidado\n\n latas vacías ruedan sobre un asfalto\n invadido por la grama\n amarilla ya de inanición\n podrían haber sido volteadas por las ratas\n pero ya no quedan de ellas\n más que unos cráneos con polvo en su interior\n\n ¡cuánta desolación!\n pero ¿a quién contarlo?\n si sólo habitan estas calles\n fragmentados esqueletos\n\n y sin embargo...\n como un suave ulular\n algo transita\n transparente y callado\n suave\n persistente\n y a su paso\n renace tímidamente\n el pasto...
A veces yo parto, y al voltear\n te veo pequeña, a un lado del camino,\n con una mano en alto\n que encuentra en la distancia\n el eco de mi mano.\n Poco a poco mis pasos te diluyen,\n quedo solo con mi viaje\n y vos con tu presente.\n\n A veces vos partís, y tu silueta\n enmarcada en el verde amistoso de las alamedas\n evoca viejos cuentos que a los niños\n contaban las abuelas\n de viajeros con morrales y ropas polvorientas.\n Y te vas adentrando en el paisaje\n hasta que el recodo inevitable\n en un chasquido te arrebata.\n\n Y sucede entonces, en tus viajes o los míos,\n que abrimos una puerta\n e ingresamos a un mundo tan ajeno\n que no podemos dejar de recorrerlo,\n y cada instancia,\n cada luz, cada sonido,\n cada voz que en la noche\n rueda a nuestros oídos,\n por contraste o semejanza,\n algo de vos o algo de mí\n trae consigo.\n Y, como inesperadas postales\n que el eficiente correo del recuerdo\n pone en nuestras manos,\n recibimos:\n\n - el aro de cabello que tan hermosa sombra\n dibujaba en tu frente\n - la pequeña chispa que a mis dientes\n el sol arrancó cierto día de diciembre\n - el aliento caliente que en mi cuello\n desarma mi voluntad constantemente\n - la graciosa forma que tus pies moldean\n dentro de tus zapatos.\n\n Y así seguimos, cada uno con lo suyo,\n despreocupadamente, aderezando los días\n con impromptus de recuerdos,\n hasta que llega el momento del regreso\n y esa dulce sensación de haber hallado\n la almohada que amolda justamente,\n el canto que deseábamos oír,\n la mano que anhelábamos tomar,\n eso es, digo,\n la parte más sabrosa de haberse ido:\n haber vuelto,\n sentir en las ropas, en la piel del que quedó,\n el olor de las cosas que nos unen,\n y en las ropas y en la piel del que llegó,\n el aroma extranjero,\n las tierras extrañas que sueltan los calzados\n sacudidos en ese umbral añorado sin pena,\n y, por fin, esa mano y esa boca\n y ese cuerpo,\n esas partes que faltaron tanto tiempo,\n que se dicen,\n como ningún narrador, ningún poeta\n podría describir con tanta fuerza,\n cuánto, aunque no lo digamos,\n aunque estemos convencidos en contrario,\n cuánto\n cuánto\n nos hemos extrañado.
<<importTiddlers inline>>
/***\n''Import Tiddlers Plugin for TiddlyWiki version 1.2.x, 2.0 and 2.1beta''\n^^author: Eric Shulman - ELS Design Studios\nsource: http://www.TiddlyTools.com/#ImportTiddlersPlugin\nlicense: [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]^^\n\nWhen many people share and edit copies of the same TiddlyWiki document, the ability to quickly collect all these changes back into a single, updated document that can then be redistributed to the entire group is very important. This plugin lets you selectively combine tiddlers from any two TiddlyWiki documents. It can also be very useful when moving your own tiddlers from document to document (e.g., when upgrading to the latest version of TiddlyWiki, or 'pre-loading' your favorite stylesheets into a new 'empty' TiddlyWiki document.)\n\n!!!!!Interactive interface\n<<<\n{{{<<importTiddlers>>}}}\ncreates "import tiddlers" link. click to show/hide import control panel\n\n{{{<<importTiddlers inline>>}}}\ncreates import control panel directly in tiddler content\n\n<<importTiddlers inline>>\n\nPress ''[browse]'' to select a TiddlyWiki document file to import. You can also type in the path/filename or a remote document URL (starting with http://)and press ''[open]''. //Note: There may be some delay to permit the browser time to access and load the document before updating the listbox with the titles of all tiddlers that are available to be imported.//\n\nSelect one or more titles from the listbox (hold CTRL or SHIFT while clicking to add/remove the highlight from individual list items). You can press ''[select all]'' to quickly highlight all tiddler titles in the list. Use the ''[-]'', ''[+]'', or ''[=]'' links to adjust the listbox size so you can view more (or less) tiddler titles at one time. When you have chosen the tiddlers you want to import and entered any extra tags, press ''[import]'' to begin copying them to the current TiddlyWiki document.\n\n''select: all, new, changes, or differences''\n\nYou can click on ''all'', ''new'', ''changes'', or ''differences'' to automatically select a subset of tiddlers from the list. This makes it very quick and easy to find and import just the updated tiddlers you are interested in:\n>''"all"'' selects ALL tiddlers from the import source document, even if they have not been changed.\n>''"new"'' selects only tiddlers that are found in the import source document, but do not yet exist in the destination document\n>''"changes"'' selects only tiddlers that exist in both documents but that are newer in the source document\n>''"differences"'' selects all new and existing tiddlers that are different from the destination document (even if destination tiddler is newer)\n\n''Import Tagging:''\n\nTiddlers that have been imported can be automatically tagged, so they will be easier to find later on, after they have been added to your document. New tags are entered into the "add tags" input field, and then //added// to the existing tags for each tiddler as it is imported.\n\n''Skip, Rename, Merge, or Replace:''\n\nWhen importing a tiddler whose title is identical to one that already exists, the import process pauses and the tiddler title is displayed in an input field, along with four push buttons: ''[skip]'', ''[rename]'', ''[merge]'' and ''[replace]''.\n\nTo bypass importing this tiddler, press ''[skip]''. To import the tiddler with a different name (so that both the tiddlers will exist when the import is done), enter a new title in the input field and then press ''[rename]''. Press ''[merge]'' to combine the content from both tiddlers into a single tiddler. Press ''[replace]'' to overwrite the existing tiddler with the imported one, discarding the previous tiddler content.\n\n//Note: if both the title ''and'' modification date/////time match, the imported tiddler is assumed to be identical to the existing one, and will be automatically skipped (i.e., not imported) without asking.//\n\n''Import Report History''\n\nWhen tiddlers are imported, a report is generated into ImportedTiddlers, indicating when the latest import was performed, the number of tiddlers successfully imported, from what location, and by whom. It also includes a list with the title, date and author of each tiddler that was imported.\n\nWhen the import process is completed, the ImportedTiddlers report is automatically displayed for your review. If more tiddlers are subsequently imported, a new report is //added// to ImportedTiddlers, above the previous report (i.e., at the top of the tiddler), so that a reverse-chronological history of imports is maintained.\n\nIf a cumulative record is not desired, the ImportedTiddlers report may be deleted at any time. A new ImportedTiddlers report will be created the next time tiddlers are imported.\n\nNote: You can prevent the ImportedTiddlers report from being generated for any given import activity by clearing the "create a report" checkbox before beginning the import processing.\n\n<<<\n!!!!!non-interactive 'load tiddlers' macro\n<<<\nUseful for automated installation/update of plugins and other tiddler content.\n\n{{{<<loadTiddlers "label:load tiddlers from %0" http://www.tiddlytools.com/example.html confirm>>}}}\n<<loadTiddlers "label:load tiddlers from %0" http://www.tiddlytools.com/example.html confirm>>\n\nSyntax:\n{{{<<loadTiddlers label:text prompt:text filter source quiet confirm>>}}}\n\n''label:text'' and ''prompt:text''\n>defines link text and tooltip (prompt) that can be clicked to trigger the load tiddler processing. If a label is NOT provided, then no link is created and loadTiddlers() is executed whenever the containing tiddler is rendered.\n''filter'' (optional) determines which tiddlers will be automatically selected for importing. Use one of the following keywords:\n>''"all"'' retrieves ALL tiddlers from the import source document, even if they have not been changed.\n>''"new"'' retrieves only tiddlers that are found in the import source document, but do not yet exist in the destination document\n>''"changes"'' retrieves only tiddlers that exist in both documents for which the import source tiddler is newer than the existing tiddler\n>''"updates"'' retrieves both ''new'' and ''changed'' tiddlers (this is the default action when none is specified)\n>''"tiddler:~TiddlerName"'' retrieves only the specific tiddler named in the parameter.\n>''"tag:text"'' retrieves only the tiddlers tagged with the indicated text.\n''source'' (required) is the location of the imported document. It can be either a local document path/filename in whatever format your system requires, or a remote web location (starting with "http://" or "https://")\n>use the keyword ''ask'' to prompt for a source location whenever the macro is invoked\n''"quiet"'' (optional)\n>supresses all status message during the import processing (e.g., "opening local file...", "found NN tiddlers..." etc). Note that if ANY tiddlers are actualy imported, a final information message will still be displayed (along with the ImportedTiddlers report), even when 'quiet' is specified. This ensures that changes to your document cannot occur without any visible indication at all.\n''"confirm"'' (optional)\n>adds interactive confirmation. A browser message box (OK/Cancel) is displayed for each tiddler that will be imported, so that you can manually bypass any tiddlers that you do not want to import.\n<<<\n!!!!!Installation\n<<<\ncopy/paste the following tiddlers into your document:\n''ImportTiddlersPlugin'' (tagged with <<tag systemConfig>>)\n\ncreate/edit ''SideBarOptions'': (sidebar menu items) \n^^Add "< < ImportTiddlers > >" macro^^\n\n''Quick Installation Tip #1:''\nIf you are using an unmodified version of TiddlyWiki (core release version <<version>>), you can get a new, empty TiddlyWiki with the Import Tiddlers plugin pre-installed (''[[download from here|TW+ImportExport.html]]''), and then simply import all your content from your old document into this new, empty document.\n<<<\n!!!!!Revision History\n<<<\n''2006.04.18 [3.0.4]''\nin loadTiddlers.handler, fixed parsing of "prompt:" param. Also, corrected parameters mismatch in loadTiddlers() callback function definition (order of params was wrong, resulting in filters NOT being applied)\n''2006.04.12 [3.0.3]''\nmoved many display messages to macro properties for easier L10N translations via 'lingo' definitions.\n''2006.04.12 [3.0.2]''\nadditional refactoring of 'core candidate' code. Proposed API now defines "loadRemoteFile()" for XMLHttpRequest processing with built in fallback for handling local filesystem access, and readTiddlersFromHTML() to process the resulting source HTML content.\n''2006.04.04 [3.0.1]''\nin refreshImportList(), when using [by tags], tiddlers without tags are now included in a new "untagged" psuedo-tag list section\n''2006.04.04 [3.0.0]''\nSeparate non-interactive {{{<<importTiddlers...>>}}} macro functionality for incorporation into TW2.1 core and renamed as {{{<<loadTiddlers>>}}} macro. New parameters for loadTiddlers: ''label:text'' and ''prompt:text'' for link creation, ''ask'' for filename/URL, ''tag:text'' for filtering, "confirm" for accept/reject of individual inbound tiddlers. Also, ImportedTiddlers report generator output has been simplified and "importReplace/importPublic" tags and associated "force" param (which were rarely, if ever, used) has been dropped.\n''2006.03.30 [2.9.1]''\nwhen extracting store area from remote URL, look for "</body>" instead of "</body>\sn</html>" so it will match even if the "\sn" is absent from the source.\n''2006.03.30 [2.9.0]''\nadded optional 'force' macro param. When present, autoImportTiddlers() bypasses the checks for importPublic and importReplace. Based on a request from Tom Otvos.\n''2006.03.28 [2.8.1]''\nin loadImportFile(), added checks to see if 'netscape' and 'x.overrideMimeType()' are defined (IE does *not* define these values, so we bypass this code)\nAlso, when extracting store area from remote URL, explicitly look for "</body>\sn</html>" to exclude any extra content that may have been added to the end of the file by hosting environments such as GeoCities. Thanks to Tom Otvos for finding these bugs and suggesting some fixes.\n''2006.02.21 [2.8.0]''\nadded support for "tiddler:TiddlerName" filtering parameter in auto-import processing\n''2006.02.21 [2.7.1]''\nClean up layout problems with IE. (Use tables for alignment instead of SPANs styled with float:left and float:right)\n''2006.02.21 [2.7.0]''\nAdded "local file" and "web server" radio buttons for selecting dynamic import source controls in ImportPanel. Default file control is replaced with URL text input field when "web server" is selected. Default remote document URL is defined in SiteURL tiddler. Also, added option for prepending SiteProxy URL as prefix to remote URL to mask cross-domain document access (requires compatible server-side script)\n''2006.02.17 [2.6.0]''\nRemoved "differences only" listbox display mode, replaced with selection filter 'presets': all/new/changes/differences. Also fixed initialization handling for "add new tags" so that checkbox state is correctly tracked when panel is first displayed.\n''2006.02.16 [2.5.4]''\nadded checkbox options to control "import remote tags" and "keep existing tags" behavior, in addition to existing "add new tags" functionality.\n''2006.02.14 [2.5.3]''\nFF1501 corrected unintended global 't' (loop index) in importReport() and autoImportTiddlers()\n''2006.02.10 [2.5.2]''\ncorrected unintended global variable in importReport().\n''2006.02.05 [2.5.1]''\nmoved globals from window.* to config.macros.importTiddlers.* to avoid FireFox 1.5.0.1 crash bug when referencing globals\n''2006.01.18 [2.5.0]''\nadded checkbox for "create a report". Default is to create/update the ImportedTiddlers report. Clear the checkbox to skip this step.\n''2006.01.15 [2.4.1]''\nadded "importPublic" tag and inverted default so that auto sharing is NOT done unless tagged with importPublic\n''2006.01.15 [2.4.0]''\nAdded support for tagging individual tiddlers with importSkip, importReplace, and/or importPrivate to control which tiddlers can be overwritten or shared with others when using auto-import macro syntax. Defaults are to SKIP overwriting existing tiddlers with imported tiddlers, and ALLOW your tiddlers to be auto-imported by others.\n''2006.01.15 [2.3.2]''\nAdded "ask" parameter to confirm each tiddler before importing (for use with auto-importing)\n''2006.01.15 [2.3.1]''\nStrip TW core scripts from import source content and load just the storeArea into the hidden IFRAME. Makes loading more efficient by reducing the document size and by preventing the import document from executing its TW initialization (including plugins). Seems to resolve the "Found 0 tiddlers" problem. Also, when importing local documents, use convertUTF8ToUnicode() to convert the file contents so support international characters sets.\n''2006.01.12 [2.3.0]''\nReorganized code to use callback function for loading import files to support event-driven I/O via an ASYNCHRONOUS XMLHttpRequest. Let's processing continue while waiting for remote hosts to respond to URL requests. Added non-interactive 'batch' macro mode, using parameters to specify which tiddlers to import, and from what document source. Improved error messages and diagnostics, plus an optional 'quiet' switch for batch mode to eliminate //most// feedback.\n''2006.01.11 [2.2.0]''\nAdded "[by tags]" to list of tiddlers, based on code submitted by BradleyMeck\n''2006.01.09 [2.1.1]''\nWhen a URL is typed in, and then the "open" button is pressed, it generates both an onChange event for the file input and a click event for open button. This results in multiple XMLHttpRequest()'s which seem to jam things up quite a bit. I removed the onChange handling for file input field. To open a file (local or URL), you must now explicitly press the "open" button in the control panel.\n''2006.01.08 [2.1.0]''\nIMPORT FROM ANYWHERE!!! re-write getImportedTiddlers() logic to either read a local file (using local I/O), OR... read a remote file, using a combination of XML and an iframe to permit cross-domain reading of DOM elements. Adapted from example code and techniques courtesy of Jonny LeRoy.\n''2006.01.06 [2.0.2]''\nWhen refreshing list contents, fixed check for tiddlerExists() when "show differences only" is selected, so that imported tiddlers that don't exist in the current file will be recognized as differences and included in the list.\n''2006.01.04 [2.0.1]''\nWhen "show differences only" is NOT checked, import all tiddlers that have been selected even when they have a matching title and date.\n''2005.12.27 [2.0.0]''\nUpdate for TW2.0\nDefer initial panel creation and only register a notification function when panel first is created\n''2005.12.22 [1.3.1]''\ntweak formatting in importReport() and add 'discard report' link to output\n''2005.12.03 [1.3.0]''\nDynamically create/remove importPanel as needed to ensure only one instance of interface elements exists, even if there are multiple instances of macro embedding. Also, dynamically create/recreate importFrame each time an external TW document is loaded for importation (reduces DOM overhead and ensures a 'fresh' frame for each document)\n''2005.11.29 [1.2.1]''\nfixed formatting of 'detail info' in importReport()\n''2005.11.11 [1.2.0]''\nadded 'inline' param to embed controls in a tiddler\n''2005.11.09 [1.1.0]''\nonly load HTML and CSS the first time the macro handler is called. Allows for redundant placement of the macro without creating multiple instances of controls with the same ID's.\n''2005.10.25 [1.0.5]''\nfixed typo in importReport() that prevented reports from being generated\n''2005.10.09 [1.0.4]''\ncombined documentation with plugin code instead of using separate tiddlers\n''2005.08.05 [1.0.3]''\nmoved CSS and HTML definitions into plugin code instead of using separate tiddlers\n''2005.07.27 [1.0.2]''\ncore update 1.2.29: custom overlayStyleSheet() replaced with new core setStylesheet()\n''2005.07.23 [1.0.1]''\nadded parameter checks and corrected addNotification() usage\n''2005.07.20 [1.0.0]''\nInitial Release\n<<<\n!!!!!Credits\n<<<\nThis feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]]\n<<<\n!!!!!Code\n***/\n// // ''MACRO DEFINITION''\n//{{{\n// Version\nversion.extensions.importTiddlers = {major: 3, minor: 0, revision: 4, date: new Date(2006,4,18)};\n\n// IE needs explicit global scoping for functions/vars called from browser events\nwindow.onClickImportButton=onClickImportButton;\nwindow.refreshImportList=refreshImportList;\n\n// default cookie/option values\nif (!config.options.chkImportReport) config.options.chkImportReport=true;\n\nconfig.macros.importTiddlers = { };\nconfig.macros.importTiddlers = {\n label: "import tiddlers",\n prompt: "Copy tiddlers from another document",\n foundMsg: "Found %0 tiddlers in %1",\n countMsg: "%0 tiddlers selected for import",\n importedMsg: "Imported %0 of %1 tiddlers from %2",\n src: "", // path/filename or URL of document to import (retrieved from SiteUrl tiddler)\n proxy: "", // URL for remote proxy script (retrieved from SiteProxy tiddler)\n useProxy: false, // use specific proxy script in front of remote URL\n inbound: null, // hash-indexed array of tiddlers from other document\n newTags: "", // text of tags added to imported tiddlers\n addTags: true, // add new tags to imported tiddlers\n listsize: 8, // # of lines to show in imported tiddler list\n importTags: true, // include tags from remote source document when importing a tiddler\n keepTags: true, // retain existing tags when replacing a tiddler\n index: 0, // current processing index in import list\n sort: "" // sort order for imported tiddler listbox\n};\n\nconfig.macros.importTiddlers.handler = function(place,macroName,params) {\n if (!config.macros.loadTiddlers.handler)\n { alert("importTiddlers error: this plugin requires LoadTiddlersPlugin or TiddlyWiki 2.1+"); return; }\n if (!params[0]) // LINK TO FLOATING PANEL\n createTiddlyButton(place,this.label,this.prompt,onClickImportMenu);\n else if (params[0]=="inline") {// // INLINE TIDDLER CONTENT\n createImportPanel(place);\n document.getElementById("importPanel").style.position="static";\n document.getElementById("importPanel").style.display="block";\n }\n else config.macros.loadTiddlers.handler(place,macroName,params); // FALLBACK: PASS TO LOADTIDDLERS\n}\n//}}}\n\n// // ''INTERFACE DEFINITION''\n\n// // Handle link click to create/show/hide control panel\n//{{{\nfunction onClickImportMenu(e)\n{\n if (!e) var e = window.event;\n var parent=resolveTarget(e).parentNode;\n var panel = document.getElementById("importPanel");\n if (panel==undefined || panel.parentNode!=parent)\n panel=createImportPanel(parent);\n var isOpen = panel.style.display=="block";\n if(config.options.chkAnimate)\n anim.startAnimating(new Slider(panel,!isOpen,e.shiftKey || e.altKey,"none"));\n else\n panel.style.display = isOpen ? "none" : "block" ;\n e.cancelBubble = true;\n if (e.stopPropagation) e.stopPropagation();\n return(false);\n}\n//}}}\n\n// // Create control panel: HTML, CSS, register for notification\n//{{{\nfunction createImportPanel(place) {\n var panel=document.getElementById("importPanel");\n if (panel) { panel.parentNode.removeChild(panel); }\n setStylesheet(config.macros.importTiddlers.css,"importTiddlers");\n panel=createTiddlyElement(place,"span","importPanel",null,null)\n panel.innerHTML=config.macros.importTiddlers.html;\n store.addNotification(null,refreshImportList); // refresh listbox after every tiddler change\n refreshImportList();\n var siteURL=store.getTiddlerText("SiteUrl"); if (!siteURL) siteURL="";\n document.getElementById("importSourceURL").value=siteURL;\n config.macros.importTiddlers.src=siteURL;\n var siteProxy=store.getTiddlerText("SiteProxy"); if (!siteProxy) siteProxy="SiteProxy";\n document.getElementById("importSiteProxy").value=siteProxy;\n config.macros.importTiddlers.proxy=siteProxy;\n return panel;\n}\n//}}}\n\n// // CSS\n//{{{\nconfig.macros.importTiddlers.css = '\s\n#importPanel {\s\n display: none; position:absolute; z-index:11; width:35em; right:105%; top:3em;\s\n background-color: #eee; color:#000; font-size: 8pt; line-height:110%;\s\n border:1px solid black; border-bottom-width: 3px; border-right-width: 3px;\s\n padding: 0.5em; margin:0em; -moz-border-radius:1em;\s\n}\s\n#importPanel a, #importPanel td a { color:#009; display:inline; margin:0px; padding:1px; }\s\n#importPanel table { width:100%; border:0px; padding:0px; margin:0px; font-size:8pt; line-height:110%; background:transparent; }\s\n#importPanel tr { border:0px;padding:0px;margin:0px; background:transparent; }\s\n#importPanel td { color:#000; border:0px;padding:0px;margin:0px; background:transparent; }\s\n#importPanel select { width:98%;margin:0px;font-size:8pt;line-height:110%;}\s\n#importPanel input { width:98%;padding:0px;margin:0px;font-size:8pt;line-height:110%}\s\n#importPanel .box { border:1px solid black; padding:3px; margin-bottom:5px; background:#f8f8f8; -moz-border-radius:5px;}\s\n#importPanel .topline { border-top:2px solid black; padding-top:3px; margin-bottom:5px; }\s\n#importPanel .rad { width:auto; }\s\n#importPanel .chk { width:auto; margin:1px;border:0; }\s\n#importPanel .btn { width:auto; }\s\n#importPanel .btn1 { width:98%; }\s\n#importPanel .btn2 { width:48%; }\s\n#importPanel .btn3 { width:32%; }\s\n#importPanel .btn4 { width:24%; }\s\n#importPanel .btn5 { width:19%; }\s\n#importPanel .importButton { padding: 0em; margin: 0px; font-size:8pt; }\s\n#importPanel .importListButton { padding:0em 0.25em 0em 0.25em; color: #000000; display:inline }\s\n#importCollisionPanel { display:none; margin:0.5em 0em 0em 0em; }\s\n';\n//}}}\n\n// // HTML \n//{{{\nconfig.macros.importTiddlers.html = '\s\n<!-- source and report -->\s\n<table><tr><td align=left>\s\n import from\s\n <input type="radio" class="rad" name="importFrom" value="file" CHECKED\s\n onClick="document.getElementById(\s'importLocalPanel\s').style.display=this.checked?\s'block\s':\s'none\s';\s\n document.getElementById(\s'importHTTPPanel\s').style.display=!this.checked?\s'block\s':\s'none\s'"> local file\s\n <input type="radio" class="rad" name="importFrom" value="http"\s\n onClick="document.getElementById(\s'importLocalPanel\s').style.display=!this.checked?\s'block\s':\s'none\s';\s\n document.getElementById(\s'importHTTPPanel\s').style.display=this.checked?\s'block\s':\s'none\s'"> web server\s\n</td><td align=right>\s\n <input type=checkbox class="chk" id="chkImportReport" checked\s\n onClick="config.options[\s'chkImportReport\s']=this.checked;"> create a report\s\n</td></tr></table>\s\n<!-- import from local file -->\s\n<div id="importLocalPanel" style="display:block;margin-bottom:5px;margin-top:5px;padding-top:3px;border-top:1px solid #999">\s\nlocal document path/filename:<br>\s\n<input type="file" id="fileImportSource" size=57 style="width:100%"\s\n onKeyUp="config.macros.importTiddlers.src=this.value"\s\n onChange="config.macros.importTiddlers.src=this.value;">\s\n</div><!--panel-->\s\n\s\n<!-- import from http server -->\s\n<div id="importHTTPPanel" style="display:none;margin-bottom:5px;margin-top:5px;padding-top:3px;border-top:1px solid #999">\s\n<table><tr><td align=left>\s\n remote document URL:<br>\s\n</td><td align=right>\s\n <input type="checkbox" class="chk" id="importUseProxy"\s\n onClick="config.macros.importTiddlers.useProxy=this.checked;\s\n document.getElementById(\s'importSiteProxy\s').style.display=this.checked?\s'block\s':\s'none\s'"> use a proxy script\s\n</td></tr></table>\s\n<input type="text" id="importSiteProxy" style="display:none;margin-bottom:1px" onfocus="this.select()" value="SiteProxy"\s\n onKeyUp="config.macros.importTiddlers.proxy=this.value"\s\n onChange="config.macros.importTiddlers.proxy=this.value;">\s\n<input type="text" id="importSourceURL" onfocus="this.select()" value="SiteUrl"\s\n onKeyUp="config.macros.importTiddlers.src=this.value"\s\n onChange="config.macros.importTiddlers.src=this.value;">\s\n</div><!--panel-->\s\n\s\n<table><tr><td align=left>\s\n select:\s\n <a href="JavaScript:;" id="importSelectAll"\s\n onclick="onClickImportButton(this)" title="select all tiddlers">\s\n all </a>\s\n <a href="JavaScript:;" id="importSelectNew"\s\n onclick="onClickImportButton(this)" title="select tiddlers not already in destination document">\s\n added </a> \s\n <a href="JavaScript:;" id="importSelectChanges"\s\n onclick="onClickImportButton(this)" title="select tiddlers that have been updated in source document">\s\n changes </a> \s\n <a href="JavaScript:;" id="importSelectDifferences"\s\n onclick="onClickImportButton(this)" title="select tiddlers that have been added or are different from existing tiddlers">\s\n differences </a> \s\n <a href="JavaScript:;" id="importToggleFilter"\s\n onclick="onClickImportButton(this)" title="show/hide selection filter">\s\n filter </a> \s\n</td><td align=right>\s\n <a href="JavaScript:;" id="importListSmaller"\s\n onclick="onClickImportButton(this)" title="reduce list size">\s\n – </a>\s\n <a href="JavaScript:;" id="importListLarger"\s\n onclick="onClickImportButton(this)" title="increase list size">\s\n + </a>\s\n <a href="JavaScript:;" id="importListMaximize"\s\n onclick="onClickImportButton(this)" title="maximize/restore list size">\s\n = </a>\s\n</td></tr></table>\s\n<select id="importList" size=8 multiple\s\n onchange="setTimeout(\s'refreshImportList(\s'+this.selectedIndex+\s')\s',1)">\s\n <!-- NOTE: delay refresh so list is updated AFTER onchange event is handled -->\s\n</select>\s\n<input type=checkbox class="chk" id="chkAddTags" checked\s\n onClick="config.macros.importTiddlers.addTags=this.checked;">add new tags \s\n<input type=checkbox class="chk" id="chkImportTags" checked\s\n onClick="config.macros.importTiddlers.importTags=this.checked;">import source tags \s\n<input type=checkbox class="chk" id="chkKeepTags" checked\s\n onClick="config.macros.importTiddlers.keepTags=this.checked;">keep existing tags<br>\s\n<input type=text id="txtNewTags" size=15 onKeyUp="config.macros.importTiddlers.newTags=this.value" autocomplete=off>\s\n<div align=center>\s\n <input type=button id="importOpen" class="importButton" style="width:32%" value="open"\s\n onclick="onClickImportButton(this)">\s\n <input type=button id="importStart" class="importButton" style="width:32%" value="import"\s\n onclick="onClickImportButton(this)">\s\n <input type=button id="importClose" class="importButton" style="width:32%" value="close"\s\n onclick="onClickImportButton(this)">\s\n</div>\s\n<div id="importCollisionPanel">\s\n tiddler already exists:\s\n <input type=text id="importNewTitle" size=15 autocomplete=off">\s\n <div align=center>\s\n <input type=button id="importSkip" class="importButton" style="width:23%" value="skip"\s\n onclick="onClickImportButton(this)">\s\n <input type=button id="importRename" class="importButton" style="width:23%" value="rename"\s\n onclick="onClickImportButton(this)">\s\n <input type=button id="importMerge" class="importButton" style="width:23%" value="merge"\s\n onclick="onClickImportButton(this)">\s\n <input type=button id="importReplace" class="importButton" style="width:23%" value="replace"\s\n onclick="onClickImportButton(this)">\s\n </div>\s\n</div>\s\n';\n//}}}\n\n// // Control interactions\n//{{{\nfunction onClickImportButton(which)\n{\n // DEBUG alert(which.id);\n var theList = document.getElementById('importList');\n if (!theList) return;\n var thePanel = document.getElementById('importPanel');\n var theCollisionPanel = document.getElementById('importCollisionPanel');\n var theNewTitle = document.getElementById('importNewTitle');\n var count=0;\n switch (which.id)\n {\n case 'fileImportSource':\n case 'importOpen': // load import source into hidden frame\n importReport(); // if an import was in progress, generate a report\n config.macros.importTiddlers.inbound=null; // clear the imported tiddler buffer\n refreshImportList(); // reset/resize the listbox\n if (config.macros.importTiddlers.src=="") break;\n // Load document into hidden iframe so we can read it's DOM and fill the list\n loadRemoteFile(config.macros.importTiddlers.src, function(src,txt) {\n var tiddlers = readTiddlersFromHTML(txt);\n var count=tiddlers?tiddlers.length:0;\n displayMessage(config.macros.importTiddlers.foundMsg.format([count,src]));\n config.macros.importTiddlers.inbound=tiddlers;\n window.refreshImportList(0);\n });\n break;\n case 'importSelectAll': // select all tiddler list items (i.e., not headings)\n importReport(); // if an import was in progress, generate a report\n for (var t=0,count=0; t < theList.options.length; t++) {\n if (theList.options[t].value=="") continue;\n theList.options[t].selected=true;\n count++;\n }\n clearMessage(); displayMessage(config.macros.importTiddlers.countMsg.format([count]));\n break;\n case 'importSelectNew': // select tiddlers not in current document\n importReport(); // if an import was in progress, generate a report\n for (var t=0,count=0; t < theList.options.length; t++) {\n theList.options[t].selected=false;\n if (theList.options[t].value=="") continue;\n theList.options[t].selected=!store.tiddlerExists(theList.options[t].value);\n count+=theList.options[t].selected?1:0;\n }\n clearMessage(); displayMessage(config.macros.importTiddlers.countMsg.format([count]));\n break;\n case 'importSelectChanges': // select tiddlers that are updated from existing tiddlers\n importReport(); // if an import was in progress, generate a report\n for (var t=0,count=0; t < theList.options.length; t++) {\n theList.options[t].selected=false;\n if (theList.options[t].value==""||!store.tiddlerExists(theList.options[t].value)) continue;\n for (var i=0; i<config.macros.importTiddlers.inbound.length; i++) // find matching inbound tiddler\n { var inbound=config.macros.importTiddlers.inbound[i]; if (inbound.title==theList.options[t].value) break; }\n theList.options[t].selected=(inbound.modified-store.getTiddler(theList.options[t].value).modified>0); // updated tiddler\n count+=theList.options[t].selected?1:0;\n }\n clearMessage(); displayMessage(config.macros.importTiddlers.countMsg.format([count]));\n break;\n case 'importSelectDifferences': // select tiddlers that are new or different from existing tiddlers\n importReport(); // if an import was in progress, generate a report\n for (var t=0,count=0; t < theList.options.length; t++) {\n theList.options[t].selected=false;\n if (theList.options[t].value=="") continue;\n if (!store.tiddlerExists(theList.options[t].value)) { theList.options[t].selected=true; count++; continue; }\n for (var i=0; i<config.macros.importTiddlers.inbound.length; i++) // find matching inbound tiddler\n { var inbound=config.macros.importTiddlers.inbound[i]; if (inbound.title==theList.options[t].value) break; }\n theList.options[t].selected=(inbound.modified-store.getTiddler(theList.options[t].value).modified!=0); // changed tiddler\n count+=theList.options[t].selected?1:0;\n }\n clearMessage(); displayMessage(config.macros.importTiddlers.countMsg.format([count]));\n break;\n case 'importToggleFilter': // show/hide filter\n case 'importFilter': // apply filter\n alert("coming soon!");\n break;\n case 'importStart': // initiate the import processing\n importReport(); // if an import was in progress, generate a report\n config.macros.importTiddlers.index=0;\n config.macros.importTiddlers.index=importTiddlers(0);\n importStopped();\n break;\n case 'importClose': // unload imported tiddlers or hide the import control panel\n // if imported tiddlers not loaded, close the import control panel\n if (!config.macros.importTiddlers.inbound) { thePanel.style.display='none'; break; }\n importReport(); // if an import was in progress, generate a report\n config.macros.importTiddlers.inbound=null; // clear the imported tiddler buffer\n refreshImportList(); // reset/resize the listbox\n break;\n case 'importSkip': // don't import the tiddler\n var theItem = theList.options[config.macros.importTiddlers.index];\n for (var j=0;j<config.macros.importTiddlers.inbound.length;j++)\n if (config.macros.importTiddlers.inbound[j].title==theItem.value) break;\n var theImported = config.macros.importTiddlers.inbound[j];\n theImported.status='skipped after asking'; // mark item as skipped\n theCollisionPanel.style.display='none';\n config.macros.importTiddlers.index=importTiddlers(config.macros.importTiddlers.index+1); // resume with NEXT item\n importStopped();\n break;\n case 'importRename': // change name of imported tiddler\n var theItem = theList.options[config.macros.importTiddlers.index];\n for (var j=0;j<config.macros.importTiddlers.inbound.length;j++)\n if (config.macros.importTiddlers.inbound[j].title==theItem.value) break;\n var theImported = config.macros.importTiddlers.inbound[j];\n theImported.status = 'renamed from '+theImported.title; // mark item as renamed\n theImported.set(theNewTitle.value,null,null,null,null); // change the tiddler title\n theItem.value = theNewTitle.value; // change the listbox item text\n theItem.text = theNewTitle.value; // change the listbox item text\n theCollisionPanel.style.display='none';\n config.macros.importTiddlers.index=importTiddlers(config.macros.importTiddlers.index); // resume with THIS item\n importStopped();\n break;\n case 'importMerge': // join existing and imported tiddler content\n var theItem = theList.options[config.macros.importTiddlers.index];\n for (var j=0;j<config.macros.importTiddlers.inbound.length;j++)\n if (config.macros.importTiddlers.inbound[j].title==theItem.value) break;\n var theImported = config.macros.importTiddlers.inbound[j];\n var theExisting = store.getTiddler(theItem.value);\n var theText = theExisting.text+'\sn----\sn^^merged from: ';\n theText +='[['+config.macros.importTiddlers.src+'#'+theItem.value+'|'+config.macros.importTiddlers.src+'#'+theItem.value+']]^^\sn';\n theText +='^^'+theImported.modified.toLocaleString()+' by '+theImported.modifier+'^^\sn'+theImported.text;\n var theDate = new Date();\n var theTags = theExisting.getTags()+' '+theImported.getTags();\n theImported.set(null,theText,null,theDate,theTags);\n theImported.status = 'merged with '+theExisting.title; // mark item as merged\n theImported.status += ' - '+theExisting.modified.formatString("MM/DD/YYYY 0hh:0mm:0ss");\n theImported.status += ' by '+theExisting.modifier;\n theCollisionPanel.style.display='none';\n config.macros.importTiddlers.index=importTiddlers(config.macros.importTiddlers.index); // resume with this item\n importStopped();\n break;\n case 'importReplace': // substitute imported tiddler for existing tiddler\n var theItem = theList.options[config.macros.importTiddlers.index];\n for (var j=0;j<config.macros.importTiddlers.inbound.length;j++)\n if (config.macros.importTiddlers.inbound[j].title==theItem.value) break;\n var theImported = config.macros.importTiddlers.inbound[j];\n var theExisting = store.getTiddler(theItem.value);\n theImported.status = 'replaces '+theExisting.title; // mark item for replace\n theImported.status += ' - '+theExisting.modified.formatString("MM/DD/YYYY 0hh:0mm:0ss");\n theImported.status += ' by '+theExisting.modifier;\n theCollisionPanel.style.display='none';\n config.macros.importTiddlers.index=importTiddlers(config.macros.importTiddlers.index); // resume with THIS item\n importStopped();\n break;\n case 'importListSmaller': // decrease current listbox size, minimum=5\n if (theList.options.length==1) break;\n theList.size-=(theList.size>5)?1:0;\n config.macros.importTiddlers.listsize=theList.size;\n break;\n case 'importListLarger': // increase current listbox size, maximum=number of items in list\n if (theList.options.length==1) break;\n theList.size+=(theList.size<theList.options.length)?1:0;\n config.macros.importTiddlers.listsize=theList.size;\n break;\n case 'importListMaximize': // toggle listbox size between current and maximum\n if (theList.options.length==1) break;\n theList.size=(theList.size==theList.options.length)?config.macros.importTiddlers.listsize:theList.options.length;\n break;\n }\n}\n//}}}\n\n// // refresh listbox\n//{{{\nfunction refreshImportList(selectedIndex)\n{\n var theList = document.getElementById("importList");\n if (!theList) return;\n // if nothing to show, reset list content and size\n if (!config.macros.importTiddlers.inbound) \n {\n while (theList.length > 0) { theList.options[0] = null; }\n theList.options[0]=new Option('please open a document...',"",false,false);\n theList.size=config.macros.importTiddlers.listsize;\n return;\n }\n // get the sort order\n if (!selectedIndex) selectedIndex=0;\n if (selectedIndex==0) config.macros.importTiddlers.sort='title'; // heading\n if (selectedIndex==1) config.macros.importTiddlers.sort='title';\n if (selectedIndex==2) config.macros.importTiddlers.sort='modified';\n if (selectedIndex==3) config.macros.importTiddlers.sort='tags';\n if (selectedIndex>3) {\n // display selected tiddler count\n for (var t=0,count=0; t < theList.options.length; t++) count+=(theList.options[t].selected&&theList.options[t].value!="")?1:0;\n clearMessage(); displayMessage(config.macros.importTiddlers.countMsg.format([count]));\n return; // no refresh needed\n }\n\n // get the alphasorted list of tiddlers (optionally, filter out unchanged tiddlers)\n var tiddlers=config.macros.importTiddlers.inbound;\n tiddlers.sort(function (a,b) {if(a['title'] == b['title']) return(0); else return (a['title'] < b['title']) ? -1 : +1; });\n // clear current list contents\n while (theList.length > 0) { theList.options[0] = null; }\n // add heading and control items to list\n var i=0;\n var indent=String.fromCharCode(160)+String.fromCharCode(160);\n theList.options[i++]=new Option(tiddlers.length+' tiddler'+((tiddlers.length!=1)?'s are':' is')+' in the document',"",false,false);\n theList.options[i++]=new Option(((config.macros.importTiddlers.sort=="title" )?">":indent)+' [by title]',"",false,false);\n theList.options[i++]=new Option(((config.macros.importTiddlers.sort=="modified")?">":indent)+' [by date]',"",false,false);\n theList.options[i++]=new Option(((config.macros.importTiddlers.sort=="tags")?">":indent)+' [by tags]',"",false,false);\n // output the tiddler list\n switch(config.macros.importTiddlers.sort)\n {\n case "title":\n for(var t = 0; t < tiddlers.length; t++)\n theList.options[i++] = new Option(tiddlers[t].title,tiddlers[t].title,false,false);\n break;\n case "modified":\n // sort descending for newest date first\n tiddlers.sort(function (a,b) {if(a['modified'] == b['modified']) return(0); else return (a['modified'] > b['modified']) ? -1 : +1; });\n var lastSection = "";\n for(var t = 0; t < tiddlers.length; t++) {\n var tiddler = tiddlers[t];\n var theSection = tiddler.modified.toLocaleDateString();\n if (theSection != lastSection) {\n theList.options[i++] = new Option(theSection,"",false,false);\n lastSection = theSection;\n }\n theList.options[i++] = new Option(indent+indent+tiddler.title,tiddler.title,false,false);\n }\n break;\n case "tags":\n var theTitles = {}; // all tiddler titles, hash indexed by tag value\n var theTags = new Array();\n for(var t=0; t<tiddlers.length; t++) {\n var title=tiddlers[t].title;\n var tags=tiddlers[t].tags;\n if (!tags || !tags.length) {\n if (theTitles["untagged"]==undefined) { theTags.push("untagged"); theTitles["untagged"]=new Array(); }\n theTitles["untagged"].push(title);\n }\n else for(var s=0; s<tags.length; s++) {\n if (theTitles[tags[s]]==undefined) { theTags.push(tags[s]); theTitles[tags[s]]=new Array(); }\n theTitles[tags[s]].push(title);\n }\n }\n theTags.sort();\n for(var tagindex=0; tagindex<theTags.length; tagindex++) {\n var theTag=theTags[tagindex];\n theList.options[i++]=new Option(theTag,"",false,false);\n for(var t=0; t<theTitles[theTag].length; t++)\n theList.options[i++]=new Option(indent+indent+theTitles[theTag][t],theTitles[theTag][t],false,false);\n }\n break;\n }\n theList.selectedIndex=selectedIndex; // select current control item\n if (theList.size<config.macros.importTiddlers.listsize) theList.size=config.macros.importTiddlers.listsize;\n if (theList.size>theList.options.length) theList.size=theList.options.length;\n}\n//}}}\n\n// // re-entrant processing for handling import with interactive collision prompting\n//{{{\nfunction importTiddlers(startIndex)\n{\n if (!config.macros.importTiddlers.inbound) return -1;\n\n var theList = document.getElementById('importList');\n if (!theList) return;\n var t;\n // if starting new import, reset import status flags\n if (startIndex==0)\n for (var t=0;t<config.macros.importTiddlers.inbound.length;t++)\n config.macros.importTiddlers.inbound[t].status="";\n for (var i=startIndex; i<theList.options.length; i++)\n {\n // if list item is not selected or is a heading (i.e., has no value), skip it\n if ((!theList.options[i].selected) || ((t=theList.options[i].value)==""))\n continue;\n for (var j=0;j<config.macros.importTiddlers.inbound.length;j++)\n if (config.macros.importTiddlers.inbound[j].title==t) break;\n var theImported = config.macros.importTiddlers.inbound[j];\n var theExisting = store.getTiddler(theImported.title);\n // avoid redundant import for tiddlers that are listed multiple times (when 'by tags')\n if (theImported.status=="added")\n continue;\n // don't import the "ImportedTiddlers" history from the other document...\n if (theImported.title=='ImportedTiddlers')\n continue;\n // if tiddler exists and import not marked for replace or merge, stop importing\n if (theExisting && (theImported.status.substr(0,7)!="replace") && (theImported.status.substr(0,5)!="merge"))\n return i;\n // assemble tags (remote + existing + added)\n var newTags = "";\n if (config.macros.importTiddlers.importTags)\n newTags+=theImported.getTags() // import remote tags\n if (config.macros.importTiddlers.keepTags && theExisting)\n newTags+=" "+theExisting.getTags(); // keep existing tags\n if (config.macros.importTiddlers.addTags && config.macros.importTiddlers.newTags.trim().length)\n newTags+=" "+config.macros.importTiddlers.newTags; // add new tags\n theImported.set(null,null,null,null,newTags.trim());\n // set the status to 'added' (if not already set by the 'ask the user' UI)\n theImported.status=(theImported.status=="")?'added':theImported.status;\n // do the import!\n store.addTiddler(theImported);\n store.setDirty(true);\n }\n return(-1); // signals that we really finished the entire list\n}\n//}}}\n\n//{{{\nfunction importStopped()\n{\n var theList = document.getElementById('importList');\n var theNewTitle = document.getElementById('importNewTitle');\n if (!theList) return;\n if (config.macros.importTiddlers.index==-1)\n importReport(); // import finished... generate the report\n else\n {\n // DEBUG alert('import stopped at: '+config.macros.importTiddlers.index);\n // import collision... show the collision panel and set the title edit field\n document.getElementById('importCollisionPanel').style.display='block';\n theNewTitle.value=theList.options[config.macros.importTiddlers.index].value;\n }\n}\n//}}}\n\n// // ''REPORT GENERATOR''\n//{{{\nfunction importReport(quiet)\n{\n if (!config.macros.importTiddlers.inbound) return;\n // DEBUG alert('importReport: start');\n\n // if import was not completed, the collision panel will still be open... close it now.\n var panel=document.getElementById('importCollisionPanel'); if (panel) panel.style.display='none';\n\n // get the alphasorted list of tiddlers\n var tiddlers = config.macros.importTiddlers.inbound;\n // gather the statistics\n var count=0;\n for (var t=0; t<tiddlers.length; t++)\n if (tiddlers[t].status && tiddlers[t].status.trim().length && tiddlers[t].status.substr(0,7)!="skipped") count++;\n\n // generate a report\n if (count && config.options.chkImportReport) {\n // get/create the report tiddler\n var theReport = store.getTiddler('ImportedTiddlers');\n if (!theReport) { theReport= new Tiddler(); theReport.title = 'ImportedTiddlers'; theReport.text = ""; }\n // format the report content\n var now = new Date();\n var newText = "On "+now.toLocaleString()+", "+config.options.txtUserName\n newText +=" imported "+count+" tiddler"+(count==1?"":"s")+" from\sn[["+config.macros.importTiddlers.src+"|"+config.macros.importTiddlers.src+"]]:\sn";\n if (config.macros.importTiddlers.addTags && config.macros.importTiddlers.newTags.trim().length)\n newText += "imported tiddlers were tagged with: \s""+config.macros.importTiddlers.newTags+"\s"\sn";\n newText += "<<<\sn";\n for (var t=0; t<tiddlers.length; t++) if (tiddlers[t].status) newText += "#[["+tiddlers[t].title+"]] - "+tiddlers[t].status+"\sn";\n newText += "<<<\sn";\n newText += "<html><input type=\s"button\s" href=\s"javascript:;\s" ";\n newText += "onclick=\s"story.closeTiddler('"+theReport.title+"'); store.deleteTiddler('"+theReport.title+"');\s" ";\n newText += "value=\s"discard report\s"></html>";\n // update the ImportedTiddlers content and show the tiddler\n theReport.text = newText+((theReport.text!="")?'\sn----\sn':"")+theReport.text;\n theReport.modifier = config.options.txtUserName;\n theReport.modified = new Date();\n store.addTiddler(theReport);\n if (!quiet) { story.displayTiddler(null,theReport.title,1,null,null,false); story.refreshTiddler(theReport.title,1,true); }\n }\n\n // reset status flags\n for (var t=0; t<config.macros.importTiddlers.inbound.length; t++) config.macros.importTiddlers.inbound[t].status="";\n\n // refresh display if tiddlers have been loaded\n if (count) { store.setDirty(true); store.notifyAll(); }\n\n // always show final message when tiddlers were actually loaded\n if (count) displayMessage(config.macros.importTiddlers.importedMsg.format([count,tiddlers.length,config.macros.importTiddlers.src]));\n}\n//}}}\n\n/***\n!!!!!TW 2.1beta Core Code Candidate\n//The following section is a preliminary 'code candidate' for incorporation of non-interactive 'load tiddlers' functionality into TW2.1beta. //\n***/\n//{{{\n// default cookie/option values\nif (!config.options.chkImportReport) config.options.chkImportReport=true;\n\nconfig.macros.loadTiddlers = {\n label: "",\n prompt: "add/update tiddlers from '%0'",\n askMsg: "Please enter a local path/filename or a remote URL",\n openMsg: "Opening %0",\n openErrMsg: "Could not open %0 - error=%1",\n readMsg: "Read %0 bytes from %1",\n foundMsg: "Found %0 tiddlers in %1",\n loadedMsg: "Loaded %0 of %1 tiddlers from %2"\n};\n\nconfig.macros.loadTiddlers.handler = function(place,macroName,params) {\n var label=(params[0] && params[0].substr(0,6)=='label:')?params.shift().substr(6):this.label;\n var prompt=(params[0] && params[0].substr(0,7)=='prompt:')?params.shift().substr(7):this.prompt;\n var filter="updates";\n if (params[0] && (params[0]=='all' || params[0]=='new' || params[0]=='changes' || params[0]=='updates'\n || params[0].substr(0,8)=='tiddler:' || params[0].substr(0,4)=='tag:'))\n filter=params.shift();\n var src=params.shift(); if (!src || !src.length) return; // filename is required\n var quiet=(params[0]=="quiet"); if (quiet) params.shift();\n var ask=(params[0]=="confirm"); if (ask) params.shift();\n if (label.trim().length) {\n // link triggers load tiddlers from another file/URL and then applies filtering rules to add/replace tiddlers in the store\n createTiddlyButton(place,label.format([src]),prompt.format([src]), function() {\n if (src=="ask") src=prompt(config.macros.loadTiddlers.askMsg);\n loadRemoteFile(src,loadTiddlers,quiet,ask,filter);\n })\n }\n else {\n // load tiddlers from another file/URL and then apply filtering rules to add/replace tiddlers in the store\n if (src=="ask") src=prompt(config.macros.loadTiddlers.askMsg);\n loadRemoteFile(src,loadTiddlers,quiet,ask,filter);\n }\n}\n\nfunction loadTiddlers(src,html,quiet,ask,filter)\n{\n var tiddlers = readTiddlersFromHTML(html);\n var count=tiddlers?tiddlers.length:0;\n if (!quiet) displayMessage(config.macros.loadTiddlers.foundMsg.format([count,src]));\n var count=0;\n if (tiddlers) for (var t=0;t<tiddlers.length;t++) {\n var theInbound = tiddlers[t];\n var theExisting = store.getTiddler(theInbound.title);\n if (theInbound.title=='ImportedTiddlers')\n continue; // skip "ImportedTiddlers" history from the other document...\n\n // apply the all/new/changes/updates filter (if any)\n if (filter && filter!="all") {\n if ((filter=="new") && theExisting) // skip existing tiddlers\n continue;\n if ((filter=="changes") && !theExisting) // skip new tiddlers\n continue;\n if ((filter.substr(0,4)=="tag:") && theInbound.tags.find(filter.substr(4))==null) // must match specific tag value\n continue;\n if ((filter.substr(0,8)=="tiddler:") && theInbound.title!=filter.substr(8)) // must match specific tiddler name\n continue;\n if (store.tiddlerExists(theInbound.title) && ((theExisting.modified.getTime()-theInbound.modified.getTime())>=0)) // tiddler is unchanged\n continue;\n }\n // get confirmation if required\n if (ask && !confirm((theExisting?"Update":"Add")+" tiddler '"+theInbound.title+"'\snfrom "+src))\n { tiddlers[t].status="skipped - cancelled by user"; continue; }\n // DO IT!\n store.addTiddler(theInbound);\n tiddlers[t].status=theExisting?"updated":"added"\n count++;\n }\n if (count) {\n // refresh display\n store.setDirty(true);\n store.notifyAll();\n // generate a report\n if (config.options.chkImportReport) {\n // get/create the report tiddler\n var theReport = store.getTiddler('ImportedTiddlers');\n if (!theReport) { theReport= new Tiddler(); theReport.title = 'ImportedTiddlers'; theReport.text = ""; }\n // format the report content\n var now = new Date();\n var newText = "On "+now.toLocaleString()+", "+config.options.txtUserName+" loaded "+count+" tiddlers from\sn[["+src+"|"+src+"]]:\sn";\n newText += "<<<\sn";\n for (var t=0; t<tiddlers.length; t++) if (tiddlers[t].status) newText += "#[["+tiddlers[t].title+"]] - "+tiddlers[t].status+"\sn";\n newText += "<<<\sn";\n newText += "<html><input type=\s"button\s" href=\s"javascript:;\s" ";\n newText += "onclick=\s"story.closeTiddler('"+theReport.title+"'); store.deleteTiddler('"+theReport.title+"');\s" ";\n newText += "value=\s"discard report\s"></html>";\n // update the ImportedTiddlers content and show the tiddler\n theReport.text = newText+((theReport.text!="")?'\sn----\sn':"")+theReport.text;\n theReport.modifier = config.options.txtUserName;\n theReport.modified = new Date();\n store.addTiddler(theReport);\n if (!quiet) { story.displayTiddler(null,theReport.title,1,null,null,false); story.refreshTiddler(theReport.title,1,true); }\n }\n }\n // always show final message when tiddlers were actually loaded\n if (!quiet||count) displayMessage(config.macros.loadTiddlers.loadedMsg.format([count,tiddlers.length,src]));\n}\n\nfunction loadRemoteFile(src,callback,quiet,ask,filter) {\n if (src==undefined || !src.length) return null; // filename is required\n if (!quiet) clearMessage();\n if (!quiet) displayMessage(config.macros.loadTiddlers.openMsg.format([src]));\n if (src.substr(0,4)!="http" && src.substr(0,4)!="file") { // if not a URL, fallback to read from local filesystem\n var txt=loadFile(src);\n if ((txt==null)||(txt==false)) // file didn't load\n { if (!quiet) displayMessage(config.macros.loadTiddlers.openErrMsg.format([src,"(unknown)"])); }\n else {\n if (!quiet) displayMessage(config.macros.loadTiddlers.readMsg.format([txt.length,src]));\n if (callback) callback(src,convertUTF8ToUnicode(txt),quiet,ask,filter);\n }\n }\n else {\n var x; // get an request object\n try {x = new XMLHttpRequest()} // moz\n catch(e) {\n try {x = new ActiveXObject("Msxml2.XMLHTTP")} // IE 6\n catch (e) {\n try {x = new ActiveXObject("Microsoft.XMLHTTP")} // IE 5\n catch (e) { return }\n }\n }\n // setup callback function to handle server response(s)\n x.onreadystatechange = function() {\n if (x.readyState == 4) {\n if (x.status==0 || x.status == 200) {\n if (!quiet) displayMessage(config.macros.loadTiddlers.readMsg.format([x.responseText.length,src]));\n if (callback) callback(src,x.responseText,quiet,ask,filter);\n }\n else {\n if (!quiet) displayMessage(config.macros.loadTiddlers.openErrMsg.format([src,x.status]));\n }\n }\n }\n // get privileges to read another document's DOM via http:// or file:// (moz-only)\n if (typeof(netscape)!="undefined") {\n try { netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead"); }\n catch (e) { if (!quiet) displayMessage(e.description?e.description:e.toString()); }\n }\n // send the HTTP request\n try {\n var url=src+(src.indexOf('?')<0?'?':'&')+'nocache='+Math.random();\n x.open("GET",src,true);\n if (x.overrideMimeType) x.overrideMimeType('text/html');\n x.send(null);\n }\n catch (e) {\n if (!quiet) {\n displayMessage(config.macros.loadTiddlers.openErrMsg.format([src,"(unknown)"]));\n displayMessage(e.description?e.description:e.toString());\n }\n }\n }\n}\n\nfunction readTiddlersFromHTML(html)\n{\n // extract store area from html \n var start=html.indexOf('<div id="storeArea">');\n var end=html.indexOf('</body>',start);\n var sa="<html><body>"+html.substring(start,end)+"</body></html>";\n\n // load html into iframe document\n var f=document.getElementById("loaderFrame"); if (f) document.body.removeChild(f);\n f=document.createElement("iframe"); f.id="loaderFrame";\n f.style.width="0px"; f.style.height="0px"; f.style.border="0px";\n document.body.appendChild(f);\n var d=f.document;\n if (f.contentDocument) d=f.contentDocument; // For NS6\n else if (f.contentWindow) d=f.contentWindow.document; // For IE5.5 and IE6\n d.open(); d.writeln(sa); d.close();\n\n // read tiddler DIVs from storeArea DOM element \n var sa = d.getElementById("storeArea");\n if (!sa) return null;\n sa.normalize();\n var nodes = sa.childNodes;\n if (!nodes || !nodes.length) return null;\n var tiddlers = [];\n for(var t = 0; t < nodes.length; t++) {\n var title = null;\n if(nodes[t].getAttribute)\n title = nodes[t].getAttribute("tiddler");\n if(!title && nodes[t].id && (nodes[t].id.substr(0,5) == "store"))\n title = nodes[t].id.substr(5);\n if(title && title != "")\n tiddlers.push((new Tiddler()).loadFromDiv(nodes[t],title));\n }\n return tiddlers;\n}\n//}}}
On Sábado, 17 de Junio de 2006 05:34:43 a., Yorga imported 1 tiddler from\n[[http://www.TiddlyTools.com/|http://www.TiddlyTools.com/]]:\n<<<\n#[[MathExamples]] - added\n<<<\n<html><input type="button" href="javascript:;" onclick="story.closeTiddler('ImportedTiddlers'); store.deleteTiddler('ImportedTiddlers');" value="discard report"></html>\n----\nOn Sábado, 17 de Junio de 2006 05:32:07 a., Yorga imported 1 tiddler from\n[[F:\sasciencepad\sasciencepad.html|F:\sasciencepad\sasciencepad.html]]:\n<<<\n#[[MathExamples]] - added\n<<<\n<html><input type="button" href="javascript:;" onclick="story.closeTiddler('ImportedTiddlers'); store.deleteTiddler('ImportedTiddlers');" value="discard report"></html>\n----\nOn Sábado, 17 de Junio de 2006 05:11:21 a., Yorga imported 10 tiddlers from\n[[http://www.TiddlyTools.com/|http://www.TiddlyTools.com/]]:\n<<<\n#[[Te doy una palabra]] - added\n#[[Telúrica]] - added\n#[[Tu llanto]] - added\n#[[Tu viaje]] - added\n#[[Umbral]] - added\n#[[Un cuadro de Klimt]] - added\n#[[Una canción]] - added\n#[[Variaciones sobre un tema remanido]] - added\n#[[Volver en música]] - added\n#[[Vórtice]] - added\n<<<\n<html><input type="button" href="javascript:;" onclick="story.closeTiddler('ImportedTiddlers'); store.deleteTiddler('ImportedTiddlers');" value="discard report"></html>\n----\nOn Sábado, 17 de Junio de 2006 05:10:21 a., Yorga imported 4 tiddlers from\n[[http://www.TiddlyTools.com/|http://www.TiddlyTools.com/]]:\n<<<\n#[[Sopas alteradas]] - added\n#[[Soplo]] - added\n#[[Su Danza]] - added\n#[[Sueño de Orquídea]] - added\n<<<\n<html><input type="button" href="javascript:;" onclick="story.closeTiddler('ImportedTiddlers'); store.deleteTiddler('ImportedTiddlers');" value="discard report"></html>\n----\nOn Sábado, 17 de Junio de 2006 05:09:39 a., Yorga imported 11 tiddlers from\n[[http://www.TiddlyTools.com/|http://www.TiddlyTools.com/]]:\n<<<\n#[[Sandstorm]] - added\n#[[Sapiencia]] - added\n#[[Sati]] - added\n#[[Semidespierto]] - added\n#[[Señales]] - added\n#[[Si]] - added\n#[[Si en un instante]] - added\n#[[Siesta con primeros pasos]] - added\n#[[Silla a la luz de la ventana]] - added\n#[[Simbiosis]] - added\n#[[Sirenas]] - added\n<<<\n<html><input type="button" href="javascript:;" onclick="story.closeTiddler('ImportedTiddlers'); store.deleteTiddler('ImportedTiddlers');" value="discard report"></html>\n----\nOn Sábado, 17 de Junio de 2006 05:08:55 a., Yorga imported 4 tiddlers from\n[[http://www.TiddlyTools.com/|http://www.TiddlyTools.com/]]:\n<<<\n#[[Re-conocerse]] - added\n#[[Requiem]] - added\n#[[Retrato de mujer I]] - added\n#[[Robo furtivo]] - added\n<<<\n<html><input type="button" href="javascript:;" onclick="story.closeTiddler('ImportedTiddlers'); store.deleteTiddler('ImportedTiddlers');" value="discard report"></html>\n----\nOn Sábado, 17 de Junio de 2006 05:08:23 a., Yorga imported 1 tiddler from\n[[http://www.TiddlyTools.com/|http://www.TiddlyTools.com/]]:\n<<<\n#[[Plástico]] - added\n<<<\n<html><input type="button" href="javascript:;" onclick="story.closeTiddler('ImportedTiddlers'); store.deleteTiddler('ImportedTiddlers');" value="discard report"></html>\n----\nOn Sábado, 17 de Junio de 2006 05:06:36 a., Yorga imported 19 tiddlers from\n[[http://www.TiddlyTools.com/|http://www.TiddlyTools.com/]]:\n<<<\n#[[Matutina]] - added\n#[[Melange vacua]] - added\n#[[Menudencias]] - added\n#[[Mi letra]] - added\n#[[Mudas]] - added\n#[[Mutantia]] - added\n#[[Más cosas]] - added\n#[[Niebla sobre el bosque]] - added\n#[[No-vos]] - added\n#[[Noche de perros]] - added\n#[[Nocturno I]] - added\n#[[Nocturno III]] - added\n#[[Nocturno IV]] - added\n#[[Nocturno suave]] - added\n#[[Oboe]] - added\n#[[Obviedad (proyecto de tango)]] - added\n#[[Orbital]] - added\n#[[Orografía]] - added\n#[[Pausas]] - added\n<<<\n<html><input type="button" href="javascript:;" onclick="story.closeTiddler('ImportedTiddlers'); store.deleteTiddler('ImportedTiddlers');" value="discard report"></html>\n----\nOn Sábado, 17 de Junio de 2006 05:05:07 a., Yorga imported 31 tiddlers from\n[[http://www.TiddlyTools.com/|http://www.TiddlyTools.com/]]:\n<<<\n#[[Delay]] - added\n#[[Despertar]] - added\n#[[Dimensión del silencio]] - added\n#[[Ding]] - added\n#[[Discriminación en GOOGLE]] - added\n#[[El haz]] - added\n#[[Elemental]] - added\n#[[Espiral]] - added\n#[[Estoy]] - added\n#[[Fluvial]] - added\n#[[Foresta]] - added\n#[[Fuego negro]] - added\n#[[Fuente]] - added\n#[[Galeón]] - added\n#[[Globos]] - added\n#[[HPL]] - added\n#[[Hambre]] - added\n#[[Hiedra]] - added\n#[[Holograma]] - added\n#[[Hormiga]] - added\n#[[Huyeron]] - added\n#[[Hálito]] - added\n#[[Ida y vuelta]] - added\n#[[Impregnación]] - added\n#[[Intronauta]] - added\n#[[La implacable]] - added\n#[[La letra perdida]] - added\n#[[La marca de Caín]] - added\n#[[La revancha de Ícaro]] - added\n#[[Luna sobre el Riachuelo]] - added\n#[[Látigo]] - added\n<<<\n<html><input type="button" href="javascript:;" onclick="story.closeTiddler('ImportedTiddlers'); store.deleteTiddler('ImportedTiddlers');" value="discard report"></html>\n----\nOn Sábado, 17 de Junio de 2006 05:04:02 a., Yorga imported 5 tiddlers from\n[[http://yorga.serversidewiki.com/|http://yorga.serversidewiki.com/]]:\n<<<\n#[[Construcciones]] - added\n#[[Corredor]] - added\n#[[Cucarachas]] - added\n#[[De armas]] - added\n#[[De rocas y amapolas]] - added\n<<<\n<html><input type="button" href="javascript:;" onclick="story.closeTiddler('ImportedTiddlers'); store.deleteTiddler('ImportedTiddlers');" value="discard report"></html>\n----\nOn Sábado, 17 de Junio de 2006 03:19:46 a., Yorga imported 1 tiddler from\n[[http://www.TiddlyTools.com/|http://www.TiddlyTools.com/]]:\n<<<\n#[[puemas]] - added\n<<<\n<html><input type="button" href="javascript:;" onclick="story.closeTiddler('ImportedTiddlers'); store.deleteTiddler('ImportedTiddlers');" value="discard report"></html>\n----\nOn Sábado, 17 de Junio de 2006 03:19:14 a., Yorga imported 1 tiddler from\n[[http://www.TiddlyTools.com/|http://www.TiddlyTools.com/]]:\n<<<\n#[[PáginaPrincipal]] - added\n<<<\n<html><input type="button" href="javascript:;" onclick="story.closeTiddler('ImportedTiddlers'); store.deleteTiddler('ImportedTiddlers');" value="discard report"></html>\n----\nOn Sábado, 17 de Junio de 2006 03:18:17 a., Yorga imported 1 tiddler from\n[[http://www.TiddlyTools.com/|http://www.TiddlyTools.com/]]:\n<<<\n#[[Lista de poemas]] - added\n<<<\n<html><input type="button" href="javascript:;" onclick="story.closeTiddler('ImportedTiddlers'); store.deleteTiddler('ImportedTiddlers');" value="discard report"></html>\n----\nOn Sábado, 17 de Junio de 2006 03:17:24 a., Yorga imported 15 tiddlers from\n[[http://www.TiddlyTools.com/|http://www.TiddlyTools.com/]]:\n<<<\n#[[Cortedades]] - added\n#[[Cortedades I]] - added\n#[[Cortedades II]] - added\n#[[Cortedades III]] - added\n#[[Cortedades IV]] - added\n#[[Cortedades IX]] - added\n#[[Cortedades V]] - added\n#[[Cortedades VI]] - added\n#[[Cortedades VII]] - added\n#[[Cortedades VIII]] - added\n#[[Cortedades X]] - added\n#[[Cortedades XI]] - added\n#[[Cortedades XII]] - added\n#[[Cortedades XIII]] - added\n#[[Cortedades XIV]] - added\n<<<\n<html><input type="button" href="javascript:;" onclick="story.closeTiddler('ImportedTiddlers'); store.deleteTiddler('ImportedTiddlers');" value="discard report"></html>\n----\nOn Sábado, 17 de Junio de 2006 03:16:28 a., Yorga imported 10 tiddlers from\n[[F:\sdhb_monkeytiddlywiki.html|F:\sdhb_monkeytiddlywiki.html]]:\n<<<\n#[[Anoxia]] - added\n#[[Arcilla]] - added\n#[[Aserrín]] - added\n#[[Asunción]] - added\n#[[Atardeceres varios (diapositivas)]] - added\n#[[Avenoche]] - added\n#[[Barca]] - added\n#[[Boludo]] - added\n#[[Canción Infantil]] - added\n#[[Cavilaciones de Hildo Cayuqueo]] - added\n<<<\n<html><input type="button" href="javascript:;" onclick="story.closeTiddler('ImportedTiddlers'); store.deleteTiddler('ImportedTiddlers');" value="discard report"></html>
Salgo a la lluvia\n y tuerzo el rostro al cenit de mi condena\n nada lava mis costras indelebles\n mis omisiones culpables\n mi complacencia disfrazada\n\n nada me redime\n ni el verde deseo de hermitas anacrónicas\n ni tu recuerdo\n ni pensarte conmigo\n ni tus manos en mi alma\n\n nada me salva\n ni vos.
/***\n''InlineJavascriptPlugin for ~TiddlyWiki version 1.2.x and 2.0''\n^^author: Eric Shulman - ELS Design Studios\nsource: http://www.TiddlyTools.com/#InlineJavascriptPlugin\nlicense: [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]^^\n\nInsert Javascript executable code directly into your tiddler content. Lets you ''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.\n!!!!!Usage\n<<<\nWhen installed, this plugin adds new wiki syntax for surrounding tiddler content with {{{<script>}}} and {{{</script>}}} markers, so that it can be treated as embedded javascript and executed each time the tiddler is rendered.\n\n''Deferred execution from an 'onClick' link''\nBy 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.\n\n''External script source files:''\nYou can also load javascript 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.\n\n''Display script source in tiddler output''\nBy including the keyword parameter "show", in the initial {{{<script>}}} marker, the plugin will include the script source code in the output that it displays in the tiddler.\n\n''Defining javascript functions and libraries:''\nAlthough the external javascript file is loaded while the tiddler content is being rendered, any functions it defines will not be available for use until //after// the rendering has been completed. Thus, you cannot load a library and //immediately// use it's functions within the same tiddler. However, once that tiddler has been loaded, the library functions can be freely used in any tiddler (even the one in which it was initially loaded).\n\nTo ensure that your javascript functions are always available when needed, you should load the libraries from a tiddler that will be rendered as soon as your TiddlyWiki document is opened. For example, you could put your {{{<script src="..."></script>}}} syntax into a tiddler called LoadScripts, and then add {{{<<tiddler LoadScripts>>}}} in your MainMenu tiddler.\n\nSince the MainMenu is always rendered immediately upon opening your document, the library will always be loaded before any other tiddlers that rely upon the functions it defines. Loading an external javascript library does not produce any direct output in the tiddler, so these definitions should have no impact on the appearance of your MainMenu.\n\n''Creating dynamic tiddler content''\nAn important difference between this implementation of embedded scripting and conventional embedded javascript techniques for web pages is the method used to produce output that is dynamically inserted into the document:\n* In a typical web document, you use the document.write() function to output text sequences (often containing HTML tags) that are then rendered when the entire document is first loaded into the browser window.\n* 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 completely replaces the entire ~TiddlyWiki document in your browser window.\n* To allow these scripts to work unmodified, the plugin automatically converts all occurences of document.write() so that the output is inserted into the tiddler content instead of replacing the entire ~TiddlyWiki document.\n\nIf your script does not use document.write() to create dynamically embedded content within a tiddler, your javascript can, as an alternative, explicitly return a text value that the plugin can then pass through the wikify() rendering engine to insert into the tiddler display. For example, using {{{return "thistext"}}} will produce the same output as {{{document.write("thistext")}}}.\n\n//Note: your script code is automatically 'wrapped' 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.//\n\n''Accessing the ~TiddlyWiki DOM''\nThe plugin provides one pre-defined variable, 'place', that is passed in to your javascript code so that it can have direct access to the containing DOM element into which the tiddler output is currently being rendered.\n\nAccess to this DOM element allows you to create scripts that can:\n* vary their actions based upon the specific location in which they are embedded\n* access 'tiddler-relative' information (use findContainingTiddler(place))\n* perform direct DOM manipulations (when returning wikified text is not enough)\n<<<\n!!!!!Examples\n<<<\nan "alert" message box:\n><script show>\n alert('InlineJavascriptPlugin: this is a demonstration message');\n</script>\ndynamic output:\n><script show>\n return (new Date()).toString();\n</script>\nwikified dynamic output:\n><script show>\n return "link to current user: [["+config.options.txtUserName+"]]";\n</script>\ndynamic output using 'place' to get size information for current tiddler:\n><script show>\n if (!window.story) window.story=window;\n var title=story.findContainingTiddler(place).id.substr(7);\n return title+" is using "+store.getTiddlerText(title).length+" bytes";\n</script>\ncreating an 'onclick' button/link that runs a script:\n><script label="click here" show>\n if (!window.story) window.story=window;\n alert("Hello World!\snlinktext='"+place.firstChild.data+"'\sntiddler='"+story.findContainingTiddler(place).id.substr(7)+"'");\n</script>\nloading a script from a source url:\n>http://www.TiddlyTools.com/demo.js contains:\n>>{{{function demo() { alert('this output is from demo(), defined in demo.js') } }}}\n>>{{{alert('InlineJavascriptPlugin: demo.js has been loaded'); }}}\n><script src="demo.js" show>\n return "loading demo.js..."\n</script>\n><script label="click to execute demo() function" show>\n demo()\n</script>\n<<<\n!!!!!Installation\n<<<\nimport (or copy/paste) the following tiddlers into your document:\n''InlineJavascriptPlugin'' (tagged with <<tag systemConfig>>)\n<<<\n!!!!!Revision History\n<<<\n''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\n''2006.04.19 [1.5.0]'' added 'show' parameter to force display of javascript source code in tiddler output\n''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.\n''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\n''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\n''2005.11.08 [1.2.0]'' handle loading of javascript from an external URL via src="..." syntax\n''2005.11.08 [1.1.0]'' pass 'place' param into scripts to provide direct DOM access \n''2005.11.08 [1.0.0]'' initial release\n<<<\n!!!!!Credits\n<<<\nThis feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]]\n<<<\n!!!!!Code\n***/\n//{{{\nversion.extensions.inlineJavascript= {major: 1, minor: 5, revision: 1, date: new Date(2006,6,1)};\n\nconfig.formatters.push( {\n name: "inlineJavascript",\n match: "\s\s<script",\n lookahead: "\s\s<script(?: src=\s\s\s"((?:.|\s\sn)*?)\s\s\s")?(?: label=\s\s\s"((?:.|\s\sn)*?)\s\s\s")?( show)?\s\s>((?:.|\s\sn)*?)\s\s</script\s\s>",\n\n handler: function(w) {\n var lookaheadRegExp = new RegExp(this.lookahead,"mg");\n lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = lookaheadRegExp.exec(w.source)\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {\n if (lookaheadMatch[1]) { // load a script library\n // make script tag, set src, add to body to execute, then remove for cleanup\n var script = document.createElement("script"); script.src = lookaheadMatch[1];\n document.body.appendChild(script); document.body.removeChild(script);\n }\n if (lookaheadMatch[4]) { // there is script code\n if (lookaheadMatch[3]) // show inline script code in tiddler output\n wikify("{{{\sn"+lookaheadMatch[0]+"\sn}}}\sn",w.output);\n if (lookaheadMatch[2]) { // create a link to an 'onclick' script\n // add a link, define click handler, save code in link (pass 'place'), set link attributes\n var link=createTiddlyElement(w.output,"a",null,"tiddlyLinkExisting",lookaheadMatch[2]);\n link.onclick=function(){try{return(eval(this.code))}catch(e){alert(e.description?e.description:e.toString())}}\n link.code="function _out(place){"+lookaheadMatch[4]+"};_out(this);"\n link.setAttribute("href","javascript:;"); link.setAttribute("title",""); link.style.cursor="pointer";\n }\n else { // run inline script code\n var code="function _out(place){"+lookaheadMatch[4]+"};_out(w.output);"\n code=code.replace(/document.write\s(/gi,'place.innerHTML+=(');\n try { var out = eval(code); } catch(e) { out = e.description?e.description:e.toString(); }\n if (out && out.length) wikify(out,w.output,w.highlightRegExp,w.tiddler);\n }\n }\n w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;\n }\n }\n} )\n//}}}\n
El ojo penetró en la cabeza\n y con el suave roce de sus pestañas\n barrió el moho que ocultaba las formas\n la luz de sus deseos iluminó azulmente\n los suaves lóbulos donde reposa el alma\n la torre de cristal y su fantasma gris\n\n recorrió la bóveda brillante de huesos acolchados\n donde el agua de la mente refleja las ideas\n (imágenes posibles del mundo que deseamos)\n\n la negra pupila cargada de vacío\n rozó la esencia quebradiza de los sueños\n que se agitó ante la inminencia de un acto concreto\n casi captó el concepto de belleza\n que goteaba lentamente su lágrima perpetua\n escenas de la infancia\n certezas absolutas\n oscuras dudas sobre el mundo real\n la idea de infinito...\n\n el ojo viajero\n paseando en interiores\n descubre que al final\n bajo las telarañas\n detrás de los olvidos\n detrás de las volutas del humo de los sueños\n el oscuro duende analítico\n rotundo\n se derrite en charcos de barroso temor\n por el suave viento fugaz de una sonrisa.
''Intuitive'' \sIn*tu"i*tive\s (//adj.//)\n>1. Seeing clearly; as, an intuitive view; intuitive vision.\n>2. Knowing, or perceiving, by intuition;\n>3. Capable of knowing without deduction or reasoning.\n''Interfaces'' \sIn`ter"faces\s (//noun//)\n>1. Devices and/or processes for controlling and monitoring inter-operability between complex physical systems and mechanisms\n>2. Visual, syntactic and semantic conventions and procedures for the representation and exchange of information and/or commands for controlling software applications and digital presentations.\n''Intelligent'' \sIn*tel"li*gent\s (//adj.//)\n>1. Possessing sound knowledge\n>2. Exercising or showing good judgment\n>3. Endowed with the capacity to reason\n''Interactions'' \sIn`ter*ac"tions\s (//noun//)\n>1. Mutual or reciprocal actions or influence\n>2. Sequences of events, actions, and conditional responses, combined to achieve specific goals or purposes\n
/* margins, padding, borders, position, z-index, etc... */\n[[StyleSheetLayout]] /* TW shadow */\n[[StyleSheetColors]] /* TW shadow */\n[[LayoutAdjustments]]\n[[FontAdjustments]]\n[[Gray]]\n\n/* see through tiddlers with topline*/\n.viewer { background-image:none; background-color:transparent; border-top: 1px dotted #999; padding:1em; }\n\n/* background */\nbody {\nbackground-color: #fafafa !important;\nbackground-image: url('els/JR+ELS_1024.jpg') !important;\nbackground-attachment: fixed !important;\nbackground-position: center !important;\nbackground-repeat: no-repeat !important;\nbackground-size: 100% !important; /* CSS3 not yet supported */\n}\n#titleLine, #sidebar {\nbackground-color: transparent !important;\nbackground-image: none !important;\nborder-color:transparent !important;\nborder: 0px solid #014 !important;\n}\n#siteTitle { color:#993; }\n#siteSubtitle { color:#aa0; }\n#titleLine a { color: #666; }\n\n.floatingPanel, #messageArea, .attachPanel, #importPanel, #exportPanel { background: #eee !important;}\n\n*[class="TOCList"] { background-color: transparent; color:#000; border-color:transparent !important;}\n
!!!!!Codebase Principals\nCertain JavaScript features require expanded privileges, normally restricted for use with ''signed'' scripts. For ''unsigned'' scripts to use these features, ''codebase principals'' (derived from the origin of the script rather than from verifying a digital signature of a certificate) must be used. When an unsigned script requests expanded privileges with codebase principles enabled, a dialog box advises that the script has not been digitally signed, and asks for permission to grant privileges based on the URL rather than signed/verified author information.\n>''Codebase principals are disabled by default; to enable them in FireFox, go to "about:config" in your browser, and set {{{signed.applets.codebase_principal_support}}} to {{{true}}} (//note: other browsers' settings may vary... if applicable, try adding //{{{user_pref("signed.applets.codebase_principal_support", true);}}}// to your browser's "preferences" file//).''\n\n| Privilege |Description |\n| UniversalBrowserRead|Allows reading of privileged data from the browser. This allows the script to pass the same origin check for any document.|\n| UniversalBrowserWrite|Allows modification of privileged data in a browser. This allows the script to pass the same origin check for any document.|\n| UniversalBrowserAccess|Allows both reading and modification of privileged data from the browser. This allows the script to pass the same origin check for any document.|\n| UniversalFileRead|Allows a script to read any files stored on hard disks or other storage media connected to your computer.|\n| UniversalPreferencesRead|Allows the script to read preferences using the navigator.preference method.|\n| UniversalPreferencesWrite|Allows the script to set preferences using the navigator.preference method.|\n| UniversalSendMail|Allows the program to send mail in the user's name.|\n\nThe following features require expanded privileges:\n* Setting a file upload widget requires UniversalFileRead.\n* Submitting a form to a mailto: or news: URL requires UniversalSendMail.\n* Using an about: URL other than about:blank requires UniversalBrowserRead.\n* event object: Setting any property requires UniversalBrowserWrite.\n* DragDrop event: Getting the value of the data property requires UniversalBrowserRead.\n* history object: Getting the value of any property requires UniversalBrowserRead.\n* navigator object:\n** Getting the value of a preference using the preference method requires UniversalPreferencesRead.\n** Setting the value of a preference using the preference method requires UniversalPreferencesWrite.\n* window object: Allow of the following operations require UniversalBrowserWrite.\n** Adding or removing the directory bar, location bar, menu bar, personal bar, scroll bar, status bar, or toolbar.\n** Using the methods in the following table under the indicated circumstances\n<<<\n| enableExternalCapture|To capture events in pages loaded from different servers. Follow this method with captureEvents.|\n| close|To unconditionally close a browser window.|\n| moveBy|To move a window off the screen.|\n| moveTo|To move a window off the screen.|\n| open|To create a window smaller than 100 x 100 pixels or larger than the screen can accommodate by using innerWidth, innerHeight, outerWidth, and outerHeight.<<br>>To place a window off screen by using screenX and screenY.<<br>>To create a window without a titlebar by using titlebar.<<br>>To use alwaysRaised, alwaysLowered, or z-lock for any setting.<<br>>|\n| resizeTo|To resize a window smaller than 100 x 100 pixels or larger than the screen can accommodate.|\n| resizeBy|To resize a window smaller than 100 x 100 pixels or larger than the screen can accommodate.|\n<<<\n**Setting the properties in the following table under the indicated circumstances:\n<<<\n| innerWidth|To set the inner width of a window to a size smaller than 100 x 100 or larger than the screen can accommodate.|\n| innerHeight|To set the inner height of a window to a size smaller than 100 x 100 or larger than the screen can accommodate.|\n<<<
La implacable mano del día\n deshace ya, como al pasar,\n las polvorientas telarañas\n que en su espectante vigilia tejió la noche.\n Los pájaros pasan\n sin detenerse a observar a ese perro que ladra.\n Un avión se pierde en lo alto\n como buscando los signos de la sabiduría.\n Nace un hombre,\n otro muere,\n y yo,\n como un punto en una inmensa hoja blanca,\n todavía espero.\n
En una hoja seca\n traída por el viento\n con letras inspiradas\n urdí mis pensamientos.\n\n Mas una artera brisa,\n con maña indecorosa,\n de mis ingenuas manos\n arrebató las glosas.\n\n Husmeo alcantarillas\n y hurgo en los umbrales,\n inquiero a todo el mundo,\n busco en los andurriales,\n\n por si esas rimas tornan\n a encontrarse conmigo,\n ya que, por más que quiera\n y me empeñe, no consigo\n\n repetir ese instante\n de inspiración tan clara\n pues caducó la idea\n y el estro desampara.\n\n Tal vez alguien encuentre\n mis malogrados versos\n que en una aciaga tarde\n arrebatóme el céfiro\n\n e intente en su lectura\n hallar deleite y calma,\n pues es la poesía\n el néctar de las almas.\n\n A ti, Casual, te digo:\n ahórrate el esfuerzo,\n que no existió la página,\n ni el poema, ni el cierzo;\n\n sólo una hora vacía,\n el ideal momento\n de pergeniar tranquilo\n este divertimento.
¿Fué el café, con su espuma suave y su canela\n o fué la vía láctea que bebiste\n o esa luna que asoma tras de vos?\n ¿fué ese quieto lugar que hicimos nuestro\n a fuerza de palabras, confesiones,\n fundado en caricias pronunciadas?\n\n ¿o el aliento que bebimos\n o el lento caminar en tus palabras\n o la viva idea de tu lengua?\n\n ¿fueron las mareas oscuras\n donde boyaba como espuma seca\n entre tus ojos y la boca ansiosa del horizonte?\n\n Trato de imaginar el signo silencioso\n que represente esta espectativa de fuego,\n esta soledad de efímeras hojas\n que caen noche a noche.\n\n Busco, remuevo cenizas en conflicto,\n me asomo en las habitaciones deformes\n del alma que a veces me descubro\n y siempre aparece el mismo sello:\n como el estigma de Caín, de alguna forma\n en mi frente, un fuego desde dentro\n grabó las cinco letras de tu nombre.
Delirio espiralado\n embotellada nube\n de cóncavos reflejos\n tejidos punto a punto\n\n con la delicada pinza de los dedos\n deposito tu plumosa sombra\n en la hoja de los sueños\n\n sacudo cortamente el exceso de años\n la pelusas pesarosas\n\n con la plateada espátula del beso\n raspo el sarro vil\n que en escamas oscuras como pozos\n como monedas de tenebrosa noche\n caen\n con el silencio de los muertos\n en la laguna que\n oculta por la bruma\n un botero misterioso y eterno\n impertérrito custodia\n\n y brillas al fin\n pendiendo victorioso\n de las curvas del cielo\n como una medalla acróbata y demente\n\n como la ígnea revancha de un Ícaro redimido\n que no caerá ya más\n nunca más\n jamás.
/* IE needs this */\nbody { position:static; }\n\n/* hide the main menu */\n#mainMenu { display:none; width: auto; text-align:center }\n\n/* hide the side bar */\n#sidebar { display:none; width:18em; }\n\n/* move message area into header */\n#messageArea { position:absolute; top:0; right:0; margin: 0.5em;padding: 0.5em; }\n\n/* make these areas fixed so they don't scroll with the page content */\n/* note: wildcard selector not recognized by IE */\n*[id="messageArea"] { position:fixed !important; z-index:99; }\n*[id="sidebar"] { position:fixed !important; }\n*[id="mainMenu"] { position:fixed !important; }\n\n/* shift tiddler toolbar onto same line as tiddler title */\n.toolbar { float:right; display:inline; padding-bottom:0; }\n\n/* no borders on .buttons */\n.button { background:transparent; }\n.button, .button:hover, .button:active { border: 0; }\n\n/* tune-up spacing around toolbar buttons */\n.toolbar .button { border:1px solid transparent; background:transparent; margin:0px 1px; padding:0px .5em; -moz-border-radius:.5em; }\n.toolbar .button:hover { border:1px solid #69c; background:#006; }\n\n/* padding for heading area */\n#titleLine { padding: 0.5em 0.5em 0.5em 0.5em; }\n\n/* margins for display area (no sidebars)*/\n#displayArea { margin:0em 1em 0em 1em; }\n\n/* smaller size for bread crumbs (see BreadcrumbsPlugin) */\n#breadCrumbs { margin-left:1em; margin-top:.3em; font-size:8pt; }\n\n/* rounded corners on tag display areas */\n.tagged, .tagging { -moz-border-radius:5px; }\n\n/* borderless style */\n.borderless, .borderless td, .borderless tr, .borderless th, .borderless tbody { border:0 !important; padding:.3em; margin:0px; vertical-align:top; }\n.borderless { width:98% }\n.borderless td { width:33% }\n\n/* group box */\n.groupbox { display:block; padding:.5em; -moz-border-radius:1em; background:#fff; border:1px solid #000; color:#000; }\n\n/* alignments */\n.left { display:block;text-align:left; }\n.floatleft { text-align:left;float:left; }\n.right { display:block;text-align:right; }\n.floatright { text-align:right;float:right; }\n.center { display:block;text-align:center; }\n\n/* general style for floating panels */\n.floatingPanel, .floatingPanel td, .floatingPanel .tabContents { background-color:#eee; color:#000; }\n.floatingPanel .button, .floatingPanel a, #titleLine .floatingPanel .button, #titleLine .floatingPanel a { color:#009; }\n.floatingPanel a:hover, #titleLine .floatingPanel a:hover { color:#fff; }\n.floatingPanel tbody, .floatingPanel th, .floatingPanel tr, .floatingPanel td { background-color:transparent; }\n.floatingPanel hr { margin:2px 0 1px 0; padding:0; }\n.floatingPanel { padding:1em; margin:0em; border:1px solid black; -moz-border-radius:1em; font-size:8pt; text-align:left; }\n.floatingPanel .attachPanel, .floatingPanel #importPanel, .floatingPanel #exportPanel { left:1em; top:3em; }\n\n/* limit height and add scrollbars to tabs inside floating panels */\n.floatingPanel .tab {\n -moz-border-radius-topleft:.5em;-moz-border-radius-topright:.5em;\n background-color:transparent; border:1px solid #999;\n border-bottom: 0px !important; padding-bottom:1px !important;\n}\n.floatingPanel .tabSelected { background-color:#fff;}\n.floatingPanel .tabContents { background-color:transparent; -moz-border-radius:1em; height:25em; overflow:auto; }\n.floatingPanel .tabContents .tabContents { height:21em !important; }\n.floatingPanel *[id="TOCListbox"] { height:auto !important; overflow:hidden !important; }\n\n/* sidebar */\n#sidebar { overflow:visible; background-color:transparent; }\n#sidebar .sliderPanel { font-size:100%; background:transparent !important; margin:0;}\n#sidebarOptions { padding-top:1em; }\n#sidebar .attachPanel { right:115%; top:4em; z-index:11; }\n#sidebar #importPanel { right:115%; top:7em; z-index:12; }\n#sidebar #exportPanel { right:115%; top:10em; z-index:13; }\n#sidebarOptions .tab { font-size:7pt; }\n#sidebarOptions .tabContents { width: 15em; overflow: hidden; }\n#sidebarOptions .sliderPanel .tabContents { font-size:7pt; border:0px; background:#fff; border:1px solid #000; }\n\n/* limit height and add scrollbars to tabs inside #sidebarOptions */\n#sidebarOptions .tab {\n -moz-border-radius-topleft:.5em;-moz-border-radius-topright:.5em;\n background-color:transparent; border:1px solid #999;\n border-bottom: 0px !important; padding-bottom:1px !important;\n}\n#sidebarOptions .tabSelected { background-color:#fff;}\n#sidebarOptions .tabSelected a, #sidebarOptions .tabSelected .button { color: #33f; }\n#sidebarOptions .tabContents { background-color:transparent; -moz-border-radius:1em; height:25em; overflow:auto; width:92.5%; }\n#sidebarOptions .tabContents .tabContents { height:21em !important; }\n#sidebarOptions *[id="TOCListbox"] { height:auto !important; overflow:hidden !important; }\n\n/* make sure popups are above floating panels */\n.popup { z-index:100; white-space:nowrap; }\n\n/* tiddler tab panels */\n.viewer .tab { padding-left:5px; padding-right:5px; padding-bottom:0px; }\n.viewer .tabSelected { \n border: 1px solid #000; border-bottom: 0px !important; padding-bottom:1px !important;\n -moz-border-radius-topleft: 0.75em; -moz-border-radius-topright: 0.75em;\n}\n.viewer .tabUnselected {\n border: 1px solid #666; border-bottom: 0px !important;\n -moz-border-radius-topleft: 0.75em; -moz-border-radius-topright: 0.75em;\n}\n.viewer .tabContents {\n border: 1px solid #000;\n -moz-border-radius: 1em;\n padding: 1em;\n}\n\n/* general whitespace adjustments */\n.tiddler, .selectedTiddler, .unselectedTiddler { margin: 0em; margin-top:1em; padding:0em; border:0px;}\n.viewer { padding: 0.7em; text-align:justify; }\n.viewer blockquote { text-align:left; }\ninput[type="Checkbox"] { margin-top:2px;margin-bottom:2px; }
''Copyrights:''\n<<<\n[>img[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/images/public/somerights20.png][http://creativecommons.org/licenses/by-sa/2.5/]] This work is based upon TiddlyWiki <<version>>, written by Jeremy Ruston, © Osmosoft Limited, which has been distributed under a BSD open source license. Modifications and additions to this work, including (but not limited to) original programmatic elements ("plugins", "macros", "scripts", "stylesheets") have been created by ELS Design Studios. Unless otherwise noted, you are permitted to use, copy, and/or modify these components, subject to the terms and conditions of the [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]] as well as all terms and conditions specifically included within this work.\n\nAll other original creative content contained herein, including (but not limited to) writings, images, sounds, and other non-programmatic information, are the property of Eric L. Shulman and/or ELS Design Studios, or are used under license or agreement with third parties, and may not be stored or re-transmitted for purposes other than than normal use and viewing, nor used for any commercial purposes, without express permission of the respective rights holders.\n\n"ELS Design Studios", "Intuitive Interfaces for Intelligent Interactions" and the "i4" logo are trademarks or servicemarks of ELS Design Studios and may not be used without permission.\n<<<\n''Limits on Liability:''\n<<<\nAll materials are presented on an "as-is" basis and are subject to change without notice. ELS Design Studios makes no claims regarding the suitability or reliability of the information presented, and assumes no liability for any damages that may occur as a result of its use.\n<<<\n''Privacy Notice: ''\n<<<\nELS Design Studios limits the collection and use of non-public, personal customer information to that which is needed to offer products and services, and to file reports or financial statements as required by law. ELS Design Studios has physical, electronic and procedural safeguards to maintain the protections of private information, and does not provide, sell or otherwise disclose such information to non-affiliated third parties.\n<<<\n{{center{^^//please review these statements periodically, as they are subject to change without notice//^^}}}
/* margins, padding, borders, position, z-index, etc... */\n[[StyleSheetLayout]] /* TW shadow */\n[[StyleSheetColors]] /* TW shadow */\n[[LayoutAdjustments]]\n[[FontAdjustments]]\n[[Gray]]\n[[BrightText]]\n\n/* borderless tiddlers */\n.viewer { background-image:none; background-color:transparent; padding: 1em; border: 0px; }\n\n/* ghostly background */\n.viewer { background-color: #003; opacity: .80; filter: alpha(opacity=80); border: 2px solid #009; -moz-border-radius:1em }\n\n/* background */\nbody { background-image: url('els/fish.jpg') !important; background-attachment: fixed !important; }\n#titleLine, #sidebar {\nbackground-color: transparent !important;\nbackground-image: none !important;\nborder-color:transparent !important;\nborder: 0px solid #014 !important;\n}\n#siteTitle { color:#66f; }\n#siteSubtitle { color:#99c; }\n#titleLine a { color: #66f; }\n\n.floatingPanel, #messageArea, .attachPanel, #importPanel, #exportPanel { background: #def !important;}\n\n*[class="TOCList"] { background-color: transparent; color:#fff; border-color:transparent !important;}\n
<<tiddler LibraryScript>><html><form style="display:inline;padding:0;margin:0" onsubmit="window.library_new(this); return false;"><!--\n --><input type=text style="width:15em;font-size:8pt" name="docid" value="document id" onfocus="this.select()"><!--\n --><input type=text style="width:35em;font-size:8pt" name="title" value="document title" onfocus="this.select()">\n <input type=text style="width:35em;font-size:8pt" name="url" value="location (url)" onfocus="this.select()"><!--\n --><input type=text style="width:15em;font-size:8pt" name="ver" value="version" onfocus="this.select()">\n <input type=text style="width:35em;font-size:8pt" name="author" value="author/moderator" onfocus="this.select()"><!--\n --><input type=text style="width:15em;font-size:8pt" name="date" value="date" onfocus="this.select()">\n <input type=text style="width:50em;font-size:8pt" name="descr" value="description" onfocus="this.select()">\n <input type=submit value="create entry"> <input type="hidden" value="delete entry" onclick="window.library_delete(this.form.docid.value,story.findContainingTiddler(this))"> <input type=reset value="reset values"></form></html>
@@font-size:12pt;+++[add a document...]\n<<br>>@@font-size:8pt;enter new document information:@@\n<<<\n <<tiddler LibraryForm>>\n<<<\n===\n@@\n----\n<script>\n // display all library entries\n var field="modified";\n var dir=-1; // +1==ascending, -1==descending\n var tiddlers=store.getTiddlers(field);\n tiddlers.sort(function(a,b){if(a[field]==b[field])return(0);else return(a[field]<b[field])?-dir:dir;});\n var out="";\n for (var i=0; i<tiddlers.length; i++) {\n if (tiddlers[i].tags.find("LibraryEntry")==null) continue;\n var what=tiddlers[i].title;\n var who=tiddlers[i].modifier;\n var when=tiddlers[i].modified.formatString("DDD, MMM DDth, YYYY at hh:0mm:0ss");\n out+="[[%0]]\sn^^entry updated by ''%1'' on ''%2''^^\sn<<<\sn<<tiddler [[%0]]>>\sn<<<\sn".format([what,who,when]);\n }\n return out;\n</script>
<script>\n // create/update library entry tiddler\n window.library_delete = function(id,here) {\n var exists=store.tiddlerExists(id); if (!exists) return;\n if (confirm("Are you sure you want to delete '"+id+"'?")) { story.closeTiddler(id); store.deleteTiddler(id); }\n if (here) story.refreshTiddler(here.getAttribute("tiddler"),null,true);\n if (store.tiddlerExists("LibraryManager")) story.refreshTiddler("LibraryManager",null,true);\n }\n\n window.library_new = function(f) {\n if (!f.docid.value || !f.docid.value.trim().length) return;\n var exists=store.tiddlerExists(f.docid.value);\n if (!exists && f.docid.value==f.docid.defaultValue) { alert("Please enter a document ID"); f.docid.focus(); return; }\n\n var text=store.getTiddlerText("LibraryForm");\n if (!text || !text.length) return;\n function setFormField(text,name,value) { \n // set any form control default values\n var re=new RegExp('name="%0" value=".*" onfocus'.format([name]));\n var sub='name="%0" value="%1" onfocus'.format([name,value]);\n text=text.replace(re,sub);\n // set any embedded text value between 'field-name markers'\n var re=new RegExp("\s\s/%%0%\s\s/.*\s\s/%%0%\s\s/".format([name]));\n var sub='/%%0%/ %1 /%%0%/'.format([name,value]);\n return text.replace(re,sub);\n }\n text=setFormField(text,"docid",f.docid.value);\n text=setFormField(text,"title",f.title.value);\n text=setFormField(text,"url",f.url.value);\n text=setFormField(text,"ver",f.ver.value);\n text=setFormField(text,"author",f.author.value);\n text=setFormField(text,"date",f.date.value);\n text=setFormField(text,"descr",f.descr.value);\n text=text.replace(/value="create entry"/,'value=\s"update entry\s"');\n text=text.replace(/type="hidden"/,'type=\s"button\s"');\n\n var tags="LibraryEntry test excludeLists excludeSearch excludeMissing";\n store.saveTiddler(f.docid.value,f.docid.value,text,config.options.txtUserName,new Date(),tags);\n\n store.setDirty(true); story.refreshTiddler(f.docid.value,null,true);\n var t=story.findContainingTiddler(f); if (t) story.refreshTiddler(t.getAttribute("tiddler"),null,true);\n clearMessage(); displayMessage("'"+f.docid.value+"' has been "+(exists?"updated":"created"));\n }\n</script>
<<tiddler LibraryScript>><html><form style="display:inline;padding:0;margin:0" onsubmit="window.library_new(this); return false;"><!--\n --><input type=text style="width:15em;font-size:8pt" name="docid" value="LibraryTestDocument1" onfocus="this.select()"><!--\n --><input type=text style="width:35em;font-size:8pt" name="title" value="This is a Title Without Quotes, but with a comma in it" onfocus="this.select()">\n <input type=text style="width:35em;font-size:8pt" name="url" value="http://not.actually.posted.online.com/" onfocus="this.select()"><!--\n --><input type=text style="width:15em;font-size:8pt" name="ver" value="1.0.1" onfocus="this.select()">\n <input type=text style="width:35em;font-size:8pt" name="author" value="Eric Shulman" onfocus="this.select()"><!--\n --><input type=text style="width:15em;font-size:8pt" name="date" value="6/16/06" onfocus="this.select()">\n <input type=text style="width:50em;font-size:8pt" name="descr" value="This is a test, this is only a test... if this was a real decription, it would say something useful." onfocus="this.select()">\n <input type=submit value="update entry"> <input type="button" value="delete entry" onclick="window.library_delete(this.form.docid.value,story.findContainingTiddler(this))"> <input type=reset value="reset values"></form></html>
<<tiddler LibraryScript>><html><form style="display:inline;padding:0;margin:0" onsubmit="window.library_new(this); return false;"><!--\n --><input type=text style="width:15em;font-size:8pt" name="docid" value="LibraryTestDocument2" onfocus="this.select()"><!--\n --><input type=text style="width:35em;font-size:8pt" name="title" value="This Is Another Title" onfocus="this.select()">\n <input type=text style="width:35em;font-size:8pt" name="url" value="http://somewhere.not.online.com/" onfocus="this.select()"><!--\n --><input type=text style="width:15em;font-size:8pt" name="ver" value="2006Q2 rev0.5a" onfocus="this.select()">\n <input type=text style="width:35em;font-size:8pt" name="author" value="accounting dept" onfocus="this.select()"><!--\n --><input type=text style="width:15em;font-size:8pt" name="date" value="6/15/2006" onfocus="this.select()">\n <input type=text style="width:50em;font-size:8pt" name="descr" value="This is a preliminary rollup for the end of Q2 2006 - final version due 7/15/2006" onfocus="this.select()">\n <input type=submit value="update entry"> <input type="button" value="delete entry" onclick="window.library_delete(this.form.docid.value,story.findContainingTiddler(this))"> <input type=reset value="reset values"></form></html>
Despliegue la lista con el botoncito [[puemas]] ubicado abajo a la derecha...
Ocaso aplacó tus vapores agresivos\n y una brisa a contramano\n no alcanza a rizar tu epidermis aceitosa\n cuyas lácteas lunecencias\n ondulan, como boas ancestrales,\n hacia un remoto origen de yemas optimistas.\n\n Cinta de luto, aún más anochecida,\n con una hebilla de plata que trae del recuerdo\n orillas frescas y juncos estremecidos.\n\n ¡Pobrecito animal manso y apaleado!\n En tu agónico reptar de pluviales movimientos\n aún persiste la memoria del vergel y los jazmines.\n\n Esta noche olvidás la ofensa suburbana\n y brillás,\n generosa guirnalda que se tiende\n desde mi desazón al ojo ebúrneo\n que nos mira discurrir conjuntamente\n en un intento terco y obsecado\n de mantener el cauce y la mirada.\n\n Desde el puente,\n tus reflejos de ameba iridiscente\n estallan calmos, me dilatan, me contraen,\n en un musical silencio de latidos apagados.\n\n ¡Contagiame la gracia\n que, aún en los estertores subcutáneos de tu muerte,\n le gritás a las ruinas fabriles de tu vera,\n que, atónitas,\n en su limbo lunar de grúas oxidadas,\n no entienden (pobreza mineral)\n que en tu lecho de barros venenosos\n subyace el germen subversivo de tu vida!
Quiero ser el monstruo que reflota tus tormentos\n quiero ver el humo de tus fantasmas agrisándote la piel\n las lágrimas de tu pasado ardiéndote en zurcos de azufre\n quiero ser el villano que reavivie tus miedos\n el demonio turbador de tu tranquilidad complaciente\n estrellas y espinas quiero darte\n .\n quiero que veas todas tus miserias\n las conozcas\n que recorras los laberintos asfixiantes de tu infierno\n hasta que aprendas de memoria sus secretos\n\n no te quiero perfecta\n te quiero bien parada\n no esfinge\n sino guerrera obsecada\n amazona de vos misma\n dueña de tus risas y tus llantos\n\n que la bofetada con que te amo\n estalle tus tristezas en cristales agresivos\n y corten las riendas de tu esencia\n y al fin te desboques\n\n no quiero hacer tu vida fácil sino bella\n espinas y estrella quiero darte\n\n mi amor\n como látigo riente\n te arinconará en tu propio abismo\n porque sé que en el fondo está tu fuerza\n\n quiero recorrer con vos los extraños caminos\n del propio conocimiento\n abordar los horizontes de fuego donde el temor se quema\n y el espíritu se se aclara y se ilumina\n se puebla de árboles frondosos y flores imposibles\n\n quiero amarte antes\n quiero amarte mientras tanto\n y quiero amarte al fin\n cuando surjas de la ciénaga intangible y subconciente\n libre ya de tu barro\n florecida y eterna.
<script>place.style.textAlign="left";place.style.borderLeft="1px solid";place.style.marginLeft="0.2em";</script> +++(expandir)![Principal|Menú principal]\n|[[TiddlyTools]]|\n|<script label="welcome">story.closeTiddler('Welcome');story.displayTiddler(null,'Welcome',1);return false;</script>|\n|[[about|DocumentAbout]]|\n|[[changes|DocumentChanges]]|\n|[[download|DocumentDownload]]|\n|[[credits|DocumentCredits]]|\n|[[legal|LegalStatements]]|\n===\n----\n+++![Plugins]\n[[status|DocumentPlugins]]\n[[catalog|TiddlyStudiosCatalog]]\n===\n----\n+++![Varios]\n[[MiniBrowser]]\n[[MediaCenter]]\n[[MainMenu]]\n[[Contenido|SideBarTabs]]\n[[ToggleSidebars]]\n<<closeAll>>\n===\n----\n+++![Config]\n[[SideBarOptions]]\n[[SideBarTabs]]\n[[StyleSheetColors]]\n[[StyleSheetLayout]]\n[[StyleSheetPrint]]\n[[SiteSubtitle]]\n[[SiteTitle]]\n===\n----\n+++![Enlaces|Otros sitios]\n[[Ultraversal|http://www.ultraversal.org]]\n===\n----\n[[Editor|TidIDETools]]
Me gusta verte dormida\n distendida en la dulce ausencia de los sueños\n con el pelo ocultando a medias\n tu gesto complacido\n continuando\n aún en la distancia solitaria del descanso\n tu juego seductor\n involuntario.\n
<html><form id="playerform_$1" style="margin:0;padding:0"\n onsubmit="config.macros.player.loadURL(null,'player_$1',null,this.url.value,this.w.value,this.h.value,this.ctrls.checked);return false;"><!--\n--><nobr><select size="1" style="font-size:8pt;width:30%"\n onchange="this.form.url.value=this.value; config.macros.player.loadURL(null,'player_$1', null, this.form.url.value, this.form.w.value, this.form.h.value, this.form.ctrls.checked);">\n<option value="">Favorites:</option>\n\n<!-- BEGIN FAVORITES -->\n<option value="http://www.nccbuscc.org/cchd/povertyusa/tour.swf"> "PovertyUSA" - WATCH THIS!</option>\n<option value="http://wolfram.org/media/jack_20050310_cleaned.mov"> Jack W counts (1yr old)</option>\n<option value="http://www.kulakswoodshed.com/high.asx"> Kulak's Woodshed: Live/Recorded acoustic music</option>\n<!-- insertion marker - do not remove this comment -->\n<option value="">webcams...</option>\n<option value="http://www.earthcam.com/usa/newyork/timessquare/asx/tsq_stream.asx"> Times Square</option>\n<option value="http://www.mbayaq.org/media/STRM/mba_mbay.asx"> Monterey Bay</option>\n<option value="http://www.mbayaq.org/media/strm/mba_shark.asx"> Monterey Aquarium - Sharks</option>\n<option value="http://www.aroundtownnc.com/wvx/beachcam.wvx"> Wrightsville Beach, North Carolina</option>\n<option value="http://www.terena.nl/~dick/cam2.asx"> Koningsplein, Amsterdam</option>\n<option value="http://195.6.173.164/liensmedias/webcam.asx"> Corsica</option>\n<option value="">news...</option>\n<option value="http://www.bloomberg.com/streams/video/LiveBTV200.ram"> Bloomberg Business News</option>\n<option value="http://www.bbc.co.uk/london/realmedia/news/tvnews.ram"> BBC News - London</option>\n<option value="http://www.bbc.co.uk/newsa/n5ctrl/summaries/entertain/bb_liquid_news.ram"> BBC News - Entertainment</option>\n<option value="">movies (AmericaFree.TV)...</option>\n<option value="http://www.americafree.tv/unicast_mov/AmericaFreeTVComedy.mov"> Classic Comedy</option>\n<option value="http://www.americafree.tv/unicast_mov/AmericaFreeTVClassics.mov"> Classic Movies</option>\n<option value="http://www.americafree.tv/unicast_mov/AmericaFreeTVDimensionB.mov"> "B" Movies</option>\n<option value="">science/education...</option>\n<option value="http://www.scctv.net/annenberg_broadband.asx"> PBS: Annenberg/CPB</option>\n<option value="http://science.ksc.nasa.gov/video/nasatv/nasatv.asx"> NASA TV</option>\n<option value="">government...</option>\n<option value="http://play.rbn.com/play.asx?url=cspan/cspan/wmlive/cspan1v.asf&proto=mms?mswmext=.asx"> C-SPAN 1</option>\n<option value="http://play.rbn.com/play.asx?url=cspan/cspan/wmlive/cspan2v.asf&proto=mms?mswmext=.asx"> C-SPAN 2</option>\n<option value="http://play.rbn.com/play.asx?url=cspan/cspan/wmlive/cspan3v.asf&proto=mms?mswmext=.asx"> C-SPAN 3</option>\n<option value="">games...</option>\n<option value="http://www.planetdan.net/pics/misc/georgerag.swf"> Rag Doll</option>\n<option value="http://www.80smusiclyrics.com/games/asteroids/asteroids.swf"> Asteroids</option>\n<option value="http://www.80smusiclyrics.com/games/pacman/pacman.swf"> PacMan</option>\n<option value="http://www.aftergames.com/games/pp_tetris.swf"> Tetris</option>\n<option value="http://www.80smusiclyrics.com/games/simon/simon.swf"> Simon</option>\n<option value="http://www.aftergames.com/games/pp_breakout.swf"> Breakout</option>\n<!-- END FAVORITES -->\n\n</select><!--\n--><input type="button" value="+" title="ADD - add URL to the Favorites" style="font-size:8pt;width:3%"\n onclick="window.mediaCenterAdd(this.form.url);"><!--\n--><input type="button" value="-" title="DEL - remove URL from the Favorites" style="font-size:8pt;width:3%"\n onclick="window.mediaCenterDelete(this.form.url);"><!--\n--><input type="text" name="url" size="40" value="" style="font-size:8pt;width:54%"\n onfocus="this.select()"><!--\n--><input type="submit" value=">" title="PLAY - view URL" style="font-size:8pt;width:3%"\n ><!--\n--><input type="button" value="x" title="STOP - disconnect from URL" style="font-size:8pt;width:3%"\n onclick="config.macros.player.loadURL(null,'player_$1',null,null,this.form.w.value,this.form.h.value);"><!--\n--><input type="button" value="..." title="OPEN - view URL in a separate player" style="font-size:8pt;width:3%"\n onclick="if(this.form.url.value.length)window.open(this.form.url.value)">\n<center><<player "id=player_$1">></center><div style="float:right;font-size:8pt"><!--\n--> size: <input type="text" name="w" size="3" value="" style="font-size:8pt;"\n onfocus="this.select()"><!--\n-->x<input type="text" name="h" size="3" value="" style="font-size:8pt;"\n onfocus="this.select()"><!--\n--> <input type="submit" value="set" style="font-size:8pt;width:5%"\n onclick="if(!this.form.w.value.trim().length)this.form.w.value=config.options.txtPlayerDefaultWidth; if(!this.form.h.value.trim().length)this.form.h.value=config.options.txtPlayerDefaultHeight;"><!--\n--><input type="submit" value="reset" style="font-size:8pt;width:5%"\n onclick="this.form.w.value=config.options.txtPlayerDefaultWidth; this.form.h.value=config.options.txtPlayerDefaultHeight; this.form.ctrls.checked=true"><!--\n--><input type="button" value="fit" title="resize player to fit containing window" style="font-size:8pt;width:5%"\n onclick="window.mediaCenterFitSize(this)"><!--\n--></div><!--\n--> <input type="checkbox" name="ctrls" CHECKED \n onclick="config.macros.player.loadURL(null,'player_$1', null, this.form.url.value, this.form.w.value, this.form.h.value, this.checked)">show controls<!--\n--></nobr></form></html><script>\n\ndocument.getElementById("playerform_$1").w.value=config.options.txtPlayerDefaultWidth;\ndocument.getElementById("playerform_$1").h.value=config.options.txtPlayerDefaultHeight;\n\nwindow.mediaCenterFitSize = function(place) {\n var trim=89; // fudge factor to account for the other controls + padding + borders. ADJUST THIS VALUE TO FIT LAYOUT\n var t=story.findContainingTiddler(place); if (!t) { t=place; while (t && t.className!='floatingPanel') t=t.parentNode; } if (!t) return;\n var w="100%"; // horizontal stretching via CSS works, but vertical stretching doesn't... so:\n var h=t.offsetHeight-trim; // workaround: get containing panel/tiddler height and subtract "trim" height\n config.macros.player.loadURL(null,'player_$1',null,place.form.url.value,w,h,place.form.ctrls.checked); // reload player with new size\n place.form.w.value=w; place.form.h.value=h; // update width/height input fields\n}\n\nwindow.mediaCenterAdd = function(place) {\n if (!place.value.length) return;\n var tiddler = store.getTiddler("MediaCenter");\n var pos=tiddler.text.indexOf("<!-- insertion marker");\n if (pos==-1) pos=tiddler.text.length;\n var description=prompt("Please enter a description for\sn"+place.value);\n if (!description || !description.length) return;\n var txt='<option value="'+place.value+'"> '+description+'</option>\sn';\n tiddler.set(null,tiddler.text.substr(0,pos)+txt+tiddler.text.substr(pos));\n story.refreshTiddler("MediaCenter",1,true);\n store.setDirty(true);\n}\nwindow.mediaCenterDelete = function(place) {\n if (!confirm("Are you sure you want to remove this favorite?\sn\sn"+place.value)) return;\n var tiddler = store.getTiddler("MediaCenter");\n var optRegExp=new RegExp('<option value="'+place.value+'"> .*</option>\s\s\sn',"i");\n tiddler.set(null,tiddler.text.replace(optRegExp,""));\n story.refreshTiddler("MediaCenter",1,true);\n store.setDirty(true);\n}\n</script>
Ya tomé mi ración de enredaderas,\n he vestido mi traje de helechos voluptuosos\n y caminé descalzo por el pasto.\n\n He reído y llorado\n hasta renovar mi sangre rancia.\n\n Respiré el aire quemante de las furias\n y los helados vapores de la indiferencia\n hasta encallecer mis ávidos pulmones.\n\n He oído,\n he oído tanto...\n He oído el lejano chirriar de las estrellas,\n el suave respirar de los pantanos\n y el subterráneo crujir\n del odio, el egoísmo y la avaricia.\n He oído hasta el dolor,\n hasta el hartazgo.\n\n Mis manos tocaron tesoros increíbles:\n los velos azules de las volátiles medusas\n que en las tardes quietas caen desde el cielo\n como paracaidistas dormidos,\n\n las lúbricas arcillas\n con que el pícaro alfarero\n modela las tinajas transparentes\n donde, como criaturas crédulas, guardamos el pasado,\n\n las perlas diáfanas de las risas de los niños\n que, como agua clara, corría entre mis dedos.\n\n Si, maravillas fabulosas he tocado...\n y también las pestilencias más obscenas:\n\n las babas verdosas de los moluscos obsecuentes,\n la arena áspera de la mediocridad\n (no sólo la mía),\n las espumas ácidas de las cosas sin retorno,\n las ardientes llagas que la lucha cotidiana\n abre en la piel y el alma\n de los que, tozudamente, tratan de conservar\n el cuerpo y la conducta.\n\n Y he visto,\n he visto tanto...\n He visto el minúsculo temblor\n de los átomos uniéndose,\n vi el chispazo primordial\n y el último cataclismo\n (renacimiento).\n Vi miserias programadas, virtudes inesperadas,\n valles verdes de amor\n y cráteres purulentos\n donde bullen las mezquinas ruindades\n y la especulación de los mercaderes del odio.\n He visto la más ciega de las noches\n y los cielos surcados por tropeles espumosos.\n\n He visto también hasta el dolor,\n también hasta el hartazgo,\n hasta la fascinación y el éxtasis.\n\n He sido de barro,\n de sal,\n de hielo,\n\n fui de sangre,\n de cristal,\n de fuego,\n de agua profunda,\n de hiel vencida.\n de cielo abierto.\n\n fui hormiga,\n pez,\n cóndor de vuelo eterno,\n querube incuestionable\n y criatura del averno.\n\n Pensé, sentí, toqué,\n ví, oí y respiré\n tantas cosas.\n Abarqué tanto con mi percepción,\n con mis deseos,\n que casi no dí cabida a los hechos.\n\n Y me siento hueco.
Diminuto soy\n voy atravesando selvas de gramillas\n en pos de una gota de rocío\n donde saciar esta sed de simplezas.\n\n Trepo por tallos lisos\n suavemente verdes\n asomo mi asombro\n por encima de balanceados penachos\n y veo inquietos gorriones\n saltando su invisible cuerda.\n\n Hay una verdad que se vislumbra\n tímida, casi transparente,\n sencilla y contundente\n entre pequeños peñascos\n e insectos que hacen su vida\n como debe ser.\n\n ¿Qué haré cuando crezca?\n Cuando me yerga\n sobre este pequeño horizonte\n y alcance la dimensión compleja\n de esos seres absurdamente irracionales\n que predan lo obvio,\n decime: ¿qué haré?\n
Ya te dí coraje\n volá ahora y perdete\n en vericuetos ajenos\n sólo reclamo para mí\n el momento de nacerte.\n
<html><form target="browser_$1" style="margin:0;padding:0"\n onsubmit="this.action=this.url.value" style="margin:0;padding:0"><!--\n--><input type="button" value="<" title="back" style="font-size:8pt;width:3%"\n onclick="try{window.frames['browser_$1'].history.go(-1)}catch(e){window.history.go(-1)}" ><!--\n--><input type="button" value=">" title="forward" style="font-size:8pt;width:3%"\n onclick="try{window.frames['browser_$1'].history.go(+1)}catch(e){window.history.go(+1)}"><!--\n--><input type="button" value="+" title="refresh"style="font-size:8pt;width:3%"\n onclick="window.frames['browser_$1'].location.reload()"><!--\n--><input type="button" value="x" title="stop"style="font-size:8pt;width:3%"\n onclick="window.stop()"><!--\n--><select size="1" style="font-size:8pt;width:20%"\n onchange="if (!this.value.length) return false;this.form.url.value=this.value;this.form.action=this.value;this.form.submit()">\n\n<!-- START FAVORITES -->\n<option value="about:blank">Favorites</option>\n<!-- AUTOINSERT NEW URL HERE -->\n<option value="">GoogleGroups...</option>\n<option value="http://groups.google.com/group/TiddlyWiki/"> TiddlyWiki</option>\n<option value="http://groups.google.com/group/TiddlyWikiDev/"> TiddlyWiki Dev</option>\n<option value="http://groups.google.com/group/GTD-TiddlyWiki/"> GTD TiddlyWiki</option>\n<option value="http://groups.google.com/group/TiddlyWikiRequests/"> TiddlyWiki Requests</option>\n<option value="">TiddlySites...</option>\n<option value="http://www.TiddlyWiki.com"> TiddlyWiki Official Site</option>\n<option value="http://www.TiddlyTools.com"> TiddlyTools</option>\n<option value="http://www.TiddlyStyles.com"> TiddlyStyles</option>\n<option value="http://www.TiddlyForge.net"> TiddlyForge</option>\n<option value="">General...</option>\n<option value="http://www.cnn.com"> News - CNN</option>\n<option value="http://news.bbc.co.uk"> News - BBC</option>\n<option value="http://my.yahoo.com"> News - MyYahoo</option>\n<option value="http://www.unitedmedia.com/comics/"> Comics</option>\n<option value="http://tv.yahoo.com/grid?.intl=us&zip=94086&.done=&lineup=us_CA04614"> Television</option>\n<option value="http://www.wunderground.com/US/CA/Sunnyvale.html"> Weather</option>\n<option value="http://quake.wr.usgs.gov/recenteqs/latest.htm"> Earthquakes</option>\n<option value="http://maps.google.com"> Maps</option>\n<!-- END FAVORITES -->\n\n</select><!--\n--><input type="text" name="url" size="60" value="" style="font-size:8pt;width:39%"\n onfocus="this.select()"><!--\n--><input type="button" value="go" title="view this URL" style="font-size:8pt;width:7%"\n onclick="this.form.action=this.form.url.value; this.form.submit()"><!--\n--><input type="button" value="add" title="add this URL to the Favorites" style="font-size:8pt;width:7%"\n onclick="window.inlineBrowserAdd(this.form.url);"><!--\n--><input type="button" value="del" title="remove this URL from the Favorites" style="font-size:8pt;width:7%"\n onclick="window.inlineBrowserDelete(this.form.url);"><!--\n--><input type="button" value="open" title="open this URL in a separate window" style="font-size:8pt;width:7%"\n onclick="if(this.form.url.value.length) window.open(this.form.url.value)">\n<iframe name="browser_$1" height="500" width="100%" style="background:#fff"></iframe></form></html><script>\n\nwindow.inlineBrowserAdd = function(place) {\n if (!place.value.length) return;\n var tiddler = store.getTiddler("MiniBrowser");\n var pos=tiddler.text.indexOf("<!-- AUTOINSERT NEW URL HERE -->");\n if (pos==-1) pos=tiddler.text.length;\n var description=prompt("Please enter a description for\sn"+place.value);\n if (!description || !description.length) return;\n var txt='<option value="'+place.value+'"> '+description+'</option>\sn';\n tiddler.set(null,tiddler.text.substr(0,pos)+txt+tiddler.text.substr(pos));\n story.refreshTiddler("MiniBrowserFavorites",1,true);\n story.refreshTiddler("MiniBrowser",1,true);\n store.setDirty(true);\n}\n\nwindow.inlineBrowserDelete = function(place) {\n if (!confirm("Are you sure you want to remove this favorite?\sn\sn"+place.value)) return;\n var tiddler = store.getTiddler("MiniBrowser");\n var optRegExp=new RegExp('<option value="'+place.value+'"> .*</option>\s\s\sn',"i");\n tiddler.set(null,tiddler.text.replace(optRegExp,""));\n story.refreshTiddler("MiniBrowser",1,true);\n store.setDirty(true);\n}\n</script>
/***\n''MoveablePanelPlugin for TiddlyWiki version 2.x''\n^^author: Eric Shulman - ELS Design Studios\nsource: http://www.TiddlyTools.com/#MoveablePanelPlugin\nlicense: [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]^^\n\nAdd move, size, max/restore mouse event handling and fold/unfold, hover/scroll, and close/dock toolbar command items to any floating panel or tiddler. (see NestedSlidersPlugin for floating panel syntax/usage).\n\n!!!!!Usage\n<<<\nsyntax: {{{<<moveablePanel>>}}}\n\nexample: //using NestedSlidersPlugin 'floating panel' syntax//\n//{{{\n+++^30em^[panel]<<moveablePanel>>this is a headline for the panel\n----\n this is a moveable floating panel\n with a few lines of text\n as an example for you to try...\n //note: this line is really long so you can see what happens to word wrapping when you re-size this panel//\n===\n//}}}\nTry it: +++^30em^[panel]<<moveablePanel>>this is a headline for the panel\n----\n this is a moveable floating panel\n with a few lines of text\n as an example for you to try...\n //note: this line is really long so you can see what happens to word wrapping when you re-size this panel//\n===\n\n\nWhen the mouse is just inside the edges of the tiddler/panel, the cursor will change to a "crossed-arrows" symbol, indicating that the panel is "moveable". Grab (click-hold) the panel anywhere in the edge area and then drag the mouse to reposition the panel.\n\nTo resize the panel, hold the ''shift'' key and then grab the panel: the cursor will change to a "double-arrow" symbol. Drag a side edge of the panel to stretch horizontally or vertically, or drag a corner of the panel to stretch in both dimensions at once.\n\nDouble-clicking anywhere in the edge area of a panel will 'maximize' it to fit the current browser window.\n\nWhen the mouse is anywhere over a panel (not just near the edge), a 'toolbar menu' appears in the ''upper right corner'', with the following command items:\n*fold/unfold: ''fold'' temporarily reduces the panel height to show just one line of text. ''unfold'' restores the panel height.\n*hover/scroll: when you scroll the browser window, the moveable panels scroll with it. ''hover'' lets you keep a panel in view, while the rest of the page content moves in the window. ''scroll'' restores the default scrolling behavior for the panel. //Note: Due to browser limitations, this feature is not currently available when using Internet Explorer (v6 or lower)... sorry.//\n*close: ''close'' hides a panel from the page display. If you have moved/resized a panel, closing it restores its default position and size.\n*dock: unlike a floating panel, a moveable //tiddler// does not "float" on the page until it has actually been moved from its default position. When moving a tiddler, the ''close'' command is replaced with ''dock'', which restores the tiddler to its default //non-floating// location on the page.\n<<<\n!!!!!Installation\n<<<\nimport (or copy/paste) the following tiddlers into your document:\n''MoveablePanelPlugin'' (tagged with <<tag systemConfig>>)\nNote: for compatibility, please also install the current version of ''NestedSlidersPlugin''.\n<<<\n!!!!!Revision History\n<<<\n''2006.05.25 [1.3.3]'' in closePanel(), use p.button.onclick() so that normal processing (updating slider button tooltip, access key, etc.) is performed\n''2006.05.11 [1.3.2]'' doc update\n''2006.05.11 [1.3.1]'' re-define all functions within moveablePanel object (eliminate global window.* function definitions (and some "leaky closures" in IE)\n''2006.05.11 [1.3.0]'' converted from inline javascript to true plugin\n''2006.05.09 [1.2.3]'' in closePanel(), set focus to sliderpanel button (if any)\n''2006.05.02 [1.2.2]'' in MoveOrSizePanel(), calculate adjustments for top and left when inside nested floating panels\n''2006.04.06 [1.2.1]'' in getPanel(), allow redefinition or bypass of "moveable" tag (changed from hard-coded "tearoff")\n''2006.03.29 [1.2.0]'' in getPanel(), require "tearoff" tag to enable floating tiddlers\n''2006.03.13 [1.1.0]'' added handling for floating tiddlers and conditional menu display\n''2006.03.06 [1.0.2]'' set move or resize cursor during mousetracking\n''2006.03.05 [1.0.1]'' use "window" vs "document.body" so mousetracking in FF doesn't drop the panel when moving too quickly\n''2006.03.04 [1.0.0]'' Initial public release\n<<<\n!!!!!Credits\n<<<\nThis feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]]\n<<<\n!!!!!Code\n***/\n//{{{\nversion.extensions.moveablePanel= {major: 1, minor: 3, revision: 3, date: new Date(2006,5,25)};\n//}}}\n//{{{\nconfig.macros.moveablePanel= { \n handler:\n function(place,macroName,params) {\n var p=this.getPanel(place); if (!p) return;\n\n // remember original panel event handlers, size, location, border\n if (!p.saved) p.saved= {\n mouseover: p.onmouseover,\n mouseout: p.onmouseout,\n dblclick: p.ondblclick,\n top: p.style.top,\n left: p.style.left,\n width: p.style.width,\n height: p.style.height,\n position: p.style.position,\n border: p.style.border\n };\n\n // create control menu items\n var menupos=p.className=="floatingPanel"?"float:right;":"position:absolute;right:2em;top:3em;";\n var menustyle=p.className!="floatingPanel"?'style="border:1px solid #666;background:#ccc;color:#000;padding:0px .5em;"':"";\n var html='<div style="font-size:7pt;display:none;'+menupos+'"> ';\n if (p.className=="floatingPanel")\n html+='<a href="javascript:;" title="reduce panel size" '+menustyle\n +' onclick="return config.macros.moveablePanel.foldPanel(this,event)">fold</a> ';\n if (!config.browser.isIE)\n html+='<a href="javascript:;" title="keep panel in view when scrolling"'+menustyle\n +' onclick="return config.macros.moveablePanel.hoverPanel(this,event)">hover</a> ';\n if (p.className=="floatingPanel")\n html+='<a href="javascript:;" title="close panel and reset to default size and position"'+menustyle\n +' onclick="return config.macros.moveablePanel.closePanel(this,event)">close</a>';\n else\n html+='<a href="javascript:;" title="reset panel to default size and position"'+menustyle\n +' onclick="return config.macros.moveablePanel.closePanel(this,event)">dock</a>';\n html+='</div>';\n p.menudiv=createTiddlyElement(place,"span");\n p.menudiv.innerHTML=html;\n\n // init mouse handling and tooltip\n p.title="drag edge to move, shift key=stretch, double-click=max/restore";\n p.onmouseover=function(event) {\n if (this.className=="floatingPanel"||this.style.position=="absolute"||this.style.position=="fixed") {\n if (this.className!="floatingPanel") this.style.border="1px dotted #999"; // border around tiddler\n this.menudiv.firstChild.style.display="inline";\n }\n if (this.saved.mouseover) return this.saved.mouseover(event);\n };\n p.onmouseout=function(event) {\n this.menudiv.firstChild.style.display="none";\n if (this.className!="floatingPanel") this.style.border=this.saved.border;\n if (this.saved.mouseout) return this.saved.mouseout(event);\n };\n p.ondblclick=function(event) {\n if (!config.macros.moveablePanel.maximizePanel(this,event)) return false; // processed\n return this.saved.dblclick?this.saved.dblclick(event):true;\n };\n p.onmousemove=function(event) { return config.macros.moveablePanel.setCursorPanel(this,event); };\n p.onmousedown=function(event) { return config.macros.moveablePanel.moveOrSizePanel(this,event); };\n },\n\n getPanel:\n function(place) {\n var p=place; while (p && p.className!='floatingPanel') p=p.parentNode; if (p) return p; // floatingPanel\n p=story.findContainingTiddler(place); if (!p || !store.getTiddler(p.getAttribute("tiddler"))) return null; // not in a tiddler\n\n // moveable **tiddlers** in IE have LOTS of problems... DISABLED FOR NOW... but floating panels still work in IE\n if (config.browser.isIE) return null;\n\n // tiddlers tagged (e.g. with "moveable") to allow movement? use null or "" to bypass tag check\n var tag="moveable"; if (!tag || !tag.trim().length) return p;\n return (store.getTiddler(p.getAttribute("tiddler")).tags.find(tag)!=null)?p:null; // tiddler is tagged for moving\n },\n\n processed:\n function(event) {\n event.cancelBubble=true; if (event.stopPropagation) event.stopPropagation(); return false;\n },\n\n getClientWidth:\n function() {\n if(document.width!=undefined) return document.width;\n if(document.documentElement && document.documentElement.clientWidth) return document.documentElement.clientWidth;\n if(document.body && document.body.clientWidth) return document.body.clientWidth;\n if(window.innerWidth!=undefined) return window.innerWidth;\n return 100; // should never get here\n },\n\n closePanel:\n function(place,event) {\n if (!event) var event=window.event;\n var p=this.getPanel(place); if (!p) return true;\n if (p.hover) this.hoverPanel(p.hoverButton,event); \n if (p.folded) this.foldPanel(p.foldButton,event); \n p.maxed=false; \n p.style.top=p.saved.top;\n p.style.left=p.saved.left;\n p.style.width=p.saved.width;\n p.style.height=p.saved.height;\n p.style.position=p.saved.position;\n if (p.button) { p.button.focus(); onClickNestedSlider({target:p.button}); } // click on slider "button" (if any) to close the panel\n return this.processed(event);\n },\n\n foldPanel:\n function(place,event) {\n if (!event) var event=window.event;\n var p=this.getPanel(place); if (!p) return true;\n if (!p.foldButton) p.foldButton=place;\n if (p.folded) {\n p.style.height=p.folded_savedheight;\n p.style.overflow=p.folded_savedoverflow;\n } else {\n p.folded_savedheight=p.style.height; p.style.height="1em"; \n p.folded_savedoverflow=p.style.overflow; p.style.overflow="hidden";\n }\n p.folded=!p.folded;\n place.innerHTML=p.folded?"unfold":"fold";\n place.title=p.folded?"restore panel size":"reduce panel size";\n return this.processed(event);\n },\n\n hoverPanel:\n function(place,event) {\n if (config.browser.isIE) { return this.processed(event); } // 'fixed' position is not handled properly by IE :-(\n if (!event) var event=window.event;\n var p=this.getPanel(place); if (!p) return true;\n if (!p.hoverButton) p.hoverButton=place;\n if (p.hover)\n p.style.position=p.hover_savedposition;\n else\n { p.hover_savedposition=p.style.position; p.style.position="fixed"; }\n p.hover=!p.hover;\n place.innerHTML=p.hover?"scroll":"hover";\n place.title=p.hover?"make panel move with page when scrolling":"keep panel in view when scrolling page";\n return this.processed(event);\n },\n\n maximizePanel:\n function(place,event) {\n if (!event) var event=window.event;\n var p=this.getPanel(place); if (!p) return true;\n var left=findPosX(p); var top=findPosY(p);\n var width=p.offsetWidth; var height=p.offsetHeight;\n var x=!config.browser.isIE?event.pageX:event.clientX;\n var y=!config.browser.isIE?event.pageY:event.clientY;\n if (x<left||x>=left+width||y<top||y>=top+height) return true; // not inside panel, let mousedown bubble through\n var edgeWidth=10; var edgeHeight=10;\n var isTop=(y-top<edgeHeight);\n var isLeft=(x-left<edgeWidth);\n var isBottom=(top+height-y<edgeHeight);\n var isRight=(left+width-x<edgeWidth);\n if (!(isTop||isLeft||isBottom||isRight))\n return true; // not near an edge... let double click bubble through\n if (p.folded) this.foldPanel(p.foldButton,event); // unfold panel first (if needed)\n if (p.maxed) {\n p.style.top=p.max_savedtop;\n p.style.left=p.max_savedleft;\n p.style.width=p.max_savedwidth;\n p.style.height=p.max_savedheight;\n p.style.position=p.max_savedposition;\n } else {\n p.max_savedwidth=p.style.width;\n p.max_savedheight=p.style.height;\n p.max_savedtop=p.style.top;\n p.max_savedleft=p.style.left;\n p.max_savedposition=p.style.position;\n // IE gets the percentage stretch wrong if floating panel is inside a table\n p.style.width=config.browser.isIE?(getClientWidth()*0.95+"px"):"95%";\n p.style.height="95%";\n p.style.top=p.style.left='1em';\n p.style.position="absolute";\n }\n p.maxed=!p.maxed;\n return this.processed(event);\n },\n\n setCursorPanel:\n function(place,event) {\n if (!event) var event=window.event;\n var p=this.getPanel(place); if (!p) return true;\n var left=findPosX(p); var top=findPosY(p);\n var width=p.offsetWidth; var height=p.offsetHeight;\n var x=!config.browser.isIE?event.pageX:event.clientX;\n var y=!config.browser.isIE?event.pageY:event.clientY;\n if (x<left||x>=left+width||y<top||y>=top+height) return true; // not inside panel, let mousedown bubble through\n var edgeWidth=10; var edgeHeight=10;\n var isTop=(y-top<edgeHeight);\n var isLeft=(x-left<edgeWidth);\n var isBottom=(top+height-y<edgeHeight);\n var isRight=(left+width-x<edgeWidth);\n if (!(isTop||isLeft||isBottom||isRight))\n { p.style.cursor="auto"; if (!p.savedtitle) p.savedtitle=p.title; p.title=""; }\n else {\n p.style.cursor=!event.shiftKey?"move":((isTop?'n':(isBottom?'s':''))+(isLeft?'w':(isRight?'e':''))+'-resize');\n if (p.savedtitle) p.title=p.savedtitle;\n }\n return true; // let mouseover event bubble through\n },\n\n moveOrSizePanel:\n function(place,event) {\n if (!event) var event=window.event;\n var p=this.getPanel(place); if (!p) return true;\n var left=findPosX(p); var top=findPosY(p);\n var width=p.offsetWidth; var height=p.offsetHeight;\n var x=!config.browser.isIE?event.pageX:event.clientX;\n var y=!config.browser.isIE?event.pageY:event.clientY;\n if (x<left||x>=left+width||y<top||y>=top+height) return true; // not inside panel, let mousedown bubble through\n var edgeWidth=10; var edgeHeight=10;\n var isTop=(y-top<edgeHeight);\n var isLeft=(x-left<edgeWidth);\n var isBottom=(top+height-y<edgeHeight);\n var isRight=(left+width-x<edgeWidth);\n if (!(isTop||isLeft||isBottom||isRight)) return true; // not near an edge... let mousedown bubble through\n \n // when resizing, change cursor to show directional (NSEW) "drag arrows"\n var sizing=event.shiftKey; // remember this for use during mousemove tracking\n if (sizing) p.style.cursor=((isTop?'n':(isBottom?'s':''))+(isLeft?'w':(isRight?'e':''))+'-resize');\n \n var adjustLeft=0; var adjustTop=0;\n var pp=p.parentNode; while (pp && pp.className!="floatingPanel") pp=pp.parentNode;\n if (pp) { adjustLeft=findPosX(pp); adjustTop=findPosY(pp); }\n \n // start tracking mousemove events\n config.macros.moveablePanel.activepanel=p;\n var target=p; // if 'capture' handling not supported, track within panel only\n if (document.body.setCapture) { document.body.setCapture(); var target=document.body; } // IE\n if (window.captureEvents) { window.captureEvents(Event.MouseMove|Event.MouseUp,true); var target=window; } // moz\n if (target.onmousemove!=undefined) target.saved_mousemove=target.onmousemove;\n target.onmousemove=function(e){\n if (!e) var e=window.event;\n var p=config.macros.moveablePanel.activepanel;\n \n // PROBLEM: p.offsetWidth and p.offsetHeight do not seem to account for padding or borders\n // WORKAROUND: subtract padding and border (in px) when calculating new panel width and height\n // TBD: get these values from p.style... convert to px as needed.\n var paddingWidth=10.6667; var paddingHeight=10.6667;\n var borderWidth=1; var borderHeight=1;\n var adjustWidth=-(paddingWidth*2+borderWidth*2);\n var adjustHeight=-(paddingHeight*2+borderHeight*2);\n \n if (p.style.position!="absolute") { // convert relative DIV to movable absolute DIV\n p.style.position="absolute";\n p.style.left=left+"px"; p.style.top=top+"px";\n p.style.width=(width+adjustWidth)+"px"; p.style.top=(height+adjustHeight)+"px";\n }\n var newX=!config.browser.isIE?e.pageX:e.clientX;\n var newY=!config.browser.isIE?e.pageY:e.clientY;\n if (sizing) { // resize panel\n // don't let panel get smaller than edge "grab" zones\n var minWidth=edgeWidth*2-adjustWidth;\n var minHeight=edgeHeight*2-adjustHeight;\n p.maxed=false; // make sure panel is not maximized\n if (p.folded) this.foldPanel(p.foldButton,e); // make sure panel is unfolded\n if (isBottom) var newHeight=height+newY-y+1;\n if (isTop) var newHeight=height-newY+y+1;\n if (isLeft) var newWidth=width-newX+x+1;\n if (isRight) var newWidth=width+newX-x+1;\n if (isLeft||isRight) p.style.width=(newWidth>minWidth?newWidth:minWidth)+adjustWidth+"px";\n if (isLeft) p.style.left=left-adjustLeft+newX-x+1+"px";\n if (isTop||isBottom) p.style.height=(newHeight>minHeight?newHeight:minHeight)+adjustHeight+"px";\n if (isTop) p.style.top=top-adjustTop+newY-y+1+"px";\n } else { // move panel\n p.style.top=top-adjustTop+newY-y+1+"px";\n p.style.left=left-adjustLeft+newX-x+1+"px";\n }\n var status=sizing?("size: "+p.style.width+","+p.style.height):("pos: "+p.style.left+","+p.style.top);\n window.status=status.replace(/(\s.[0-9]+)|px/g,""); // remove decimals and "px"\n return config.macros.moveablePanel.processed(e);\n };\n \n // stop tracking mousemove events\n if (target.onmouseup!=undefined) target.saved_mouseup=target.onmouseup;\n target.onmouseup=function(e){\n if (!e) var e=window.event;\n if (this.releaseCapture) this.releaseCapture(); // IE\n if (this.releaseEvents) this.releaseEvents(Event.MouseMove|Event.MouseUp); // moz\n this.onmousemove=this.saved_mousemove?this.saved_mousemove:null;\n this.onmouseup=this.saved_mouseup?this.saved_mouseup:null;\n config.macros.moveablePanel.activepanel=null;\n window.status="";\n return config.macros.moveablePanel.processed(e);\n };\n return this.processed(event); // mousedown handled\n }\n};\n//}}}
Sueños de piedras en laberintos solitarios\n bañadas por eternas lluvias,\n son madre de rumorosos cursos\n que escurren en los claros del bosque sombrío,\n ese que me apaña en constante celaje\n mudo de conflictos.\n Me aparto, abro sendas sin destino\n donde perderme a gusto,\n fundo guaridas entre zarzas amigas,\n ellas me conocen,\n rasgan suavemente mis diferentes pieles.\n Allí quedan, en los distintos huecos que habito,\n como anónimos testigos de mi paso anónimo.\n Si alguien alguna vez encuentra esos pellejos\n que tal vez conserven mis formas obsoletas,\n puede que se pregunte de qué animal extraño son,\n qué asceta mundano habitó su ausencia,\n y no hallará respuesta.\n Así paso, así lo quiero:\n ser un soplo vago\n que alguna vez dibujara en los rostros que amó\n pequeños jeroglíficos.
A veces mis pupilas se di(s)latan\n tanto que empiezo a ver cosas extrañas:\n seres pequeños dentro de la gente,\n peludos, arrugados, de afilados dientes,\n de bocas abiertas y lenguas babeantes.\n Son como parásitos que, alternadamente,\n se ocultan, se muestran,\n hacen sus maldades y desaparecen.\n\n También suelo ver algunas berrugas,\n azulinas llagas que supuran\n diminutos insectos voladores,\n en lugar de manos, atisbos de garras\n o negras pezuñas.\n\n Y es en esos trances,\n con el aire que arde\n y, como una estopa, tapa los pulmones,\n que la gente actúa tal como la veo:\n se vuelve mezquina,\n tira tarazcones,\n aborrece al prójimo.\n Y si a otro se acerca solícitamente\n es porque sus ojos, purulentos y ávidos,\n han visto provecho para su rapiña.\n Sus mentes parecen no ver más allá\n de un trozo de carne,\n electrodomésticos\n o autos lujosos.\n\n En esos momentos tan desesperantes,\n tan desesperados,\n arrecian las guerras, violaciones, llantos.\n La avaricia sube a niveles álgidos.\n\n En esos momentos de eructos y aullidos,\n en esos momentos desesperanzados,\n en esos momentos\n tan, tan cotidianos,\n en esos momentos\n temo a los espejos.
!Enlaces a otros sitios\n(se abren en una nueva ventana, salvo que, como yo, use Firefox para navegar, entonces con control-click se abren en una nueva pestaña ¡fuck off iexplore!)\n*[[Obviamente este servidor|http://www.serversidewiki.com]]\n*[[Si te gusta Lovecraft|http://h1.ripway.com/CondeYorga/lovecraft/index.html]]\n----\n''__Algunas herramientas de lenguaje__'':\n* [[Lingüística Computacional|http://gedlc.ulpgc.es]]\n* [[Diccionario de sinónimos y antónimos|http://www.lenguaje.com/herramientas/tesauro.php]]\n* [[Diccionario de Rimas|http://www.mollyandedu.com]]\n* [[Worldlingo|http://www.worldlingo.com/en/products_services/worldlingo_translator.html]] (traductor on line, mejor que la cagada de Babelfish)\n* [[Wikcionario|http://es.wiktionary.org/wiki/Portada]]\n* [[El botón de la RAE|javascript:Qr=document.getSelection();if(!Qr){void(Qr=prompt('Diccionario%20de%20la%20Real%20Academia%20Espa%C3%83%C2%B1ola.%20Vig%C3%83%C2%A9sima%20segunda%20edici%C3%83%C2%B3n.%20Teclee%20la%20palabra%20que%20desea%20consultar:',''))}if(Qr)location.href='http://buscon.rae.es/draeI/SrvltGUIBusUsual?TIPO_HTML=2&TIPO_BUS=3&LEMA='+escape(Qr)+' ']]. No hallé manera de que el código quedara bien mostrado, así que : click derecho en el enlace - propiedades y copie la dirección en un enlace nuevo en la barra de vínculos (Internet Explorer) o arrastre el enlace a la barra de marcadores (Firefox).
''+++^[tools]\n <<newTiddler>>\n +++^[list all tiddlers]...\n <script>var s=place.style;s.width="20em";s.height="25em";s.overflow="auto";</script><<list>>\n === \n +++^[search >]...\n <script>var s=place.style;s.fontSize="8pt";s.fontWeight="normal";</script><<search>>\n <<option chkRegExpSearch>> text patterns\n <<option chkCaseSensitiveSearch>> case sensitive\n === \n +++^[options >]...\n <script>var s=place.style;s.fontSize="8pt";s.fontWeight="normal";</script>Username:\n <<option txtUserName>>\n <<option chkAutoSave>>autosave\n <<option chkAnimate>>animations\n [[AdvancedOptions]]\n === \n +++^[styles >]\n [[StyleSheet]]\n [[StyleSheetColors]]\n [[StyleSheetLayout]]\n ===\n===\n+++^[calendar]...\n <<calendar thismonth>>\n===\n+++^[SourceViewer]...\n <script>var s=place.style;s.fontSize="8pt";s.fontWeight="normal";s.width="60%";</script>Source contents of this tiddler:\n <script>wikify("//{{{\sn"+store.getTiddlerText('NestedSlidersExample')+"\sn//}}}\sn",place);</script>\n===\n+++^60%^[DOMViewer]...\n Current contents of this tiddler:\n <<DOMViewer "indent:' " rows:30 tiddlerNestedSlidersExample>>\n===\n+++^60%^[SystemInfo]...\n <<sysInfo options messages shadows styles notify macros>>\n===\n''
/***\n''NestedSlidersPlugin for TiddlyWiki version 1.2.x and 2.0''\n^^author: Eric Shulman\nsource: http://www.TiddlyTools.com/#NestedSlidersPlugin\nlicense: [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]^^\n\nQuickly make any tiddler content into an expandable 'slider' panel, without needing to create a separate tiddler to contain the slider content. Optional syntax allows ''default to open'', ''custom button label/tooltip'' and ''automatic blockquote formatting.''\n\nYou can also 'nest' these sliders as deep as you like (see complex nesting example below), so that expandable 'tree-like' hierarchical displays can be created. This is most useful when converting existing in-line text content to create in-line annotations, footnotes, context-sensitive help, or other subordinate information displays.\n\nFor more details, please click on a section headline below:\n++++!!!!![Configuration]>\nDebugging messages for 'lazy sliders' deferred rendering:\n<<option chkDebugLazySliderDefer>> show debugging alert when deferring slider rendering\n<<option chkDebugLazySliderRender>> show debugging alert when deferred slider is actually rendered\n===\n++++!!!!![Usage]>\nWhen installed, this plugin adds new wiki syntax for embedding 'slider' panels directly into tiddler content. Use {{{+++}}} and {{{===}}} to delimit the slider content. Additional optional syntax elements let you specify\n*default to open\n*cookiename\n*heading level\n*floater (with optional CSS width value)\n*mouse auto rollover\n*custom label/tooltip/accesskey\n*automatic blockquote\n*deferred rendering\nThe complete syntax, using all options, is:\n//{{{\n++++(cookiename)!!!!!^width^*[label=key|tooltip]>...\ncontent goes here\n===\n//}}}\nwhere:\n* {{{+++}}} (or {{{++++}}}) and {{{===}}}^^\nmarks the start and end of the slider definition, respectively. When the extra {{{+}}} is used, the slider will be open when initially displayed.^^\n* {{{(cookiename)}}}^^\nsaves the slider opened/closed state, and restores this state whenever the slider is re-rendered.^^\n* {{{!}}} through {{{!!!!!}}}^^\ndisplays the slider label using a formatted headline (Hn) style instead of a button/link style^^\n* {{{^width^}}} (or just {{{^}}})^^\nmakes the slider 'float' on top of other content rather than shifting that content downward. 'width' must be a valid CSS value (e.g., "30em", "180px", "50%", etc.). If omitted, the default width is "auto" (i.e., fit to content)^^\n* {{{*}}}^^\nautomatically opens/closes slider on "rollover" as well as when clicked^^\n* {{{[label=key|tooltip]}}}^^\nuses custom label/tooltip/accesskey. {{{=key}}} and {{{|tooltip}}} are optional. 'key' is must be a ''single letter only''. Default labels/tootips are: ">" (more) and "<" (less), with no default access key assignment.^^\n* {{{">"}}} //(without the quotes)//^^\nautomatically adds blockquote formatting to slider content^^\n* {{{"..."}}} //(without the quotes)//^^\ndefers rendering of closed sliders until the first time they are opened. //Note: deferred rendering may produce unexpected results in some cases. Use with care.//^^\n\n//Note: to make slider definitions easier to read and recognize when editing a tiddler, newlines immediately following the {{{+++}}} 'start slider' or preceding the {{{===}}} 'end slider' sequence are automatically supressed so that excess whitespace is eliminated from the output.//\n===\n++++!!!!![Examples]>\nsimple in-line slider: \n{{{\n+++\n content\n===\n}}}\n+++\n content\n===\n----\nuse a custom label and tooltip: \n{{{\n+++[label|tooltip]\n content\n===\n}}}\n+++[label|tooltip]\n content\n===\n----\ncontent automatically blockquoted: \n{{{\n+++>\n content\n===\n}}}\n+++>\n content\n===\n----\nall options combined //(default open, cookie, heading, sized floater, rollover, label/tooltip/key, blockquoted, deferred)//\n{{{\n++++(testcookie)!!!^30em^*[label=Z|click or press Alt-Z to open]>...\n content\n===\n}}}\n++++(testcookie)!!!^30em^*[label=Z|click or press Alt-Z to open]>...\n content\n===\n----\ncomplex nesting example:\n{{{\n+++^[get info...=I|click for information or press Alt-I]\n put some general information here, plus a floating slider with more specific info:\n +++^10em^[view details...|click for details]\n put some detail here, which could include a rollover with a +++^25em^*[glossary definition]explaining technical terms===\n ===\n===\n}}}\n+++^[get info...=I|click for information or press Alt-I]\n put some general information here, plus a floating slider with more specific info:\n +++^10em^[view details...|click for details]\n put some detail here, which could include a rollover with a +++^25em^*[glossary definition]explaining technical terms===\n ===\n===\n----\nnested floaters\n>menu: <<tiddler NestedSlidersExample>>\n(see [[NestedSlidersExample]] for definition)\n----\n===\n!!!!!Installation\n<<<\nimport (or copy/paste) the following tiddlers into your document:\n''NestedSlidersPlugin'' (tagged with <<tag systemConfig>>)\n<<<\n!!!!!Revision History\n<<<\n''2006.05.11 - 1.9.0'' added optional '^width^' syntax for floating sliders and '=key' syntax for setting an access key on a slider label\n''2006.05.09 - 1.8.0'' in onClickNestedSlider(), when showing panel, set focus to first child input/textarea/select element\n''2006.04.24 - 1.7.8'' in adjustSliderPos(), if floating panel is contained inside another floating panel, subtract offset of containing panel to find correct position\n''2006.02.16 - 1.7.7'' corrected deferred rendering to account for use-case where show/hide state is tracked in a cookie\n''2006.02.15 - 1.7.6'' in adjustSliderPos(), ensure that floating panel is positioned completely within the browser window (i.e., does not go beyond the right edge of the browser window)\n''2006.02.04 - 1.7.5'' add 'var' to unintended global variable declarations to avoid FireFox 1.5.0.1 crash bug when assigning to globals\n''2006.01.18 - 1.7.4'' only define adjustSliderPos() function if it has not already been provided by another plugin. This lets other plugins 'hijack' the function even when they are loaded first.\n''2006.01.16 - 1.7.3'' added adjustSliderPos(place,btn,panel,panelClass) function to permit specialized logic for placement of floating panels. While it provides improved placement for many uses of floating panels, it exhibits a relative offset positioning error when used within *nested* floating panels. Short-term workaround is to only adjust the position for 'top-level' floaters.\n''2006.01.16 - 1.7.2'' added button property to slider panel elements so that slider panel can tell which button it belongs to. Also, re-activated and corrected animation handling so that nested sliders aren't clipped by hijacking Slider.prototype.stop so that "overflow:hidden" can be reset to "overflow:visible" after animation ends\n''2006.01.14 - 1.7.1'' added optional "^" syntax for floating panels. Defines new CSS class, ".floatingPanel", as an alternative for standard in-line ".sliderPanel" styles.\n''2006.01.14 - 1.7.0'' added optional "*" syntax for rollover handling to show/hide slider without requiring a click (Based on a suggestion by tw4efl)\n''2006.01.03 - 1.6.2'' When using optional "!" heading style, instead of creating a clickable "Hn" element, create an "A" element inside the "Hn" element. (allows click-through in SlideShowPlugin, which captures nearly all click events, except for hyperlinks)\n''2005.12.15 - 1.6.1'' added optional "..." syntax to invoke deferred ('lazy') rendering for initially hidden sliders\nremoved checkbox option for 'global' application of lazy sliders\n''2005.11.25 - 1.6.0'' added optional handling for 'lazy sliders' (deferred rendering for initially hidden sliders)\n''2005.11.21 - 1.5.1'' revised regular expressions: if present, a single newline //preceding// and/or //following// a slider definition will be suppressed so start/end syntax can be place on separate lines in the tiddler 'source' for improved readability. Similarly, any whitespace (newlines, tabs, spaces, etc.) trailing the 'start slider' syntax or preceding the 'end slider' syntax is also suppressed.\n''2005.11.20 - 1.5.0'' added (cookiename) syntax for optional tracking and restoring of slider open/close state\n''2005.11.11 - 1.4.0'' added !!!!! syntax to render slider label as a header (Hn) style instead of a button/link style\n''2005.11.07 - 1.3.0'' removed alternative syntax {{{(((}}} and {{{)))}}} (so they can be used by other\nformatting extensions) and simplified/improved regular expressions to trim multiple excess newlines\n''2005.11.05 - 1.2.1'' changed name to NestedSlidersPlugin\nmore documentation\n''2005.11.04 - 1.2.0'' added alternative character-mode syntax {{{(((}}} and {{{)))}}}\ntweaked "eat newlines" logic for line-mode {{{+++}}} and {{{===}}} syntax\n''2005.11.03 - 1.1.1'' fixed toggling of default tooltips ("more..." and "less...") when a non-default button label is used\ncode cleanup, added documentation\n''2005.11.03 - 1.1.0'' changed delimiter syntax from {{{(((}}} and {{{)))}}} to {{{+++}}} and {{{===}}}\nchanged name to EasySlidersPlugin\n''2005.11.03 - 1.0.0'' initial public release\n<<<\n!!!!!Credits\n<<<\nThis feature was implemented by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]] with initial research and suggestions from RodneyGomes, GeoffSlocock, and PaulPetterson.\n<<<\n!!!!!Code\n***/\n//{{{\nversion.extensions.nestedSliders = {major: 1, minor: 9, revision: 0, date: new Date(2006,5,11)};\n//}}}\n\n//{{{\n// options for deferred rendering of sliders that are not initially displayed\nif (config.options.chkDebugLazySliderDefer==undefined) config.options.chkDebugLazySliderDefer=false;\nif (config.options.chkDebugLazySliderRender==undefined) config.options.chkDebugLazySliderRender=false;\n\n// default styles for 'floating' class\nsetStylesheet(".floatingPanel { position:absolute; z-index:10; padding:0.5em; margin:0em; \s\n background-color:#eee; color:#000; border:1px solid #000; text-align:left; }","floatingPanelStylesheet");\n//}}}\n\n//{{{\nconfig.formatters.push( {\n name: "nestedSliders",\n match: "\s\sn?\s\s+{3}",\n terminator: "\s\ss*\s\s={3}\s\sn?",\n lookahead: "\s\sn?\s\s+{3}(\s\s+)?(\s\s([^\s\s)]*\s\s))?(\s\s!*)?(\s\s^(?:[^\s\s^\s\s*\s\s[\s\s>]*\s\s^)?)?(\s\s*)?(\s\s[[^\s\s]]*\s\s])?(\s\s>)?(\s\s.\s\s.\s\s.)?\s\ss*",\n handler: function(w)\n {\n var lookaheadRegExp = new RegExp(this.lookahead,"mg");\n lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = lookaheadRegExp.exec(w.source)\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart)\n {\n // location for rendering button and panel\n var place=w.output;\n\n // default to closed, no cookie, no accesskey\n var show="none"; var title=">"; var tooltip="show"; var cookie=""; var key="";\n\n // extra "+", default to open\n if (lookaheadMatch[1])\n { show="block"; title="<"; tooltip="hide"; }\n\n // cookie, use saved open/closed state\n if (lookaheadMatch[2]) {\n cookie=lookaheadMatch[2].trim().slice(1,-1);\n cookie="chkSlider"+cookie;\n if (config.options[cookie]==undefined)\n { config.options[cookie] = (show=="block") }\n if (config.options[cookie])\n { show="block"; title="<"; tooltip="hide"; }\n else\n { show="none"; title=">"; tooltip="show"; }\n }\n\n // parse custom label/tooltip/accesskey: [label=X|tooltip]\n if (lookaheadMatch[6]) {\n title = lookaheadMatch[6].trim().slice(1,-1);\n var pos=title.indexOf("|");\n if (pos!=-1) { tooltip = title.substr(pos+1,title.length); title=title.substr(0,pos); }\n if (title.substr(title.length-2,1)=="=") { key=title.substr(title.length-1,1); title=title.slice(0,-2); }\n if (pos==-1) tooltip += " "+title; // default tooltip: "show/hide <title>"\n }\n\n // create the button\n if (lookaheadMatch[3]) { // use "Hn" header format instead of button/link\n var lvl=(lookaheadMatch[3].length>6)?6:lookaheadMatch[3].length;\n var btn = createTiddlyElement(createTiddlyElement(place,"h"+lvl,null,null,null),"a",null,null,title);\n btn.onclick=onClickNestedSlider;\n btn.setAttribute("href","javascript:;");\n btn.setAttribute("title",tooltip);\n }\n else\n var btn = createTiddlyButton(place,title,tooltip,onClickNestedSlider);\n btn.sliderCookie = cookie; // save the cookiename (if any) in the button object\n btn.keyparam=key; // save the access key letter ("" if none)\n if (key.length) {\n btn.setAttribute("accessKey",key); // init access key\n btn.onfocus=function(){this.setAttribute("accessKey",this.keyparam);}; // **reclaim** access key on focus\n }\n\n // "non-click" MouseOver open/close slider\n if (lookaheadMatch[5]) btn.onmouseover=onClickNestedSlider;\n\n // create slider panel\n var panelClass=lookaheadMatch[4]?"floatingPanel":"sliderPanel";\n var panel=createTiddlyElement(place,"div",null,panelClass,null);\n panel.style.display = show;\n if (lookaheadMatch[4] && lookaheadMatch[4].length>2) panel.style.width=lookaheadMatch[4].slice(1,-1); // custom width\n panel.button = btn; // so the slider panel know which button it belongs to\n btn.sliderPanel=panel;\n\n // render slider (or defer until shown) \n w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;\n if ((show=="block")||!lookaheadMatch[8]) {\n // render now if panel is supposed to be shown or NOT deferred rendering\n w.subWikify(lookaheadMatch[7]?createTiddlyElement(panel,"blockquote"):panel,this.terminator);\n // align slider/floater position with button\n adjustSliderPos(place,btn,panel,panelClass);\n }\n else {\n var src = w.source.substr(w.nextMatch);\n var endpos=findMatchingDelimiter(src,"+++","===");\n panel.setAttribute("raw",src.substr(0,endpos));\n panel.setAttribute("blockquote",lookaheadMatch[7]?"true":"false");\n panel.setAttribute("rendered","false");\n w.nextMatch += endpos+3;\n if (w.source.substr(w.nextMatch,1)=="\sn") w.nextMatch++;\n if (config.options.chkDebugLazySliderDefer) alert("deferred '"+title+"':\sn\sn"+panel.getAttribute("raw"));\n }\n }\n }\n }\n)\n\n// TBD: ignore 'quoted' delimiters (e.g., "{{{+++foo===}}}" isn't really a slider)\nfunction findMatchingDelimiter(src,starttext,endtext) {\n var startpos = 0;\n var endpos = src.indexOf(endtext);\n // check for nested delimiters\n while (src.substring(startpos,endpos-1).indexOf(starttext)!=-1) {\n // count number of nested 'starts'\n var startcount=0;\n var temp = src.substring(startpos,endpos-1);\n var pos=temp.indexOf(starttext);\n while (pos!=-1) { startcount++; pos=temp.indexOf(starttext,pos+starttext.length); }\n // set up to check for additional 'starts' after adjusting endpos\n startpos=endpos+endtext.length;\n // find endpos for corresponding number of matching 'ends'\n while (startcount && endpos!=-1) {\n endpos = src.indexOf(endtext,endpos+endtext.length);\n startcount--;\n }\n }\n return (endpos==-1)?src.length:endpos;\n}\n//}}}\n\n//{{{\nwindow.onClickNestedSlider=function(e)\n{\n if (!e) var e = window.event;\n var theTarget = resolveTarget(e);\n var theLabel = theTarget.firstChild.data;\n var theSlider = theTarget.sliderPanel\n var isOpen = theSlider.style.display!="none";\n // if using default button labels, toggle labels\n if (theLabel==">") theTarget.firstChild.data = "<";\n else if (theLabel=="<") theTarget.firstChild.data = ">";\n // if using default tooltips, toggle tooltips\n if (theTarget.getAttribute("title")=="show")\n theTarget.setAttribute("title","hide");\n else if (theTarget.getAttribute("title")=="hide")\n theTarget.setAttribute("title","show");\n if (theTarget.getAttribute("title")=="show "+theLabel)\n theTarget.setAttribute("title","hide "+theLabel);\n else if (theTarget.getAttribute("title")=="hide "+theLabel)\n theTarget.setAttribute("title","show "+theLabel);\n // deferred rendering (if needed)\n if (theSlider.getAttribute("rendered")=="false") {\n if (config.options.chkDebugLazySliderRender)\n alert("rendering '"+theLabel+"':\sn\sn"+theSlider.getAttribute("raw"));\n var place=theSlider;\n if (theSlider.getAttribute("blockquote")=="true")\n place=createTiddlyElement(place,"blockquote");\n wikify(theSlider.getAttribute("raw"),place);\n theSlider.setAttribute("rendered","true");\n }\n // show/hide the slider\n if(config.options.chkAnimate)\n anim.startAnimating(new Slider(theSlider,!isOpen,e.shiftKey || e.altKey,"none"));\n else\n theSlider.style.display = isOpen ? "none" : "block";\n // if showing panel, set focus to first 'focus-able' element in panel\n if (theSlider.style.display!="none") {\n var ctrls=theSlider.getElementsByTagName("*");\n for (var c=0; c<ctrls.length; c++) {\n var t=ctrls[c].tagName.toLowerCase();\n if (t=="input" || t=="textarea" || t=="select")\n { ctrls[c].focus(); break; }\n }\n }\n if (this.sliderCookie && this.sliderCookie.length)\n { config.options[this.sliderCookie]=!isOpen; saveOptionCookie(this.sliderCookie); }\n // align slider/floater position with target button\n adjustSliderPos(theSlider.parentNode,theTarget,theSlider,theSlider.className);\n return false;\n}\n\n// hijack animation handler 'stop' handler so overflow is visible after animation has completed\nSlider.prototype.coreStop = Slider.prototype.stop;\nSlider.prototype.stop = function() { this.coreStop(); this.element.style.overflow = "visible"; }\n\n// adjust panel position based on button position\nif (window.adjustSliderPos==undefined) window.adjustSliderPos=function(place,btn,panel,panelClass) {\n if (panelClass=="floatingPanel") {\n var left=0;\n var top=btn.offsetHeight; \n if (place.style.position!="relative") {\n var left=findPosX(btn);\n var top=findPosY(btn)+btn.offsetHeight;\n var p=place; while (p && p.className!='floatingPanel') p=p.parentNode;\n if (p) { left-=findPosX(p); top-=findPosY(p); }\n }\n if (left+panel.offsetWidth > getWindowWidth()) left=getWindowWidth()-panel.offsetWidth-10;\n panel.style.left=left+"px"; panel.style.top=top+"px";\n }\n}\n\nfunction getWindowWidth() {\n if(document.width!=undefined)\n return document.width; // moz (FF)\n if(document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) )\n return document.documentElement.clientWidth; // IE6\n if(document.body && ( document.body.clientWidth || document.body.clientHeight ) )\n return document.body.clientWidth; // IE4\n if(window.innerWidth!=undefined)\n return window.innerWidth; // IE - general\n return 0; // unknown\n}\n//}}}
/***\n''NewDocumentPlugin for TiddlyWiki version 2.0''\n^^author: Eric Shulman - ELS Design Studios\nsource: http://www.TiddlyTools.com/#NewDocumentPlugin\nlicense: [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]^^\n\nQuickly create new TiddlyWiki documents from your existing document, with just one click! Use the {{{<<newDocument>>}}} macro to place a "new document" link into your sidebar/mainmenu/any tiddler (wherever you like). Select this command to automatically create a "new.html" document containing a specific set of tagged tiddlers. Optional parameters let you specify an alternate path/filename for the new file, or different tags to match. You can also indicate "ask" for either parameter, which will trigger a prompt for input when the command is selected.\n\n!!!!!Usage\n<<<\n{{{<<newDocument label:text filename tag tag tag...>>}}}\n{{{<<newDocument label:text filename all>>}}}\n{{{<<newDocument label:text filename snap>>}}}\n where:\n* ''label:text'' defines //optional// alternative link text (replaces default "new document" display)\n* ''filename'' is any local path-and-filename. If no parameters are provided, the default is to create the file "new.htm" in the current directory. If a filename is provided without a path (i.e., there is no "/" in the input), then the current directory is also assumed. Otherwise, this parameter is expected to contain the complete path and filename needed to write the file to your local hard disk. If ''ask'' is used in place of the filename parameter then, when the command link is selected, a message box will be automatically displayed so you can select/enter the path and filename.\n* ''tag tag tag...'' is a list of one or more space-separated tags (use quotes or {{{[[]]}}} around tags that contain spaces). The new document will include all tiddlers that match at least one of the tags in the list. The default is to include tiddlers tagged with <<tag includeNew>>or<<tag systemTiddlers>>. The special value ''all'' may be used to match every tiddler (even those without tags). If ''ask'' is used in place of the tags then, when the command link is selected, a message box will be automatically displayed so you can enter the desired tags at that time.\n* When the keyword ''snap'' is used in place of tags to match, the plugin generates a file containing the //rendered// CSS-and-HTML for all tiddlers currently displayed in the document.\n\nNote: as of version 1.4.0 of this plugin, support for selecting tiddlers by using tag *expressions* has been replaced with simpler, more efficient "containsAny()" logic. To create new ~TiddlyWiki documents that contain only those tiddlers selected with advanced AND/OR/NOT Boolean expressions, you can use the filtering features provided by the ExportTiddlersPlugin (see www.TiddlyTools.com/#ExportTiddlersPlugin).\n<<<\n!!!!!Examples:\n<<<\n{{{<<newDocument>>}}}\nequivalent to {{{<<newDocument new.htm includeNew systemTiddlers>>}}}\ncreates default "new.htm" containing tiddlers tagged with either<<tag includeNew>>or<<tag systemTiddlers>>\ntry it: <<newDocument>>\n\n{{{<<newDocument empty.html systemTiddlers>>}}}\ncreates "empty.html" containing only tiddlers tagged with<<tag systemTiddlers>>\n//(reproduces old-style (pre 2.0.2) empty file)//\ntry it: <<newDocument empty.html systemTiddlers>>\n\n{{{<<newDocument "label:create Import/Export starter" ask importexport>>}}}\nsave importexport tiddlers to a new file, prompts for path/file\ntry it: <<newDocument "label:create Import/Export starter" ask importexport>>\n\n{{{<<newDocument ask ask>>}}}\nprompts for path/file, prompts for tags to match\ntry it: <<newDocument ask ask>>\n\n{{{<<newDocument ask all>>}}}\nsave all current TiddlyWiki contents to a new file, prompts for path/file\ntry it: <<newDocument ask all>>\n\n{{{<<newDocument ask snap>>}}}\ngenerates snapshot of currently displayed document, prompts for path/file\ntry it: <<newDocument ask snap>>\n\n<<<\n!!!!!Installation\n<<<\nImport (or copy/paste) the following tiddlers into your document:\n''NewDocumentPlugin'' (tagged with <<tag systemConfig>>)\n<<<\n!!!!!Revision History\n<<<\n''2006.05.23 [1.4.0]'' due to very poor performance, support for tag *expressions* has been removed, in favor of a simpler "containsAny()" scan for tags.\n''2006.04.09 [1.3.6]'' in onClickNewDocument, added call to convertUnicodeToUTF8() to better handle international characters.\n''2006.03.15 [1.3.5]'' added nsIFilePicker() handler for selecting filename in moz-based browsers. IE and other non-moz browsers still use simple prompt() dialog\n''2006.03.15 [1.3.0]'' added "label:text" param for custom link text. added special "all" filter parameter for "save as..." handling (writes all tiddlers to output file)\n''2006.03.09 [1.2.0]'' added special "snap" filter parameter to generate and write "snapshot" files containing static HTML+CSS for currently rendered document.\n''2006.02.24 [1.1.2]'' Fix incompatiblity with TW 2.0.5 by removing custom definition of getLocalPath() (which is now part of TW core)\n''2006.02.03 [1.1.1]'' concatentate 'extra' params so that tag expressions don't have to be quoted. moved all text to 'formatted' string definitions for easier translation.\n''2006.02.03 [1.1.0]'' added support for tag EXPRESSIONS. plus improved documentation and code cleanup\n''2006.02.03 [1.0.0]'' Created.\n<<<\n!!!!!Credits\n<<<\nThis feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]]\n<<<\n!!!!!Code\n***/\n//{{{\nversion.extensions.newDocument = {major: 1, minor: 3, revision: 6, date: new Date(2006,4,9)};\n\nconfig.macros.newDocument = {\n newlabel: "new document",\n newprompt: "Create a new TiddlyWiki 'starter' document",\n newdefault: "new.htm",\n allparam: "all",\n saveaslabel: "save as...",\n saveasprompt: "Save current TiddlyWiki to a different file",\n snapparam: "snap",\n snaplabel: "create a snapshot",\n snapprompt: "Create a 'snapshot' of the current TiddlyWiki display",\n snapdefault: "snapshot.htm",\n askparam: "ask",\n labelparam: "label:",\n fileprompt: "Please enter a filename",\n filter: "includeNew OR systemTiddlers",\n filterprompt: "Enter tag(s) to match (use AND, OR, NOT)",\n filtererrmsg: "Error in tag filter '%0'",\n snapmsg: "Document snapshot written to %0",\n okmsg: "%0 tiddlers written to %1",\n failmsg: "An error occurred while creating '%0'"\n};\n\nconfig.macros.newDocument.handler = function(place,macroName,params) {\n\n var path=getLocalPath(document.location.toString());\n var slashpos=path.lastIndexOf("/"); if (slashpos==-1) slashpos=path.lastIndexOf("\s\s"); \n if (slashpos!=-1) path = path.substr(0,slashpos+1); // remove filename from path, leave the trailing slash\n\n if (params[0] && params[0].substr(0,config.macros.newDocument.labelparam.length)==config.macros.newDocument.labelparam)\n var label=params.shift().substr(config.macros.newDocument.labelparam.length)\n var filename=params.shift(); if (!filename) filename=config.macros.newDocument.newdefault;\n if (params[0]==config.macros.newDocument.snapparam) {\n if (!label) var label=config.macros.newDocument.snaplabel;\n var prompt=config.macros.newDocument.snapprompt;\n var defaultfile=config.macros.newDocument.snapdefault;\n }\n if (params[0]==config.macros.newDocument.allparam) {\n if (!label) var label=config.macros.newDocument.saveaslabel;\n var prompt=config.macros.newDocument.saveasprompt;\n var defaultfile=getLocalPath(document.location.toString());\n var slashpos=defaultfile.lastIndexOf("/"); if (slashpos==-1) slashpos=defaultfile.lastIndexOf("\s\s");\n if (slashpos!=-1) defaultfile=defaultfile.substr(slashpos+1); // get filename only\n }\n if (!prompt) var prompt=config.macros.newDocument.newprompt;\n if (!label) var label=config.macros.newDocument.newlabel;\n if (!defaultfile) var defaultfile=config.macros.newDocument.newdefault;\n\n var btn=createTiddlyButton(place,label,prompt,onClickNewDocument);\n btn.path=path;\n btn.file=filename;\n btn.defaultfile=defaultfile;\n btn.filter=params.length?params:[config.macros.newDocument.filter]; \n}\n\n// IE needs explicit global scoping for functions called by browser events\nwindow.onClickNewDocument=function(e)\n{\n if (!e) var e = window.event; var btn=resolveTarget(e);\n\n // get output path/filename\n var filename=btn.file;\n if (filename==config.macros.newDocument.askparam)\n filename=promptForFilename(config.macros.newDocument.fileprompt,btn.path,btn.defaultfile);\n if (!filename) return; // cancelled by user\n // if specified file does not include a path, assemble fully qualified path and filename\n var slashpos=filename.lastIndexOf("/"); if (slashpos==-1) slashpos=filename.lastIndexOf("\s\s");\n if (slashpos==-1) filename=btn.path+filename;\n // assemble document content, write file, report result\n if (btn.filter[0]==config.macros.newDocument.snapparam) { // HTML+CSS snapshot\n var styles=document.getElementsByTagName("style");\n var out="<html>\sn<head>\sn<style>\sn";\n for(var i=0; i < styles.length; i++) out +="/* stylesheet from tiddler:"+styles[i].getAttribute("id")+" */\sn"+styles[i].innerHTML+"\sn\sn";\n out += "</style>\sn</head>\sn<body>\sn\sn"+document.getElementById("contentWrapper").innerHTML+"\sn\sn</body>\sn</html>";\n var msg=saveFile(filename,out)\n ?config.macros.newDocument.snapmsg.format([filename])\n :config.macros.newDocument.failmsg.format([filename]);\n } else { // TW starter document\n // get the TiddlyWiki core code source\n var sourcefile=getLocalPath(document.location.toString());\n var source=loadFile(sourcefile);\n if(source==null) { alert(config.messages.cantSaveError); return null; }\n var posOpeningDiv=source.indexOf(startSaveArea);\n var posClosingDiv=source.lastIndexOf(endSaveArea);\n if((posOpeningDiv==-1)||(posClosingDiv==-1)) { alert(config.messages.invalidFileError.format([sourcefile])); return; }\n // get the matching tiddler divs\n var match=btn.filter;\n if (match[0]==config.macros.newDocument.askparam)\n match=prompt(config.macros.newDocument.filterprompt,config.macros.newDocument.filter).readMacroParams();\n if (!match[0]) return; // cancelled by user\n var storeAreaDivs=[];\n var tiddlers=store.getTiddlers('title');\n for (var i=0; i<tiddlers.length; i++)\n if (match[0]==config.macros.newDocument.allparam || (tiddlers[i].tags && tiddlers[i].tags.containsAny(match)) )\n storeAreaDivs.push(tiddlers[i].saveToDiv());\n var out=source.substr(0,posOpeningDiv+startSaveArea.length)+convertUnicodeToUTF8(storeAreaDivs.join("\sn"))+"\sn\st\st"+source.substr(posClosingDiv);\n var msg=saveFile(filename,out)\n ?config.macros.newDocument.okmsg.format([storeAreaDivs.length,filename])\n :config.macros.newDocument.failmsg.format([filename]);\n }\n clearMessage(); displayMessage(msg);\n e.cancelBubble = true; if (e.stopPropagation) e.stopPropagation(); return(false);\n}\n//}}}\n\n//{{{\nfunction promptForFilename(msg,path,file)\n{\n if(!window.Components)\n return prompt(msg,path+file); // fallback for IE and other non-moz browsers\n try {\n netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");\n var nsIFilePicker = window.Components.interfaces.nsIFilePicker;\n var picker = Components.classes["@mozilla.org/filepicker;1"].createInstance(nsIFilePicker);\n picker.init(window, msg, nsIFilePicker.modeSave);\n var thispath = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);\n thispath.initWithPath(path);\n picker.displayDirectory=thispath;\n picker.defaultExtension="html";\n picker.defaultString=file;\n picker.appendFilters(nsIFilePicker.filterAll|nsIFilePicker.filterText|nsIFilePicker.filterHTML);\n var result = picker.show();\n if (result == nsIFilePicker.returnOK) return picker.file.persistentDescriptor;\n }\n catch(e) { alert('error during local file access: '+e.toString()) }\n}\n//}}}
En el vientre del bosque neblinoso estoy\ndormido y caminando\nabriéndome paso entre las zarzas\nsudando aguas agrestes\nfragante de maderas y dulces florescencias\n\npor el vientre del bosque voy\ndesnudo y caminando\nvibrando una canción silvestre\nde insectos y gigantes milenarios\nempapado en una lluvia voraz\ninterminable\n\nen la selva estoy\nabsorto y caminando\nardiendo el fuego contenido de las hojas\ndiseminando esporas y semillas\nen la rugosa piel de los detritos calmos\n\npor sobre el intrincado techo\nmás allá de la sedosa niebla\nbrilla un sol ignorado por los hongos\npor las plantas rastreras y los escarabajos\n\nyo levanto mi brazo como un rosado tallo\nque se estira y se yergue\ncomo un ansioso árbol\ny el extremo de mi dedo\nde mi dedo más largo\nasoma tembloroso\nencandilado\ntímido mensajero de la aurora\ncuenta a mis pies el reciente milagro\n\ny aquí estoy\ndespierto y caminando\nhúmedo fresco verdecido\nvegetal\ny caminando.
Ayer te llamé\n por todos tus nombres conocidos,\n te llamé y no estabas\n en ningún recodo del destino.\n Entonces recordé tus otros nombres,\n aquellos que inventaste en tus noches de temor\n y te pensé con ellos,\n te pensé y no estabas.\n Recorrí uno a uno los recintos\n y fuí hallando nuevos nombres\n Brumaria\n Fitonémesis\n Calceoponia\n Acquamelba\n tampoco respondiste.\n\n Te llamé\n Melipéndola\n Zucaralia\n Estratoflora\n Endosofía\n Eratomizcle\n no hubo caso.\n\n En los tristes laberintos de tu ausencia,\n perdido el equilibrio,\n fuí cayendo...\n cayendo...\n hasta quedar sumergido\n en la oscura ciénaga de barrosa incertidumbre\n ahogándome en la aguas hirientes del No-Vos.
Sobre el húmedo asfalto de la madrugada\n un perro triste se detiene y aúlla al infinito.\n El eco de su voz va repitiéndose\n hasta perderse tras los mudos edificios.\n Sin embargo, en mi cuarto iluminado,\n su penetrante grito taladra mis sentidos.\n ¿Puede hacerlo callar alguien, acaso?\n ¿Qué tristeza milenaria agita\n las cuerdas de su garganta?\n ¡Que callen a ese perro,\n yo también estoy triste!\n\n Miro a través del vidrio frío\n y sólo veo noche derramada,\n noche que ahoga los deseos,\n que esconde las miserias enquistadas.\n ¿Por qué ha de existir la noche\n si oculta hasta mis lágrimas?\n Esta noche estoy triste\n y no hay estrella milagrosa\n que reconforte mi alma.\n\n En la esfera negra, sin estrellas,\n sobre las negras siluetas de las casas,\n un par de ojos bondadosos\n me miran y me llaman\n ¿cuánto gritar para que escuchen\n la profunda pena de mis manos blancas?\n ¿cómo decirles que no se el camino,\n que no conozco su comarca,\n que me pierdo en la noche, como un niño\n escapado de su casa?\n ¡Que callen a ese perro,\n yo también estoy triste,\n y la tristeza cierra las ventanas!
Un río en la noche\n un sol bajo las piedras\n una caricia de viento\n un pájaro fugaz\n una planta que se mece\n una canción a lo lejos:\n Vos.\n
El mar era un vaivén\nde roja mansedumbre\nlas montañas de un azul crepuscular\nperdían su contorno\ncomo un anticipo del misterio\n\nlos pájaros\nacomodando el sueño el las ramas invisibles\nsonaban a cortinas movidas por el viento\n\nolía la atmósfera a tu pelo\ntibio y húmedo\n\ny el aire era tu voz\nque en un susurro\npronunciaba mi nombre como un rezo.\n
La noche se abulta suavemente\n como abulta sus sábanas\n aquel que yace su plácido desvelo.\n\n Una dulce modorra\n dulce y tibia como una lengua amante\n empapa la piel asfáltica y brillante\n de la ciudad latente y subterránea\n\n y cuando todo duerme\n cuando ya todo está calmo\n palpitante\n despierta lo recóndito\n lo dormido y callado\n lo demente\n lo ridículo\n\n el alma\n esa sobreviviente.
Cuando la noche derrama\n sus oleosas excrecencias\n y, como paladas de tierra\n en una tumba oscura,\n va tapando, inexorable,\n cuaquier intento de salida...\n\n cuando las lúgubres paredes\n chorrean su resina\n y las manchas de humedad\n dibujan rostros maliciosos...\n\n cuando la asfixia aprieta\n tu garganta sin clemencia\n y llegan los demonios\n\n ¿qué ves?\n\n ¿ves los cuellos destrozados\n a dentelladas feroces?\n ¿ves la niñez escuálida y hambrienta\n con las cuencas de los ojos\n vacías y profundas,\n las bocas abiertas\n y las manos tendidas\n acercarse a pasos torpes\n como zombies?\n\n Cuando los gemidos y los gritos\n retumban en tu cráneo\n como un coro lunático\n y el murmullo viscoso de las larvas,\n que en el sanguinolento lodo\n bullen su frenesí homicida,\n inquietan tu descanso...\n\n cuando el rencor cotidiano\n - el más nocivo -\n carcome tu lengua y eclosiona\n en ojos estallados...\n\n cuando la piara frenética\n desgarra tus entrañas\n y a vómitos negros\n vaciás tu podredumbre\n sobre el fétido cadáver\n de tu inocencia hipócrita\n que, laxa y pálida,\n se macera en el verdoso caldo\n de tus recuerdos muertos\n\n ¿qué es lo que ves?\n\n ¿ves al pez desesperado\n que boquea impotente\n en un fangal de pus?\n ¿ves el futuro cercenado\n a hachazos silenciosos?\n ¿ves la esperanza volada en pedazos?\n ¿ves la lluvia amarillenta\n arrasando el follaje?\n\n Y cuando las tinieblas,\n como oscuros fractales\n que giran y se expanden,\n invaden tu conciencia\n como un gas pesado\n y te arrastra al fondo\n del último socavón\n donde, en un ritual mortuorio,\n los aberrantes duendes\n salmodian,\n gesticulan\n y le encienden cirios\n a tu grumosa muerte\n\n ¿qué ves llegar?\n\n ¿acaso el río de gusanos\n que el pestilente vulcanismo de tu piel\n expele a borbotones?\n\n ¿acaso la chirle molicie\n en que se convirtió tu compromiso?\n\n ¿al lobo hambriento,\n babeante de ambición,\n de lo que fuera tu impulso solidario?\n\n ¿ves llegar tu propio rostro\n como un mascarón hueco\n descascarándose y lloviendo\n sus aserrines tóxicos?\n\n Cuando estás solo en tu cuarto\n y te aturden los gritos que no diste\n y brilla en el centro de la estancia,\n como un disparo,\n el ojo enceguecedor\n de la certeza\n\n ¿qué ves?\n\n ¿las estrellas?\n\n ¿el abismo?\n\n\n\n\n\n\n ¿ves?\n
A veces la melancolía\n martillea con su oboe cadencioso\n sólo a veces\n la mayor parte del tiempo\n es un pedo en el que me refocilo.
A recorrer los mares del delirio\n en cada beso me invitabas dulcemente,\n pero en los muelles de mi alma, impaciente,\n yo te até, negándote el destino.\n\n El horizonte mirabas sin hablar\n deseando que yo viera lo que vos,\n pero mi corazón, enfocado en tu amor,\n el anhelo en tus ojos quiso hallar.\n\n Ahora resuena en mis oídos, cruel,\n la socarrona risa de la obviedad.\n Cadenas y obsesión, amor y libertad,\n verdugos que se burlan de mi ayer.\n\n Como el amor que tuve y que perdí\n en manos de una sombra que pasó,\n mi voz se diluyó gritando sin razón\n el nombre de la furia que viví.\n\n Mi insensatez no alcanzó a comprender\n el aleteo nervioso de tu voz\n que entre mis manos fue un callado clamor\n diciéndome "libérame".\n\n Ahora resuena en mis oídos, cruel,\n la socarrona risa de la obviedad.\n Cadenas y obsesión, amor y libertad,\n verdugos que se burlan de mi ayer.
Soledad helada y silenciosa\n asteroide nocturno que en cristales de hielo\n cuaja momentos privados, exclusivos\n que se incrustan en las férricas rugosidades\n de esta piel chamuscada por fricciones ajenas\n como extraños crustáceos puntiagudos\n huérfanos de ballenas siderales\n\n En la noche estelar\n abrumado de silencios como enormes cavernas\n me disparo atravesando vientos milenarios\n orbito a la velocidad imperceptible\n que imprime mi ansia de aislamiento\n (disculpame, esta vez no vas conmigo)\n alrededor de pequeños mundos en penumbras\n rodeo nebulosas que intentan enlazarme\n con gaseosos tentáculos que se esfuman\n desvanecen impotentes\n\n Oscuro, helado, silencioso\n el pedernal machacado de mi rostro\n sonríe en el disfrute de su esencia tangente\n\n No me pregunto de qué explosión provengo\n qué masa primigenia dió origen a esta esquirla\n de incierto destino rebotante\n ni qué fuego final consumirá las arenas de mi sangre\n\n sólo viajo, observo, asimilo\n ni siquiera emito ondas\n que puedan delatar mi ausente paso\n la curva de mi trazo\n es sólo para ojos afines a mis mundos\n (paradojal camaradería\n que aúna en cosmos separados)\n\n Volador peñasco emberrugado\n trazador de caminos sin meta ni comienzo\n viajero sin puerto, sin fanales y sin faro\n visitante efímero de constelaciones que a nadie interesan\n puedo consumir el tiempo observando el crepúsculo\n en la última luna de Plutón\n o recordando mil veces cómo se abren tus ojos\n al amanecer nebuloso del día en que llegué\n puedo exasperar al viejo Chronos\n esperando que la última estrella\n palidezca con el alba:\n el tiempo es mío\n y la noche que transito\n y la órbita equívoca de mi sombra\n y el frío que atesoro\n y el viento de mi viaje\n y la herrumbre quemada de mi piel.
En las manchas del sol estaba escrito\n con sabia de naranjos\n que un fantasma sonriente y taciturno\n pondría su dedo de marfil\n en la pulpa tierna de mi corazón abierto\n llevando a la fuente de tus labios\n una gota de mi sangre\n y, relamiéndote gustosa,\n desplegarías los mapas de tu alma y de tu cuerpo\n para que yo\n minucioso geógrafo\n examinara uno a uno tus dulces accidentes\n\n las zarzas de tu pelo\n el doble oasis de tus ojos negros\n el mar de tu boca navegble\n la playa de tu espalda y sus meridionales dunas\n las suaves colinas con sus rosas de fuego\n la llanura del vientre y su ojo de agua\n el tibio y sombrío bosque\n que esconde la gruta milagrosa\n manantial de dicha\n\n tus brazos y tus piernas son los ríos\n que en torrentoso abrazo me llevan a tu cuenca.\n\n Somos una misma cosa\n peces\n río\n sauce\n pájaros\n con hilos de noche entretejidos\n al velo de un fantasma\n empedernido.
<div id='header'>\n<div id='titleLine' Xmacro='gradient vert #1188ff #0044bb'>\n<span id='siteTitle' refresh='content' tiddler='SiteTitle'></span>\n<span id='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>\n<span id='siteMenu' refresh='content' tiddler='SiteMenu'></span> <!-- added by ELS -->\n</div>\n</div>\n<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>\n<div id='sidebar'>\n<div Xmacro='gradient vert #0044bb #001144'><div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div></div>\n<!--<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>-->\n</div>\n<div id='displayArea'>\n<div id='messageArea'></div>\n<div id='tiddlerDisplay'></div>\n</div>
/* margins, padding, borders, position, z-index, etc... */\n[[StyleSheetLayout]] /* TW shadow */\n[[StyleSheetColors]] /* TW shadow */\n[[LayoutAdjustments]]\n[[FontAdjustments]]\n[[Gray]]\n\n/* background */\nbody {\nbackground-color: #eec !important;\nbackground-image: url('els/crumpled.jpg') !important;\nbackground-attachment: fixed !important;\n}\n\n.floatingPanel, #messageArea, .attachPanel, #importPanel, #exportPanel { background: #ddb !important; background-image: url('els/parchment.jpg') !important;}\n#titleLine { background:transparent; background-image:none; border-bottom:1px dotted #999; color:#963; }\n#titleLine a { color:#630; }\n.viewer .button { border:0px solid #fff; }\n*[class="TOCList"] { background-color: transparent; color:#000; border-color:transparent !important;}
Nº 1\n\nElla tomó el guijarro con sus dedos\ncon la delicadeza exclusiva de los niños,\nlo posó en su palma\ny lo acercó a su rostro\ncomo buscando en sus colores el secreto\nque, entre tumbo y tumbo,\nle fue imprimiendo el río\ny que ahora,\nen convexa reflexión, se copia\nen la doble transparencia de sus ojos.\n\nNº 2\n\nElla arrancó una hierba y masticó su tallo,\nese extremo claro, tierno y agridulce,\ncon reminiscencias de selva suburbana.\nUn hormigueo subcutáneo abrillantó sus ojos\ny se tendió en el pasto.\nLa gravedad\ny la paz que inundó su alma\ndistendieron suavemente\nlos músculos de su cara.\n\nNº 3\n\nElla se irguió en el promontorio\ny, en blando desafío,\nen receptiva entrega,\ncerró los ojos y ofreció su cuerpo\nal suave flagelo,\na la daga tierna,\na los sabios dedos,\nal primordial masaje\ndel viento.\nY con la mente en blanco\n(más bien en colorido lienzo)\nse dejó llevar\nhasta la plena conciencia,\nhasta su pleno centro.\n\nNº 4\n\nEl vidrio se opacaba intermitentemente al ritmo de su respiración; con la frente apoyada en la ventana de su pieza miraba las gotas resbalar frente a sus ojos. La llovizna era fina y lenta. Por momentos el foco de su mirada extendía su alcance hasta los minúsculos estallidos en la vereda mojada.\nRecordaba otras épocas, más simples, más claras y más vívidas, cuando ella y su hermano dibujaban efímeras figuras en los neblinosos círculos del cristal, o jugaban a adivinar el color del próximo coche que pasara por la calle.\nSu calle...\nEn aquellos días era casi un patio delantero, pocos autos, ningún colectivo, tramos con su hermano y sus amigos peloteando de cordón a cordón, tramos donde ella y sus amigas jugaban al elástico o la rayuela...\nA veces se mezclaban los tantos y ellas compartían un picado con los varones, o ellos competían con las chicas a ver cuán rápido podían saltar la soga (picante, picante, picante...). Tampoco faltaban las disputas por algún cuadrado del pavimento, y en más de una ocasión terminaban con su madre haciéndolos entrar a tomar la merienda, previos sendos coscorrones. Entonces cada uno se metía de cabeza en su vaso de VASCOLET con bigotes.\n"Ojalá Ramiro duerma toda la tarde" pensó. Pero fue una invocación: el llanto de la criatura la sustrajo del dulce limbo del recuerdo. Sin embargo no cerró completamente las puertas, llegó hasta la cuna con el olor de las tostadas en el pelo y en los oídos un alboroto de risas, llantos corridas y secretos.\n\nNº 5\n\nElla abre el grifo presintiendo\nla tibia caricia de los hilos\nde la lluvia\nvaporosa.\n\nYa desnuda\ningresa en el habitáculo\ncomenzando la grata ceremonia,\nel bautismo cotidiano\nque escurre de su piel\nel barro invisible del cansancio,\nlos sudores ajenos,\nla desazón y el hastío,\nlas frustraciones y urgencias de esos seres\nque en los breves encuentros\nde romances ficticios\nvan dejando en finas capas\nsobre la generosa textura de su cuerpo.\n\nSus manos\namantes\nse deslizan\npor las brillantes redondeces,\npor los samaritanos cuencos,\ndevolviéndole algo del placer perdido,\nporque hace mucho tiempo\nque nadie\nla toca con cariño.\n\nY cuando el íntimo ritual culmina\nemerge relajada,\ninocente y fresca,\nreluciente y humeante\ncomo una diosa triste,\nrecuperando\naquello que en verdad\nnunca había perdido.\n\nNº 6\n\nA medida que se internaba en la espesura por el angosto sendero abierto por sus frecuentes escapadas, iba recuperando su condición silvestre. Percibía en cada una de sus células las pequeñas descargas provocadas por el roce de las plantas; el hormigueo de la estática alterada le traía remotos recuerdos de épocas en que las sustancias simples comenzaban a combinarse, y con el aire ionizado por tormentas incesantes generaban aminoácidos inexpertos y ansiosos; tiempos de fragmentos estelares, mares y continentes debatiéndose en violentos combates por una geografía siempre inconclusa.\nDejó el vestido al pie de un árbol a orillas del estanque y, como siempre, dudó un instante antes de desnudarse por completo. Las prendas iban cayendo sobre las hojas húmedas con un rumor de aves dormidas.\nSus pies descalzos hendieron la superficie acolchada de los detritos vegetales y una sensación de placer subió sensualmente por sus piernas y se alojó en el centro de su pecho. A pasos lentos fue ingresando en las aguas crepusculares y su piel le agradeció contrayéndose y erizándose, dándole un aspecto levemente escamoso.\nComenzó a deslizarse con movimientos armónicos mientras en las copas de los árboles un coro invisible de variadas voces y aleteos esporádicos acentuaban sus recuerdos primordiales.\nPor fin, con una inclinación del torso y un impulso de sus piernas, se sumergió en dirección al lecho fangoso. Con amplias brazadas avanzaba entre partículas y hojas en suspensión, pequeñas algas y artrópodos diminutos.\nDe vez en cuando sentía a lo largo de su cuerpo el furtivo paso de algún pez y esto renovaba su callado deseo de parecérsele, porque en el fondo sabía que siempre volvería al estanque con la esperanza de que sus fluviales ejercicios le hicieran brotar sus propias branquias para poder quedar inmersa, al fin, en el silencio y la opacidad acogedores, en la atmósfera fantasmagórica de visiones oscuras y difusas, en ese universo de quietud, soledad y olvido.
/* margins, padding, borders, position, z-index, etc... */\n[[StyleSheetLayout]] /* TW shadow */\n[[StyleSheetColors]] /* TW shadow */\n[[LayoutAdjustments]]\n[[FontAdjustments]]\n\n.floatingPanel, #messageArea, .attachPanel, #importPanel, #exportPanel { background: #fff !important; }\n#titleLine { border-bottom:1px dotted #999; }\n.viewer .button { border:0px solid #fff; }\n
/***\n''PlayerPlugin for TiddlyWiki version 1.2.x and 2.x''\n^^author: Eric Shulman - ELS Design Studios\nsource: http://www.TiddlyTools.com/#PlayerPlugin \nlicense: [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]^^\nstatus: ''ALPHA / EXPERIMENTAL''\n\nEmbed a media player in a tiddler. \n\n!!!!!Usage\n<<<\n{{{<<player [type] [URL] [width] [height] [hidecontrols]>>}}}\n\nwhere ''type'' is optional, and is one of the following: ''windows'', ''realone'', ''quicktime'', or ''flash''. If the media type is not specified, the plugin automatically renders Windows, Real, QuickTime or Flash player by matching known file extensions and/or specialized streaming-media transfer protocols (such as RTSP:). For unrecognized media types, the plugin assumes WindowsMedia (the player with the most users... *sigh*)\n<<<\n!!!!!Configuration\n<<<\nDefault player size:\nwidth: <<option txtPlayerDefaultWidth>> height: <<option txtPlayerDefaultHeight>>\n<<<\n!!!!!Examples\n<<<\n+++[Windows Media]...\nTimes Square Live Webcam\n{{{<<player id=1 http://www.earthcam.com/usa/newyork/timessquare/asx/tsq_stream.asx>>}}}\n<<player id=1 http://www.earthcam.com/usa/newyork/timessquare/asx/tsq_stream.asx>>\n===\n+++[RealOne]...\nBBC London: Live and Recorded news\n{{{<<player id=2 http://www.bbc.co.uk/london/realmedia/news/tvnews.ram>>}}}\n<<player id=2 http://www.bbc.co.uk/london/realmedia/news/tvnews.ram>>\n===\n+++[Quicktime]...\nAmerica Free TV: Classic Comedy\n{{{<<player id=3 http://www.americafree.tv/unicast_mov/AmericaFreeTVComedy.mov>>}}}\n<<player id=3 http://www.americafree.tv/unicast_mov/AmericaFreeTVComedy.mov>>\n===\n+++[Flash]...\nAsteroids arcade game\n{{{<<player id=4 http://www.80smusiclyrics.com/games/asteroids/asteroids.swf 400 300>>}}}\n<<player id=4 http://www.80smusiclyrics.com/games/asteroids/asteroids.swf 400 300>>\nGoogle Video\n{{{<<player id=5 flash http://video.google.com/googleplayer.swf?videoUrl=http%3A%2F%2Fvp.video.google.com%2Fvideodownload%3Fversion%3D0%26secureurl%3DoQAAAIVnUNP6GYRY8YnIRNPe4Uk5-j1q1MVpJIW4uyEFpq5Si0hcSDuig_JZcB9nNpAhbScm9W_8y_vDJQBw1DRdCVbXl-wwm5dyUiiStl_rXt0ATlstVzrUNC4fkgK_j7nmse7kxojRj1M3eo3jXKm2V8pQjWk97GcksMFFwg7BRAXmRSERexR210Amar5LYzlo9_k2AGUWPLyRhMJS4v5KtDSvNK0neL83ZjlHlSECYXyk%26sigh%3Dmpt2EOr86OAUNnPQ3b9Tr0wnDms%26begin%3D0%26len%3D429700%26docid%3D-914679554478687740&thumbnailUrl=http%3A%2F%2Fvideo.google.com%2FThumbnailServer%3Fcontentid%3De7e77162deb04c42%26second%3D5%26itag%3Dw320%26urlcreated%3D1144620753%26sigh%3DC3fqXPPS1tFiUqLzmkX3pdgYc2Y&playerId=-91467955447868774 400 326>>}}}\n<<player id=5 flash http://video.google.com/googleplayer.swf?videoUrl=http%3A%2F%2Fvp.video.google.com%2Fvideodownload%3Fversion%3D0%26secureurl%3DoQAAAIVnUNP6GYRY8YnIRNPe4Uk5-j1q1MVpJIW4uyEFpq5Si0hcSDuig_JZcB9nNpAhbScm9W_8y_vDJQBw1DRdCVbXl-wwm5dyUiiStl_rXt0ATlstVzrUNC4fkgK_j7nmse7kxojRj1M3eo3jXKm2V8pQjWk97GcksMFFwg7BRAXmRSERexR210Amar5LYzlo9_k2AGUWPLyRhMJS4v5KtDSvNK0neL83ZjlHlSECYXyk%26sigh%3Dmpt2EOr86OAUNnPQ3b9Tr0wnDms%26begin%3D0%26len%3D429700%26docid%3D-914679554478687740&thumbnailUrl=http%3A%2F%2Fvideo.google.com%2FThumbnailServer%3Fcontentid%3De7e77162deb04c42%26second%3D5%26itag%3Dw320%26urlcreated%3D1144620753%26sigh%3DC3fqXPPS1tFiUqLzmkX3pdgYc2Y&playerId=-91467955447868774 400 326>>\nYouTube Video\n{{{<<player id=6 flash http://www.youtube.com/v/OdT9z-JjtJk 400 300>>}}}\n<<player id=6 flash http://www.youtube.com/v/OdT9z-JjtJk 400 300>>\n===\n<<<\n!!!!!Installation\n<<<\nimport (or copy/paste) the following tiddlers into your document:\n''PlayerPlugin '' (tagged with <<tag systemConfig>>)\n^^documentation and javascript for macro handling^^\n<<<\n!!!!!Revision History\n<<<\n''2006.02.26 [0.7.0]''\nmajor re-write. handles default params better. create/recreate player objects via loadURL() API for use with interactive forms and scripts.\n''2006.01.27 [0.6.0]''\nadded support for 'extra' macro params to pass through to object parameters\n''2006.01.19 [0.5.0]''\nInitial ALPHA release\n''2005.12.23 [0.0.0]''\nStarted\n<<<\n!!!!!Credits\n<<<\nThis feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]].\n<<<\n!!!!!Code\n***/\n\n// // macro definition\n\n//{{{\nversion.extensions.player = {major: 0, minor: 8, revision: 0, date: new Date(2006,3,7)};\n\nconfig.macros.player = {};\nconfig.macros.player.html = {};\nconfig.macros.player.handler= function(place,macroName,params) {\n var id=null;\n if (params[0].substr(0,3)=="id=") id=params.shift().substr(3);\n var type="";\n if ((params[0]=="windows")||(params[0]=="realone")||(params[0]=="quicktime")||(params[0]=="flash")) type=params.shift();\n var url=params.shift(); if (!url || !url.trim().length) url="";\n var width=params.shift();\n var height=params.shift();\n var show=(params.shift()=='hidecontrols')?"0":"1"; \n var extras=""; while (params[0]!=undefined) extras+="<param name='"+params.shift()+"' value='"+params.shift()+"'> ";\n this.loadURL(place,id,type,url,width,height,show,extras);\n}\n\nif (config.options.txtPlayerDefaultWidth==undefined) config.options.txtPlayerDefaultWidth="100%";\nif (config.options.txtPlayerDefaultHeight==undefined) config.options.txtPlayerDefaultHeight="480"; // can't use "100%"... player height doesn't stretch right :-(\n\nconfig.macros.player.loadURL=function(place,id,type,url,width,height,show,extras) {\n\n if (id==undefined) id="tiddlyPlayer";\n if (!width) var width=config.options.txtPlayerDefaultWidth;\n if (!height) var height=config.options.txtPlayerDefaultHeight;\n if (url && (!type || !type.length)) {\n if ((url.indexOf('mms')!=-1)||(url.indexOf('.asx')!=-1)||(url.indexOf('.wvx')!=-1)||(url.indexOf('.wmv')!=-1)||(url.indexOf('.mp3')!=-1))\n var type="windows";\n else if ((url.indexOf('rtsp')!=-1)||(url.indexOf('.ram')!=-1)||(url.indexOf('.rpm')!=-1)||(url.indexOf('.rm' )!=-1)||(url.indexOf('.ra' )!=-1))\n var type="realone";\n else if ((url.indexOf('.mov')!=-1)||(url.indexOf('.qt' )!=-1))\n var type="quicktime";\n else if ((url.indexOf('.swf')!=-1)||(url.indexOf('.flv')!=-1))\n var type="flash";\n }\n if (!type) var type="none";\n if (!url) var url="";\n if (show===undefined) var show=true;\n if (!extras) var extras="";\n if (type=="none" && url.trim().length) url="<br>unrecognized media type:<br>"+url;\n if (type=="realone") height-=show?60:0; // leave room for controls\n if (type=="windows") show=show?"1":"0"; // player-specific param value\n if (type=="realone") show=show?"block":"none";\n if (type=="quicktime") show=show?"true":"false";\n\n // create containing div for player HTML\n // and add or replace player in TW DOM structure\n var newplayer = document.createElement("div");\n newplayer.playerType=type;\n newplayer.setAttribute("id",id+"_div");\n var existing = document.getElementById(id+"_div");\n if (existing && !place) place=existing.parentNode;\n if (!existing)\n place.appendChild(newplayer);\n else {\n if (place==existing.parentNode) place.replaceChild(newplayer,existing)\n else { existing.parentNode.removeChild(existing); place.appendChild(newplayer); }\n }\n\n var html=config.macros.player.html[type];\n html=html.replace(/%i%/mg,id);\n html=html.replace(/%w%/mg,width);\n html=html.replace(/%h%/mg,height);\n html=html.replace(/%u%/mg,url);\n html=html.replace(/%s%/mg,show);\n html=html.replace(/%x%/mg,extras);\n newplayer.innerHTML=html;\n}\n//}}}\n\n// // Player-specific API functions: isReady(id), isPlaying(id), toggleControls(id), showControls(id,flag)\n\n//{{{\n// status values:\n// Windows: 0=Undefined, 1=Stopped, 2=Paused, 3=Playing, 4=ScanForward, 5=ScanReverse\n// 6=Buffering, 7=Waiting, 8=MediaEnded, 9=Transitioning, 10=Ready, 11=Reconnecting\n// RealOne: 0=Stopped, 1=Contacting, 2=Buffering, 3=Playing, 4=Paused, 5=Seeking\n// QuickTime: 'Waiting', 'Loading', 'Playable', 'Complete', 'Error:###'\n// Flash: 0=Loading, 1=Uninitialized, 2=Loaded, 3=Interactive, 4=Complete\nconfig.macros.player.isReady=function(id)\n{\n var d=document.getElementById(id+"_div"); if (!d) return false;\n var p=document.getElementById(id); if (!p) return false;\n if (d.playerType=='windows') return !((p.playState==0)||(p.playState==7)||(p.playState==9)||(p.playState==11));\n if (d.playerType=='realone') return (p.GetPlayState()>1);\n if (d.playerType=='quicktime') return !((p.getPluginStatus()=='Waiting')||(p.getPluginStatus()=='Loading'));\n if (d.playerType=='flash') return (p.ReadyState>2);\n return true;\n}\nconfig.macros.player.isPlaying=function(id)\n{\n var d=document.getElementById(id+"_div"); if (!d) return false;\n var p=document.getElementById(id); if (!p) return false;\n if (d.playerType=='windows') return (p.playState==3);\n if (d.playerType=='realone') return (p.GetPlayState()==3);\n if (d.playerType=='quicktime') return (p.getPluginStatus()=='Complete');\n if (d.playerType=='flash') return (p.ReadyState<4);\n return false;\n}\nconfig.macros.player.showControls=function(id,flag) {\n var d=document.getElementById(id+"_div"); if (!d) return false;\n var p=document.getElementById(id); if (!p) return false;\n if (d.playerType=='windows') { p.ShowControls=flag; p.ShowStatusBar=flag; }\n if (d.playerType=='realone') { alert('show/hide controls not available'); }\n if (d.playerType=='quicktime') // if player not ready, retry in one second\n { if (this.isReady(id)) p.setControllerVisible(flag); else setTimeout('config.macros.player.showControls("'+id+'",'+flag+')',1000); }\n if (d.playerType=='flash') { alert('show/hide controls not available'); }\n}\nconfig.macros.player.toggleControls=function(id) {\n var d=document.getElementById(id+"_div"); if (!d) return false;\n var p=document.getElementById(id); if (!p) return false;\n if (d.playerType=='windows') var flag=!p.ShowControls;\n if (d.playerType=='realone') var flag=true; // TBD\n if (d.playerType=='quicktime') var flag=!p.getControllerVisible();\n if (d.playerType=='flash') var flag=true; // TBD\n this.showControls(id,flag);\n}\nconfig.macros.player.fullScreen=function(id) {\n var d=document.getElementById(id+"_div"); if (!d) return false;\n var p=document.getElementById(id); if (!p) return false;\n if (d.playerType=='windows') p.DisplaySize=3;\n if (d.playerType=='realone') p.SetFullScreen();\n if (d.playerType=='quicktime') { alert('full screen not available'); }\n if (d.playerType=='flash') { alert('full screen not available'); }\n}\n//}}}\n\n// // Player HTML\n\n//{{{\n// placeholder (no player)\nconfig.macros.player.html.none=' \s\n <table id="%i%" width="%w%" height="%h%" style="background-color:#111;border:0;margin:0;padding:0;"> \s\n <tr style="background-color:#111;border:0;margin:0;padding:0;"> \s\n <td width="%w%" height="%h%" style="background-color:#111;color:#ccc;border:0;margin:0;padding:0;text-align:center;"> \s\n \s\n %u% \s\n \s\n </td></tr></table>';\n//}}}\n\n//{{{\n// Windows Media Player\n// v7.1 ID: classid=CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6\n// v9 ID: classid=CLSID:22d6f312-b0f6-11d0-94ab-0080c74c7e95\nconfig.macros.player.html.windows=' \s\n <object id="%i%" width="%w%" height="%h%" style="margin:0;padding:0;" \s\n classid="CLSID:22d6f312-b0f6-11d0-94ab-0080c74c7e95" \s\n codebase="http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=6,4,5,715" \s\n align="baseline" border="0" \s\n standby="Loading Microsoft Windows Media Player components..." \s\n type="application/x-oleobject"> \s\n <param name="FileName" value="%u%"> <param name="ShowControls" value="%s%"> \s\n <param name="ShowPositionControls" value="1"> <param name="ShowAudioControls" value="1"> \s\n <param name="ShowTracker" value="1"> <param name="ShowDisplay" value="0"> \s\n <param name="ShowStatusBar" value="1"> <param name="AutoSize" value="1"> \s\n <param name="ShowGotoBar" value="0"> <param name="ShowCaptioning" value="0"> \s\n <param name="AutoStart" value="1"> <param name="AnimationAtStart" value="1"> \s\n <param name="TransparentAtStart" value="0"> <param name="AllowScan" value="1"> \s\n <param name="EnableContextMenu" value="1"> <param name="ClickToPlay" value="1"> \s\n <param name="InvokeURLs" value="1"> <param name="DefaultFrame" value="datawindow"> \s\n %x% \s\n <embed src="%u%" style="margin:0;padding:0;" \s\n align="baseline" border="0" width="%w%" height="%h%" \s\n type="application/x-mplayer2" \s\n pluginspage="http://www.microsoft.com/windows/windowsmedia/download/default.asp" \s\n name="%i%" showcontrols="%s%" showpositioncontrols="1" \s\n showaudiocontrols="1" showtracker="1" showdisplay="0" \s\n showstatusbar="%s%" autosize="1" showgotobar="0" showcaptioning="0" \s\n autostart="1" autorewind="0" animationatstart="1" transparentatstart="0" \s\n allowscan="1" enablecontextmenu="1" clicktoplay="0" invokeurls="1" \s\n defaultframe="datawindow"> \s\n </embed> \s\n </object>';\n//}}}\n\n//{{{\n// RealNetworks' RealOne Player\nconfig.macros.player.html.realone=' \s\n <table width="%w%" style="border:0;margin:0;padding:0;"><tr style="border:0;margin:0;padding:0;"><td style="border:0;margin:0;padding:0;"> \s\n <object id="%i%" width="%w%" height="%h%" style="margin:0;padding:0;" \s\n CLASSID="clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA"> \s\n <PARAM NAME="CONSOLE" VALUE="player"> \s\n <PARAM NAME="CONTROLS" VALUE="ImageWindow"> \s\n <PARAM NAME="AUTOSTART" Value="true"> \s\n <PARAM NAME="MAINTAINASPECT" Value="true"> \s\n <PARAM NAME="NOLOGO" Value="true"> \s\n <PARAM name="BACKGROUNDCOLOR" VALUE="#333333"> \s\n <PARAM NAME="SRC" VALUE="%u%"> \s\n %x% \s\n <EMBED width="%w%" height="%h%" controls="ImageWindow" type="audio/x-pn-realaudio-plugin" style="margin:0;padding:0;" \s\n name="%i%" \s\n src="%u%" \s\n console=player \s\n maintainaspect=true \s\n nologo=true \s\n backgroundcolor=#333333 \s\n autostart=true> \s\n </OBJECT> \s\n </td></tr><tr style="border:0;margin:0;padding:0;"><td style="border:0;margin:0;padding:0;"> \s\n <object id="%i%_controls" width="%w%" height="60" style="margin:0;padding:0;display:%s%" \s\n CLASSID="clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA"> \s\n <PARAM NAME="CONSOLE" VALUE="player"> \s\n <PARAM NAME="CONTROLS" VALUE="All"> \s\n <PARAM NAME="NOJAVA" Value="true"> \s\n <PARAM NAME="MAINTAINASPECT" Value="true"> \s\n <PARAM NAME="NOLOGO" Value="true"> \s\n <PARAM name="BACKGROUNDCOLOR" VALUE="#333333"> \s\n <PARAM NAME="SRC" VALUE="%u%"> \s\n %x% \s\n <EMBED WIDTH="%w%" HEIGHT="60" NOJAVA="true" type="audio/x-pn-realaudio-plugin" style="margin:0;padding:0;display:%s%" \s\n controls="All" \s\n name="%i%_controls" \s\n src="%u%" \s\n console=player \s\n maintainaspect=true \s\n nologo=true \s\n backgroundcolor=#333333> \s\n </OBJECT> \s\n </td></tr></table>';\n//}}}\n\n//{{{\n// QuickTime Player\nconfig.macros.player.html.quicktime=' \s\n <OBJECT ID="%i%" WIDTH="%w%" HEIGHT="%h%" style="margin:0;padding:0;" \s\n CLASSID="clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B" \s\n CODEBASE="http://www.apple.com/qtactivex/qtplugin.cab"> \s\n <PARAM name="SRC" VALUE="%u%"> \s\n <PARAM name="AUTOPLAY" VALUE="true"> \s\n <PARAM name="CONTROLLER" VALUE="%s%"> \s\n <PARAM name="BGCOLOR" VALUE="#333333"> \s\n <PARAM name="SCALE" VALUE="aspect"> \s\n <PARAM name="SAVEEMBEDTAGS" VALUE="true"> \s\n %x% \s\n <EMBED name="%i%" WIDTH="%w%" HEIGHT="%h%" style="margin:0;padding:0;" \s\n SRC="%u%" \s\n AUTOPLAY="true" \s\n SCALE="aspect" \s\n CONTROLLER="%s%" \s\n BGCOLOR="#333333" \s\n EnableJavaSript="true" \s\n PLUGINSPAGE="http://www.apple.com/quicktime/download/"> \s\n </EMBED> \s\n </OBJECT>';\n//}}}\n\n//{{{\n// Flash Player\nconfig.macros.player.html.flash='\s\n <object id="%i%" width="%w%" height="%h%" style="margin:0;padding:0;" \s\n classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" \s\n codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0"> \s\n <param name="movie" value="%u%"> \s\n <param name="quality" value="high"> \s\n <param name="SCALE" value="exactfit"> \s\n <param name="bgcolor" value="333333"> \s\n %x% \s\n <embed name="%i%" src="%u%" style="margin:0;padding:0;" \s\n height="%h%" width="%w%" quality="high" \s\n pluginspage="http://www.macromedia.com/go/getflashplayer" \s\n type="application/x-shockwave-flash" scale="exactfit"> \s\n </embed> \s\n </object>';\n//}}}
En el negro techo de la noche hay una puerta\n alguien golpea en ella con vehemencia\n ¿quién es? ¿quién es?\n nadie responde\n\n En el negro techo de la noche hay una puerta\n golpeo en ella con vehemencia\n toc-toc toc-toc\n nadie responde\n\n Abro la puerta desde dentro y me veo esperando\n diminuto\n desolado\n y me llamo y no me oigo\n me grito\n me hago señas casi desesperado.\n\n Desde fuera sigo dando golpes acompasados\n no hay nadie\n no contestan\n tan sólo un monigote disfrazado\n hace señas al vacío\n grita, casi desesperado\n y en sus ojos de cristal\n brotan lágrimas de plástico.
|__''Bienvenidos a mi Wiki (qué nombre tan simpatiquito).''__ Aquí podrán leer algunos de los textos que me han llevado a la fama tan merecida. También podrán modificar y/o borrar dichos textos, agregar nuevos, etc. Claro que los cambios no se guardarán ¡jue juejue juejue!|
In theory, there is no difference between theory and practice. But, in practice, there is.\n----\nSometimes when reading Goethe I have the paralyzing suspicion that he is trying to be funny.\n----\nBefore I got married I had six theories about bringing up children; now I have six children and no theories.\n----\nA witty saying proves nothing.\n----\nThe problem with some people is that when they aren't drunk, they're sober.\n----\nThe great thing about television is that if something important happens anywhere in the world, day or night, you can always change the channel.\n----\nDon't be so humble - you are not that great.\n----\nThe combination "ough" can be pronounced in nine different ways. The following sentence contains them all: "A rough-coated, dough-faced, thoughtful ploughman strode through the streets of Scarborough; after falling into a slough, he coughed and hiccoughed." \n----\nIf you lived here, you'd be home by now...\n----\nI love my dust. It shows I had something better to do.\n----\nTime flies like an arrow... Fruit flies like a banana [Groucho Marx]\n----\nIf you don't know where you're going, you'll probably end up somewhere else.\n----\nWeebles wobble... but they don't fall down!\n----\nIt's all very simple... or else it's all very complex... or perhaps it's neither... or both.\n----\nAccepting reality is the first step to insanity\n----\nOops! Sorry. My karma ran over your dogma.\n----\nIf it looks like a duck, walks like a duck and sounds like a duck, it's probably something else.\n----\nSome times you feel like a nut, some times you bolt.\n----\nSantaclaustrophobia... The feeling that Christmas is closing in all around you.\n----\nDon't touch that! You don't know where it's been...\n----\nWhy is abbreviation such a long word?\n----\nLife's a trip, not a destination. So watch out for the cows.\n----\nDiplomacy is the art of saying 'Nice doggie!'... until you can find a rock.\n----\nScientists working on cloning technology have done what the american educational system has been doing for years - producing identical sheep.\n----\nUmm... What's another word for thesaurus?\n----\nGive me ambiguity or give me something else\n----\nDon't anthropomorphize your computer, it doesn't like it.\n----\nNinth Law of Cartoon Physics: Everything falls faster than an anvil.\n----\nNew clinical studies show there aren't any answers. So just enjoy the questions...\n----\nOh yeah? Far out!\n----\nBoycott Shampoo - Demand the REAL poo!\n----\nOn Blintze! On Bagel! On Spaetzle! On Strudel! On Matzo! On Latke! On Kuchen! On Kugel!... Merry Chanukah!\n----\nRemember: Don't sweat the petty things... and don't pet the sweaty things.\n----\nSign in lunch room: Shoes are required to eat in the cafeteria... socks can eat anywhere they want.\n----\nDon't be irreplaceable, if you can't be replaced, you can't be promoted.\n----\n5 out of 4 people have problems with fractions...\n----\nOsborne's Law of Mathematics: Variables won't; constants aren't.\n----\nAlways remember you're unique, just like everyone else.\n----\nSomething to ponder: What was the best thing *before* sliced bread? Hmmm...\n----\nPhysics Joke #27: Two hydrogen atoms bump into each other while walking down the street: 'Are you alright?'... 'No, I lost an electron!'... 'Are you sure?'... 'Yeah, I'm Positive!'\n----\nThe one thing I can't stand is intolerant people!\n----\nOld programmers never die. . . they just can't C as well.\n----\nWorld Shortest 'Bar' joke: --- A guy walks into a bar... OUCH! he says...\n----\nWho are you going to believe, me or your own eyes? \n----\nNever judge a man 'til you have walked a mile in his shoes, because by then, he's a mile away, you've got his shoes, and you can say whatever the hell you want to.\n----\nThe problem with troubleshooting is that real trouble shoots back.\n----\nHow much wood would a woochuck chuck if a woodchuck could chuck wood?\n----\nThese are the roots of rhythm: boom, de boom, de-boom, ding-dong, ooh! [Leila ~Gallagher-Breen]\n----\nThese are the roots of music: boom-chicky-chicky boom, meow, meow, baddom, baddom, ding-aling-a-long, chicky-boom! [Leila ~Gallagher-Breen]\n----\nClassified ad (in Physics Quarterly): Got Mole problems? Call Avagadro Exterminators: 602-1023\n----\nHe who laughs last thinks slowest\n----\nWould a fly without wings be called a walk?\n----\nThe winner of the World's Worst Analogy contest: 'The little boat glided across the water in exactly the way a bowling ball wouldn't.'\n----\nFrom the 'say what?!?' files: We are ready for any unforeseen event that may or may not occur. [Dan Quayle 9/22/90]\n----\nI believe you should live each day as if it is your last, which is why I don't have any clean laundry because, come on, who wants to wash clothes on the last day of their life? [Jack Handy]\n----\nPRINTER - A device consisting of three main parts: the case, the jammed paper tray, and the blinking red light.\n----\nDilbert's Laws of Work: The more crap you put up with, the more crap you are going to get.\n----\nQ: Why'd the electron cross the road? A: 'Cause he was already on the other side...\n----\nWhen the going gets tough, remember STRESSED spelled backwards is DESSERTS.\n----\nFoobar... baz. Mumble: frotz, gronk, snork. Snerfle? Natter and gromish!\n----\nPentiums melt in your PC, not in your hand.\n----\neveryone is cute... even me. But in purple... I'm STUNNING!! [Londo Mollari] \n----\nI always wanted to be somebody, but I should have been more specific. [Lily Tomlin] \n----\nIt's OK to change horses in mid-stream, especially if the first horse can't swim! [Laura Shulman] \n----\nWork is the curse of the drinking classes. [Oscar Wilde] \n----\nWe have only two things to worry about: That things will never get back to normal, and that they already have.\n----\nIntelligence is a funny thing: those who don't have it think they do, and those who do are smart enough to know better.\n----\nLife is hard, Love is strange. Nothing lasts, people change. Dream of a long and wonderful future, but live now.\n----\n'Can you prove any of the stuff you believe in?', my friend asked. When I said that's not how belief works, he nodded and said that's what he thought but he was just checking to make sure he hadn't missed a key point.\n----\nLife ... It's a good place to be!\n----\nDo not follow where the path may lead. Go, instead, where there is no path, and leave a trail.\n----\nHistory is made at night... character is what you are in the dark. [Dr. Emilio Lizardo, aka Lord John Worfin] \n----\nYou can't always get what you want... but if you try sometimes, you just may find, that you get what you need. [The Rolling Stones] \n----\nThe only man who behaved sensibly was my tailor; he took my measurement anew every time he saw me, while all the rest went on with their old measurements and expected them to fit me. [George Bernard Shaw] \n----\nIn matters of style, swim with the current: in matters of principle, stand like a rock. [Thomas Jefferson] \n----\nGreat things are not done by impulse, but by a series of small things brought together. [Vincent van Gogh] \n----\n'I think there is a world market for maybe five computers.' [Thomas Watson, chairman of IBM, 1943] \n----\nWe have to live today by what truth we can get today, and be ready tomorrow to call it falsehood. [William James] \n----\nThere are two ways of spreading light: to be the candle or the mirror that reflects it. [Edith Wharton] \n----\nTalent develops in tranquility, character in the full current of human life. [Johann Wolfgang von Goethe (1749-1832)] \n----\nOur firmest convictions are apt to be the most suspect; they mark our limitations and our bounds. Life is a petty thing unless it is moved by the indomitable urge to extend its boundaries. [Jose Ortega y Gasset] \n----\nIt takes courage to grow up and turn out to be who you really are. [e e cummings (1894-1962)] \n----\nIf we knew what it was we were doing, it would not be called research, would it? [Albert Einstein] \n----\nTo invent, you need a good imagination and a pile of junk. [Thomas Edison] \n----\nDare to be naive. [R. Buckminster Fuller] \n----\nQuiet minds cannot be perplexed or frightened, but go on in fortune or misfortune at their own private pace, like a clock during a thunderstorm. [Robert Louis Stevenson] \n----\nIn the struggle between yourself and the world, second the world. [Franz Kafka] \n----\nEvery man's condition is a solution in hieroglyph to those inquiries he would put. He acts it as life before he apprehends it as truth. [Ralph Waldo Emerson] \n----\nOne can remain alive...if one is unafraid of change, insatiable in intellectual curiosity, interested in big things, and happy in small ways. [Edith Wharton] \n----\na rock is like space because it doesnt move; and space is like a rock because it is empty. words are buddhas. [Jack Kerouac] \n----\nThe whole problem with the world is that fools and fanatics are always so certain of themselves, and wiser people so full of doubts. [Bertrand Russell] \n----\nDoubt is not a pleasant state of mind, but certainty is absurd. [Voltaire] \n----\nEducation is not the filling of a pail, but the lighting of a fire. [William Butler Yeats] \n----\nIf you take yourself too seriously, no one else will take you seriously enough... [Eric Shulman] \n----\nThere are only four questions of value in life... What is sacred? Of what is the spirit made? What is worth living for, and what is worth dying for? The answer to each is the same: only love. [Don Juan ~DeMarco] \n----\nIf you are a dreamer, come in. If you are a dreamer, a wisher, a liar, a hope-er, a pray-er, a magic bean buyer... If you're a pretender, come sit by my fire... For we have some flax-golden tales to spin. Come in! Come in! [Shel Silverstein] \n----\nO money, money, money, I'm not necessarily one of those who think thee holy, But I often stop to wonder how thou canst go out so fast when thou comest in so slowly. [Ogden Nash] \n----\nThere is no progress without struggle. [Frederick Douglass] \n----\nBefore you can do something, you must become something. [Goethe] \n----\nThe man who follows the crowd will usually get no further than the crowd. The man who walks alone is likely to find himself in places no one has ever been. [Alan ~Ashley-Pit] \n----\nWeep not for the dead for they are but empty cages from which the bird has flown. [Tibetan Book of The Dead] \n----\nI wish it would dawn upon engineers that, in order to be an engineer, it is not enough to be an engineer. [Jose Ortega y Gasset] \n----\nEvery exit is an entry somewhere. [Tom Stoppard] \n----\nWherever we are, it is but a stage on the way to somewhere else, and whatever we do, however well we do it, it is only a preparation to do something else that shall be different. [Robert Louis Stevenson] \n----\nWe judge ourselves by what we feel capable of doing, while others judge us by what we have already done. [Henry Wadsworth Longfellow] \n----\nAll our words are but crumbs that fall down from the feast of the mind. [Kahlil Gibran, "Sand and Foam"] \n----\nIt's a lot harder to find joy than it is to find bread. Feed your soul first, then go shopping. [Eric Shulman] \n----\nWhy do you hasten to remove anything which hurts your eye, while if something affects your soul you postpone the cure until next year? [Horace] \n----\nNot to know is bad. Not to want to know is worse. Not to hope is unthinkable. Not to care is unforgivable. [Nigerian folk saying] \n----\nOnly half of writing is saying what you mean. The other half is preventing people from reading what they expected you to mean. [James Richardson, 'Ploughshares'] \n----\nThere are no shortcuts to anyplace worth going. [Beverly Sills] \n----\nSomewhere, something incredible is waiting to be known. [Carl Sagan] \n----\nCourage is the price that Life extracts for granting peace. [Amelia Earhart] \n----\nGreat things are not done by impulse, but by a series of small things brought together. [Vincent van Gogh] \n----\nChoose a job you love, and you will never have to work a day in your life. [Confucius] \n----\nThere is only one success - to be able to spend your life in your own way. [Christopher Morley] \n----\nWe choose our joys and sorrows long before we experience them. [Kahlil Gibran] \n----\nIt is all a frame of mind, this enjoyment of living. [Lin Yutang] \n----\nWork for something because it is good, not just because it stands a chance to succeed. [Vaclav Havel] \n----\nThe easiest way to get what you want is to help others get what they want. [Deepak Chopra] \n----\nAll generalizations are false, including this one. [Bucky Radfish]\n----\nIn science, 'fact' can only mean 'confirmed to such a degree that it would be perverse to withhold provisional assent.' I suppose that apples might start to rise tomorrow, but the possibility does not merit equal time in physics classrooms. [Stephen Jay Gould (1941 - 2002)]\n----\nTwenty years from now, you will be more disappointed by the things you didn't do, than by the ones you did. So throw off the bowlines. Sail away from the safe harbor. Catch the trade winds in your sails. Explore, dream... [Mark Twain]\n----\nTo live only for some future goal is shallow. It's the sides of the mountain that sustain life, not the top. [Robert M. Pirsig]\n----\nNothing is so contagious as enthusiasm; it moves stones, it charms brutes. Enthusiasm is the genius of sincerity, and truth accomplishes no victories without it. [Edward G. E. ~Bulwer-Lytton (1803 - 1873)]\n----\nThe past is but the beginning of a beginning, and all that is and has been is but the twilight of the dawn. [Herbert George Wells]\n----\nWe grow great by dreams. All big men are dreamers. They see things in the soft haze of a spring day or in the red fire of a long winter's evening. Some of us let these great dreams die, but others nourish and protect them; nurse them through bad days till they bring them to the sunshine and light, which comes always to those who sincerely hope that their dreams will come true. [Woodrow Wilson]\n----\nBe brave enough to live life creatively. The creative is the place where no one else has ever been. You have to leave the city of your comfort and go into the wilderness of your intuition. You can't get there by bus, only by hard work and risk and by not quite knowing what you're doing. What you'll discover will be wonderful. What you'll discover will be yourself. [Alan Alda]\n----\nIf we had no winter, the spring would not be so pleasant; if we did not sometimes taste of adversity, prosperity would not be so welcome.\n----\nSolitude, if rightly used, becomes not only a privilege but a necessity. Only a superficial soul fears to fraternize with itself.\n----\nOne of the symptoms of an approaching nervous breakdown is the belief that one's work is terribly important.\n----\nHope is like a road in the country: there was never a road, but when many people walk on it, the road comes into existence.\n----\nYou can only find truth with logic if you have already found truth without it.\n----\nLove is always bestowed as a gift - freely, willingly and without expectation. We don't love to be loved; we love to love.\n----\nAlways listen to experts. They'll tell you what can't be done, and why. Then do it.\n----\nDistance between two hearts is not an obstacle; rather a great reminder of just how strong true love can be.\n----\nNot everything that can be counted counts, and not everything that counts can be counted.\n----\nLife's challenges are not supposed to paralyze you, they're supposed to help you discover who you are.\n----\nNothing splendid has ever been achieved except by those who dared believe that something inside them was superior to circumstances.\n----\nWhether you think that you can, or that you can't, you are usually right.\n----\nThe only time you run out of chances is when you stop taking them.\n----\nKnowledge speaks, but wisdom listens.\n----\nToo often we give our children answers to remember rather than problems to solve.\n----\nBooks are the shoes with which we tread the footsteps of great minds. A book may lie dormant for fifty years or for two thousand years in a forgotten corner of a library, only to reveal, upon being opened, the marvels or the abysses that it contains, or the line that seems to have been written for me alone. In this respect the writer is not different from any other human being: whatever we say or do can have far-reaching consequences.\n----\nA people that values its privileges above its principles soon loses both.\n----\nTreat everyone with politeness, even those who are rude to you. Not because they are nice, but because you are.\n----\nThe ultimate measure of a man is not where he stands in moments of comfort and convenience, but where he stands in times of challenge and controversy. What lies behind us and what lies before us, are only small matters compared to what lies within us. \n----\nBeing in charge of your own reality is a little tougher; it takes a lot of thinking and brutal honesty. [Phil Glatz]\n----\nThere are always going to be amazingly creative people doing wonderful things. [Phil Glatz]\n----\nThe trick is to rise above the symptoms of being aware, and actually BE aware. [Phil Glatz]\n----\nA revolution is coming - a revolution which will be peaceful if we are wise enough; compassionate if we care enough; successful if we are fortunate enough - but a revolution which is coming whether we will it or not. We can affect its character, we cannot alter its inevitability. [John F. Kennedy]\n----\nOn two occasions I have been asked (by members of Parliament!), 'Pray, Mr. Babbage, if you put into the machine wrong figures, will the right answers come out?' I am not able rightly to apprehend the kind of confusion of ideas that could provoke such a question. [Charles Babbage]
/***\n''QuoteOfTheDayPlugin for TiddlyWiki version 1.2.x and 2.0''\n^^author: Eric Shulman - ELS Design Studios\nsource: http://www.TiddlyTools.com/#QuoteOfTheDayPlugin\nlicense: [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]^^\n\nDisplay a randomly selected "quote of the day"\n\n!!!!!Usage\n<<<\n{{{<<QOTD //tiddlername//>>}}}\nPut your quotations into a tiddler (called //tiddlername//). Separate each quote by a horizontal rule (use "----" on a line by itself). Each time the macro is rendered it will display a different quotation, selected at random from the specified tiddler.\n<<<\n!!!!!Example\n<<<\n{{{<<QOTD Quotations>>}}}\n<<QOTD Quotations>>\n<<<\n!!!!!Installation\n<<<\nimport (or copy/paste) the following tiddlers into your document:\n''QuoteOfTheDayPlugin'' (tagged with <<tag systemConfig>>)\n^^documentation and javascript for QuoteOfTheDay handling^^\n<<<\n!!!!!Revision History\n<<<\n''2005.10.21 [1.0.0]''\nInitial Release\n<<<\n!!!!!Credits\n<<<\nThis feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]].\nBased on a suggestion by M.Russula\n<<<\n!!!!!Code\n***/\n//{{{\nversion.extensions.QOTD = {major: 1, minor: 0, revision: 0, date: new Date(2005,10,21)};\nconfig.macros.QOTD = {};\nconfig.macros.QOTD.handler= function(place,macroName,params) {\n var txt=store.getTiddlerText(params[0]); if (!txt) return;\n var quotes=txt.split("\sn----\sn");\n // then, get a random index number between 0 and N-1 and wikify that text\n wikify(quotes[Math.floor(Math.random()*quotes.length)],place);\n}\n//}}}
Despojarnos de todo, poco a poco,\n dejar de a una estas incómodas ropas\n que fuimos adquiriendo.\n Recobrar la piel y sus simplezas.\n\n Nuestra piel:\n tan bella,\n tan sencilla.\n Más clara o más oscura,\n más lisa o más ajada\n esa piel tan nuestra.\n\n Desnudos frente al espejo\n ¿podríamos reconocernos?\n ¿hallar algo de ese YO\n al que tan arduamente nos acostumbramos?\n ¿Quién es ese niño desnutrido\n que nos mira con piedad y lástima?\n\n No hay rencor en sus ojos,\n sólo pena por quien perdió el camino,\n por quien no ve el camino.\n\n Huérfanos de nosotros mismos\n vagamos ciegamente\n y ciegamente aporreamos\n y somos aporreados\n sin poder encontrarnos.\n\n El espejo es la puerta,\n y ese niño desnudo,\n y esa piel tan nuestra.
/***\n|''Name:''|ReminderPlugin|\n|''Version:''|2.3.8 (Mar 9, 2006)|\n|''Source:''|http://www.geocities.com/allredfaq/reminderMacros.html|\n|''Author:''|Jeremy Sheeley(pop1280 [at] excite [dot] com)|\n|''Licence:''|[[BSD open source license]]|\n|''Macros:''|reminder, showreminders, displayTiddlersWithReminders, newReminder|\n|''TiddlyWiki:''|2.0+|\n|''Browser:''|Firefox 1.0.4+; InternetExplorer 6.0|\n\n!Description\nThis plugin provides macros for tagging a date with a reminder. Use the {{{reminder}}} macro to do this. The {{{showReminders}}} and {{{displayTiddlersWithReminder}}} macros automatically search through all available tiddlers looking for upcoming reminders.\n\n!Installation\n* Create a new tiddler in your tiddlywiki titled ReminderPlugin and give it the {{{systemConfig}}} tag. The tag is important because it tells TW that this is executable code.\n* Double click this tiddler, and copy all the text from the tiddler's body.\n* Paste the text into the body of the new tiddler in your TW.\n* Save and reload your TW.\n* You can copy some examples into your TW as well. See [[Simple examples]], [[Holidays]], [[showReminders]] and [[Personal Reminders]]\n\n!Syntax:\n|>|See [[ReminderSyntax]] and [[showRemindersSyntax]]|\n\n!Revision history\n* v2.3.8 (Mar 9, 2006)\n**Bug fix: A global variable had snuck in, which was killing FF 1.5.0.1\n**Feature: You can now use TIDDLER and TIDDLERNAME in a regular reminder format\n* v2.3.6 (Mar 1, 2006)\n**Bug fix: Reminders for today weren't being matched sometimes.\n**Feature: Solidified integration with DatePlugin and CalendarPlugin\n**Feature: Recurring reminders will now return multiple hits in showReminders and the calendar.\n**Feature: Added TIDDLERNAME to the replacements for showReminders format, for plugins that need the title without brackets.\n* v2.3.5 (Feb 8, 2006)\n**Bug fix: Sped up reminders lots. Added a caching mechanism for reminders that have already been matched.\n* v2.3.4 (Feb 7, 2006)\n**Bug fix: Cleaned up code to hopefully prevent the Firefox 1.5.0.1 crash that was causing lots of plugins \nto crash Firefox. Thanks to http://www.jslint.com\n* v2.3.3 (Feb 2, 2006)\n**Feature: newReminder now has drop down lists instead of text boxes.\n**Bug fix: A trailing space in a title would trigger an infinite loop.\n**Bug fix: using tag:"birthday !reminder" would filter differently than tag:"!reminder birthday"\n* v2.3.2 (Jan 21, 2006)\n**Feature: newReminder macro, which will let you easily add a reminder to a tiddler. Thanks to Eric Shulman (http://www.elsdesign.com) for the code to do this.\n** Bug fix: offsetday was not working sometimes\n** Bug fix: when upgrading to 2.0, I included a bit to exclude tiddlers tagged with excludeSearch. I've reverted back to searching through all tiddlers\n* v2.3.1 (Jan 7, 2006)\n**Feature: 2.0 compatibility\n**Feature AlanH sent some code to make sure that showReminders prints a message if no reminders are found.\n* v2.3.0 (Jan 3, 2006)\n** Bug Fix: Using "Last Sunday (-0)" as a offsetdayofweek wasn't working.\n** Bug Fix: Daylight Savings time broke offset based reminders (for example year:2005 month:8 day:23 recurdays:7 would match Monday instead of Tuesday during DST.\n\n!Code\n***/\n//{{{\n\n//============================================================================\n//============================================================================\n// ReminderPlugin\n//============================================================================\n//============================================================================\n\nversion.extensions.ReminderPlugin = {major: 2, minor: 3, revision: 8, date: new Date(2006,3,9), source: "http://www.geocities.com/allredfaq/reminderMacros.html"};\n\n//============================================================================\n// Configuration\n// Modify this section to change the defaults for \n// leadtime and display strings\n//============================================================================\n\nconfig.macros.reminders = {};\nconfig.macros["reminder"] = {};\nconfig.macros["newReminder"] = {};\nconfig.macros["showReminders"] = {};\nconfig.macros["displayTiddlersWithReminders"] = {};\n\nconfig.macros.reminders["defaultLeadTime"] = [0,6000];\nconfig.macros.reminders["defaultReminderMessage"] = "DIFF: TITLE on DATE ANNIVERSARY";\nconfig.macros.reminders["defaultShowReminderMessage"] = "DIFF: TITLE on DATE ANNIVERSARY -- TIDDLER";\nconfig.macros.reminders["defaultAnniversaryMessage"] = "(DIFF)";\nconfig.macros.reminders["untitledReminder"] = "Untitled Reminder";\nconfig.macros.reminders["noReminderFound"] = "Couldn't find a match for TITLE in the next LEADTIMEUPPER days."\nconfig.macros.reminders["todayString"] = "Today";\nconfig.macros.reminders["tomorrowString"] = "Tomorrow";\nconfig.macros.reminders["ndaysString"] = "DIFF days";\nconfig.macros.reminders["emtpyShowRemindersString"] = "There are no upcoming events";\n\n\n//============================================================================\n// Code\n// You should not need to edit anything \n// below this. Make sure to edit this tiddler and copy \n// the code from the text box, to make sure that \n// tiddler rendering doesn't interfere with the copy \n// and paste.\n//============================================================================\n\n// This line is to preserve 1.2 compatibility\n if (!story) var story=window; \n//this object will hold the cache of reminders, so that we don't\n//recompute the same reminder over again.\nvar reminderCache = {};\n\nconfig.macros.showReminders.handler = function showReminders(place,macroName,params)\n{\n var now = new Date().getMidnight();\n var paramHash = {};\n var leadtime = [0,14];\n paramHash = getParamsForReminder(params);\n var bProvidedDate = (paramHash["year"] != null) || \n (paramHash["month"] != null) || \n (paramHash["day"] != null) || \n (paramHash["dayofweek"] != null);\n if (paramHash["leadtime"] != null)\n {\n leadtime = paramHash["leadtime"];\n if (bProvidedDate)\n {\n //If they've entered a day, we need to make \n //sure to find it. We'll reset the \n //leadtime a few lines down.\n paramHash["leadtime"] = [-10000, 10000];\n }\n }\n var matchedDate = now;\n if (bProvidedDate)\n {\n var leadTimeLowerBound = new Date().getMidnight().addDays(paramHash["leadtime"][0]);\n var leadTimeUpperBound = new Date().getMidnight().addDays(paramHash["leadtime"][1]);\n matchedDate = findDateForReminder(paramHash, new Date().getMidnight(), leadTimeLowerBound, leadTimeUpperBound); \n }\n\n var arr = findTiddlersWithReminders(matchedDate, leadtime, paramHash["tag"], paramHash["limit"]);\n var elem = createTiddlyElement(place,"span",null,null, null);\n var mess = "";\n if (arr.length == 0)\n {\n mess += config.macros.reminders.emtpyShowRemindersString; \n }\n for (var j = 0; j < arr.length; j++)\n {\n if (paramHash["format"] != null)\n {\n arr[j]["params"]["format"] = paramHash["format"];\n }\n else\n {\n arr[j]["params"]["format"] = config.macros.reminders["defaultShowReminderMessage"];\n }\n mess += getReminderMessageForDisplay(arr[j]["diff"], arr[j]["params"], arr[j]["matchedDate"], arr[j]["tiddler"]);\n mess += "\sn";\n }\n wikify(mess, elem, null, null);\n};\n\n\nconfig.macros.displayTiddlersWithReminders.handler = function displayTiddlersWithReminders(place,macroName,params)\n{\n var now = new Date().getMidnight();\n var paramHash = {};\n var leadtime = [0,14];\n paramHash = getParamsForReminder(params);\n var bProvidedDate = (paramHash["year"] != null) || \n (paramHash["month"] != null) || \n (paramHash["day"] != null) || \n (paramHash["dayofweek"] != null);\n if (paramHash["leadtime"] != null)\n {\n leadtime = paramHash["leadtime"];\n if (bProvidedDate)\n {\n //If they've entered a day, we need to make \n //sure to find it. We'll reset the leadtime \n //a few lines down.\n paramHash["leadtime"] = [-10000,10000];\n }\n }\n var matchedDate = now;\n if (bProvidedDate)\n {\n var leadTimeLowerBound = new Date().getMidnight().addDays(paramHash["leadtime"][0]);\n var leadTimeUpperBound = new Date().getMidnight().addDays(paramHash["leadtime"][1]);\n matchedDate = findDateForReminder(paramHash, new Date().getMidnight(), leadTimeLowerBound, leadTimeUpperBound); \n }\n var arr = findTiddlersWithReminders(matchedDate, leadtime, paramHash["tag"], paramHash["limit"]);\n for (var j = 0; j < arr.length; j++)\n {\n displayTiddler(null, arr[j]["tiddler"], 0, null, false, false, false);\n }\n};\n\nconfig.macros.reminder.handler = function reminder(place,macroName,params)\n{\n var dateHash = getParamsForReminder(params);\n if (dateHash["hidden"] != null)\n {\n return;\n }\n var leadTime = dateHash["leadtime"];\n if (leadTime == null)\n {\n leadTime = config.macros.reminders["defaultLeadTime"]; \n }\n var leadTimeLowerBound = new Date().getMidnight().addDays(leadTime[0]);\n var leadTimeUpperBound = new Date().getMidnight().addDays(leadTime[1]);\n var matchedDate = findDateForReminder(dateHash, new Date().getMidnight(), leadTimeLowerBound, leadTimeUpperBound);\n if (!window.story) \n {\n window.story=window; \n }\n if (!store.getTiddler) \n {\n store.getTiddler=function(title) {return this.tiddlers[title];};\n }\n var title = window.story.findContainingTiddler(place).id.substr(7);\n if (matchedDate != null)\n {\n var diff = matchedDate.getDifferenceInDays(new Date().getMidnight());\n var elem = createTiddlyElement(place,"span",null,null, null);\n var mess = getReminderMessageForDisplay(diff, dateHash, matchedDate, title);\n wikify(mess, elem, null, null);\n }\n else\n {\n createTiddlyElement(place,"span",null,null, config.macros.reminders["noReminderFound"].replace("TITLE", dateHash["title"]).replace("LEADTIMEUPPER", leadTime[1]).replace("LEADTIMELOWER", leadTime[0]).replace("TIDDLERNAME", title).replace("TIDDLER", "[[" + title + "]]") );\n }\n};\n\nconfig.macros.newReminder.handler = function newReminder(place,macroName,params)\n{\n var today=new Date().getMidnight();\n var formstring = '<html><form>Year: <select name="year"><option value="">Every year</option>';\n for (var i = 0; i < 5; i++)\n {\n formstring += '<option' + ((i == 0) ? ' selected' : '') + ' value="' + (today.getFullYear() +i) + '">' + (today.getFullYear() + i) + '</option>';\n }\n formstring += '</select> Month:<select name="month"><option value="">Every month</option>';\n for (i = 0; i < 12; i++)\n {\n formstring += '<option' + ((i == today.getMonth()) ? ' selected' : '') + ' value="' + (i+1) + '">' + config.messages.dates.months[i] + '</option>';\n }\n formstring += '</select> Day:<select name="day"><option value="">Every day</option>';\n for (i = 1; i < 32; i++)\n {\n formstring += '<option' + ((i == (today.getDate() )) ? ' selected' : '') + ' value="' + i + '">' + i + '</option>';\n }\n\nformstring += '</select> Reminder Title:<input type="text" size="40" name="title" value="please enter a title" onfocus="this.select();"><input type="button" value="ok" onclick="addReminderToTiddler(this.form)"></form></html>';\n\n var panel = config.macros.slider.createSlider(place,null,"New Reminder","Open a form to add a new reminder to this tiddler");\n wikify(formstring ,panel,null,store.getTiddler(params[1]));\n};\n\n// onclick: process input and insert reminder at 'marker'\nwindow.addReminderToTiddler = function(form) {\n if (!window.story) \n {\n window.story=window; \n }\n if (!store.getTiddler) \n {\n store.getTiddler=function(title) {return this.tiddlers[title];};\n }\n var title = window.story.findContainingTiddler(form).id.substr(7);\n var tiddler=store.getTiddler(title);\n var txt='\sn<<reminder ';\n if (form.year.value != "")\n txt += 'year:'+form.year.value + ' ';\n if (form.month.value != "")\n txt += 'month:'+form.month.value + ' ';\n if (form.day.value != "")\n txt += 'day:'+form.day.value + ' ';\n txt += 'title:"'+form.title.value+'" ';\n txt +='>>';\n tiddler.set(null,tiddler.text + txt);\n window.story.refreshTiddler(title,1,true);\n store.setDirty(true);\n};\n\nfunction hasTag(tiddlerTags, tagFilters)\n{\n //Make sure we respond well to empty tiddlerTaglists or tagFilterlists\n if (tagFilters.length==0 || tiddlerTags.length==0)\n {\n return true;\n }\n\n var bHasTag = false;\n \n /*bNoPos says: "'till now there has been no check using a positive filter"\n Imagine a filterlist consisting of 1 negative filter:\n If the filter isn't matched, we want hasTag to be true.\n Yet bHasTag is still false ('cause only positive filters cause bHasTag to change)\n \n If no positive filters are present bNoPos is true, and no negative filters are matched so we have not returned false\n Thus: hasTag returns true.\n \n If at any time a positive filter is encountered, we want at least one of the tags to match it, so we turn bNoPos to false, which\n means bHasTag must be true for hasTag to return true*/\n var bNoPos=true;\n \nfor (var t3 = 0; t3 < tagFilters.length; t3++)\n {\n for(var t2=0; t2<tiddlerTags.length; t2++)\n {\n if (tagFilters[t3].length > 1 && tagFilters[t3].charAt(0) == '!') \n {\n if (tiddlerTags[t2] == tagFilters[t3].substring(1))\n {\n //If at any time a negative filter is matched, we return false\n return false;\n }\n }\n else \n {\n if (bNoPos)\n {\n //We encountered the first positive filter\n bNoPos=false;\n }\n if (tiddlerTags[t2] == tagFilters[t3])\n {\n //A positive filter is matched. As long as no negative filter is matched, hasTag will return true\n bHasTag=true;\n }\n }\n }\n }\n return (bNoPos || bHasTag);\n};\n\n//This function searches all tiddlers for the reminder //macro. It is intended that other plugins (like //calendar) will use this function to query for \n//upcoming reminders.\n//The arguments to this function filter out reminders //based on when they will fire.\n//\n//ARGUMENTS:\n//baseDate is the date that is used as "now". \n//leadtime is a two element int array, with leadtime[0] \n// as the lower bound and leadtime[1] as the\n// upper bound. A reasonable default is [0,14]\n//tags is a space-separated list of tags to use to filter \n// tiddlers. If a tag name begins with an !, then \n// only tiddlers which do not have that tag will \n// be considered. For example "examples holidays" \n// will search for reminders in any tiddlers that \n// are tagged with examples or holidays and \n// "!examples !holidays" will search for reminders \n// in any tiddlers that are not tagged with \n// examples or holidays. Pass in null to search \n// all tiddlers.\n//limit. If limit is null, individual reminders can \n// override the leadtime specified earlier. \n// Pass in 1 in order to override that behavior.\n\nwindow.findTiddlersWithReminders = function findTiddlersWithReminders(baseDate, leadtime, tags, limit)\n{\n//function(searchRegExp,sortField,excludeTag)\n// var macroPattern = "<<([^>\s\s]+)(?:\s\s*)([^>]*)>>";\n var macroPattern = "<<(reminder)(.*)>>";\n var macroRegExp = new RegExp(macroPattern,"mg");\n var matches = store.search(macroRegExp,"title","");\n var arr = [];\n var tagsArray = null;\n if (tags != null)\n {\n tagsArray = tags.split(" ");\n }\n for(var t=matches.length-1; t>=0; t--)\n {\n if (tagsArray != null)\n {\n //If they specified tags to filter on, and this tiddler doesn't \n //match, skip it entirely.\n if ( ! hasTag(matches[t].tags, tagsArray))\n {\n continue;\n }\n }\n\n var targetText = matches[t].text;\n do {\n // Get the next formatting match\n var formatMatch = macroRegExp.exec(targetText);\n if(formatMatch && formatMatch[1] != null && formatMatch[1].toLowerCase() == "reminder")\n {\n //Find the matching date.\n \n var params = formatMatch[2] != null ? formatMatch[2].readMacroParams() : {};\n var dateHash = getParamsForReminder(params);\n if (limit != null || dateHash["leadtime"] == null)\n {\n if (leadtime == null)\n dateHash["leadtime"] = leadtime;\n else\n {\n dateHash["leadtime"] = [];\n dateHash["leadtime"][0] = leadtime[0];\n dateHash["leadtime"][1] = leadtime[1];\n }\n }\n if (dateHash["leadtime"] == null)\n dateHash["leadtime"] = config.macros.reminders["defaultLeadTime"]; \n var leadTimeLowerBound = baseDate.addDays(dateHash["leadtime"][0]);\n var leadTimeUpperBound = baseDate.addDays(dateHash["leadtime"][1]);\n var matchedDate = findDateForReminder(dateHash, baseDate, leadTimeLowerBound, leadTimeUpperBound);\n while (matchedDate != null)\n {\n var hash = {};\n hash["diff"] = matchedDate.getDifferenceInDays(baseDate);\n hash["matchedDate"] = new Date(matchedDate.getFullYear(), matchedDate.getMonth(), matchedDate.getDate(), 0, 0);\n hash["params"] = cloneParams(dateHash);\n hash["tiddler"] = matches[t].title;\n hash["tags"] = matches[t].tags;\n arr.pushUnique(hash);\n if (dateHash["recurdays"] != null || (dateHash["year"] == null))\n {\n leadTimeLowerBound = leadTimeLowerBound.addDays(matchedDate.getDifferenceInDays(leadTimeLowerBound)+ 1);\n matchedDate = findDateForReminder(dateHash, baseDate, leadTimeLowerBound, leadTimeUpperBound);\n }\n else matchedDate = null;\n }\n }\n }while(formatMatch);\n }\n if(arr.length > 1) //Sort the array by number of days remaining.\n {\n arr.sort(function (a,b) {if(a["diff"] == b["diff"]) {return(0);} else {return (a["diff"] < b["diff"]) ? -1 : +1; } });\n }\n return arr;\n};\n\n//This function takes the reminder macro parameters and\n//generates the string that is used for display.\n//This function is not intended to be called by \n//other plugins.\n window.getReminderMessageForDisplay= function getReminderMessageForDisplay(diff, params, matchedDate, tiddlerTitle)\n{\n var anniversaryString = "";\n var reminderTitle = params["title"];\n if (reminderTitle == null)\n {\n reminderTitle = config.macros.reminders["untitledReminder"];\n }\n if (params["firstyear"] != null)\n {\n anniversaryString = config.macros.reminders["defaultAnniversaryMessage"].replace("DIFF", (matchedDate.getFullYear() - params["firstyear"]));\n }\n var mess = "";\n var diffString = "";\n if (diff == 0)\n {\n diffString = config.macros.reminders["todayString"];\n }\n else if (diff == 1)\n {\n diffString = config.macros.reminders["tomorrowString"];\n }\n else\n {\n diffString = config.macros.reminders["ndaysString"].replace("DIFF", diff);\n }\n var format = config.macros.reminders["defaultReminderMessage"];\n if (params["format"] != null)\n {\n format = params["format"];\n }\n mess = format;\n//HACK! -- Avoid replacing DD in TIDDLER with the date\n mess = mess.replace(/TIDDLER/g, "TIDELER");\n mess = matchedDate.formatStringDateOnly(mess);\n mess = mess.replace(/TIDELER/g, "TIDDLER");\n if (tiddlerTitle != null)\n {\n mess = mess.replace(/TIDDLERNAME/g, tiddlerTitle);\n mess = mess.replace(/TIDDLER/g, "[[" + tiddlerTitle + "]]");\n }\n \n mess = mess.replace("DIFF", diffString).replace("TITLE", reminderTitle).replace("DATE", matchedDate.formatString("DDD MMM DD, YYYY")).replace("ANNIVERSARY", anniversaryString);\n return mess;\n};\n\n// Parse out the macro parameters into a hashtable. This\n// handles the arguments for reminder, showReminders and \n// displayTiddlersWithReminders.\nwindow.getParamsForReminder = function getParamsForReminder(params)\n{\n var dateHash = {};\n var type = "";\n var num = 0;\n var title = "";\n for(var t=0; t<params.length; t++)\n {\n var split = params[t].split(":");\n type = split[0].toLowerCase();\n var value = split[1];\n for (var i=2; i < split.length; i++)\n {\n value += ":" + split[i];\n }\n if (type == "nolinks" || type == "limit" || type == "hidden")\n {\n num = 1;\n }\n else if (type == "leadtime")\n {\n var leads = value.split("...");\n if (leads.length == 1)\n {\n leads[1]= leads[0];\n leads[0] = 0;\n }\n leads[0] = parseInt(leads[0], 10);\n leads[1] = parseInt(leads[1], 10);\n num = leads;\n }\n else if (type == "offsetdayofweek")\n {\n if (value.substr(0,1) == "-")\n {\n dateHash["negativeOffsetDayOfWeek"] = 1;\n value = value.substr(1);\n }\n num = parseInt(value, 10);\n }\n else if (type != "title" && type != "tag" && type != "format")\n {\n num = parseInt(value, 10);\n }\n else\n {\n title = value;\n t++;\n while (title.substr(0,1) == '"' && title.substr(title.length - 1,1) != '"' && params[t] != undefined)\n {\n title += " " + params[t++];\n }\n //Trim off the leading and trailing quotes\n if (title.substr(0,1) == "\s"" && title.substr(title.length - 1,1)== "\s"")\n {\n title = title.substr(1, title.length - 2);\n t--;\n }\n num = title;\n }\n dateHash[type] = num;\n }\n //date is synonymous with day\n if (dateHash["day"] == null)\n {\n dateHash["day"] = dateHash["date"];\n }\n return dateHash;\n};\n\n//This function finds the date specified in the reminder \n//parameters. It will return null if no match can be\n//found. This function is not intended to be used by\n//other plugins.\nwindow.findDateForReminder= function findDateForReminder( dateHash, baseDate, leadTimeLowerBound, leadTimeUpperBound)\n{\n if (baseDate == null)\n {\n baseDate = new Date().getMidnight();\n }\n var hashKey = baseDate.convertToYYYYMMDDHHMM();\n for (var k in dateHash)\n {\n hashKey += "," + k + "|" + dateHash[k];\n }\n hashKey += "," + leadTimeLowerBound.convertToYYYYMMDDHHMM();\n hashKey += "," + leadTimeUpperBound.convertToYYYYMMDDHHMM();\n if (reminderCache[hashKey] == null)\n {\n //If we don't find a match in this run, then we will\n //cache that the reminder can't be matched.\n reminderCache[hashKey] = false;\n }\n else if (reminderCache[hashKey] == false)\n {\n //We've already tried this date and failed\n return null;\n }\n else\n {\n return reminderCache[hashKey];\n }\n \n var bOffsetSpecified = dateHash["offsetyear"] != null || \n dateHash["offsetmonth"] != null || \n dateHash["offsetday"] != null || \n dateHash["offsetdayofweek"] != null || \n dateHash["recurdays"] != null;\n \n // If we are matching the base date for a dayofweek offset, look for the base date a \n //little further back.\n var tmp1leadTimeLowerBound = leadTimeLowerBound; \n if ( dateHash["offsetdayofweek"] != null)\n {\n tmp1leadTimeLowerBound = leadTimeLowerBound.addDays(-6); \n }\n var matchedDate = baseDate.findMatch(dateHash, tmp1leadTimeLowerBound, leadTimeUpperBound);\n if (matchedDate != null)\n {\n var newMatchedDate = matchedDate;\n if (dateHash["recurdays"] != null)\n {\n while (newMatchedDate.getTime() < leadTimeLowerBound.getTime())\n {\n newMatchedDate = newMatchedDate.addDays(dateHash["recurdays"]);\n }\n }\n else if (dateHash["offsetyear"] != null || \n dateHash["offsetmonth"] != null || \n dateHash["offsetday"] != null || \n dateHash["offsetdayofweek"] != null)\n {\n var tmpdateHash = cloneParams(dateHash);\n tmpdateHash["year"] = dateHash["offsetyear"];\n tmpdateHash["month"] = dateHash["offsetmonth"];\n tmpdateHash["day"] = dateHash["offsetday"];\n tmpdateHash["dayofweek"] = dateHash["offsetdayofweek"];\n var tmpleadTimeLowerBound = leadTimeLowerBound;\n var tmpleadTimeUpperBound = leadTimeUpperBound;\n if (tmpdateHash["offsetdayofweek"] != null)\n {\n if (tmpdateHash["negativeOffsetDayOfWeek"] == 1)\n {\n tmpleadTimeLowerBound = matchedDate.addDays(-6);\n tmpleadTimeUpperBound = matchedDate;\n\n }\n else\n {\n tmpleadTimeLowerBound = matchedDate;\n tmpleadTimeUpperBound = matchedDate.addDays(6);\n }\n\n }\n newMatchedDate = matchedDate.findMatch(tmpdateHash, tmpleadTimeLowerBound, tmpleadTimeUpperBound);\n //The offset couldn't be matched. return null.\n if (newMatchedDate == null)\n {\n return null;\n }\n }\n if (newMatchedDate.isBetween(leadTimeLowerBound, leadTimeUpperBound))\n {\n reminderCache[hashKey] = newMatchedDate;\n return newMatchedDate;\n }\n }\n return null;\n};\n\n//This does much the same job as findDateForReminder, but\n//this one doesn't deal with offsets or recurring \n//reminders.\nDate.prototype.findMatch = function findMatch(dateHash, leadTimeLowerBound, leadTimeUpperBound)\n{\n\n var bSpecifiedYear = (dateHash["year"] != null);\n var bSpecifiedMonth = (dateHash["month"] != null);\n var bSpecifiedDay = (dateHash["day"] != null);\n var bSpecifiedDayOfWeek = (dateHash["dayofweek"] != null);\n if (bSpecifiedYear && bSpecifiedMonth && bSpecifiedDay)\n {\n return new Date(dateHash["year"], dateHash["month"]-1, dateHash["day"], 0, 0);\n }\n var bMatchedYear = !bSpecifiedYear;\n var bMatchedMonth = !bSpecifiedMonth;\n var bMatchedDay = !bSpecifiedDay;\n var bMatchedDayOfWeek = !bSpecifiedDayOfWeek;\n if (bSpecifiedDay && bSpecifiedMonth && !bSpecifiedYear && !bSpecifiedDayOfWeek)\n {\n\n //Shortcut -- First try this year. If it's too small, try next year.\n var tmpMidnight = this.getMidnight();\n var tmpDate = new Date(this.getFullYear(), dateHash["month"]-1, dateHash["day"], 0,0);\n if (tmpDate.getTime() < leadTimeLowerBound.getTime())\n {\n tmpDate = new Date((this.getFullYear() + 1), dateHash["month"]-1, dateHash["day"], 0,0);\n }\n if ( tmpDate.isBetween(leadTimeLowerBound, leadTimeUpperBound))\n {\n return tmpDate;\n }\n else\n {\n return null;\n }\n }\n\n var newDate = leadTimeLowerBound; \n while (newDate.isBetween(leadTimeLowerBound, leadTimeUpperBound))\n {\n var tmp = testDate(newDate, dateHash, bSpecifiedYear, bSpecifiedMonth, bSpecifiedDay, bSpecifiedDayOfWeek);\n if (tmp != null)\n return tmp;\n newDate = newDate.addDays(1);\n }\n};\n\nfunction testDate(testMe, dateHash, bSpecifiedYear, bSpecifiedMonth, bSpecifiedDay, bSpecifiedDayOfWeek)\n{\n var bMatchedYear = !bSpecifiedYear;\n var bMatchedMonth = !bSpecifiedMonth;\n var bMatchedDay = !bSpecifiedDay;\n var bMatchedDayOfWeek = !bSpecifiedDayOfWeek;\n if (bSpecifiedYear)\n {\n bMatchedYear = (dateHash["year"] == testMe.getFullYear());\n }\n if (bSpecifiedMonth)\n {\n bMatchedMonth = ((dateHash["month"] - 1) == testMe.getMonth() );\n }\n if (bSpecifiedDay)\n {\n bMatchedDay = (dateHash["day"] == testMe.getDate());\n }\n if (bSpecifiedDayOfWeek)\n {\n bMatchedDayOfWeek = (dateHash["dayofweek"] == testMe.getDay());\n }\n\n if (bMatchedYear && bMatchedMonth && bMatchedDay && bMatchedDayOfWeek)\n {\n return testMe;\n }\n};\n\n//Returns true if the date is in between two given dates\nDate.prototype.isBetween = function isBetween(lowerBound, upperBound)\n{\n return (this.getTime() >= lowerBound.getTime() && this.getTime() <= upperBound.getTime());\n}\n//Return a new date, with the time set to midnight (0000)\nDate.prototype.getMidnight = function getMidnight()\n{\n return new Date(this.getFullYear(), this.getMonth(), this.getDate(), 0, 0);\n};\n// Add the specified number of days to a date.\nDate.prototype.addDays = function addDays(numberOfDays)\n{\n return new Date(this.getFullYear(), this.getMonth(), this.getDate() + numberOfDays, 0, 0);\n};\n//Return the number of days between two dates.\nDate.prototype.getDifferenceInDays = function getDifferenceInDays(otherDate)\n{\n//I have to do it this way, because this way ignores daylight savings\n var tmpDate = this.addDays(0);\n if (this.getTime() > otherDate.getTime())\n {\n var i = 0;\n for (i = 0; tmpDate.getTime() > otherDate.getTime(); i++)\n {\n tmpDate = tmpDate.addDays(-1);\n }\n return i;\n }\n else\n {\n var i = 0;\n for (i = 0; tmpDate.getTime() < otherDate.getTime(); i++)\n {\n tmpDate = tmpDate.addDays(1);\n }\n return i * -1;\n }\n return 0;\n};\nfunction cloneParams(what) {\n var tmp = {};\n for (var i in what) {\n tmp[i] = what[i];\n }\n return tmp;\n}\n// Substitute date components into a string\nDate.prototype.formatStringDateOnly = function formatStringDateOnly(template)\n{\n template = template.replace("YYYY",this.getFullYear());\n template = template.replace("YY",String.zeroPad(this.getFullYear()-2000,2));\n template = template.replace("MMM",config.messages.dates.months[this.getMonth()]);\n template = template.replace("0MM",String.zeroPad(this.getMonth()+1,2));\n template = template.replace("MM",this.getMonth()+1);\n template = template.replace("DDD",config.messages.dates.days[this.getDay()]);\n template = template.replace("0DD",String.zeroPad(this.getDate(),2));\n template = template.replace("DD",this.getDate());\n return template;\n};\n\n//}}}
La larva se ahoga.\n Un mar de saliva es su destino\n - ni siquiera tibia\n ni siquiera ácida -\n espeso mar por todos olvidado,\n sin tormentas en cierne\n ni soles agresivos.\n A penas sacudida por leves estertores\n que más bien parecen desperezos.\n Sin ánimo,\n aún en el clímax inocuo\n de su insípida extinción,\n para la vana nostalgia\n o el arrepentimiento.\n ¡Oh, muerte anodina e intrascendente!\n no habrá reciclajes\n ni habrá resurrecciones,\n sólo un desvanecimiento\n fútil y mórbido,\n una inerte invasión de oleaginosa nada\n en la pastosa inconsistencia de su carne.\n
En la mesa del bar\n sentada, sola, espera.\n Y apoyando el pómulo\n sobre su palma izquierda\n revuelve el cenicero\n buscando una respuesta.\n\n Sus rasgos afilados\n y el cabello volcado\n y el humo melancólico\n de un flaco cigarrillo\n son el marco preciso\n para la turbiedad\n opaca de los ojos\n fané con que te miro.\n\n Porque\n ¿sos vos la melancólica?\n ¿o simplemente estoy\n esperando encontrar\n alguien que se acomode\n al humo en que me asfixio?\n\n Y sin embargo estás,\n absorta en esa mesa\n donde los restos grises\n de un tabaco mareado\n por el girar ausente,\n suave, de tu muñeca\n sugieren que, tal vez,\n de haber sido posible,\n la imagen de tu pena\n de un azul vago y triste,\n la habría eternizado\n el Genio de Lautrec.\n
Llegó en un sueño\n silenciosa\n era un espectro apenas brillando en una caja\n fué llegando despacio\n y, pese a sentir la proximidad tibia\n quedé quieto,\n esperando\n imaginando asombro y sorpresa\n mas rozó mis hombros\n y su boca estrelló con dulzura mi frente.\n Al voltear sólo vi una sombra\n doblando una esquina de la realidad\n hoy vago perdido\n preguntando a los esquivos transeuntes\n si han visto una sombra dorada,\n un beso andante con fragancias nocturnas,\n unas manos que se llevaron para siempre\n mi latido.
Dos años y pocos meses.\n El silencio fue horadando\n las costas pacientemente\n y la arena sonsacada\n (hueco en los acantilados\n que parecían eternos)\n yo la he venido juntando,\n y un universo de dunas\n de lomos reverberantes,\n - donde el brillo de tus ojos\n es un lago oscuro y tibio\n en el que, en noches de muerte,\n me sumerjo blandamente\n para beber tu recuerdo -\n fui creando muy de a poco.\n Allí los ardientes soles\n de tus palabras guardadas\n siguen quemando, obstinados.\n No hay olvido en mi desierto,\n no hay distancia y no hay vientos\n que borren de tus pisadas\n las huellas que se han quedado\n profundas e inalteradas\n en los barros perhistóricos,\n solitarios, de mi alma.\n
He visto las piedras batallando\n la inercia de los muros montañosos,\n al rayo liberar su furia encadenada\n fundiendo la superficie del basalto;\n y a las iras telúricas, con estruendo,\n quebrar las convenciones\n y las atávicas estructuras de los suelos.\n\n He visto las lenguas del infierno\n consumiendo los bosques\n en compulsivos crepúsculos\n y el arrebato de unas enloquecidas aguas\n arremeter contra el paisaje\n y borrarlo para siempre.\n\n Pero en las grietas del muro\n arraigaron las epífitas,\n en el carbonizado hueco dejado por el rayo\n un lago de tibias y verdes transparencias\n aquietó sus iónicas angustias;\n en las quebraduras y cráteres del suelo\n se levantó la ciudad de las aristoloquias,\n los bambúes y las tímidas droseras;\n de los chamuscados barbechos de los bosques\n nuevos brotes, más fuertes, se alimentan;\n y en el lodozo caldo que dejaron las crecientes\n hierven los embriones su pequeño nuevo génesis.\n\n Pero también he visto el pretencioso paso,\n soberbio y cáustico,\n avasallador e impúdico,\n del Erectus, el Habilis, el SAPIENS:\n Homo Predator.\n\n Y detrás sólo salitre.
He entrado en esta sala\n (nacida cuando llegaste)\n no hay muebles\n no hay alfombras\n pero traje\n (y lo llenará todo)\n unas lamparitas\n que proyectarán tu sombra en las paredes.
/***\n''SaveOnExitPlugin for ~TiddlyWiki version 2.0''\n^^author: Eric Shulman - ELS Design Studios\nsource: http://www.TiddlyTools.com/#SaveOnExitPlugin\nlicense: [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]^^\n\nAs of TW 2.0.5, when exiting from a TW session with unsaved tiddler changes, an "onbeforeunload" event handler calls upon confirmExit() to display a message box with a warning message and options to stay on the current page or continue exiting and lose all changes.\n\nHowever, not all browsers support the use of the "onbeforeunload" event, so TW still supports the previous "onunload" event handler, which offers a "save-or-discard-before-exiting" option, but cannot stop the browser from exiting the TW session. Normally, when the newer confirmation message is used, the older message box is suppressed, so that only one confirmation message will be displayed.\n\nThis plugin prevents the "Save or Discard" confirmation message from being suppressed, so that the 'save-on-exit' option is still available, even after responding to the default "Exit or Cancel" message. ''This double check procedure adds just a bit more "data safety" to the TW exit process.''\n!!!!!Configuration\n<<<\n<<option chkSaveOnExit>> Enable second "save-before-exiting" confirmation message\n<<<\n!!!!!Revision History\n<<<\n2006.02.24 1.0.0\nInitial release. Replaces ConfirmExitPlugin, which is now included in the TW core functionality.\n<<<\n!!!!!Credits\n<<<\nThis feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]]\n<<<\n!!!!!Code\n***/\n//{{{\nif (config.options.chkSaveOnExit==undefined) config.options.chkSaveOnExit=true; // default to extra safety\n// clear the standard exit message, since the second confirm message will show the "unsaved TiddlyWiki" warning text\nconfig.messages.confirmExit = "There are unsaved changes in TiddlyWiki.";\n// hijack standard confirm to clear flag so that second confirm will occur as well\nconfig.coreConfirmExit=window.confirmExit;\nwindow.confirmExit=function() { var r=config.coreConfirmExit(); window.hadConfirmExit=!config.options.chkSaveOnExit; return r; }\n//}}}\n
/%\n\nUsage: <<tiddler ScrollBox with: TiddlerName height>>\n\n%/@@display:block;height:$2;overflow:auto;<<tiddler $1>>@@@@display:block;text-align:right;^^scroll for more...^^@@
/***\n''SearchOptionsPlugin for TiddlyWiki version 2.0''\n^^author: Eric Shulman - ELS Design Studios\nsource: http://www.TiddlyTools.com/#SearchOptionsPlugin\nlicense: [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]^^\n\nThe TiddlyWiki search function normally looks in both tiddler titles and tiddler body content ('text'). However, narrowing the search so that it examines only titles or only text, or expanding the search to include text contained in tiddler tags can be very helpful, especially when searching on common words or phrases. In addition, it is often useful for the search results to show tiddlers with matching titles before tiddlers that contain matching text or tags.\n\n!!!!!Usage\n<<<\nThis plugin adds checkboxes (see below and in AdvancedOptions) to let you selectively configure the TiddlyWiki search function to just examine any combination of tiddler titles, text, or tags. It also provides an option to switch the search results order between 'titles mixed in' (default) and 'titles shown first', as well as an option display the search results as a list of links (in an auto-generated "SearchResults" tiddler), rather than actually displaying all matching tiddlers. You can also enable/disable the "incremental search" (key-by-key searching), so that a search is only initiated when you press the ENTER key or click on the "search:" prompt text.\n<<<\n!!!!!Configuration\n<<<\nIn additional to the checkboxes in AdvancedOptions, a self-contained control panel is included here for your convenience:\n<<option chkSearchTitles>> Search tiddler titles\n<<option chkSearchText>> Search tiddler text\n<<option chkSearchTags>> Search in tiddler tags\n<<option chkSearchShadows>> Search shadow tiddlers\n<<option chkSearchTitlesFirst>> Show title matches first\n<<option chkSearchList>> Show list of matching tiddlers\n<<option chkSearchIncremental>> Incremental searching\n<<<\n!!!!!Installation\n<<<\nimport (or copy/paste) the following tiddlers into your document:\n''SearchOptionsPlugin'' (tagged with <<tag systemConfig>>)\n^^documentation and javascript for SearchOptionsPlugin handling^^\n\nWhen installed, this plugin automatically adds checkboxes in the AdvancedOptions shadow tiddler so you can enable/disable the extended search behavior. However, if you have customized your AdvancedOptions, you will need to manually add {{{<<option chkSearchTitles>>}}}, {{{<<option chkSearchText>>}}} and {{{<<option chkSearchTitlesFirst>>}}} (with suitable prompt text) to your customized tiddler.\n<<<\n!!!!!Revision History\n<<<\n''2006.04.06 [2.3.0]''\nadded support for "search in shadow tiddlers". Default is *not* to search in the shadows (i.e.standard TW behavior). Note: if a shadow tiddler has a 'real' counterpart, only the real tiddler is searched, since the shadow is inaccessible for viewing/editing.\n''2006.02.03 [2.2.1]''\nrewrite timeout clearing code and blank search text handling to match 2.0.4 core release changes. note that core no longer permits "blank=all" searches, so neither does this plugin. To search for all, use "." with text patterns enabled.\n''2006.02.02 [2.2.0]''\nin search.handler(), KeyHandler() function clears 'left over' timeout when search input is < 3 chars. Prevents searching on shorter text when shortened by rapid backspaces (<500msec)\n''2006.02.01 [2.1.9]''\nin Story.prototype.search(), correct inverted logic for using/not using regular expressions when searching\nalso, blank search text now presents "No search text. Continue anyway?" confirm() message box, so search on blank can still be processed if desired by user.\n''2006.02.01 [2.1.8]''\nin doSearch(), added alert/return if search text is blank\n''2006.01.20 [2.1.7]''\nfixed setting of config.macros.search.reportTitle so that Tweaks can override it.\n''2006.01.19 [2.1.6]''\nimproved SearchResults formatting, added a "search again" form to the report (based on a suggestion from MorrisGray)\ndefine results report title using config.macros.search.reportTitle instead of hard-coding the tiddler title\n''2006.01.18 [2.1.5]''\nCreated separate functions for reportSearchResults(text,matches) and discardSearchResults(), so that other developers can create alternative report generators.\n''2006.01.17 [2.1.4]''\nUse regExp.search() instead of regExp.test() to scan for matches. Correctd the problem where only half the matching tiddlers (the odd-numbered ones) were being reported.\n''2006.01.15 [2.1.3]''\nAdded information (date/time, username, search options used) to SearchResults output\n''2006.01.10 [2.1.2]''\nuse displayTiddlers() to render matched tiddlers. This lets you display multiple matching tiddlers, even if SinglePageModePlugin is enabled.\n''2006.01.08 [2.1.1]''\ncorrected invalid variable reference, "txt.value" to "text" in story.search()\n''2006.01.08 [2.1.0]''\nre-write to match new store.search(), store.search.handler() and story.search() functions.\n''2005.12.30 [2.0.0]''\nUpgraded to TW2.0\nwhen rendering SearchResults tiddler, closeTiddler() first to ensure display is refreshed.\n''2005.12.26 [1.4.0]''\nadded option to search for matching text in tiddler tags\n''2005.12.21 [1.3.7]''\nuse \s\s to 'escape' single quotes in tiddler titles when generating "Open all matching tiddlers" link. Also, added access key: "O", to trigger "open all" link.\nBased on a suggestion by UdoBorkowski.\n''2005.12.18 [1.3.6]''\ncall displayMessage() AFTER showing matching tiddlers so message is not cleared too soon\n''2005.12.17 [1.3.5]''\nif no matches found, just display message and delete any existing SearchResults tiddler.\n''2005.12.17 [1.3.4]''\nuse """{{{""" and """}}}""" to 'escape' display text in SearchResults tiddler to ensure that formatting contained in search string is not rendered \nBased on a suggestion by UdoBorkowski.\n''2005.12.14 [1.3.3]''\ntag SearchResults tiddler with 'excludeSearch' so it won't list itself in subsequent searches\nBased on a suggestion by UdoBorkowski.\n''2005.12.14 [1.3.2]''\nadded "open all matching tiddlers..." link to search results output.\nBased on a suggestion by UdoBorkowski.\n''2005.12.10 [1.3.1]''\nadded "discard search results" link to end of search list tiddler output for quick self-removal of 'SearchResults' tiddler.\n''2005.12.01 [1.3.0]''\nadded chkSearchIncremental to enable/disable 'incremental' searching (i.e., search after each keystroke) (default is ENABLED).\nadded handling for Enter key so it can be used to start a search.\nBased on a suggestion by LyallPearce\n''2005.11.25 [1.2.1]''\nrenamed from SearchTitleOrTextPlugin to SearchOptionsPlugin\n''2005.11.25 [1.2.0]''\nadded chkSearchList option\nBased on a suggestion by RodneyGomes\n''2005.10.19 [1.1.0]''\nadded chkSearchTitlesFirst option.\nBased on a suggestion by ChristianHauck\n''2005.10.18 [1.0.0]''\nInitial Release\n<<<\n!!!!!Credits\n<<<\nThis feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]].\nBased on a suggestion by LyallPearce.\n<<<\n!!!!!Code\n***/\n//{{{\nversion.extensions.SearchTitleOrText = {major: 2, minor: 3, revision: 0, date: new Date(2006,4,6)};\n//}}}\n\n//{{{\nif (config.options.chkSearchTitles==undefined) config.options.chkSearchTitles=true;\nif (config.options.chkSearchText==undefined) config.options.chkSearchText=true;\nif (config.options.chkSearchTags==undefined) config.options.chkSearchTags=true;\nif (config.options.chkSearchTitlesFirst==undefined) config.options.chkSearchTitlesFirst=false;\nif (config.options.chkSearchList==undefined) config.options.chkSearchList=false;\nif (config.options.chkSearchIncremental==undefined) config.options.chkSearchIncremental=true;\nif (config.options.chkSearchShadows==undefined) config.options.chkSearchShadows=false;\n\nconfig.shadowTiddlers.AdvancedOptions += "\sn<<option chkSearchTitles>> Search in tiddler titles";\nconfig.shadowTiddlers.AdvancedOptions += "\sn<<option chkSearchText>> Search in tiddler text";\nconfig.shadowTiddlers.AdvancedOptions += "\sn<<option chkSearchTags>> Search in tiddler tags";\nconfig.shadowTiddlers.AdvancedOptions += "\sn<<option chkSearchShadows>> Search in shadow tiddlers";\nconfig.shadowTiddlers.AdvancedOptions += "\sn<<option chkSearchTitlesFirst>> Search results show title matches first";\nconfig.shadowTiddlers.AdvancedOptions += "\sn<<option chkSearchList>> Search results show list of matching tiddlers";\nconfig.shadowTiddlers.AdvancedOptions += "\sn<<option chkSearchIncremental>> Incremental searching";\n//}}}\n\n//{{{\nif (config.macros.search.reportTitle==undefined)\n config.macros.search.reportTitle="SearchResults";\n//}}}\n\n//{{{\nconfig.macros.search.handler = function(place,macroName,params)\n{\n var lastSearchText = "";\n var searchTimeout = null;\n var doSearch = function(txt)\n {\n if (txt.value.length>0)\n {\n story.search(txt.value,config.options.chkCaseSensitiveSearch,config.options.chkRegExpSearch);\n lastSearchText = txt.value;\n }\n };\n var clickHandler = function(e)\n {\n doSearch(this.nextSibling);\n return false;\n };\n var keyHandler = function(e)\n {\n if (!e) var e = window.event;\n switch(e.keyCode)\n {\n case 13: // ELS: handle enter key\n doSearch(this);\n break;\n case 27:\n this.value = "";\n clearMessage();\n break;\n }\n if (config.options.chkSearchIncremental)\n {\n if(this.value.length > 2)\n {\n if(this.value != lastSearchText)\n {\n if(searchTimeout) clearTimeout(searchTimeout);\n var txt = this;\n searchTimeout = setTimeout(function() {doSearch(txt);},500);\n }\n }\n else\n if(searchTimeout) clearTimeout(searchTimeout);\n }\n };\n var focusHandler = function(e)\n {\n this.select();\n };\n var btn = createTiddlyButton(place,this.label,this.prompt,clickHandler);\n var txt = createTiddlyElement(place,"input",null,null,null);\n if(params[0])\n txt.value = params[0];\n txt.onkeyup = keyHandler;\n txt.onfocus = focusHandler;\n txt.setAttribute("size",this.sizeTextbox);\n txt.setAttribute("accessKey",this.accessKey);\n txt.setAttribute("autocomplete","off");\n if(config.browser.isSafari)\n {\n txt.setAttribute("type","search");\n txt.setAttribute("results","5");\n }\n else\n txt.setAttribute("type","text");\n}\n//}}}\n\n//{{{\nStory.prototype.search = function(text,useCaseSensitive,useRegExp)\n{\n highlightHack = new RegExp(useRegExp ? text : text.escapeRegExp(),useCaseSensitive ? "mg" : "img");\n var matches = store.search(highlightHack,"title","excludeSearch");\n var q = useRegExp ? "/" : "'";\n clearMessage();\n if (!matches.length) {\n if (config.options.chkSearchList) discardSearchResults();\n displayMessage(config.macros.search.failureMsg.format([q+text+q]));\n } else {\n if (config.options.chkSearchList) \n reportSearchResults(text,matches);\n else {\n var titles = []; for(var t=0; t<matches.length; t++) titles.push(matches[t].title);\n this.closeAllTiddlers(); story.displayTiddlers(null,titles);\n displayMessage(config.macros.search.successMsg.format([matches.length, q+text+q]));\n }\n }\n highlightHack = null;\n}\n//}}}\n\n//{{{\nTiddlyWiki.prototype.search = function(searchRegExp,sortField,excludeTag)\n{\n var candidates = this.reverseLookup("tags",excludeTag,false,sortField);\n\n // scan for matching titles\n var title_results = [];\n if (config.options.chkSearchTitles) {\n for(var t=0; t<candidates.length; t++)\n if(candidates[t].title.search(searchRegExp)!=-1)\n title_results.push(candidates[t]);\n if (config.options.chkSearchShadows)\n for (var t in config.shadowTiddlers)\n if ((t.search(searchRegExp)!=-1) && !store.tiddlerExists(t))\n title_results.push((new Tiddler()).assign(t,config.shadowTiddlers[t]));\n }\n\n // scan for matching text\n var text_results = [];\n if (config.options.chkSearchText) {\n for(var t=0; t<candidates.length; t++)\n if(candidates[t].text.search(searchRegExp)!=-1)\n text_results.push(candidates[t]);\n if (config.options.chkSearchShadows)\n for (var t in config.shadowTiddlers)\n if ((config.shadowTiddlers[t].search(searchRegExp)!=-1) && !store.tiddlerExists(t))\n text_results.push((new Tiddler()).assign(t,config.shadowTiddlers[t]));\n }\n\n // scan for matching tags\n var tag_results = [];\n if (config.options.chkSearchTags)\n for(var t=0; t<candidates.length; t++)\n if(candidates[t].tags.join(" ").search(searchRegExp)!=-1)\n tag_results.push(candidates[t]);\n\n // merge the results, eliminating redundant matches\n var results = [];\n for(var t=0; t<title_results.length; t++) results.pushUnique(title_results[t]);\n for(var t=0; t<text_results.length; t++) results.pushUnique(text_results[t]);\n for(var t=0; t<tag_results.length; t++) results.pushUnique(tag_results[t]);\n\n // if not 'titles first', re-sort results to so titles, text and tag matches are mixed together\n if(!sortField) sortField = "title";\n var bySortField=function (a,b) {if(a[sortField] == b[sortField]) return(0); else return (a[sortField] < b[sortField]) ? -1 : +1; }\n if (!config.options.chkSearchTitlesFirst) results.sort(bySortField);\n return results;\n}\n//}}}\n\n// // ''REPORT GENERATOR''\n//{{{\nif (!window.reportSearchResults) window.reportSearchResults=function(text,matches)\n{\n var title=config.macros.search.reportTitle\n var q = config.options.chkRegExpSearch ? "/" : "'";\n var body="\sn";\n\n // summary: nn tiddlers found matching '...', options used\n body+="''"+config.macros.search.successMsg.format([matches.length,q+"{{{"+text+"}}}"+q])+"''\sn";\n body+="^^//searched in:// ";\n body+=(config.options.chkSearchTitles?"''titles'' ":"");\n body+=(config.options.chkSearchText?"''text'' ":"");\n body+=(config.options.chkSearchTags?"''tags'' ":"");\n body+=(config.options.chkSearchShadows?"''shadows'' ":"");\n if (config.options.chkCaseSensitiveSearch||config.options.chkRegExpSearch) {\n body+=" //with options:// ";\n body+=(config.options.chkCaseSensitiveSearch?"''case sensitive'' ":"");\n body+=(config.options.chkRegExpSearch?"''text patterns'' ":"");\n }\n body+="^^";\n\n // numbered list of links to matching tiddlers\n body+="\sn<<<";\n for(var t=0;t<matches.length;t++) body+="\sn# [["+matches[t].title+"]]";\n body+="\sn<<<\sn";\n\n // open all matches button\n body+="<html><input type=\s"button\s" href=\s"javascript:;\s" ";\n body+="onclick=\s"story.displayTiddlers(null,["\n for(var t=0;t<matches.length;t++)\n body+="'"+matches[t].title.replace(/\s'/mg,"\s\s'")+"'"+((t<matches.length-1)?", ":"");\n body+="],1);\s" ";\n body+="accesskey=\s"O\s" ";\n body+="value=\s"open all matching tiddlers\s"></html> ";\n\n // discard search results button\n body+="<html><input type=\s"button\s" href=\s"javascript:;\s" ";\n body+="onclick=\s"story.closeTiddler('"+title+"'); store.deleteTiddler('"+title+"');\s" ";\n body+="value=\s"discard "+title+"\s"></html>";\n\n // search again\n body+="\sn\sn----\sn";\n body+="<<search \s""+text+"\s">> ";\n body+="<<option chkSearchTitles>>titles ";\n body+="<<option chkSearchText>>text ";\n body+="<<option chkSearchTags>>tags";\n body+="<<option chkSearchShadows>>shadows";\n body+="<<option chkCaseSensitiveSearch>>case-sensitive ";\n body+="<<option chkRegExpSearch>>text patterns";\n\n // create/update the tiddler\n var tiddler=store.getTiddler(title); if (!tiddler) tiddler=new Tiddler();\n tiddler.set(title,body,config.options.txtUserName,(new Date()),"excludeLists excludeSearch");\n store.addTiddler(tiddler); story.closeTiddler(title);\n\n // use alternate "search again" label in <<search>> macro\n var oldprompt=config.macros.search.label;\n config.macros.search.label="search again";\n\n // render tiddler\n story.displayTiddler(null,title,1); // force refresh\n\n // restore standard search label\n config.macros.search.label=oldprompt;\n\n}\n\nif (!window.discardSearchResults) window.discardSearchResults=function()\n{\n // remove the tiddler\n story.closeTiddler(config.macros.search.reportTitle);\n store.deleteTiddler(config.macros.search.reportTitle);\n}\n//}}}\n\n\n
\n''64 tiddlers found matching '{{{config}}}'''\n^^//searched in:// ''titles'' ''text'' ''tags'' ''shadows'' ^^\n<<<\n# [[CalendarConfig]]\n# [[_ConfigTweaks]]\n# [[AliasPlugin]]\n# [[AttachFilePlugin]]\n# [[AttachFilePluginFormatters]]\n# [[AutoSyncPlugin]]\n# [[AutoTaggerPlugin]]\n# [[BreadcrumbsPlugin]]\n# [[CalendarPlugin]]\n# [[CheckboxPlugin]]\n# [[CollapseTiddlersPlugin]]\n# [[CommentForm]]\n# [[CopyTiddlerPlugin]]\n# [[DatePlugin]]\n# [[DeliciousPlayTaggerPlugin]]\n# [[DisableWikiLinksPlugin]]\n# [[DocumentPlugins]]\n# [[DoubleClickForFocus]]\n# [[EditTiddlerPlugin]]\n# [[ExportTiddlersPlugin]]\n# [[GotoPlugin]]\n# [[HTMLFormattingPlugin]]\n# [[ImportTiddlersPlugin]]\n# [[InlineJavascriptPlugin]]\n# [[JavascriptSecurityHelp]]\n# [[LibraryScript]]\n# [[MainMenu]]\n# [[MediaCenter]]\n# [[MoveablePanelPlugin]]\n# [[NestedSlidersPlugin]]\n# [[NewDocumentPlugin]]\n# [[PlayerPlugin]]\n# [[QuoteOfTheDayPlugin]]\n# [[ReminderMacros]]\n# [[SaveOnExitPlugin]]\n# [[SearchOptionsPlugin]]\n# [[SelectStylesheetPlugin]]\n# [[SinglePageModePlugin]]\n# [[SiteMapMacro]]\n# [[SiteMenu]]\n# [[TableOfContentsPlugin]]\n# [[TagCloudPlugin]]\n# [[TextAreaPlugin]]\n# [[TidIDEPlugin]]\n# [[TidIDETools]]\n# [[TiddlerGroupsPlugin]]\n# [[TiddlerWithParamsPlugin]]\n# [[TiddlyStudiosCatalog]]\n# [[ToggleSidebars]]\n# [[UnformattedTextPlugin]]\n# [[UploadPlugin]]\n# [[UploadPluginDoc]]\n# [[Welcome]]\n# [[AttachFileServerScripts]]\n# [[DefaultTiddlers]]\n# [[SideBarOptions]]\n# [[SiteMenuCommands]]\n# [[SiteMenuExtras]]\n# [[SiteMenuRecent]]\n# [[SiteMenuTopics]]\n# [[SiteProxy]]\n# [[SiteSubtitle]]\n# [[SiteTitle]]\n# [[SiteUrl]]\n<<<\n<html><input type="button" href="javascript:;" onclick="story.displayTiddlers(null,['CalendarConfig', '_ConfigTweaks', 'AliasPlugin', 'AttachFilePlugin', 'AttachFilePluginFormatters', 'AutoSyncPlugin', 'AutoTaggerPlugin', 'BreadcrumbsPlugin', 'CalendarPlugin', 'CheckboxPlugin', 'CollapseTiddlersPlugin', 'CommentForm', 'CopyTiddlerPlugin', 'DatePlugin', 'DeliciousPlayTaggerPlugin', 'DisableWikiLinksPlugin', 'DocumentPlugins', 'DoubleClickForFocus', 'EditTiddlerPlugin', 'ExportTiddlersPlugin', 'GotoPlugin', 'HTMLFormattingPlugin', 'ImportTiddlersPlugin', 'InlineJavascriptPlugin', 'JavascriptSecurityHelp', 'LibraryScript', 'MainMenu', 'MediaCenter', 'MoveablePanelPlugin', 'NestedSlidersPlugin', 'NewDocumentPlugin', 'PlayerPlugin', 'QuoteOfTheDayPlugin', 'ReminderMacros', 'SaveOnExitPlugin', 'SearchOptionsPlugin', 'SelectStylesheetPlugin', 'SinglePageModePlugin', 'SiteMapMacro', 'SiteMenu', 'TableOfContentsPlugin', 'TagCloudPlugin', 'TextAreaPlugin', 'TidIDEPlugin', 'TidIDETools', 'TiddlerGroupsPlugin', 'TiddlerWithParamsPlugin', 'TiddlyStudiosCatalog', 'ToggleSidebars', 'UnformattedTextPlugin', 'UploadPlugin', 'UploadPluginDoc', 'Welcome', 'AttachFileServerScripts', 'DefaultTiddlers', 'SideBarOptions', 'SiteMenuCommands', 'SiteMenuExtras', 'SiteMenuRecent', 'SiteMenuTopics', 'SiteProxy', 'SiteSubtitle', 'SiteTitle', 'SiteUrl'],1);" accesskey="O" value="open all matching tiddlers"></html> <html><input type="button" href="javascript:;" onclick="story.closeTiddler('SearchResults'); store.deleteTiddler('SearchResults');" value="discard SearchResults"></html>\n\n----\n<<search "config">> <<option chkSearchTitles>>titles <<option chkSearchText>>text <<option chkSearchTags>>tags<<option chkSearchShadows>>shadows<<option chkCaseSensitiveSearch>>case-sensitive <<option chkRegExpSearch>>text patterns
/* psuedo-macros for init/reset handlers - ignore 'error in macro' messages */\n<<init SurfsUp>> /* init script tiddler: [[SurfsUp]] */\n<<reset SurfsDone>> /* reset script tiddler: [[SurfsDone]] */\n\n/* margins, padding, borders, position, z-index, etc... */\n[[StyleSheetLayout]] /* TW shadow */\n[[StyleSheetColors]] /* TW shadow */\n[[LayoutAdjustments]]\n[[FontAdjustments]]\n[[Gray]]\n\n\n/* borderless tiddlers */\n.viewer { background-image:none; background-color:transparent; padding: 1em; border: 0px; }\n\n/* background */\nbody {\nbackground-color: #000066 !important;\nbackground-image: url('els/beach.jpg') !important;\nbackground-attachment: fixed !important;\n}\n#titleLine, #sidebar {\nbackground-color: transparent !important;\nbackground-image: none !important;\nborder-color:transparent !important;\nborder: 0px solid #014 !important;\n}\n#siteTitle { color:#66c; }\n#siteSubtitle { color:#669; }\n#titleLine a { color: #33f; }\n\n.floatingPanel, #messageArea, .attachPanel, #importPanel, #exportPanel { background: #def !important; }\n\n*[class="TOCList"] { background-color: transparent; color:#006; border-color:transparent !important; }\n
/***\n''Select Stylesheet Plugin for TiddlyWiki version 1.2.x and 2.0''\n^^author: Eric Shulman - ELS Design Studios\nsource: http://www.TiddlyTools.com/#SelectStylesheetPlugin\nlicense: [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]^^\n\nSelect alternative TiddlyWiki CSS stylesheet 'themes' from a list of tiddlers tagged with "stylesheets".\n\n!!!!!Usage\n<<<\nThis plugin defines a macro that creates a stylesheet link or selection listbox/droplist that can be added to the content of any tiddler (such as the OptionsPanel or MainMenu tiddlers).\n\nFirst, create (or import) a custom style sheet tiddler (i.e, a tiddler containing CSS definitions) and tag it with <<tag stylesheets>> so it can be included in the selection list. Then, add the {{{<<selectStylesheet>>}}} macro to the desired tiddler to display the stylesheet list. (note: to create a link to apply a specific stylesheet, include the stylesheet tiddlername as a parameter. See below for more details).\n\nSelect your desired stylesheet from the droplist:\n** ''[system]'' uses the built-in CSS definitions\n** ''[default]'' uses "StyleSheet" tiddler (if present)\n** //tiddlername// uses any named stylesheet\nThe currently selected stylesheet is indicated by a '>' symbol.\n\n//Note: If a selected stylesheet tiddler no longer exists (i.e, the tiddler was deleted or renamed after it had been selected for use), the [default] CSS tiddler ("StyleSheet") will be used as a fallback. If this tiddler does not exist either, then the built-in CSS definitions are used.//\n<<<\n!!!!!Parameters\n<<<\nThe selectStylesheet macro accepts parameters to control various features and functions. //Note: while each parameter is optional and may be omitted from the macro, the parameters (when present) must appear in the order shown below.//\n* ''size:nnn''\nDetermines the number of lines to display in the stylesheet list. If this parameter is omitted or "size:1" is specified, a single-line droplist is created. When a size > 1 is provided, a standard, fixed-size scrollable listbox is created. You can use "size:0" or "size:auto" to display a varible-height listbox that automatically adjusts to fit the current list contents without scrolling.\n* ''width:nnn[cm|px|em|%]''\nControls the width of the stylesheet list. Overrides the built-in CSS width declaration (=100%). Use standard CSS width units (cm=centimeters, px=pixels, em=M-space, %=proportional to containing area). You can also use a ".selectStylesheet" custom CSS class definition to override the built-in CSS declarations for the stylesheet list.\n* ''label:text'' and ''prompt:text''\nwhen used in conjunction with a specific named stylesheet to create a stylesheet link (see //tiddlername// param, below), these two parameters define the link text the 'tooltip' text that appears near the mouse pointer when placed over the link, respectively.\n* ''//tiddlername//''\nIf you include a stylesheet //tiddlername// parameter in the macro (e.g., {{{<<selectStylesheet [[Woodshop]]>>}}} then a link will be created instead of a listbox/droplist. Selecting this link applies the specified stylesheet. You may use the special keywords ''[system]'' to use the built-in CSS definitions, or ''[none]'' to bypass all stylesheet tiddlers (sometimes useful during CSS debugging).\n\n<<<\n!!!!!Nested Stylesheets\n<<<\nThe CSS definitions for TiddlyWiki are fairly substantial, and stylesheet tiddlers can include hundreds of lines of CSS statements. Often, these stylesheets will use the exact same CSS for the bulk of their definitions plus several changes or additions to create a difference in appearance. This results in lots of duplicated CSS definitions that can become difficult to keep 'in sync' with each other.\n\nTo make this problem much easier to manage, you can move the common CSS definitions into separate stylesheet tiddlers. Then, embed {{{[[tiddlertitle]]}}} references in the original stylesheet tiddlers to re-combine the CSS definitions into a single stylesheet 'theme' to be applied.\n\nWith some clever division of CSS into separate tiddlers, you can quite easily construct dozens of stylesheet combinations. You can also mark the common CSS tiddlers with tags and use them as overlay stylesheets so you can mix-and-match their styles to create even more 'on-the-fly' stylesheet combinations.\n\nNote: Normally, when rendering tiddler content for display, the {{{[[tiddlertitle]]}}} syntax means "insert a link to this tiddler". However, when applying stylesheets, this syntax means "insert the content of this tiddler"\n<<<\n!!!!!Changing templates or invoking custom javascript from a stylesheet\n<<<\nIn addition to CSS definitions, some TiddlyWiki look-and-feel designs also make adjustments to the TiddlyWiki document structure so that certain document features can be moved, hidden, or otherwise redefined. The default set of templates that control the document structure are called PageTemplate, ViewTemplate, and EditTemplate. To select an alternative set of templates, you can include the special psuedo-macro ''{{{<<template prefix>>}}}'' in your stylesheet. This adds the indicated prefix to the standard template names, and automatically switches to using those templates whenever the stylesheet is selected and applied.\n\nWhenever a document is being viewed in read-only mode (i.e., via http: protocol), an implied template prefix of "Web" is also used, and is inserted between any custom template prefix and the standard template name. For example, ''{{{<<template Custom>>}}}'' will use {{{CustomWebViewTemplate}}} when the document is in read-only mode. You can specify an alternative for this implied prefix by including a second prefix parameter in the pseudo-macro. For example, ''{{{<<template Custom ReadOnly>>}}}'' will use {{{CustomReadOnlyViewTemplate}}}. Note: if a template tiddler with the indicated combination of custom and read-only prefixes is not available, a suitable fallback template is chosen, first by omitting the custom prefix, then by omitting the read-only prefix, and finally by omitting both, and reverting to the appropriate default template.\n\nIn addition to selecting alternative templates, a stylesheet can also include the psuedo-macro ''{{{<<init tiddlertitle>>}}}'' to execute custom javascript that can access TiddlyWiki internal data and 'core' functions or perform direct manipulation of the currently-rendered DOM elements of the document. First, place the desired javascript code into one or more tiddlers (note: //although these tiddlers will contain javascript, ''do NOT tag them as 'systemConfig', since this will cause the javascript to be executed every time TW starts'', rather than only when a specific stylesheet has been selected//). Then, add the ''{{{<<init tiddlertitle>>}}}'' pseudo-macro to your stylesheet so the javascript will be executed when that specific stylesheet is selected and applied.\n\nOf course, when another stylesheet is subsequently selected, other custom javascript functions may be needed to reset whatever TW internal data changes or DOM manipulations were performed by any {{{<<init>>}}} scripts. You can define tiddlers containing these ''reset'' scripts by embedding ''{{{<<reset tiddlertitle>>}}}'' in your stylesheet definition. Unlike {{{<<init>>}}} scripts, any tiddlers declared in this way will NOT be executed when the stylesheet is applied, but will be remembered and automatically executed before applying another stylesheet.\n\nNote: These special-purpose psuedo-macros are only executed when the stylesheet containing them is actually in use. When these macros are rendered as part of the tiddler content (such as when //viewing// a stylesheet definition), the macros simply report their values without performing any actions.\n<<<\n!!!!!Examples\n<<<\nsingle auto-sized listbox\n{{{<<selectStylesheet size:auto width:60%>>}}}\n<<selectStylesheet size:auto width:60%>>\n\ndroplist for stylesheets\n{{{<<selectStylesheet size:1 width:30%>>}}}\n<<selectStylesheet size:1 width:30%>>\n\ninline links to set specific stylesheets\n{{{<<selectStylesheet Woodshop>> or <<selectStylesheet [[Edge of Night]]>> or <<selectStylesheet [default]>> or <<selectStylesheet [none]>> or <<selectStylesheet label:TiddlyWiki "prompt:The standard TW stylesheet" [system]>>\n}}}\n<<selectStylesheet Woodshop>> or <<selectStylesheet [[Edge of Night]]>> or <<selectStylesheet [default]>> or <<selectStylesheet [none]>> or <<selectStylesheet label:TiddlyWiki "prompt:The standard TW stylesheet" [system]>>\n\nstylesheet definitions (tagged with "stylesheets"):\n<<tag stylesheets>>\n<<<\n!!!!!Installation\n<<<\nimport (or copy/paste) the following tiddlers into your document:\n''SelectStylesheetPlugin'' (tagged with <<tag systemConfig>>)\n^^documentation and javascript for SelectStylesheethandling^^\n\ncreate/edit ''OptionsPanel'':\nAdd "{{{<<selectStylesheet [size:nnn|auto] [width:nnn[cm|px|em|%]>>}}}" macro.\n<<<\n!!!!!Revision History\n<<<\n''2006.05.18 [4.2.5]'' revert to 'onchange' handling, BUT... don't *reload* the list contents each time selection changes (just move the ">" indicator to the current item instead), AND... track onkeydown/up to avoid FF crash due to excess calls to set() when scrolling a listbox by holding down arrow keys.\n''2006.05.15 [4.2.4]'' switch from 'onchange' listbox handling to 'onclick' and 'onkeyup'. Avoids FF **CRASH** due to stylesheets being excessively refreshed *during* onchange due to keyboard event handling.\n''2006.04.21 [4.2.3]'' recognize "stylesheet" tag when building list of available stylesheets (in addition to plural, "stylesheets")\n''2006.04.05 [4.2.2]'' in applyStylesheet(), reverted change from 4.2.0: *don't* apply "StyleSheetColors" and "StyleSheetLayout" along with selected stylesheet, so custom stylesheet can completely bypass the default formatting. To include default formatting in a stylesheet, embed "[[StyleSheetColors]] [[StyleSheetLayout]]" \n''2006.03.30 [4.2.1]'' in applyStylesheet(), change calls from "window.eval()" to just "eval()" to avoid FF1501 'global variable crash' problem \n''2006.03.30 [4.2.0]'' remove [none] choice from listbox. Added handling for <<selectStylesheet sheetname>> to create a link that applies the specified sheet instead of presenting a listbox of available sheets. added "style:" paramifier. Apply "StyleSheetColors" and "StyleSheetLayout" along with selected stylesheet (i.e., overlay selected sheet on top of shadow styles instead of replacing default shadow styles). Based on suggestions from Clint Checketts.\n''2006.03.09 [4.1.4]'' in refreshSelectStylesheet(), make sure that tiddler named in stylesheet cookie value still exists before attempting to select it in the listbox.\n''2006.02.25 [4.1.3]'' Problem: the ">" indicator was not always being refreshed, due to event "timing" issues. refreshSelectStylesheet() deferred for 10msec so it will execute *after* onChangeSelectStylesheet event processing has completed.\n''2006.02.24 [4.1.2]'' Problem: """<<template>>""" macro was not being processed in IE.\nCause: regexp processing creates browser-internal "private globals" used to keep track of the regexp parser's state, including the current 'scan' position within the source string. This lets you use search() and exec() inside loops to scan for successive pattern matches. In applyStyleSheet(), "theCSS.search(templateRegExp)" was called before "theCSS.exec(templateRegExp)". As a result, the regexp parser had already matched the """<<template>>""" macro embedded in the CSS and thus did not actually process the macro and switch the templates.\nFix: use """indexOf("<<template")""" instead of search(templateRegExp) to check for presence of template switching macro in CSS.\n''2006.02.23 [4.1.1]'' performance fixes: in switchTemplates(), added default init of 'altTemplate' value to prevent unneeded triggering of refreshPageTemplate() during TW load-time when using standard templates. Saves LOTS of startup time and avoids the dreaded "script is running slowly" FireFox warnings.\nAlso, the forEachTiddler() call to force a "refresh all tiddlers" (needed when view/edit templates are changed) was moved from applyPageTemplate() and is now called directly from switchTemplates(). This eliminates redundant re-rendering of tiddlers while the page template is being refreshed.\n''2006.02.21 [4.1.0]'' added """<<template>>""" pseudo-macro with new switchTemplate() function. Allows stylsheets to switch page/view/edit templates by adding a prefix to standard template names. Detects readOnly mode and automatically adds "Web" to template name (e.g. "MyWebViewTemplate"). Defines "Web" shadow templates and "viewSource" toolbar command.\n''2006.02.21 [4.0.3]'' added real macro handlers for psuedo-macros "init", "reset" so they will display in the stylesheet tiddler without appearing as an error.\n''2006.01.20 [4.0.2]'' add 'var' to unintended global variable declarations and wrapped notification hijack in init function to eliminate globals and avoid FireFox 1.5.0.1 crash bug when referencing globals\n''2006.01.20 [4.0.1]'' Added optional "init" keyword for {{{<<init tiddlertitle>>}}} psuedo-macro syntax (note: previous {{{<<tiddlertitle>>}}} syntax still permitted)\nRevised documentation to better describe use of init/reset for custom code invokation.\n''2005.11.05 [4.0.0]'' Entire plugin simplified in response to new "shadow stylesheet" architecture introduced in TW1.2.37. Concept of separate overlays has been removed. Stylesheet themes are assembled using [[tiddler]] 'nesting' syntax, and tagged as 'stylesheet'. A single listbox/droplist is provided to select themes.\n''2005.10.25 [3.1.0]'' added support for embedding {{{<<reset tiddlertitle>>}}} companion code (to declare 'DOM cleanup' routines invoked when a stylesheet is UNloaded)\n//Based on a request from ClintChecketts//\n''2005.10.09 [3.0.1]'' combined documentation and code in a single tiddler\n''2005.08.15 [3.0.0]'' Another major re-write. Replaced separate "selectOverlays" macro definition with 'overlays' parameter on 'selectStylesheet' macro. Added support for embedding {{{<<tiddlertitle>>}}} companion code. applyStylesheets() completely re-designed to address quirks with loading and combining multiple stylesheets using browser-specific native handling, as well as add support for executing companion code. Stylesheets+overlays+code are now handled in a platform-neutral manner that avoids differences between browser implementations and uses much less overhead in the DOM.\n''2005.08.07 [2.0.0]'' Major re-write to not use static ID values for listbox controls, so that multiple macro instances can exist without corrupting each other or the DOM. Moved HTML and CSS definitions into plugin code instead of using separate tiddlers. Added new features: support for multiple groups of overlay stylesheets with collapsible tree display. Added size and width params for listbox display.\n''2005.07.27 [1.0.3]'' core update 1.2.29: custom overlayStyleSheet() replaced with new core setStylesheet()\n''2005.07.25 [1.0.2]'' correct 'fallback' handling in selectStyleSheet()\n''2005.07.23 [1.0.1]'' added parameter checks and corrected addNotification() usage\n''2005.07.20 [1.0.0]'' Initial Release\n<<<\n!!!!!Credits\n<<<\nThis feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]]. Thanks to David Jaquith for testing and bug reports and SteveRumsby for feature suggestions.\n<<<\n!!!!!Code\n***/\n//{{{\nversion.extensions.selectStylesheet = {major: 4, minor: 2, revision: 5, date: new Date(2006,5,18)};\n\n// IE needs explicit global scoping for functions/vars called from browser events\nwindow.refreshSelectStylesheet=refreshSelectStylesheet;\nwindow.applyStylesheets=applyStylesheets;\n\nif (!config.options.txtStyleSheet) config.options.txtStyleSheet="StyleSheet";\n//}}}\n\n//{{{\n// define macro rendering handler\nconfig.macros.selectStylesheet = { };\nconfig.macros.selectStylesheet.reset = [];\nconfig.macros.selectStylesheet.handler = function(place,macroName,params) {\n setStylesheet(".selectStylesheet {width:100%;font-size:8pt;margin:0em}","selectStylesheetPlugin");\n var autosize=1;\n if (params[0] && (params[0]=="size:auto"))\n { autosize=0; params.shift(); }\n if (params[0] && (params[0].substr(0,5)=="size:"))\n autosize=(params.shift()).substr(5);\n if (params[0] && (params[0].substr(0,6)=="width:"))\n var width=(params.shift()).substr(6);\n if (params[0] && (params[0].substr(0,6)=="label:"))\n var label=(params.shift()).substr(6);\n if (params[0] && (params[0].substr(0,7)=="prompt:"))\n var prompt=(params.shift()).substr(7);\n if (params[0] && params[0].trim().length) // create a link that sets a specific stylesheet\n createTiddlyButton(place,label?label:params[0],prompt?prompt:params[0], function(){config.macros.selectStylesheet.set(params[0]); return false;});\n else { // create a select list of available stylesheets\n var theList=createTiddlyElement(place,"select",null,"selectStylesheet",null);\n theList.onkeydown=function() // track keystrokes for listbox only\n { if (this.size>1 && !this.keydown) { this.keydown=true; this.previousIndex=this.selectedIndex; } return true; };\n theList.onkeyup=function()\n { if (this.keydown) { this.keydown=false; if (this.selectedIndex!=this.previousIndex) config.macros.selectStylesheet.set(this.value); } return true; };\n theList.onchange=function()\n { if (!this.keydown) config.macros.selectStylesheet.set(this.value); return true; };\n theList.size=1;\n theList.autosize=autosize;\n if (width) theList.style.width=width;\n store.addNotification(null,refreshSelectStylesheet);\n refreshSelectStylesheet();\n }\n}\nconfig.macros.selectStylesheet.set = function(theSheet) {\n if (!theSheet || !theSheet.trim().length) return;\n var allStyleLists=getElementsByClass("selectStylesheet");\n for (var k=0; k<allStyleLists.length; k++) {\n var theList=allStyleLists[k];\n for (var t=0; t<theList.options.length; t++) {\n if (theList.options[t].text.substr(0,1)==">")\n theList.options[t].text=String.fromCharCode(160)+String.fromCharCode(160)+theList.options[t].text.substr(1);\n if ((theList.options[t].value==theSheet) || (theSheet=="[default]" && theList.options[t].value=="StyleSheet"))\n { theList.options[t].text=">"+theList.options[t].text.substr(2); theList.selectedIndex=t; }\n }\n }\n config.options.txtStyleSheet=theSheet;\n saveOptionCookie("txtStyleSheet");\n applyStylesheets();\n return;\n}\nif (config.paramifiers) config.paramifiers.style = { onstart: function(theSheet) { config.macros.selectStylesheet.set(theSheet); } };\n\n// set to TRUE to enable debugging status messages when stylesheets are applied\nconfig.macros.selectStylesheet.verbose = false;\n\n// hijack existing notifications for refreshStyles() handler\ninitSelectStylesheetNotification();\nfunction initSelectStylesheetNotification() {\n for (var i=0; i<store.namedNotifications.length; i++)\n if (store.namedNotifications[i].notify==window.refreshStyles)\n store.namedNotifications[i].notify=applyStylesheets;\n}\n\n// hijack refreshStyles() handler\nwindow.refreshStyles=applyStylesheets;\n\nfunction getElementsByClass(classname)\n{\n var arr=new Array();\n var count=0;\n var all=document.all? document.all : document.getElementsByTagName("*");\n for (var i=0; i<all.length; i++)\n if (all[i].className==classname)\n arr[count++]=all[i];\n return arr;\n}\n\nfunction refreshSelectStylesheet()\n{\n var indent = String.fromCharCode(160)+String.fromCharCode(160)+String.fromCharCode(160);\n // for all instances of the selectStylesheet control\n var allStyleLists=getElementsByClass("selectStylesheet");\n for (var k=0; k<allStyleLists.length; k++) {\n var theList=allStyleLists[k];\n // clear current list contents\n while (theList.length > 0) { theList.options[0] = null; }\n theList.selectedIndex=-1;\n // fill the stylesheet list\n var count=0;\n // prompt text\n theList.options[count++] = new Option("select a stylesheet:","",false,false);\n// DISABLED // option: none (built-in hard-coded CSS only)\n// DISABLED theList.options[count++] = new Option(indent+"[none]","[none]",false,false);\n // option: default (built-in plus shadow stylesheets)\n theList.options[count++] = new Option(indent+"[system]","[system]",false,false);\n // option: StyleSheet tiddler, if present\n if (store.getTiddler("StyleSheet")!=undefined)\n theList.options[count++] = new Option(indent+"[default]","StyleSheet",false,false);\n // options: CSS tiddlers tagged with "stylesheets" or "stylesheet"\n var theSheets=store.getTaggedTiddlers("stylesheets").concat(store.getTaggedTiddlers("stylesheet"));\n for (var i=0; i<theSheets.length; i++) {\n var theTitle=theSheets[i].title;\n if (theTitle=="StyleSheet") continue;\n theList.options[count++] = new Option(indent+theTitle,theTitle,false,false);\n }\n // make sure the requested stylesheet exists, fallback if not...\n var theSheet=config.options.txtStyleSheet;\n if (theSheet!="[none]" && theSheet!="[system]" && !store.getTiddler(theSheet)) theSheet="StyleSheet";\n if (!store.getTiddler(theSheet)) theSheet="[system]";\n // set the listbox selection to current stylesheet\n theList.selectedIndex=0; // default to first item\n for (var t=0; t<theList.options.length; t++) \n if (theList.options[t].value==theSheet)\n { theList.selectedIndex=t; break; }\n theList.options[t].text=">"+theList.options[t].text.substr(2);\n // autosize as appropriate\n theList.size=(theList.autosize<1)?theList.options.length:theList.autosize;\n } // end of "for all instances"\n}\n//}}}\n\n//{{{\nconfig.macros.selectStylesheet.templates = { };\nfunction switchTemplates(which,readOnlyPrefix)\n{\n // remember original templates (init only)\n if (!config.macros.selectStylesheet.templates.originalpage)\n config.macros.selectStylesheet.templates.originalpage = "PageTemplate";\n if (!config.macros.selectStylesheet.templates.originalview)\n config.macros.selectStylesheet.templates.originalview = config.tiddlerTemplates[1];\n if (!config.macros.selectStylesheet.templates.originaledit)\n config.macros.selectStylesheet.templates.originaledit = config.tiddlerTemplates[2];\n if (!config.macros.selectStylesheet.altTemplate)\n config.macros.selectStylesheet.altTemplate="";\n\n // define shorthand variables just for code readability \n var page=config.macros.selectStylesheet.templates.originalpage;\n var view=config.macros.selectStylesheet.templates.originalview;\n var edit=config.macros.selectStylesheet.templates.originaledit;\n\n // get 'readOnly' mode... set by TW core, but not until after the plugin is loaded, so we need to do this here as well...\n var loc = document.location.toString();\n if (readOnly==undefined)\n var readOnly = (loc.substr(0,4) == "http" || loc.substr(0,3) == "ftp") ? config.options.chkHttpReadOnly : false;\n\n // get prefix defaults\n if (!which) var which="";\n if (!readOnlyPrefix) var readOnlyPrefix = "Web";\n if (!readOnly) readOnlyPrefix="";\n var alt = which+readOnlyPrefix;\n\n var msg="current template prefix: '%0', requested template prefix '%1'";\n if (config.macros.selectStylesheet.verbose) alert(msg.format([config.macros.selectStylesheet.altTemplate,alt]));\n\n // only switch if really changing templates\n if (alt == config.macros.selectStylesheet.altTemplate) return;\n\n // remember which templates are being used\n config.macros.selectStylesheet.altTemplate = alt;\n\n // set page template, with fallbacks for missing combinations\n var pageTemplate=alt+page;\n if (!store.getTiddlerText(pageTemplate)) pageTemplate=which+page;\n if (!store.getTiddlerText(pageTemplate)) pageTemplate=readOnlyPrefix+page;\n if (!store.getTiddlerText(pageTemplate)) pageTemplate=page;\n config.macros.selectStylesheet.templates.currentpage = pageTemplate;\n\n // set view template, with fallbacks for missing combinations\n var viewTemplate=alt+view;\n if (!store.getTiddlerText(viewTemplate)) viewTemplate=which+view;\n if (!store.getTiddlerText(viewTemplate)) viewTemplate=readOnlyPrefix+view;\n if (!store.getTiddlerText(viewTemplate)) viewTemplate=view;\n config.tiddlerTemplates[1] = config.macros.selectStylesheet.templates.currentview = viewTemplate;\n\n // set edit template, with fallbacks for missing combinations\n var editTemplate=alt+edit;\n if (!store.getTiddlerText(editTemplate)) editTemplate=which+edit;\n if (!store.getTiddlerText(editTemplate)) editTemplate=readOnlyPrefix+edit;\n if (!store.getTiddlerText(editTemplate)) editTemplate=edit;\n config.tiddlerTemplates[2] = config.macros.selectStylesheet.templates.currentedit = editTemplate;\n\n var msg="switching to templates: %0, %1, %2";\n if (config.macros.selectStylesheet.verbose) alert(msg.format([pageTemplate,viewTemplate,editTemplate]));\n\n // apply page template\n window.applyPageTemplate();\n // apply view/edit templates\n story.forEachTiddler(function(title,element) { this.refreshTiddler(title,null,true);});\n\n}\n// Hijack the applyPageTemplate so the alternate page template (if any) will refresh correctly\nconfig.macros.selectStylesheet.coreApplyPageTemplate = window.applyPageTemplate;\nwindow.applyPageTemplate = function(template)\n{\n var cw=document.getElementById("contentWrapper");\n cw.style.display="none";\n config.macros.selectStylesheet.coreApplyPageTemplate(config.macros.selectStylesheet.templates.currentpage);\n cw.style.display="block";\n}\n//}}}\n\n//{{{\nfunction applyStylesheets()\n{\n // define pattern to match executable <<tiddlername>> references embedded in CSS text\n var setTiddlerRegExp = new RegExp("(?:<<(?:init )([^>]+)>>)","mg");\n var resetTiddlerRegExp = new RegExp("(?:<<reset ([^>]+)>>)","mg");\n var templateRegExp = new RegExp("(?:<<template ([^\ss>]+)( [^>]+)?>>)","mg");\n\n // make sure the requested stylesheet exists, fallback if not...\n var theSheet=config.options.txtStyleSheet;\n switch (theSheet) {\n case "[none]":\n case "[system]":\n break;\n default:\n if (!store.getTiddler(theSheet)) theSheet="StyleSheet";\n if (!store.getTiddler(theSheet)) theSheet="[system]";\n break;\n }\n\n // When store.NotifyAll() is invoked, it can trigger multiple calls to applyStylesheets(),\n // even though only one is needed to set the styles and render things properly. The extra calls\n // add unnecessary processing overhead by performing multiple re-rendering of entire TW display,\n // often resulting in "slow script" warnings. To avoid this, we can track the last stylesheet that\n // was applied and only apply the current requested sheet if it is really a different sheet, OR\n // if the TW contents have actually changed (which might include changes to the current stylesheet)\n if (theSheet==config.macros.selectStylesheet.current && !store.dirty) return;\n config.macros.selectStylesheet.current=theSheet;\n\n // get the primary stylesheet CSS\n var msg="stylesheet: '%0'";\n if (config.macros.selectStylesheet.verbose) alert(msg.format([theSheet]));\n var theCSS = (theSheet.substr(0,1)=='[')?"":store.getRecursiveTiddlerText(theSheet,"");\n if (theSheet.substr(0,1)!='[') store.addNotification(theSheet,refreshStyles);\n\n // if <<template>> reference is not specified, reset to standard template\n if (theCSS.indexOf("<<template")==-1) switchTemplates();\n\n // execute any embedded <<template>> references\n do {\n var match = templateRegExp.exec(theCSS);\n if(match && match[1]) switchTemplates(match[1],match[2]);\n } while(match);\n // filter out embedded <<template>> references\n theCSS = theCSS.replace(templateRegExp,"");\n\n // execute any saved stylesheet 'reset' code tiddlers\n while (config.macros.selectStylesheet.reset.length) {\n var tiddler=config.macros.selectStylesheet.reset.shift();\n var msg="stylesheet reset macro: '%0'";\n if (config.macros.selectStylesheet.verbose) alert(msg.format([tiddler]));\n var msg="error in '%0': %1";\n try { eval(store.getTiddlerText(tiddler)); }\n catch(e) { displayMessage(msg.format([tiddler,e.toString()])); }\n }\n\n // save embedded <<reset tiddlername>> references\n do {\n var match = resetTiddlerRegExp.exec(theCSS);\n if(match && match[1])\n config.macros.selectStylesheet.reset.push(match[1]);\n } while(match);\n // filter out embedded <<reset tiddlername>> references\n theCSS = theCSS.replace(resetTiddlerRegExp,"");\n\n // execute any embedded <<init tiddlername>> references\n do {\n var match = setTiddlerRegExp.exec(theCSS);\n if(match && match[1]) {\n var msg="stylesheet macro: '%0'";\n if (config.macros.selectStylesheet.verbose) alert(msg.format([match[1]]));\n var msg="error in '%0': %1";\n try { eval(store.getTiddlerText(match[1])); }\n catch(e) { displayMessage(msg.format([match[1],e.toString()])); }\n }\n } while(match);\n // filter out embedded <<set tiddlername>> references\n theCSS = theCSS.replace(setTiddlerRegExp,"");\n\n // finally, apply the styles\n switch (theSheet) {\n case "[none]": // no styles\n setStylesheet("","StyleSheetColors");\n setStylesheet("","StyleSheetLayout");\n setStylesheet("","StyleSheet");\n break;\n case "[system]": // default styles only\n setStylesheet(store.getTiddlerText("StyleSheetColors"),"StyleSheetColors");\n setStylesheet(store.getTiddlerText("StyleSheetLayout"),"StyleSheetLayout");\n setStylesheet("","StyleSheet");\n break;\n default: // alternative stylesheet *replaces* default styles\n setStylesheet("/* overridden by [["+theSheet+"]] */","StyleSheetColors");\n setStylesheet("/* overridden by [["+theSheet+"]] */","StyleSheetLayout");\n setStylesheet(theCSS,"StyleSheet");\n break;\n }\n}\n\nconfig.macros.init = { };\nconfig.macros.init.handler = function(place,macroName,params)\n { var out="init: [[%0]]"; wikify(out.format(params),place); }\nconfig.macros.reset = { };\nconfig.macros.reset.handler = function(place,macroName,params)\n { var out="reset: [[%0]]"; wikify(out.format(params),place); }\nconfig.macros.template = { };\nconfig.macros.template.handler = function(place,macroName,params)\n { var out="use template prefix: ''%0 %1''"; wikify(out.format(params),place); }\n\n//}}}
El pájaro de oro,\n de líneas gráciles y furia decidida,\n ataca la esfera donde un árbol,\n en su breve planicie verde y acotada,\n flota sobre un océano diminuto y acerado.\n Allí la daga de un pez ensimismado\n me observa en silencio, obviamente.\n\n Brillan, esfera y ave,\n suspendidos entre bambalinas negras,\n y yo, en mi lecho de hojas y de pieles,\n a la luz de sus aconteceres,\n desvelo una siesta placentera.
<script>\n var s=place.parentNode.style;\n s.textAlign="center";\n s.fontStyle="normal";\n s.marginLeft="0";\n s.marginRight="0";\n s.padding=".7em 0 .5em 0";\n s.border="2px solid #666";\n s.MozBorderRadius="1em";\n</script>
<script>\n var s=place.parentNode.style;\n s.MozBorderRadiusBottomleft="1em";\n s.borderLeftWidth="1px";\n s.borderRightWidth="0px";\n s.borderTopWidth="0px";\n s.borderBottomWidth="1px";\n s.borderStyle="solid";\n s.margin="0em";\n s.marginLeft="1em";\n s.padding="0em";\n s.paddingLeft="1em";\n s.paddingBottom=".2em";\n</script>
En la verde transparencia de los tallos,\n en la rugosa mudez de las cortezas,\n en el blando sedimento de los ríos\n y en la terca superficie de las piedras,\n\n en el fofo socavón del hormiguero,\n en la campana golar de los zorzales\n y en la erguida gratitud con que la espiga\n a la lluvia retribuye en los trigales,\n\n en la suave indiferencia de los gatos,\n en la sencilla superstición del trébol,\n en la risa borboteante de los niños\n y en la exaltada alegría de los perros,\n\n en el cánon que interpretan los batracios\n bajo el halo blanquecino de la luna\n al compás de los violines de los grillos\n a la vera fantasmal de la laguna,\n\n en la fría incandescencia del lucero,\n en la plumosa parábola del pájaro,\n en el jugoso mordisco de las frutas\n y en la vertical estoica de los álamos,\n\n en la blanca plenitud de los jazmines\n que desgarran la epidermis de la noche\n desangrándola en torrentes de fragancia\n hasta vaciarla de penas y reproches,\n\n en los ojos sin descanso de los peces,\n en el manto subyugante de las selvas,\n en el espumoso yodo de los mares\n y en el cribado candil de las estrellas.\n\n Allí están, así: sin pompa ni artificios,\n sin grandilocuencia, sin ambigüedades,\n dándonos en toda su magnificencia\n pequeños mensajes y grandes verdades.
@@font-size:8pt;<script>\n var here=story.findContainingTiddler(place);\n if (!here || !store.tiddlerExists(here.getAttribute("tiddler"))) return;\n var tiddler=store.getTiddler(here.getAttribute("tiddler"));\n var out=tiddler.modified.formatString("MMM DDth YYYY");\n if (tiddler.modified.formatString("YYYY0MM0DD")!=tiddler.created.formatString("YYYY0MM0DD"))\n out+=" (created "+tiddler.created.formatString("MMM DDth YYYY")+")";\n return out;\n</script>@@
Supón que un ave te arrebate mientras duermes\n y te eleve hasta que el mundo\n sea una manzana verde\n mientras sentís en la cara la velocidad alegre\n y te lloran los ojos por el viento\n\n supón que una flecha de luz te atravesara\n en tu trabajo o andando por la calle\n y en una nube de diamantes\n estallara tu cuerpo\n jubiloso\n desparramando en la tierra\n tu esencia, como un rocío centelante\n\n supón que sos un pez\n y ansioso\n subís por los ríos torrentosos\n hasta la cumbre madre de las corrientes\n donde el emblema poderoso de la tierra\n penetra el blando vientre de las nubes\n\n supón que en orquídea umbría\n temblorosa y solitaria\n acaso te convirtieras\n y que un colibrí punzó\n en tu corazón jugoso abrevara\n\n supón que sos colibrí\n flecha rauda de roja curiosidad alada\n que sos diamante o rubí\n pez torrentoso o río\n puma o musgo\n montaña\n\n supón que amaras.
Si en un instante nuestros pasos se cruzaran\n y en un ademán casual\n rozaras medio milímetro de esta piel\n que en la distancia te conoce\n si nuestras voces en un mismo espacio\n sonaran en conjunto\n y el ángulo izquierdo de uno de tus ojos me mirara\n no habría ya retorno\n clavado en vos\n como una costilla tuya\n seguiré mi viaje al fondo de la vida.
{{floatright{+++(SearchOptions)[(+)|search options]\n {{left{<<option chkSearchTitles>> titles <<option chkSearchText>> text <<option chkSearchTags>> tags\n----\n <<option chkSearchTitlesFirst>> títulos primero\n <<option chkSearchList>> list in SearchResults\n <<option chkRegExpSearch>> text patterns\n <<option chkCaseSensitiveSearch>> case sensitive\n <<option chkSearchIncremental>> key-by-key search\n <<option chkSearchShadows>> search in shadows}}}<script>\n place.id="sidebarSearchOptions"\n place.style.borderLeft="1px solid";\n place.style.marginLeft="1em";\n </script>\n===}}}<<search>><script>\n var s=place.lastChild.style;s.fontSize="8pt";s.width="92.5%";\n place.appendChild(document.getElementById("sidebarSearchOptions"));\n</script>/%\n%/+++(Ir a)[Ir a=I]\n <<goto width:100%;font-size:8pt; width:92.5%;font-size:8pt;>>\n===\n+++(groups)[Grupos=G]\n <<tiddlerGroups>>\n===\n+++(contents)[Contenido=C]...\n <<tiddler SideBarTabs>>\n===\n+++(calendar)[Calendario=K]...\n <<calendar thismonth>><script>\n var s=place.lastChild.style; s.width="100%";\n </script>[[view entire year...|DocumentCalendarYear]]<script>\n place.style.textAlign="center";place.style.borderLeft="1px solid";place.style.marginLeft="1em";\n </script>\n===\n[[tagcloud|TagCloud]]<script>place.lastChild.className="button";</script>+++[options]...\n {{floatright{<<tiddler ToggleSidebars>>}}} themes\n <<selectStylesheet size:1 width:100%>>\n\n __tiddler display__\n <<option chkSinglePageMode>> one tiddler at a time\n <<option chkTopOfPageMode>> open at top of page\n <<option chkAnimate>> enable animation\n\n __file saving__\n <<option chkAutoSave>> auto save\n <<option chkSaveBackups>> create backup file\n <<option chkGenerateAnRssFeed>> create .xml file\n\n username\n <<option txtUserName>><script>var s=place.lastChild.style;s.width="100%";s.fontSize="8pt";</script>\n {{center{[[AdvancedOptions]]...}}}<script>\n place.style.borderLeft="1px solid";place.style.marginLeft="1em";\n </script>===\n+++(more)[more...]\n __Archivo__\n <<saveChanges>>\n <<newDocument "label:save as..." ask all>>\n <<upload http://www.tiddlytools.com/store.php index.html backup>>\n [[download from web...|DocumentDownload]]\n\n __Editar__\n <<newTiddler>>\n <<importTiddlers>>\n <<exportTiddlers>>\n <<attach>>\n\n __Ver__\n <<newDocument "label:snapshot" ask snap>>\n <<permaview>>\n <<closeAll>>\n <script>place.style.borderLeft="1px solid";place.style.marginLeft="1em";</script>\n===
<<tabs txtMainTab Listbox 'TableOfContentsPlugin enhanced listbox' SideBarTabsListbox Timeline Timeline TabTimeline All 'All tiddlers' TabAll Tags 'All tags' TabTags More 'More lists' TabMore>>
<<tableOfContents "label:select a tiddler" date:YYYY.0MM.0DD width:100% padding:0 margin:0>><script>place.id="TOCListbox";place.lastChild.lastChild.style.color="#000";</script>
Una a una van cayendo\n las notas de su piano\n y con el lento\n ejecicio inocente\n pueblan la tarde ausente.\n\n Inicia y se detiene,\n duda y recomienza\n Do\n Re\n acunando la siesta.\n\n Do\n Re\n Mi\n insiste en insistir.\n\n Progresa en el trajín\n con cálido tezón\n Fa\n Sol.\n\n Trastabillando un poco,\n por impaciencia,\n sus dedos al tocar\n Fa\n Sol\n La.\n\n Ahora, con suave alegría\n (en las pausas se presiente\n y un poco por la presión\n de sus dedos\n en el teclado paciente)\n promediada la lección\n Sol\n La\n Si\n ya casi al fin.\n\n Y la tarde,\n arduamente columpiada\n por las notas desgranadas\n una a una,\n se ilumina con la suma\n de las sílabas\n acabadas de su son\n La\n Si\n Do...
La silla enmudece\n bajo la cuadrícula del haz de la ventana.\n Miríadas de duendes\n en caótico orbitar de centellas diminutas,\n como una desmembrada danza de diamantes,\n intentan seducir su estático silencio\n para desentrañar,\n de a poco,\n pero con la impudicia microscópica\n e inevitable del polvo,\n su nudo de secretos.\n\n Silla,\n ventana\n y polvo iridisado:\n trilogía semántica,\n triángulo de implicancias,\n recuerdos encriptados.\n\n ¿Quién, en alguna tarde de lloviznas,\n se extasió, encuadrado\n en el ángulo acogedor de su regazo,\n ante ese árbol nimbado de neblina?\n\n ¿Qué madre de forzado insomnio\n amamantó el acuciante reclamo de su niño?\n\n ¿Qué puntapié furioso la tumbó alguna noche\n de impotencia y desamparo?\n\n Pero la silla calla,\n con cuatro garras se aferra a su mutismo\n añorando, empecinada, su vegetal pasado.\n Nada dice a las partículas curiosas\n de las apresuaradas prendas\n que, en noches de amor desesperado,\n arrugadas,\n impregnadas de almizcle,\n sobre sus flacas formas arrojaron.\n\n Nada de la contradictoria\n calidez indiferente de aquel gato\n de uñas incorregibles\n - que tantas astillas le arrancaron -\n que se estiró, perezoso,\n para enroscarse luego\n en una media luna tierna y tibia,\n suave almohadón embigotado.\n\n Ni del poeta ahogado\n en su propio mar de inconclusiones,\n corto de imaginación\n o de vocabulario.\n\n Impertérrita ante los copos\n que, en giros amorosos, indagan en sus vetas\n lo que saben que la silla está callando,\n permanece hierática,\n como una esfinge casera,\n como un tótem cotidiano.\n\n Nada de los temblores de llantos entrecortados,\n de largas tardes de estudios,\n de blandas incrustaciones de goma de mascar,\n mates volcados,\n esperas,\n nada.\n\n Silla,\n ventana,\n polvillo arremolinado:\n misterio tripartito,\n terna mínima de arcanos.\n\n Luz,\n sombra,\n mensaje tácito.
¡Oh! Tenderme en le pasto boca arriba\n y dejar que la lluvia me disuelva\n sentir que mi sangre se diluye\n y mis átomos en verde se sublevan\n mezclarme en el humus victorioso\n que las sabias bacterias me rezuman\n para poder fluir entre las ramas\n entre los musgos húmedos y fofos\n fundirme con la savia burbujeante\n y entrar por las raíces de los bosques\n ser un todo con las plantas generosas\n sentir la tormenta\n el sol\n el viento\n que las aves aniden en mis brazos\n que dibujen mi cuerpo las termitas\n perderme en la espesura interminable\n asomarme en las flores silenciosas\n escurrirme en torrentes de verdura\n hacia el centro mismo del planeta\n y en verde explosión nacer de nuevo\n derramándome por toda la corteza\n donde aún predomina lo sencillo\n la sublime armonía\n la pureza.
/***\n''Single Page Mode Plugin for TiddlyWiki version 2.0 or above''\n^^author: Eric Shulman - ELS Design Studios\nsource: http://www.TiddlyTools.com/#SinglePageModePlugin\nlicense: [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]^^\n\nNormally, 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.\n\n!!!!!Usage\n<<<\nSinglePageMode allows you to configure TiddlyWiki to navigate more like a traditional multipage web site with only one item displayed at a time. When SinglePageMode is enabled, the title of the current tiddler is automatically displayed in the browser window's titlebar and the browser's location URL is updated with a 'permalink' for the current tiddler so that it is easier to create a browser 'bookmark' for the current tiddler.\n\nEven when SinglePageMode is disabled (i.e., displaying multiple tiddlers is permitted), you can reduce the potential for confusion by enable TopOfPageMode, which forces tiddlers to always open at the top of the page instead of being displayed following the tiddler containing the link that was clicked.\n<<<\n!!!!!Configuration\n<<<\nWhen installed, this plugin automatically adds checkboxes in the AdvancedOptions tiddler so you can enable/disable the plugin behavior. For convenience, these checkboxes are also included here:\n\n<<option chkSinglePageMode>> Display one tiddler at a time\n<<option chkTopOfPageMode>> Always open tiddlers at the top of the page\n<<<\n!!!!!Installation\n<<<\nimport (or copy/paste) the following tiddlers into your document:\n''SinglePageModePlugin'' (tagged with <<tag systemConfig>>)\n^^documentation and javascript for SinglePageMode handling^^\n\nWhen installed, this plugin automatically adds checkboxes in the ''shadow'' AdvancedOptions tiddler so you can enable/disable this behavior. However, if you have customized your AdvancedOptions, you will need to ''manually add these checkboxes to your customized tiddler.''\n<<<\n!!!!!Revision History\n<<<\n''2006.06.01 [2.2.0]'' added chkTopOfPageMode handling\n''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\n''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\n''2005.12.27 [2.0.0]'' Update for TW2.0\n''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\n''2005.10.14 [1.1.1]'' permalink creation now calls encodeTiddlyLink() to handle tiddler titles with spaces in them\n''2005.10.14 [1.1.0]'' added automatic setting of window title and location bar ('auto-permalink'). feature suggestion by David Dickens.\n''2005.10.09 [1.0.1]'' combined documentation and code in a single tiddler\n''2005.08.15 [1.0.0]'' Initial Release\n<<<\n!!!!!Credits\n<<<\nThis feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]].\nSupport for BACK/FORWARD buttons adapted from code developed by Clint Checketts\n<<<\n!!!!!Code\n***/\n//{{{\nversion.extensions.SinglePageMode= {major: 2, minor: 2, revision: 0, date: new Date(2006,6,1)};\n\nif (config.options.chkSinglePageMode==undefined) config.options.chkSinglePageMode=false;\nconfig.shadowTiddlers.AdvancedOptions += "\sn<<option chkSinglePageMode>> Display one tiddler at a time";\n\nif (config.options.chkTopOfPageMode==undefined) config.options.chkTopOfPageMode=false;\nconfig.shadowTiddlers.AdvancedOptions += "\sn<<option chkTopOfPageMode>> Always open tiddlers at the top of the page";\n\nconfig.SPMTimer = 0;\nconfig.lastURL = window.location.hash;\nfunction checkLastURL()\n{\n if (!config.options.chkSinglePageMode)\n { window.clearInterval(config.SPMTimer); config.SPMTimer=0; return; }\n if (config.lastURL == window.location.hash)\n return;\n var tiddlerName = convertUTF8ToUnicode(decodeURI(window.location.hash.substr(1)));\n tiddlerName=tiddlerName.replace(/\s[\s[/,"").replace(/\s]\s]/,""); // strip any [[ ]] bracketing\n if (tiddlerName.length) story.displayTiddler(null,tiddlerName,1,null,null);\n}\n\nif (Story.prototype.SPM_coreDisplayTiddler==undefined) Story.prototype.SPM_coreDisplayTiddler=Story.prototype.displayTiddler;\nStory.prototype.displayTiddler = function(srcElement,title,template,animate,slowly)\n{\n if (config.options.chkSinglePageMode) {\n window.location.hash = encodeURIComponent(String.encodeTiddlyLink(title));\n config.lastURL = window.location.hash;\n document.title = wikifyPlain("SiteTitle") + " - " + title;\n story.closeAllTiddlers();\n if (!config.SPMTimer) config.SPMTimer=window.setInterval(function() {checkLastURL();},1000);\n }\n if (config.options.chkTopOfPageMode) { story.closeTiddler(title); window.scrollTo(0,0); srcElement=null; }\n this.SPM_coreDisplayTiddler(srcElement,title,template,animate,slowly)\n}\n\nif (Story.prototype.SPM_coreDisplayTiddlers==undefined) Story.prototype.SPM_coreDisplayTiddlers=Story.prototype.displayTiddlers;\nStory.prototype.displayTiddlers = function(srcElement,titles,template,unused1,unused2,animate,slowly)\n{\n // suspend single-page mode when displaying multiple tiddlers\n var save=config.options.chkSinglePageMode;\n config.options.chkSinglePageMode=false;\n this.SPM_coreDisplayTiddlers(srcElement,titles,template,unused1,unused2,animate,slowly);\n config.options.chkSinglePageMode=save;\n}\n//}}}
Hoy las playas amanacieron pobladas\n de yacentes y fláxidas sirenas.\n Miles de gráciles siluetas\n de una punta a la otra de la costa\n como dormidos y veteados mármoles,\n brillantes y aceitosos.\n Más de cerca se veían,\n como roturas en viejos sacos,\n su costados abiertos,\n donde gusanos\n a medio comer por gusanos muertos\n caían en tóxica cascada.\n Tristes sirenas empetroladas.
/***\n| Name:|SiteMapMacro|\n| Author:|Simon Baird|\n| Location:|http://simonbaird.com/mptw/#SiteMapMacro|\n| Version:|1.0.3, 15-Mar-06|\n\n!!Examples\nSee SiteMap and SliderSiteMap for example usage.\n\n!!Parameters\n* Name of tiddler to start at\n* Max depth (a number) \n* Format (eg, nested, see formats below)\n* Don't show root flag (anything other than null turns it on)\n* Tags - a string containing a bracketed list of tags that we are interested in\n\n!!History\n* 1.0.3 (15-Mar-06)\n** added tag filtering\n* 1.0.2 (15-Mar-06)\n** Added json format and dontshowroot option\n* 1.0.1 (9-Mar-06)\n** Added selectable formats and fixed nested slider format\n* 1.0.0 (8-Mar-06)\n** first release\n\n***/\n//{{{\n\nversion.extensions.SiteMapMacro = {\n major: 1,\n minor: 0,\n revision: 3,\n date: new Date(2006,3,15),\n source: "http://simonbaird.com/mptw/#SiteMapMacro"\n};\n\nconfig.macros.siteMap = {\n\n formats: {\n bullets: {\n formatString: "%0[[%1]]\sn%2",\n indentString: "*"\n },\n\n // put this in your StyleSheet to make it look good.\n // .sliderPanel { margin-left: 2em; }\n\n sliders: {\n formatString: "[[%1]]+++\sn%2===\sn\sn",\n formatStringLeaf: "[[%1]]\sn"\n },\n\n openSliders: {\n formatString: "[[%1]]++++\sn%2===\sn\sn",\n formatStringLeaf: "[[%1]]\sn"\n },\n\n popups: {\n formatString: "[[%1]]+++^\sn%2===\sn\sn",\n formatStringLeaf: "[[%1]]\sn"\n },\n\n // these don't work too well\n openPopups: {\n formatString: "[[%1]]++++^\sn%2===\sn\sn",\n formatStringLeaf: "[[%1]]\sn"\n },\n \n // this is a little nuts but it works\n json: {\n formatString: '\sn%0{"%1":[%2\sn%0]}',\n formatStringLeaf: '\sn%0"%1"',\n indentString: " ",\n separatorString: ","\n }\n\n\n },\n\n defaultFormat: "bullets",\n\n treeTraverse: function(title,depth,maxdepth,format,dontshowroot,tags,excludetags) {\n\n var tiddler = store.getTiddler(title);\n var tagging = store.getTaggedTiddlers(title);\n\n if (dontshowroot)\n depth = 0;\n\n var indent = "";\n if (this.formats[format].indentString)\n for (var j=0;j<depth;j++)\n indent += this.formats[format].indentString;\n\n var childOutput = "";\n if (!maxdepth || depth < parseInt(maxdepth)) \n for (var i=0;i<tagging.length;i++)\n if (tagging[i].title != title) {\n if (this.formats[format].separatorString && i != 0)\n childOutput += this.formats[format].separatorString;\n childOutput += this.treeTraverse(tagging[i].title,depth+1,maxdepth,format,null,tags,excludetags);\n }\n\n if (childOutput == "" && (\n (tags && tags != "" && !tiddler.tags.containsAll(tags.readBracketedList())) ||\n (excludetags && excludetags != "" && tiddler.tags.containsAny(excludetags.readBracketedList()))\n )\n ) {\n // so prune it cos it doesn't have the right tags and neither do any of it's children\n return "";\n }\n\n if (dontshowroot)\n return childOutput;\n\n if (this.formats[format].formatStringLeaf && childOutput == "") {\n // required for nestedSliders\n return this.formats[format].formatStringLeaf.format([indent,title,childOutput]);\n }\n\n return this.formats[format].formatString.format([indent,title,childOutput]);\n },\n\n handler: function (place,macroName,params,wikifier,paramString,tiddler) {\n wikify(this.treeTraverse(\n params[0] && params[0] != '.' ? params[0] : tiddler.title, 1, \n params[1] && params[1] != '.' ? params[1] : null, // maxdepth\n params[2] && params[2] != '.' ? params[2] : this.defaultFormat, // format\n params[3] && params[3] != '.' ? params[3] : null, // dontshowroot\n params[4] && params[4] != '.' ? params[4] : null, // tags\n params[5] && params[5] != '.' ? params[5] : null // excludetags\n ),place);\n }\n\n}\n\n//}}}\n
@@font-size:10pt;color:#999;{{floatright{<<tiddler SiteMenuRecent>>}}}<<tiddler SiteMenuTopics>> | <<tiddler SiteMenuCommands>> | Barras:<script label="Izquierda">\n var sb=document.getElementById('mainMenu'); sb.style.display=(sb.style.display!='block'?'block':'none');\n var da=document.getElementById('displayArea'); da.style.marginLeft=(sb.style.display!='block'?'1em':'10em');\n config.options.chkShowLeftSidebar=(sb.style.display=='block'); saveOptionCookie('chkShowLeftSidebar');\n return false;\n </script><script>place.lastChild.style.fontWeight="normal";</script>|<script label="Derecha">\n var sb=document.getElementById('sidebar'); sb.style.display=(sb.style.display!='block'?'block':'none');\n var da=document.getElementById('displayArea'); da.style.marginRight=(sb.style.display!='block'?'1em':'17em');\n config.options.chkShowRightSidebar=(sb.style.display=='block'); saveOptionCookie('chkShowRightSidebar');\n return false;\n </script><script>place.lastChild.style.fontWeight="normal";</script> | <<tiddler SiteMenuExtras>>@@\n<script>\n var da=document.getElementById('displayArea');\n var mm=document.getElementById('mainMenu');\n var sb=document.getElementById('sidebar');\n if (config.options.chkShowLeftSidebar) { mm.style.display='block'; da.style.marginLeft='10em'; }\n if (config.options.chkShowRightSidebar) { sb.style.display='block'; da.style.marginRight='17em'; }\n</script>
+++^20em^[goto=G]...<<moveablePanel>>enter a tiddler title\n <<goto width:100%;font-size:8pt; width:92.5%;font-size:8pt;>>/%\n %/{{floatleft{+++(groups)[tiddler groups]{{left{<<tiddlerGroups>>}}}===}}}/%\n %/<script>place.lastChild.lastChild.id="selectTiddlerGroup"</script>/%\n %/{{right{+++(contents)[table of contents=C]...{{left{<<tiddler SideBarTabs>>}}}===}}}/%\n %/<script>place.lastChild.insertBefore(document.getElementById("selectTiddlerGroup"),place.lastChild.lastChild);</script>/%\n%/===\n +++^25em^[search=S]...\n <<moveablePanel>><<search>><script>\n var s=place.lastChild.style;s.fontSize="8pt";s.width="100%";\n </script><<option chkSearchTitles>>titles <<option chkSearchText>>text <<option chkSearchTags>>tags +++(SearchOptions)[options...]\n <<option chkSearchTitlesFirst>> show title matches first\n <<option chkSearchList>> list matches in SearchResults\n <<option chkRegExpSearch>> regular expression text patterns\n <<option chkCaseSensitiveSearch>> case sensitive matching\n <<option chkSearchIncremental>> incremental key-by-key search\n <<option chkSearchShadows>> search in shadow tiddlers\n <<tiddler GroupBox>>===\n===\n +++^18em^[options]...<<moveablePanel>>options\n----\n {{floatright{<<tiddler ToggleSidebars>>}}} themes\n <<selectStylesheet size:1 width:100%>>\n\n __tiddler display__\n <<option chkSinglePageMode>> one tiddler at a time\n <<option chkTopOfPageMode>> open at top of page\n <<option chkAnimate>> enable animation\n\n __file saving__\n <<option chkAutoSave>> auto save\n <<option chkSaveBackups>> create backup file\n <<option chkGenerateAnRssFeed>> create .xml file\n\n username\n <<option txtUserName>><script>var s=place.lastChild.style;s.width="100%";s.fontSize="8pt";</script>\n {{center{[[AdvancedOptions]]...}}}===\n +++^18em^[more]...<<moveablePanel>>more functions\n----\n file @@display:block;<<tiddler GroupBox>><<saveChanges>>\n----\n <<newDocument "label:save as..." ask all>>\n <<upload http://www.tiddlytools.com/store.php index.html backup>> //(password req'd)//\n +++^40em^[download from web|save this document on your computer]...<<moveablePanel>>download\n @@display:block;<<tiddler DocumentDownload>><<tiddler GroupBox>>===@@/%\n %/edit @@display:block;<<tiddler GroupBox>><<newTiddler>>\n----\n <<importTiddlers>>\n <<exportTiddlers>>\n <<attach>>@@/%\n %/view @@display:block;<<tiddler GroupBox>><<newDocument "label:snapshot" ask snap>>\n <<permaview>>\n <<closeAll>>@@===
+++(extras)[extras]\n @@font-size:12pt;white-space:normal;+++^70%^[MiniBrowser|surf to other web site from inside TiddlyWiki]...\n <<moveablePanel>>MiniBrowser\n----\n <<tiddler MiniBrowser with: menubar>>=== +++^640px^[MediaCenter|combined media player for windows, real, quicktime, and flash]...\n <<moveablePanel>>MediaCenter\n----\n <<tiddler MediaCenter with: menubar>>=== <<tiddler TidIDECommand>> \n@@<script>place.style.margin=".5em 0 0 1em";</script>===
<<date popup Y M D-1 "yesterday" "DDD MMM DDth YYYY">>::<<date popup today "today" "DDD MMM DDth YYYY">>::<<date popup Y M D+1 "tomorrow" "DDD MMM DDth YYYY">>::+++^18em^[calendar]...\n <<moveablePanel>>calendar\n----\n @@font-size:10pt;<<calendar thismonth>><script>place.lastChild.style.width="100%";</script>@@[[view entire year...|DocumentCalendarYear]]\n ===\n:: +++^50%^[tagcloud|show the tag cloud for this document]...\n <<moveablePanel>>TagCloud\n----\n <<tiddler TagCloud>>===
<script label="welcome">story.closeTiddler('Welcome');story.displayTiddler(null,'Welcome',1);return false;</script> /%\n%/+++^60%^[about|about this document]...<<moveablePanel>>DocumentAbout | <<tiddler DocumentAbout>>===\n +++^60%^[contact|contact TiddlyTools]...<<moveablePanel>>ContactTiddlyTools\n----\n<<tiddler ContactTiddlyTools>>===\n +++^60%^[(c)|legal statements]...<<moveablePanel>>LegalStatements\n----\n<<tiddler ScrollBox with: LegalStatements 30em>>===
http://www.TiddlyTools.com/proxy.php?url=
{{right{[[IntuitiveInterfaces]] @@font-size:18pt;font-family:"Trebuchet MS";font-weigth:bold;[[ELS Design Studios|About ELS Design]]@@ \n@@font-size:8pt;font-family:"Trebuchet MS";Intuitive Interfaces for Intelligent Interactions™@@ }}}
@@font-size:28pt;color:darkgreen;''Tiddly de Daniel''@@ @@font-size:8pt;"¡Pequeñas herramientas para grandes ideas!"@@
http://www.TiddlyTools.com/
{{floatright{@@font-size:7pt;font-weight:normal;<script label="close">\nwhile (place&&place.className!='sliderPanel'&&place.className!='floatingPanel')\n {place=place.parentNode;}\nif(place) place.style.display='none';else alert('not in a slider')\nreturn false;</script>@@}}}
Floto en esta sopa insulsa\n de nadas apacibles.\n Chapoteo indiferente a todo lo que excede\n el perímetro inocuo de mi ombligo.\n Nada me perturba porque nada veo,\n nada escucho,\n nada digo.\n Un muro de distancias me proteje\n de posibles realidades.\n\n Solo,\n voluntario náufrago del mundo\n y náufrago de mí,\n no espero ni deseo las naves del rescate:\n en esta isla perfecta soy rey de las arenas,\n amo y señor de este cielo sin aves,\n de este jardín sin plantas ni sonidos\n y de este sol que ya no quema.\n\n Y llega tu recuerdo como una bofetada,\n como un súbito tsunami\n que quiebra y arrasa mi estólida quietud.\n Y vuelven frío y hambre,\n vuelven los colores y la sangre en marejada,\n los sonidos y las aves.\n\n Y el miedo a morir sin tu mirada.
¿Quién sos? ¿qué sos?\n mujer\n suspiro\n sombra.\n Pasás entre nosotros\n lenta\n como el soplo de un recuerdo.\n\n Tu mirada lánguida de felino triste\n me cuenta a medias un secreto.\n\n ¿Quién sos?\n camalote\n hada\n paloma pensativa\n\n tu figura intriga\n como la orquídea solitaria\n en la cima del bosque\n como la estrella más pequeña\n que un momento se ve\n y al siguiente desaparece.\n\n No me cuentes tu secreto\n de nube tornasolada\n es bueno saberte vaporosa\n con algunas líneas desdibujadas\n saberte brisa\n murmullo\n eco de pisadas.
[[Edge of Night]]\n
Su figura se recorta en el abismo de la noche\n contrastada tras su piel\n (loto en su mesa de cristal)\n tensa toda la superficie del cuerpo\n cuerpo queriendo reflejarse en sí mismo\n cuerpo a la espera de miradas\n noche en su mirada\n en su mente\n noche tras los hilos plateados del cabello\n que flotan entregados en aguas impalpables\n busca con los ojos su cenit\n dos cisnes levantan vuelo a sus costados\n sus dedos-pétalos se abren y se cierran\n el cielo, zafiro embravecido,\n emite destellos que se cruzan\n iniciando el llamado\n un cuerpo que flota\n que se arquea en el aire\n como una tibia hierba palpitante\n que tiende al humo\n al agua\n al pez dorado\n un sol que al moverse\n desprende planetas de rocío\n astro que cuaja en pechos palpitantes\n en poros contraídos por la pluma del ojo\n cuerpo sol en medio de la noche\n arco tensor de percepción\n del tacto\n arco que aviva los sentidos\n mujer arco\n sol\n agua\n humo\n pez dorado.
En la axila áspera y rugosa,\n en las alturas,\n en la penumbra herida,\n húmeda y arbórea,\n en la esfera traslúcida\n de su belleza esquiva,\n solitaria delira\n lazos iridiscentes,\n torbellinos diminutos\n de galaxias, nebulosas y cometas\n que sus permeables vasos\n con un descaro inocente,\n innato,\n transfieren a sus pétalos\n forzándonos al complejo ejercicio\n de admirar la sencillez,\n a la tarea ardua\n (y, por cierto, incomprensible)\n de transformar lo puro,\n lo natural y simple,\n en complicados procesos\n interpretativos,\n carne de sinapsis,\n destilado combustible de intelecto.\n\n Mas ella sueña,\n alucina\n - ajena a nuestras vanas pretensiones -\n con cuentas transparentes\n recorriendo la tersura de sus brácteas,\n con colibríes de alabastro\n hurgando con ansia sus entrañas,\n con metálicos escarabajos\n y arañas de peluche\n grabando ínfimamente\n con trazos invisibles\n su piel lisérgica y turgente.\n\n Agazapada en lo alto de su sueño\n urde invernaderos utópicos,\n manos de cristal,\n mariposas de fuego,\n cerrojos de espuma.\n Sacude levemente\n sus formas barrocas, luminosas,\n haciendo caer su lágrima perpetua\n ocasionando concéntricas volutas\n en la bruma rastrera.\n\n Sueña,\n fosforece,\n perdura.\n No duda,\n no cuestiona,\n no plantea.\n\n Sólo es.
displayMessage("Aloha, Dude!");\nsetTimeout("clearMessage()",3000);
displayMessage("Sand, Sun, and Surf... Tasty!");\nsetTimeout("clearMessage()",3000);
/%\nSwitchTiddlers: insert a link that closes the current tiddler and opens another one in its place\nNOTE: 'instant macro' - uses InlineJavascriptPlugin and TiddlerWithParamsPlugin\nsyntax is: <<tiddler SwitchTiddlers with: NewTiddlerTitle linktext>>\n%/<script label="$2">\n var tiddler=story.findContainingTiddler(place);\n story.displayTiddler(tiddler,"$1");\n story.closeTiddler(tiddler.id.substr(7)); // close self\n return false;\n</script>
/***\n''Table of Contents Plugin for TiddlyWiki version 1.2.x and 2.0''\n^^author: Eric Shulman - ELS Design Studios\nsource: http://www.TiddlyTools.com/#TableOfContentsPlugin\nlicense: [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]^^\n\nWhen there are many tiddlers in a document, the standard 'tabbed list of tiddlers' in the right-hand sidebar can become very long, occupying a lot of page space and requiring a lot scrolling in order to locate and select a tiddler.\n\nThe TableOfContentsPlugin addresses this problem by replacing the standard tabbed list display with a single listbox/droplist control that uses a very small amount of page space, regardless of the number of tiddlers in the document.\n\n!!!!!Usage\n<<<\nTo view a tiddler, simply select (or double-click) its title from the listbox and it will automatically be displayed on the page. The listbox also includes special 'command' items that determine the order and type of tiddlers that are shown in the list:\n\n''[by title]'' displays all tiddlers in the document.\n''[by date/author/tags]'' displays indented sections, sorted accordingly, with headings (indicated by a '+') that can be expanded, one at a time, to view the list of tiddlers in that section.\n''[missing]'' displays tiddlers that have been referenced within the document but do not yet exist.\n''[orphans]'' displays tiddlers that do exist in the document but have not been referenced by a link from anywhere else within the document.\n''[system]'' displays special tiddlers that are used by TiddlyWiki to configure built-in features and add-on macros/extensions. The list includes all tiddlers tagged with <<tag systemTiddlers>> ("templates") or <<tag systemConfig>> (plug-in extensions), plus any 'shadow tiddlers' (built-in default systemTiddlers) that have not been over-ridden by custom tiddler definitions.\n\nThe current list ''display setting is indicated by an arrow (">")'' symbol to the left of command item. Selecting a command item causes the listbox to be reloaded with the appropriate contents and sort order.\n\nWhen you are viewing a list of tiddlers by date/author/tags, ''shift-clicking'' on a section heading or command item causes the listbox display to ''toggle between "show-one-section-at-a-time" and "expand-all-sections"'' display options, allowing you to quickly see all tiddler titles at once without having to view individual indented sections one at a time.\n\nThe ''size of the listbox can be adjusted'' so you can view more (or less) tiddler titles at one time. Select ''[-]'' to reduce the size by one line, ''[+]'' to increase the size by one line, or ''[=]'' to autosize the list to fit the current contents (toggles on/off). //Note: If the listbox is reduced to a single line, it displayed as a droplist instead of a fixed-sized listbox.// You can ''show/hide the entire listbox'' by selecting the "contents" label that appears above the listbox.\n<<<\n!!!!!Control Panel\n<<<\nBy default, tiddlers tagged with <<tag excludeLists>>, are omitted from the TableOfContents so that 'system' tiddlers (e.g. MainMenu, SiteTitle, StyleSheet, etc.) can be hidden, reducing "information overload" and making it easier to select relevant tiddlers when reading your document. However, when //editing// your document, including these hidden tiddlers in the list can be more helpful, so that changes to the menus, titles, styles, etc. can be more quickly accomplished.\n----\n''To include hidden tiddlers in the TableOfContents display, select the following option:''\n<<option chkTOCIncludeHidden>> include hidden tiddlers in TableOfContents(ignores <<tag excludeLists>> tag)\n^^note: this setting is ignored when ''<<option chkHttpReadOnly>> HideEditingFeatures when viewed over HTTP'' is enabled^^\n<<<\n!!!!!Parameters\n<<<\nThe macro accepts optional parameters to control various features and functions:\n* ''label:text''\nReplace the default text ("contents") that appears above the TableOfContents listbox. //Note: to include spaces in the label text, you must enclose the entire parameter in quotes// (e.g., {{{"label:my list of tiddlers"}}})\n* ''sort:fieldtype''\nSets the initial display order for items in the listbox. 'fieldtype' is one of the following pre-defined keywords: ''title'', ''modified'' //(date)//, ''modifier'' //(author)//, ''tags'', ''missing'', ''orphans'', or ''system''\n* ''date:format''\nControls the formatting of dates in TableOfContents display. 'format' is a text-substitution template containing one or more of the following special notations.\n** DDD - day of week in full (eg, "Monday")\n** DD - day of month, 0DD - adds leading zero\n** MMM - month in full (eg, "July")\n** MM - month number, 0MM - adds leading zero\n** YYYY - full year, YY - two digit year\n** hh - hours\n** mm - minutes\n** ss - seconds\n//Note: to include spaces in the formatting template, you must enclose the entire parameter in quotes// (e.g., {{{"date:DDD, DD/MM/YY"}}})\n* ''size:nnn''\nSets the initial number of lines to display in the listbox. If this parameter is omitted or "size:1" is specified, a single-line droplist is created. When a size > 1 is provided, a standard, fixed-size scrollable listbox is created. You can use "size:0" or "size:auto" to display a varible-height listbox that automatically adjusts to fit the current list contents without scrolling.\n* ''width:nnn[cm|px|em|%]''\nSets the width of the listbox control. Overrides the built-in CSS width declaration (=100%). Use standard CSS width units (cm=centimeters, px=pixels, em=M-space, %=proportional to containing area). You can also use a ".TOCList" custom CSS class definition to override the built-in CSS declarations for the listbox.\n* ''hidelist''\nHides the listbox when the TableOfContents is first displayed. Initially, only the listbox label and size controls will appear. Clicking on the listbox label text will alternately show/hide the listbox display. //Note: this setting does not affect the content of the listbox, only whether or not it is initially visible.//\n* ''prompt''\nSets the non-selectable prompt text that is displayed as the first line of the listbox //(note: this feature is not supported by the listbox control on all browsers)//. Let's you include a short text message (such as "select a tiddler"), even when displaying a compact single-line droplist.\n* ''padding:nnn[cm|px|em|%]''\nOverrides default listbox control padding. Sets the CSS padding style.\n* ''margin:nnn[cm|px|em|%]''\nOverrides default listbox control spacing. Sets the CSS margin style.\n* ''inline''\nNormally, the TableOfContents plugin is contained inside a {{{<div>}}} element. This setting causes the plugin to use a {{{<span>}}} instead, allowing for more flexible 'inline' placement when embedded within other content.\n<<<\n!!!!!Examples\n<<<\n<<tableOfContents "label:all tiddlers" sort:title width:40% size:1>>\n<<tableOfContents "label:by date" sort:modified size:1 width:40%>>\n<<tableOfContents "label:tagged tiddlers" sort:tags size:1 width:40%>>\n<<tableOfContents "label:system tiddlers" sort:system size:1 width:40%>>\n<<<\n!!!!!Installation\n<<<\nimport (or copy/paste) the following tiddlers into your document:\n''TableOfContentsPlugin'' (tagged with <<tag systemConfig>>)\n^^documentation and javascript for TableOfContents handling^^\n\ncreate/edit ''SideBarOptions'': (sidebar menu items) \n^^Add {{{<<tableOfContents>>}}} macro^^\n\n<<<\n!!!!!Revision History\n<<<\n''2006.05.21 [2.2.7]''\nadded onkeyup handling for enter key (=view selected tiddler, equivalent to double-click)\n''2006.02.14 [2.2.6]''\nFF1501 fix: add 'var r' and 'var k' to unintended global variable declarations in refreshTOCList() and getTOCListFromButton(). Thanks for report from AndreasHoefler.\n''2006.02.04 [2.2.5]''\nadd 'var' to unintended global variable declarations to avoid FireFox 1.5.0.1 crash bug when assigning to globals\n''2005.12.21 [2.2.2]''\nin onClickTOCList() and onDblClickTOCList(), prevent mouse events from 'bubbling' up to other handlers\n''2005.10.30 [2.2.1]''\nin refreshTOCList(), fixed calculation of "showHidden" to check for 'readOnly' (i.e., "via HTTP") flag\nbased on a report from LyallPearce\n''2005.10.30 [2.2.0]''\nhide tiddlers tagged with 'excludeLists' (with option to override, i.e., "include hidden tiddlers")\n''2005.10.09 [2.1.0]''\ncombined documentation and code in a single tiddler\nadded click toggle for expand-all vs. show-one-branch\n''2005.08.07 [2.0.0]''\nmajor re-write to not use static ID values for listbox controls, so that multiple macro instances can exist without corrupting each other or the DOM. Moved HTML and CSS definitions into plugin code instead of using separate tiddlers. Added macro parameters for label, sort, date, size, width, hidelist and showtabs\n''2005.08.03 [1.0.3]''\nadded "showtabs" optional parameter\n''2005.07.27 [1.0.2]''\ncore update 1.2.29: custom overlayStyleSheet() replaced with new core setStylesheet(). Added show/hide toggle (click on 'contents' link)\n''2005.07.23 [1.0.1]''\nadded parameter checks and corrected addNotification() usage\n''2005.07.20 [1.0.0]''\nInitial Release\n<<<\n!!!!!Credits\n<<<\nThis feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]]\n<<<\n!!!!!Code\n***/\n//{{{\nversion.extensions.tableOfContents = {major: 2, minor: 2, revision: 7, date: new Date(2006,5,21)};\n//}}}\n\n// // 1.2.x compatibility\n//{{{\nif (!window.story) window.story=window;\nif (!store.getTiddler) store.getTiddler=function(title){return store.tiddlers[title]}\nif (!store.addTiddler) store.addTiddler=function(tiddler){store.tiddlers[tiddler.title]=tiddler}\nif (!store.deleteTiddler) store.deleteTiddler=function(title){delete store.tiddlers[title]}\n//}}}\n\n//{{{\n// define defaults for cookie-based option values\nif (config.options.txtTOCSortBy==undefined) config.options.txtTOCSortBy="modified";\nif (config.options.txtTOCListSize==undefined) config.options.txtTOCListSize=12;\nif (config.options.chkTOCShow==undefined) config.options.chkTOCShow=true;\nif (config.options.chkTOCIncludeHidden==undefined) config.options.chkTOCIncludeHidden=false;\n\nconfig.shadowTiddlers.AdvancedOptions += "\sn<<option chkTOCIncludeHidden>> include hidden tiddlers in TableOfContents";\n\n// define macro "tableOfContents" to render controls\nconfig.macros.tableOfContents = { label: "contents" };\nconfig.macros.tableOfContents.cmdMax=7;\n\nconfig.macros.tableOfContents.css = '\s\n.TOC { padding:0.5em 1em 0.5em 1em; }\s\n.TOC a { padding:0em 0.25em 0em 0.25em; color:inherit; }\s\n.TOCList { width: 100%; font-size:8pt; margin:0em; }\s\n';\n\nconfig.macros.tableOfContents.html = '\s\n<div style="text-align:right">\s\n <span style="float:left">\s\n <a href="JavaScript:;" id="TOCMenu" style="padding: 0em;"\s\n onclick="onClickTOCMenu(this)" title="show/hide table of contents">%label%</a>\s\n </span>\s\n <a href="JavaScript:;" id="TOCSmaller" style="display:inline"\s\n onclick="resizeTOC(this)" title="reduce list size">–</a>\s\n <a href="JavaScript:;" id="TOCLarger"style="display:inline"\s\n onclick="resizeTOC(this)" title="increase list size">+</a>\s\n <a href="JavaScript:;" id="TOCMaximize"style="display:inline"\s\n onclick="resizeTOC(this)" title="maximize/restore list size">=</a>\s\n</div>\s\n';\n\nconfig.macros.tableOfContents.handler = function(place,macroName,params) { \n var parsedParams = new Array();\n parsedParams['label']=this.label;\n parsedParams['inline']=false;\n while (params.length>0) {\n if (params[0]=="label:none")\n parsedParams['label']="";\n else if (params[0].substr(0,6)=="label:")\n parsedParams['label']=params[0].substr(6);\n if (params[0].substr(0,7)=="prompt:")\n parsedParams['prompt']=params[0].substr(7);\n if (params[0].substr(0,8)=="padding:")\n parsedParams['padding']=params[0].substr(8);\n if (params[0].substr(0,7)=="margin:")\n parsedParams['margin']=params[0].substr(7);\n if (params[0].substr(0,5)=="sort:")\n parsedParams['sortby']=params[0].substr(5);\n if (params[0].substr(0,5)=="date:")\n parsedParams['date']=params[0].substr(5);\n if ((params[0]=="size:auto")||(params[0]=="size:0"))\n parsedParams['autosize']=true;\n else if (params[0] && (params[0].substr(0,5)=="size:"))\n parsedParams['requestedSize']=params[0].substr(5);\n if (params[0].substr(0,6)=="width:")\n parsedParams['width']=params[0].substr(6);\n if (params[0]=="hidelist")\n parsedParams['hidelist']=true;\n if (params[0]=="inline")\n parsedParams['inline']=true;\n params.shift(); \n }\n setStylesheet(config.macros.tableOfContents.css,"tableOfContents");\n var newTOC=createTiddlyElement(place,parsedParams['inline']?"span":"div",null,"TOC",null)\n if (parsedParams['margin']) { newTOC.style.margin=parsedParams['margin']; }\n if (parsedParams['padding']) { newTOC.style.padding=parsedParams['padding']; }\n if (parsedParams['label']!="") newTOC.innerHTML=config.macros.tableOfContents.html.replace(/%label%/,parsedParams['label']);\n var newTOCList=createTOCList(newTOC,parsedParams)\n refreshTOCList(newTOCList);\n store.addNotification(null,reloadTOCLists); // reload listbox after every tiddler change\n}\n\n// IE needs explicit global scoping for functions/vars called from browser events\nwindow.onChangeTOCList=onChangeTOCList;\nwindow.onClickTOCList=onClickTOCList;\nwindow.onDblClickTOCList=onDblClickTOCList;\nwindow.reloadTOCLists=reloadTOCLists;\nwindow.refreshTOCList=refreshTOCList;\nwindow.onClickTOCMenu=onClickTOCMenu;\nwindow.resizeTOC=resizeTOC;\n \nfunction createTOCList(place,params)\n{\n var theList = createTiddlyElement(place,"select",null,"TOCList",params['prompt'])\n theList.onchange=onChangeTOCList;\n theList.onclick=onClickTOCList;\n theList.ondblclick=onDblClickTOCList;\n theList.onkeyup=onKeyUpTOCList;\n theList.style.display=config.options.chkTOCShow ? "block" : "none" ;\n theList.sortBy=config.options.txtTOCSortBy;\n theList.dateFormat="DD MMM YYYY";\n theList.requestedSize=config.options.txtTOCListSize;\n theList.expandall=false;\n if (params['sortby'])\n { theList.sortBy=params['sortby']; theList.noSortCookie=true; }\n if (params['date'])\n { theList.dateFormat=params['date']; }\n if (params['autosize'])\n { theList.autosize=true; theList.noSizeCookie=true; }\n if (params['requestedSize'])\n { theList.requestedSize=params['requestedSize']; theList.noSizeCookie=true; }\n if (params['width'])\n { theList.style.width=params['width']; }\n if (params['hidelist'])\n { theList.style.display ="none" ; theList.noShowCookie=true; }\n if (params['expandall'])\n { theList.expandall=true; }\n return theList;\n}\n\nfunction onChangeTOCList()\n{\n var thisTiddler=this.options[this.selectedIndex].value;\n if ((this.size==1)&&(thisTiddler!='')) story.displayTiddler(null,thisTiddler,1);\n refreshTOCList(this);\n return false;\n}\n\nfunction onClickTOCList(e)\n{\n\n if (!e) var e = window.event;\n if (this.size==1)\n return; // don't toggle display for droplist\n if (e.shiftKey)\n { this.expandall=!this.expandall; refreshTOCList(this);}\n e.cancelBubble = true; if (e.stopPropagation) e.stopPropagation();\n return true;\n}\n\nfunction onDblClickTOCList(e)\n{\n if (!e) var e = window.event;\n var thisTiddler=this.options[this.selectedIndex].value;\n if (thisTiddler!='') story.displayTiddler(null,thisTiddler,1);\n e.cancelBubble = true; if (e.stopPropagation) e.stopPropagation();\n return false;\n}\n\nfunction onKeyUpTOCList(e)\n{\n if (!e) var e = window.event;\n if (e.keyCode!=13) return true;\n var thisTiddler=this.options[this.selectedIndex].value;\n if (thisTiddler!='') story.displayTiddler(null,thisTiddler,1);\n e.cancelBubble = true; if (e.stopPropagation) e.stopPropagation();\n return false;\n}\n\nfunction reloadTOCLists()\n{\n var all=document.all? document.all : document.getElementsByTagName("*");\n for (var i=0; i<all.length; i++)\n if (all[i].className=="TOCList")\n { all[i].selectedIndex=-1; refreshTOCList(all[i]); }\n}\n\nfunction refreshTOCList(theList)\n{\n // DEBUG var starttime=new Date();\n var selectedIndex = theList.selectedIndex;\n if (selectedIndex==-1) selectedIndex=0;\n var sortBy = theList.sortBy;\n var showHidden = config.options.chkTOCIncludeHidden\n && !(config.options.chkHttpReadOnly && readOnly);\n\n if (selectedIndex==0) sortBy=theList.sortBy; // "nnn tiddlers" heading\n if (selectedIndex==1) sortBy='title';\n if (selectedIndex==2) sortBy='modified';\n if (selectedIndex==3) sortBy='modifier';\n if (selectedIndex==4) sortBy='tags';\n if (selectedIndex==5) sortBy='missing';\n if (selectedIndex==6) sortBy='orphans';\n if (selectedIndex==7) sortBy='system';\n if (selectedIndex>config.macros.tableOfContents.cmdMax)\n {\n if (theList.options[theList.selectedIndex].value=='')\n expandTOC(theList);\n return;\n }\n theList.sortBy = sortBy;\n if (!theList.noSortCookie)\n { config.options.txtTOCSortBy=sortBy; saveOptionCookie("txtTOCSortBy"); }\n\n // get the list of tiddlers and filter out 'hidden' tiddlers (i.e., tagged with "excludeLists")\n var tiddlers = [];\n switch (sortBy) {\n case "missing":\n tiddlers = store.getMissingLinks();\n break;\n case "tags":\n tiddlers = store.getTags();\n break;\n case "orphans":\n var titles = store.getOrphans();\n for (var t = 0; t < titles.length; t++)\n if (showHidden || store.getTiddler(titles[t]).tags.find("excludeLists")==null)\n tiddlers.push(titles[t]);\n break;\n case "system":\n var temp = store.getTaggedTiddlers("systemTiddlers");\n for (var t = 0; t < temp.length; t++)\n if (showHidden || temp[t].tags.find("excludeLists")==null)\n tiddlers.pushUnique(temp[t].title,true);\n var temp = store.getTaggedTiddlers("systemConfig");\n for (var t = 0; t < temp.length; t++)\n if (showHidden || temp[t].tags.find("excludeLists")==null)\n tiddlers.pushUnique(temp[t].title,true);\n for (var t in config.shadowTiddlers) tiddlers.pushUnique(t,true);\n tiddlers.sort();\n break;\n default:\n var temp = store.getTiddlers(sortBy);\n for (var t = 0; t < temp.length; t++)\n if (showHidden || temp[t].tags.find("excludeLists")==null)\n tiddlers.push(temp[t]);\n }\n\n // clear current list contents\n while (theList.length > 0) { theList.options[0] = null; }\n theList.saved=null;\n\n // add heading and control items to list\n var i=0;\n var theHeading=tiddlers.length+' tiddlers:';\n if (sortBy=='missing') theHeading=tiddlers.length+' missing tiddlers:';\n if (sortBy=='orphans') theHeading=tiddlers.length+' orphaned tiddlers:';\n if (sortBy=='tags') theHeading=tiddlers.length+' tags:';\n if (sortBy=='system') theHeading=tiddlers.length+' system tiddlers:';\n var indent=String.fromCharCode(160)+String.fromCharCode(160);\n var sel=">";\n theList.options[i++]=new Option(theHeading,'',false,false);\n theList.options[i++]=new Option(((sortBy=="title")?sel:indent)+' [by title]','',false,false);\n theList.options[i++]=new Option(((sortBy=="modified")?sel:indent)+' [by date]','',false,false);\n theList.options[i++]=new Option(((sortBy=="modifier")?sel:indent)+' [by author]','',false,false);\n theList.options[i++]=new Option(((sortBy=="tags")?sel:indent)+' [by tags]','',false,false);\n theList.options[i++]=new Option(((sortBy=="missing")?sel:indent)+' [missing]','',false,false);\n theList.options[i++]=new Option(((sortBy=="orphans")?sel:indent)+' [orphans]','',false,false);\n theList.options[i++]=new Option(((sortBy=="system")?sel:indent)+' [system]','',false,false);\n // output the tiddler list\n switch(sortBy)\n {\n case "title":\n for (var t = 0; t < tiddlers.length; t++)\n theList.options[i++] = new Option(tiddlers[t].title,tiddlers[t].title,false,false);\n break;\n case "modified":\n // sort descending for newest date first\n tiddlers.sort(function (a,b) {if(a['modified'] == b['modified']) return(0); else return (a['modified'] > b['modified']) ? -1 : +1; });\n // continue with same logic as for 'modifier'...\n case "modifier":\n var lastSection = "";\n for (var t = 0; t < tiddlers.length; t++)\n {\n var tiddler = tiddlers[t];\n var theSection = "";\n if (sortBy=="modified") theSection = tiddler.modified.formatString(theList.dateFormat);\n if (sortBy=="modifier") theSection = tiddler.modifier;\n if (theSection != lastSection)\n {\n theList.options[i++] = new Option('+ '+theSection,"",false,false);\n lastSection = theSection;\n }\n theList.options[i++] = new Option(indent+indent+tiddler.title,tiddler.title,false,false);\n }\n expandTOC(theList);\n break;\n case "tags":\n // tagged tiddlers, by tag\n var tagcount=0;\n var lastTag = null;\n for (var t = 0; t < tiddlers.length; t++) // actually a list of tags, not tiddlers...\n {\n var theTag = tiddlers[t][0];\n var tagged = new Array();\n var temp = store.getTaggedTiddlers(theTag);\n for(var r=0; r<temp.length; r++)\n if (showHidden || temp[r].tags.find("excludeLists")==null)\n tagged.push(temp[r]);\n if (tagged.length)\n {\n tagcount++;\n theList.options[i++]= new\n Option('+ '+theTag+" ("+tagged.length+")","",false,false);\n for(var r=0; r<tagged.length; r++)\n theList.options[i++] = new\n Option(indent+indent+tagged[r].title,tagged[r].title,false,false);\n }\n }\n // count untagged tiddlers\n var temp = store.getTiddlers("title");\n var c=0; for (var r=0; r<temp.length;r++) if (!temp[r].tags.length) c++;\n // create 'pseudo-tag' listing untagged tiddlers (if any)\n if (c>0)\n {\n theList.options[i++] = new Option("+ untagged ("+c+")","",false,false);\n for (var r=0; r<temp.length;r++) if (!temp[r].tags.length)\n theList.options[i++] = new\n Option(indent+indent+temp[r].title,temp[r].title,false,false);\n }\n theList.options[0].text=tagcount+' tags:';\n expandTOC(theList);\n break;\n case "missing":\n case "orphans":\n case "system":\n for (var t = 0; t < tiddlers.length; t++)\n theList.options[i++] = new Option(tiddlers[t],tiddlers[t],false,false);\n break;\n }\n theList.selectedIndex=selectedIndex; // select current control item\n theList.size = (theList.autosize)?theList.options.length:theList.requestedSize;\n // DEBUG var endtime=new Date();\n // DEBUG alert("refreshTOC() elapsed time: "+(endtime-starttime)+" msec");\n}\n\n// show/hide branch of TOCList based on current selection\nfunction expandTOC(theList)\n{\n var selectedIndex = theList.selectedIndex;\n if (selectedIndex==-1) selectedIndex=0;\n var sortBy = theList.sortBy;\n\n // don't collapse/expand list for alpha-sorted "flatlist" TOC contents\n if ((sortBy=="title")||(sortBy=="missing")||(sortBy=="orphans")||(sortBy=="system"))\n return;\n // or list control items\n if ((selectedIndex>0)&&(selectedIndex<=config.macros.tableOfContents.cmdMax))\n return;\n\n var theText = theList.options[selectedIndex].text;\n var theValue = theList.options[selectedIndex].value;\n // save fully expanded list contents (if not already saved)\n if (!theList.saved)\n {\n theList.saved = new Array();\n for (var i=0; i < theList.length; i++)\n {\n opt = theList.options[i];\n theList.saved[i] = new Option(opt.text, opt.value, opt.defaultSelected, opt.selected);\n }\n }\n // clear current list contents\n while (theList.length > 0) { theList.options[0] = null; }\n\n // put back all items \n if (theList.expandall)\n {\n var i=0;\n for (var t=0; t<theList.saved.length; t++)\n {\n var opt=theList.saved[t];\n theList.options[i++] = new Option(opt.text,opt.value,opt.defaultSelected,opt.selected);\n if (opt.text==theText) selectedIndex=i-1;\n }\n theList.selectedIndex = selectedIndex;\n theList.size = (theList.autosize)?theList.options.length:theList.requestedSize;\n return;\n }\n\n // put back heading items until item text matches current selected heading\n var i=0;\n for (var t=0; t<theList.saved.length; t++)\n {\n var opt=theList.saved[t];\n if (opt.value=='')\n theList.options[i++] = new Option(opt.text,opt.value,opt.defaultSelected,opt.selected);\n if (opt.text==theText)\n break;\n }\n selectedIndex=i-1; // this is the NEW index of the current selected heading\n // put back items with value!='' until value==''\n for ( t++; t<theList.saved.length; t++)\n {\n var opt=theList.saved[t];\n if (opt.value!='')\n theList.options[i++] = new Option(opt.text,opt.value,opt.defaultSelected,opt.selected);\n if (opt.value=='')\n break;\n }\n // put back remaining items with value==''\n for ( ; t<theList.saved.length; t++)\n {\n var opt=theList.saved[t];\n if (opt.value=='')\n theList.options[i++] = new Option(opt.text,opt.value,opt.defaultSelected,opt.selected);\n }\n theList.selectedIndex = selectedIndex;\n theList.size = (theList.autosize)?theList.options.length:theList.requestedSize;\n}\n\n// these functions process clicks on the 'control links' that are displayed above the listbox\nfunction getTOCListFromButton(which)\n{\n var theList = null;\n switch (which.id)\n {\n case 'TOCMenu':\n var theSiblings = which.parentNode.parentNode.parentNode.childNodes;\n var thePlace=which.parentNode.parentNode.parentNode.parentNode.parentNode.id;\n break;\n case 'TOCSmaller':\n case 'TOCLarger':\n case 'TOCMaximize':\n var theSiblings = which.parentNode.parentNode.childNodes;\n var thePlace=which.parentNode.parentNode.parentNode.parentNode.id;\n break;\n }\n for (var k=0; k<theSiblings.length; k++)\n if (theSiblings[k].className=="TOCList") { theList=theSiblings[k]; break; }\n // DEBUG if (theList) alert('found '+theList.className+' for '+which.id+' button in '+thePlace);\n return theList;\n}\n\nfunction onClickTOCMenu(which)\n{\n var theList=getTOCListFromButton(which);\n if (!theList) return;\n var opening = theList.style.display=="none";\n if(config.options.chkAnimate)\n anim.startAnimating(new Slider(theList,opening,false,"none"));\n else\n theList.style.display = opening ? "block" : "none" ;\n if (!theList.noShowCookie)\n { config.options.chkTOCShow = opening; saveOptionCookie("chkTOCShow"); }\n return(false);\n}\n\nfunction resizeTOC(which)\n{\n var theList=getTOCListFromButton(which);\n if (!theList) return;\n\n var size = theList.size;\n if (theList.style.display=="none") // make sure list is visible\n if(config.options.chkAnimate)\n anim.startAnimating(new Slider(theList,true,false,"none"));\n else\n theList.style.display = "block" ;\n switch (which.id)\n {\n case 'TOCSmaller': // decrease current listbox size\n if (theList.autosize) { theList.autosize=false; size=config.options.txtTOCListSize; }\n if (size==1) break;\n size -= 1; // shrink by one line\n theList.requestedSize = theList.size = size;\n break;\n case 'TOCLarger': // increase current listbox size\n if (theList.autosize) { theList.autosize=false; size=config.options.txtTOCListSize; }\n if (size>=theList.options.length) break;\n size += 1; // grow by one line\n theList.requestedSize = theList.size = size;\n break;\n case 'TOCMaximize': // toggle autosize\n theList.autosize = (theList.size!=theList.options.length);\n theList.size = (theList.autosize)?theList.options.length:theList.requestedSize;\n break;\n }\n if (!theList.noSizeCookie && !theList.autosize)\n { config.options.txtTOCListSize=size; saveOptionCookie("txtTOCListSize"); }\n}\n//}}}\n
<<tagCloud demotag excludeMissing excludeLists excludeSearch>>
/***\n''Plugin:'' Tag Cloud Macro\n''Author:'' Clint Checketts\n''Source URL:''\n\n!Usage\n<<tagCloud>>\n\n!Code\n***/\n//{{{\nversion.extensions.tagCloud = {major: 1, minor: 0 , revision: 0, date: new Date(2006,2,04)};\n//Created by Clint Checketts, contributions by Jonny Leroy and Eric Shulman\n\nconfig.macros.tagCloud = {\n noTags: "No tag cloud created because there are no tags.",\n tooltip: "%1 tiddlers tagged with '%0'"\n};\n\nconfig.macros.tagCloud.handler = function(place,macroName,params) {\n \nvar tagCloudWrapper = createTiddlyElement(place,"div",null,"tagCloud",null);\n\nvar tags = store.getTags();\nfor (var t=0; t<tags.length; t++) {\n for (var p=0;p<params.length; p++) if (tags[t][0] == params[p]) tags[t][0] = "";\n}\n\n if(tags.length == 0) \n createTiddlyElement(tagCloudWrapper,"span",null,null,this.noTags);\n //Findout the maximum number of tags\n var mostTags = 0;\n for (var t=0; t<tags.length; t++) if (tags[t][0].length > 0){\n if (tags[t][1] > mostTags) mostTags = tags[t][1];\n }\n //divide the mostTags into 4 segments for the 4 different tagCloud sizes\n var tagSegment = mostTags / 4;\n\n for (var t=0; t<tags.length; t++) if (tags[t][0].length > 0){\n var tagCloudElement = createTiddlyElement(tagCloudWrapper,"span",null,null,null);\n tagCloudWrapper.appendChild(document.createTextNode(" "));\n var theTag = createTiddlyButton(tagCloudElement,tags[t][0],this.tooltip.format(tags[t]),onClickTag,"tagCloudtag tagCloud" + (Math.round(tags[t][1]/tagSegment)+1));\n theTag.setAttribute("tag",tags[t][0]);\n }\n\n};\n\nsetStylesheet(".tagCloud span{height: 1.8em;margin: 3px;}.tagCloud1{font-size: 1.2em;}.tagCloud2{font-size: 1.4em;}.tagCloud3{font-size: 1.6em;}.tagCloud4{font-size: 1.8em;}.tagCloud5{font-size: 1.8em;font-weight: bold;}","tagCloudsStyles");\n//}}}
Te doy una palabra\n así como quien dice\n "te doy una palabra"\n amor\n escarnio\n laurel\n vino\n\n te doy las palabras que vos quieras\n olores\n música\n soledad\n amigo\n y las tomás o no\n\n te doy una palabra\n y no es más que eso\n un arabesco sencillo\n un sonido que flota\n en sí, una pequeña nada\n que se transforma en símbolo preciso\n cuando la pongo en tus manos.
Constante constante caos\n reiterados cataclismos\n génesis y extinción en ciclos alternados\n mi cuerpo se abre en grietas sulfurosas\n yergo cordilleras en mi espalda\n en mis brazos\n en mi pecho\n que sucumben\n se derrumban\n empujadas por nuevos plegamientos\n\n mis palmas refulgen en oleadas\n supuran cáusticos vapores\n mis ojos\n ciclones de nubes renegridas\n sólo ven los meteoros\n que con estrépitos sangrantes\n en continuas colisiones tallan\n deforman y conforman\n mis confusos continentes\n\n de mi boca\n frenética y tirante\n un grito de lava cae al cielo\n ígneo vómito ascendente\n que tapiza las alturas con nubes crepitantes\n y en gotas de enamorado fuego\n dulces ya\n ya enardecidas\n llueven su basáltico alimento\n en la maraña de ávidas raíces\n con que mi corazón\n en un tropismo inverso\n desgarra mi agrietada superficie\n\n y vuelvo a absorber mis propias quemazones\n y me aquieto y me revuelvo\n y muto y me trasmuto\n me trasciendo\n retrocedo al origen de mi carne\n en busca\n ya ni sé\n de qué respuesta\n me hago y me rehago\n me destruyo\n y avanzo nuevamente hacia el comienzo\n al fuego inicial\n y busco\n y busco\n y busco\n\n y no encuentro.
[[StyleSheetLayout]] /* TW shadow */\n[[StyleSheetColors]] /* TW shadow */\n[[StyleSheetPrint]] /* TW shadow */\n.left { display:block;text-align:left; }\n.floatleft { text-align:left;float:left; }\n.right { display:block;text-align:right; }\n.floatright { text-align:right;float:right; }\n.center { display:block;text-align:center; }\n\n/*\n.toolbar {\n position:fixed; right:0;\n background-color:#eee; color:#000;\n border:1px solid black; -moz-border-radius:1em;\n margin: 0.5em;padding: 0.5em;\n}\n.toolbar .button, .toolbar a { color:#009; }\n.toolbar a:hover { color:#fff; }\n*/
<script>\n // set an embedded value\n window.library_set = function(form) {\n var field=form.firstChild;\n var tiddler=story.findContainingTiddler(field);\n if (!tiddler) { alert("not in a tiddler!"); return false; } else tiddler=store.getTiddler(tiddler.getAttribute("tiddler"));\n if (field.value!=field.defaultValue) {\n var text=tiddler.text;\n text=text.replace(new RegExp("\s\s/%%0%\s\s/.*\s\s/%%0%\s\s/".format([field.name])),'/%%0%/ %1 /%%0%/'.format([field.name,field.value]));\n text=text.replace(new RegExp('name="%0" value="[^"]*"'.format([field.name])),'name="%0" value="%1"'.format([field.name,field.value]));\n tiddler.set(null,text);\n store.setDirty(true);\n }\n story.refreshTiddler(tiddler.title,null,true);\n return false;\n }\n\n // get an embedded value\n window.library_get = function(t,name) {\n var tiddler=store.getTiddler(t); if (!tiddler) { alert("can't find tiddler '%0'".format([t])); return; }\n var text=tiddler.text;\n var marker="/%"+name+"%/";\n var startpos=text.indexOf(marker)+marker.length;\n var endpos=text.indexOf(marker,startpos);\n if (startpos==endpos) return "";\n var out=text.substring(startpos+1,endpos-1); // trim delimiting space chars\n return out;\n }\n</script>\n!!!EXPERIMENT: style viewers\n<script>\nvar elems=document.getElementsByTagName("*");\nvar out='<html><form>';\nout+='<select size=1 name=elems style="width:100%" ';\nout+=' onchange="this.form.css.value=this.form.obj.value=\s'\s'; if (!this.value.length) return;';\nout+=' var e=document.getElementById(this.value);';\nout+=' this.form.css.value=\s'#%0 { %1 }\s'.format([this.value,e.style.cssText]);';\nout+=' this.form.obj.value=config.macros.tidIDE.showObject(e.style)">';\nout+='<option value=\s'\s'>select an element ID...</option>';\nfor (var i=0;i<elems.length;i++) { if (elems[i].id.length) out+='<option value="%0">ID: %0</option>'.format([elems[i].id]); }\nout+='</select><br>';\nout+='<textarea name=css rows=15 style="width:100%;height:15em"';\nout+=' onkeyup="if (event.ctrlKey && event.keyCode==13) this.form.go.click()"></textarea><br>';\nout+='<center><input type=button name=go value="apply styles" onclick="setStylesheet(this.form.css.value,\s'testStyles\s')"></center>';\nout+='<textarea name=obj rows=15 style="display:none;width:100%;height:15em"></textarea>';\nout+='</form></html>';\nreturn out;\n</script>
/***\n''TextAreaPlugin for TiddlyWiki version 2.0''\n^^author: Eric Shulman - ELS Design Studios\nsource: http://www.TiddlyTools.com/#TextAreaPlugin\nlicense: [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]^^\n\nThis plugin 'hijacks' the TW core function, ''Story.prototype.focusTiddler()'', so it can add special 'keyDown' handlers to adjust several behaviors associated with the textarea control used in the tiddler editor. Specifically, it:\n* Option to set cursor at top of edit field instead of auto-selecting contents\s\n* Option to disable use of the ESC key to cancel editing\n* Adds text search INSIDE of edit fields.^^\nUse ~CTRL-F for "Find" (prompts for search text), and ~CTRL-G for "Find Next" (uses previous search text)^^\n* Enables TAB characters to be entered into field content^^\n(instead of moving to next field)^^\n\n!!!!!Configuration\n<<<\n<<option chkDisableAutoSelect>> place cursor at start of textarea instead of pre-selecting content\n<<option chkDisableEscapeKey>> don't cancel editor when ''escape'' key is pressed\n<<option chkTextAreaExtensions>> add control-f (find), control-g (find again) and allow TABs as input in textarea\n<<<\n!!!!!Installation\n<<<\nImport (or copy/paste) the following tiddlers into your document:\n''TextAreaPlugin'' (tagged with <<tag systemConfig>>)\n<<<\n!!!!!Revision History\n<<<\n''2006.02.14 [1.1.0]''\nadded option for chkDisableEscapeKey (default is standard action)\n''2006.01.22 [1.0.1]''\nonly add extra key processing for TEXTAREA elements (not other edit fields).\nadded option to enable/disable textarea keydown extensions (default is "standard keys" only)\n''2006.01.22 [1.0.0]''\nMoved from temporary "System Tweaks" tiddler into 'real' TextAreaPlugin tiddler.\n<<<\n!!!!!Code\n***/\n//{{{\nversion.extensions.textAreaPlugin= {major: 1, minor: 1, revision: 0, date: new Date(2006,2,14)};\n//}}}\n\n//{{{\nif (!config.options.chkDisableAutoSelect) config.options.chkDisableAutoSelect=false; // default to standard action\nif (!config.options.chkTextAreaExtensions) config.options.chkTextAreaExtensions=false; // default to standard action\nif (!config.options.chkDisableEscapeKey) config.options.chkDisableEscapeKey=false; // default to standard action\n\n// Focus a specified tiddler. Attempts to focus the specified field, otherwise the first edit field it finds\nStory.prototype.focusTiddler = function(title,field)\n{\n var tiddler = document.getElementById(this.idPrefix + title);\n if(tiddler != null)\n {\n var children = tiddler.getElementsByTagName("*")\n var e = null;\n for (var t=0; t<children.length; t++)\n {\n var c = children[t];\n if(c.tagName.toLowerCase() == "input" || c.tagName.toLowerCase() == "textarea")\n {\n if(!e)\n e = c;\n if(c.getAttribute("edit") == field)\n e = c;\n }\n }\n if(e)\n {\n e.focus();\n e.select(); // select entire contents\n\n // TWEAK: add TAB and "find" key handlers\n if (config.options.chkTextAreaExtensions) // add extra key handlers\n addKeyDownHandlers(e);\n\n // TWEAK: option to NOT autoselect contents\n if (config.options.chkDisableAutoSelect) // set cursor to start of field content\n if (e.setSelectionRange) e.setSelectionRange(0,0); // for FF\n else if (e.createTextRange) { var r=e.createTextRange(); r.collapse(true); r.select(); } // for IE\n\n }\n }\n\n tiddler.onkeypress = function(e) {\n if (!e) var e = window.event;\n clearMessage();\n var consume = false;\n switch(e.keyCode)\n {\n case 13: // Ctrl-Enter\n case 10: // Ctrl-Enter on IE PC\n case 77: // Ctrl-Enter is "M" on some platforms\n if(e.ctrlKey)\n {\n story.blurTiddler(this.title);\n config.macros.toolbar.invokeCommand(this,"defaultCommand",e);\n consume = true;\n }\n break;\n case 27: // Escape\n if (config.options.chkDisableEscapeKey) break; // ignore ESCAPE if option is set\n story.blurTiddler(this.title);\n config.macros.toolbar.invokeCommand(this,"cancelCommand",e);\n consume = true;\n break;\n }\n e.cancelBubble = consume;\n if(consume)\n if (e.stopPropagation) e.stopPropagation();\n return(!consume);\n };\n}\n//}}}\n\n//{{{\nfunction addKeyDownHandlers(e)\n{\n // exit if not textarea or element doesn't allow selections\n if (e.tagName.toLowerCase()!="textarea" || !e.setSelectionRange) return;\n\n // utility function: exits keydown handler and prevents browser from processing the keystroke\n var processed=function(ev) { ev.cancelBubble=true; if (ev.stopPropagation) ev.stopPropagation(); return false; }\n\n // capture keypress in edit field\n e.onkeydown = function(ev) { if (!ev) var ev=window.event;\n\n // process TAB\n if (!ev.shiftKey && ev.keyCode==9) { \n // replace current selection with a TAB character\n var start=e.selectionStart; var end=e.selectionEnd;\n e.value=e.value.substr(0,start)+String.fromCharCode(9)+e.value.substr(end);\n // update insertion point, scroll it into view\n e.setSelectionRange(start+1,start+1);\n var linecount=e.value.split('\sn').length;\n var thisline=e.value.substr(0,e.selectionStart).split('\sn').length-1;\n e.scrollTop=Math.floor((thisline-e.rows/2)*e.scrollHeight/linecount);\n return processed(ev);\n }\n\n // process CTRL-F (find matching text) or CTRL-G (find next match)\n if (ev.ctrlKey && (ev.keyCode==70||ev.keyCode==71)) {\n // if ctrl-f or no previous search, prompt for search text (default to previous text or current selection)... if no search text, exit\n if (ev.keyCode==70||!e.find||!e.find.length)\n { var f=prompt("find:",e.find?e.find:e.value.substring(e.selectionStart,e.selectionEnd)); e.focus(); e.find=f?f:e.find; }\n if (!e.find||!e.find.length) return processed(ev);\n // do case-insensitive match with 'wraparound'... if not found, alert and exit \n var newstart=e.value.toLowerCase().indexOf(e.find.toLowerCase(),e.selectionStart+1);\n if (newstart==-1) newstart=e.value.toLowerCase().indexOf(e.find.toLowerCase());\n if (newstart==-1) { alert("'"+e.find+"' not found"); e.focus(); return processed(ev); }\n // set new selection, scroll it into view, and report line position in status bar\n e.setSelectionRange(newstart,newstart+e.find.length);\n var linecount=e.value.split('\sn').length;\n var thisline=e.value.substr(0,e.selectionStart).split('\sn').length;\n e.scrollTop=Math.floor((thisline-1-e.rows/2)*e.scrollHeight/linecount);\n window.status="line: "+thisline+"/"+linecount;\n return processed(ev);\n }\n }\n}\n//}}}
/* margins, padding, borders, position, z-index, etc... */\n[[StyleSheetLayout]] /* TW shadow */\n[[StyleSheetColors]] /* TW shadow */\n[[StyleSheetPrint]] /* TW shadow */\n[[LayoutAdjustments]]\n[[FontAdjustments]]\n\n[[Gray]]\n\n/* background */\nbody {\nbackground-color: #eee !important;\nbackground-image: url('els/stucco.gif') !important;\nbackground-attachment: fixed !important;\n}\n.viewer {\nbackground-image: url('els/parchment_gray.jpg');\nbackground-color:#fff;\nborder: 1px solid #000; -moz-border-radius:1em; padding:1em;\n}\n#sidebar {\nbackground-color: transparent !important;\nbackground-image: none !important;\nborder:0px solid black !important;\n}\n#titleLine{\nbackground-color: #111 !important;\nbackground-image: url('els/marble_black.jpg') !important;\nborder-color:#090 !important;\n}\n#siteTitle { color:#0c0; }\n#siteSubtitle { color:#090; }\n#titleLine a { color: #9f9; }\n\n.floatingPanel, #messageArea, .attachPanel, #importPanel, #exportPanel { background: #eee !important;}\n\n*[class="TOCList"] { background-color: transparent; color:#000; border-color:transparent !important; }\n\n.viewer h1,.viewer h2,.viewer h3,.viewer h4,.viewer h5 { background: #666; color:#fff; }\n\n\n.floatingPanel, #messageArea, .attachPanel, #importPanel, #exportPanel { background-image: url('els/parchment_gray.jpg') !important;}\n#sidebarOptions .sliderPanel { background-image: url('els/parchment_gray.jpg') }\n\n
+++^70%^[TidIDE|TiddlyWiki Integrated Development Environment]...\n @@font-size:8pt;font-style:normal;font-weight:normal;<<moveablePanel>><<tidIDE TidIDETools TidIDETrac system edit:here>>@@===\n<script>var here=story.findContainingTiddler(place); if (here) place.lastChild.previousSibling.innerHTML=here.id.substr(7);</script>
<div class='toolbar' macro='toolbar -cancelTiddler'></div>\n<div class='title' macro='view title'></div>\n<div class='viewer' macro='tidIDE TidIDETools TidIDETrac system edit:here'></div>
/***\n''TidIDEPlugin for TiddlyWiki version 2.x''\n^^author: Eric Shulman - ELS Design Studios\nsource: http://www.TiddlyTools.com/#TidIDEPlugin\nlicense: [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]^^\n\n~TidIDE (//prounounced "Tie Dyed"//) - ''Tid''dlyWiki ''I''ntegrated ''D''evelopment ''E''nvironment - tools for ~TiddlyWiki authors and editors. Includes full-featured tiddler editor with previewer, system configuration/display, and extensibility via custom tiddlers.\n!!!!!Configuration\n<<<\nAutomatically freeze preview updates when a tiddler takes more than <<option txtTidIDEAutoFreeze>> milliseconds to render.\n<<<\n!!!!!Usage/Example\n<<<\n{{{<<tidIDE id:example [[custom tools|TidIDETools]] system edit:GettingStarted>>}}}\n<<tidIDE id:example [[custom tools|TidIDETools]] system edit:GettingStarted>>\n!!!!!parameters:\n* ''id'' - assign a unique ID to this instance of TidIDE. (default id=current tiddler title or "" if not in a tiddler)\n* ''system'' includes a pre-defined "system information" pane\n* ''edit'' includes a pre-defined tiddler editor/previewer.\n**''edit:here'' automatically sets the editor to show the current tiddler contents (if in a tiddler)\n**''edit:{{{tiddlertitle}}}'' automatically sets the editor to show the specified tiddler contents\n* use ''{{{[[label|tiddlertitle]]}}}'' to include 'custom panels' (and corresponding labelled checkboxes to toggle their display)\n* all parameters are optional. The default panel is "edit:here".\n!!!!!using the editor\nThe editor includes a droplist of all tiddlers in the document, sorted alpha-numerically by tiddler title. Shadow tiddlers that have not been customized are added to the end of this list and marked with "(shadow)". Next to the droplist are several buttons:\n* ''view'' opens the tiddler in the normal ~TiddlyWiki display area\n* ''add'' prompts for a new tiddler title and begins a new editing session\n* ''remove'' deletes an existing tiddler (note: shadow tiddlers cannot be removed)\n* ''save'' saves changes to the tiddler currently being edited\n* ''save as'' saves changes using a new tiddler title\nIf a tiddlername was not specified in the macro, select a tiddler from the droplist (or press ''add'') to begin editing. Once a tiddler has been loaded into the editor, you can change it's content, enter or select tags.\n\nNormally, when you save changes to a tiddler, the created/modified dates and tiddler author are automatically updated. However, it is sometimes useful to make small changes to a tiddler without automatically updating the date/author information. Select the ''minor edits'' checkbox to prevent those values from being //automatically// changed. In addition, this enables the date/author edit fields which allows you to //manually// 'back date' a tiddler or change the author to another name. When the tiddler is saved, the date/author values shown in the edit fields will be used.\n!!!!!using the previewer\nThe ''preview'' checkbox adds a display area that shows you what your tiddler changes will look like, //before// committing to those changes.\n\nBy default, this preview display is automatically rendered each time a key is typed into the tiddler content edit field. As soon as changes are entered, they will be instantly visible within the preview display. Unfortunately, the partial tiddler source definitions that occur //during// editing may somtimes cause rendering problems, and some exceptionally complex tiddlers make take an unusually long amount of time to completely render their content. In such cases, key-by-key display updates are undesirable or impractical.\n\nWhen ''preview'' is selected, you can also select ''freeze'' to suspend automatic key-by-key preview display updates. The preview display will not be re-rendered again until you press the ''refresh'' button, or clear the 'freeze' checkbox, or switch to editing a different tiddler. The editor automatically freezes the preview display whenever the //rendering time// exceeds a pre-determined time limit (see configuration section), specified in milliseconds. Note: the ''actual elapsed time'' used to process and render any given tiddler is reported in the browser's status bar area whenever that tiddler is previewed.\n\nThe previewer also can display a ''DOM viewer'' and an ''HTML viewer'' that are also updated with each keystroke. These text-based displays can be helpful while attempting to correct or enhance the formatting of tiddler content, especially when complex combinations of wiki-syntax produce unexpected or undesired results.\n!!!!!system information and TW option settings\nYou can use the ''system information'' panel to view a variety of system internal data and functions, and view/modify ''all'' of ~TiddlyWiki's internal config.option.* settings. NOTE: Non-default config.options are stored in cookies and are retrieved whenever the TW document is loaded into a browser; however, ''core TW functions and custom-defined plugins can explicitly ignore or reset any locally-stored cookie values and use their own, internally-defined values'' instead. As a result, changes to these may be completely ignored, or may only have an effect during the current TW document "session" (i.e., until the TW document is reloaded), even though a persistent cookie value has been saved.\n!!!!! ~DOMViewer macro\nsyntax: {{{<<DOMViewer rows:nn indent:xxxx inline path elementID|tiddlertitle>>}}}\n\nWhenever TiddlyWiki renders a given tiddler, it creates a 'tree' of DOM (Document Object Model) elements that represent the information that is displayed by the browser. You can use the ''DOMViewer'' macro to examine the internal DOM elements that are produced by TiddlyWiki's formatter (the 'wikifier'), or elements directly produced by embedded macros that create custom formatted output. This can be particularly helpful when trying to fine tune the layout and appearance of your tiddler content.\n\nDOMViewer creates a textarea control and reports the DOM tree for the current 'insertion point' where the DOMViewer macro is being placed. ''inline'' flag uses TiddlyWiki rendering instead of textarea control. ''path'' shows the relative location of each child element in the DOM tree, using subscript notation, ''[elementID or tiddlertitle]'' displays DOM elements starting from the node with the specified ID. If that ID is not found in the DOM tree, the macro attempts to open a tiddler with that title and then displays the "tiddler"+title DOM elements that were rendered.\n<<<\n!!!!!Installation\n<<<\nimport (or copy/paste) the following tiddlers into your document:\n''TidIDEPlugin'' (tagged with <<tag systemConfig>>)\n^^documentation and javascript for macro handling^^\n<<<\n!!!!!Revision History\n<<<\n''2006.05.22 [1.5.4]'' in setsys(), remove "(cookie)" prefix from selected item text when setting cookie name (was preventing saving of cookie values)\n''2006.05.17 [1.5.3]'' in setsys(), call saveOptionsCookie(). Also, set tiddler editor textarea height (%maxrows%) using config.options.txtMaxEditRows\n''2006.04.30 [1.5.2]'' documentation update\n''2006.04.30 [1.5.1]'' in save(), when performing "save as" behavior, set current tiddler title (f.current) to new title\n''2006.04.24 [1.5.0]'' added macro parameters to dynamically configure and assemble HTML for IDE panels. Supports multiple custom panels loaded from tiddlers and {{{[[label|tiddlername]]}}}\n''2006.04.24 [1.4.6]'' layout adjustments: move system panel above editor panel and move config setting controls to top of system panel\n''2006.04.23 [1.4.5]'' fix HTML so that click on "readonly" checkbox won't change "minor edits" option value.\n''2006.04.23 [1.4.4]'' in render(), strip carriage returns (\sr) that are added by IE's textarea control. Fixes errors in wikify() of 'block-mode' syntax. Also, defer rendering HTML and DOM preview displays until those options are checked and still more code cleanup\n''2006.04.23 [1.4.3]'' init "minor edits" checkbox state from config.options.chkForceMinorEdits value\n''2006.04.23 [1.4.2]'' added "TidIDE v#.#.#: " title in front of subsystem checkboxes.\n''2006.04.23 [1.4.1]'' added 'readonly' checkbox and handling to editor.\n''2006.04.23 [1.4.0]'' implemented 'minor edits' logic, including use of TW AdvancedOptions setting. Replaced separate MDY date input fields with date/time text input fields (using formatted date input).\n''2006.04.22 [1.3.2]'' Layout changes: Added editor/system/tools "subsystem" checkboxes at top of panel. Added automatic read-only notice. Moved tools_panel to bottom. Added 'minor edits' checkbox (handler not yet implemented).\n''2006.04.22 [1.3.1]'' assorted code cleanup and optimizations\n''2006.04.22 [1.3.0]'' added "tools" section via custom-defined TidIDETools tiddler content\n''2006.04.22 [1.2.2]'' corrected 'wrap' and 'white-space' CSS for system viewer textarea control so that IE preserves newlines.\n''2006.04.22 [1.2.1]'' added checkbox indicators in options droplist. Allows easy preview of boolean state value for chk* options.\n''2006.04.22 [1.2.0]'' added options droplist to "system" display and supporting setsys() function to update internal config.options.* values\nlayout adjustments: consolidate some buttons, general tweaks for spacing, sizes, etc.\n''2006.04.21 [1.1.1]'' migrated remaining functionality from ToolkitPlugin (now obsolete).\n''2006.04.21 [1.1.0]'' added "system" display and supporting functions\n''2006.04.21 [1.0.1]'' added formatHTML() for better HTML display in preview\n''2006.04.20 [1.0.0] 4:20:00pm'' official release... renamed from ~TiddlerEditorPlugin to TidIDEPlugin. (pronounced "Tie Dyed"... dude!)\n''2006.04.20 [0.9.9]'' added "run" button to dynamically load systemConfig plugins (with warning/confirmation)\n''2006.04.20 [0.9.8]'' layout adjustments for narrow displays\n''2006.04.20 [0.9.7]'' added HTML viewer to preview display\n''2006.04.20 [0.9.6]'' added DOM viewer to preview display\n''2006.04.19 [0.9.5]'' improved save() handler so saving 'unnamed' edit does fallback to 'save as' prompt for tiddler name\n''2006.04.19 [0.9.4]'' added 'preview status' display field and refresh button. Currently shows preview rendering time and autofreeze notice, if any.\n''2006.04.19 [0.9.3]'' correct IE object error by explicitly using "window." scope when referencing addKeyDownHandlers() function definition\n''2006.04.18 [0.9.2]'' if TextAreaPlugin is installed, call addKeyDownHandlers() for extended ctrl-F/G and TAB keystrokes in textarea\n''2006.04.18 [0.9.1]'' "save as" now presents an "overwriteWarning" message box instead of always rejecting existing tiddler titles\n''2006.04.18 [0.9.0]'' added "save as". Use TW standard text for new tiddler title and default text\n''2006.04.18 [0.8.5]'' added "display:inline" to input elements to prevent unwanted line breaks between controls when macro is used in EditTemplate definitions\n''2006.04.18 [0.8.4]'' added cookie for 'auto-freeze' time limit. Also, added more documentation.\n''2006.04.17 [0.8.3]'' added timing wrapper around preview wikify(). Automatically freeze preview display if tiddler rendering exceeds time limit\n''2006.04.17 [0.8.2]'' more code cleanup for better 'dirty' flag handling\n''2006.04.17 [0.8.1]'' show/hide freeze checkbox when toggling preview display. Also, code cleanup for better 'multiple instance' definition\n''2006.04.17 [0.8.0]'' added "freeze" checkbox to toggle 'live update' of preview display. Also, layout/CSS adjustments for better appearance in IE\n''2006.04.16 [0.7.1]'' correct month number offset (was 0-11 instead of 1-12)\n''2006.04.16 [0.7.0]'' added support for 'dirty' flag, read-only mode and improved alert/confirm/prompt handling\n''2006.04.16 [0.6.0]'' created "add/remove" functions. Added handling to trigger autoSave() if option is set.\n''2006.04.15 [0.5.1]'' move 'save' logic to separate function, and added handling to create a 'real' tiddler when saving a shadow\n''2006.04.15 [0.5.0]'' Initial ALPHA release. Converted from TiddlerTweaker inline script.\n<<<\n!!!!!Credits\n<<<\nThis feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]].\n<<<\n!!!!!Code\n***/\n// // version info\n//{{{\nversion.extensions.tidIDE = {major: 1, minor: 5, revision: 4, date: new Date(2006,5,22)};\n//}}}\n\n// // macro definition\n//{{{\nconfig.macros.tidIDE = {\n versionMsg: "TidIDE v%0.%1.%2: ",\n datetimefmt: "0MM/0DD/YYYY 0hh:0mm:0ss",\n titleMsg: "Please enter a new tiddler title",\n isShadowMsg: "'%0' is a shadow tiddler and cannot be removed.",\n renderMsg: "rendering preview...",\n timeoutMsg: " (> %0ms)",\n freezeMsg: " - preview is frozen. Press [refresh] to re-display.",\n evalMsg: "Warning!!\sn\snThis action will process '%0' as a systemConfig (plugin) tiddler, and may produce unexpected results!\sn\snAre you sure you want to proceed?",\n toolsDef: "<html><a href='javascript:config.macros.tidIDE.set(\s"%0\s",\s"%1\s");'>edit %1...</a></html>",\n editorLabel: "tiddler editor",\n systemLabel: "system information"\n};\nconfig.macros.tidIDE.handler= function(place,macroName,params) {\n var here=story.findContainingTiddler(place);\n var selectors="";\n var panels="";\n var title="";\n var id=""; if (here) id=here.id.substr(7);\n var p=params.shift();\n if (!p) p="edit:here"; // default to editor if no params\n while (p) {\n if (p.substr(0,3)=="id:")\n { id=p.substr(3); }\n else if (p.substr(0,4)=="edit") {\n var toolname=this.editorLabel;\n if (p.indexOf('|')!=-1) toolname=p.substr(0,p.indexOf('|'));\n selectors+=this.html.editorchk.replace(/%toolname%/mg,toolname);\n panels+=this.html.editorpanel;\n // editor panel setup...\n panels=panels.replace(/%maxrows%/mg,config.options.txtMaxEditRows);\n panels=panels.replace(/%disabled%/mg,readOnly?"DISABLED":"");\n panels=panels.replace(/%readonlychk%/mg,readOnly?"CHECKED":"");\n panels=panels.replace(/%minoredits%/mg,config.options.chkForceMinorUpdate&&!readOnly?"":"DISABLED");\n panels=panels.replace(/%minorchk%/mg,config.options.chkForceMinorUpdate?"CHECKED":"");\n var tiddlers=store.getTiddlers("title"); var tiddlerlist=""; \n for (var t=0; t<tiddlers.length; t++) tiddlerlist+="<option value='"+tiddlers[t].title+"'>"+tiddlers[t].title+"</option>";\n for (var t in config.shadowTiddlers) if (!store.tiddlerExists(t)) tiddlerlist+="<option value='"+t+"'>"+t+" (shadow)</option>";\n panels=panels.replace(/%tiddlerlist%/mg,tiddlerlist);\n var tags = store.getTags(); var taglist="";\n for (var t=0; t<tags.length; t++) taglist+="<option value='"+tags[t][0]+"'>"+tags[t][0]+"</option>";\n panels=panels.replace(/%taglist%/mg,taglist);\n if (p.substr(0,5)=="edit:") { \n title=p.substr(5); \n if (here && title=="here") title=here.id.substr(7);\n if (!store.tiddlerExists(title)&&!store.isShadowTiddler(title)) title="";\n }\n }\n else if (p=="system") {\n var toolname=this.systemLabel;\n if (p.indexOf('|')!=-1) toolname=p.substr(0,p.indexOf('|'));\n selectors+=this.html.systemchk.replace(/%toolname%/mg,toolname);\n panels+=this.html.systempanel;\n }\n else {\n var toolid=toolname=p;\n if (p.indexOf('|')!=-1)\n { toolname=p.substr(0,p.indexOf('|')); toolid=p.substr(p.indexOf('|')+1); }\n selectors+=this.html.toolschk.replace(/%toolid%/mg,toolid).replace(/%toolname%/mg,toolname);\n panels+=this.html.toolspanel.replace(/%toolid%/mg,toolid);\n }\n p=params.shift(); // next param\n }\n var html=this.html.framework;\n html=html.replace(/%version%/mg,this.versionMsg.format([version.extensions.tidIDE.major,version.extensions.tidIDE.minor,version.extensions.tidIDE.revision]));\n html=html.replace(/%selector%/mg,selectors);\n html=html.replace(/%panels%/mg,panels);\n html=html.replace(/%id%/mg,id);\n var newIDE=createTiddlyElement(place,"span");\n newIDE.innerHTML=html;\n if (title.length) this.set(id,title); // pre-load tiddler editor (if needed)\n // see [[TextAreaPlugin]] for extended ctrl-F/G (search/search again) and TAB handler definitions\n if (window.addKeyDownHandlers!=undefined) { \n var elems=newIDE.getElementsByTagName("textarea");\n for (var i=0;i<elems.length;i++) window.addKeyDownHandlers(elems[i]);\n }\n}\n//}}}\n\n// // CUSTOM PANEL FUNCTIONS \n//{{{\nconfig.macros.tidIDE.loadPanel=function(id,toolid) {\n var place=document.getElementById(id+"_"+toolid+"_panel"); if (!place) return;\n var t=store.getTiddler(toolid);\n place.innerHTML=""; \n if (t) wikify(t.text,place); else place.innerHTML=this.toolsDef.format([id,toolid]);\n}\n//}}}\n\n// // EDITOR PANEL FUNCTIONS\n//{{{\nconfig.macros.tidIDE.set=function(id,title) {\n var place=document.getElementById(id+"_editorpanel"); if (!place) return;\n var f=document.getElementById(id+"_form");\n var p=document.getElementById(id+"_preview");\n if (f.dirty && !confirm(config.commands.cancelTiddler.warning.format([f.current]))) return;\n // reset to form defaults\n f.dirty=false;\n f.current="";\n f.created.value=f.created.defaultValue;\n f.modified.value=f.modified.defaultValue;\n f.author.value=f.author.defaultValue;\n f.content.value=f.content.defaultValue;\n f.tags.value=f.tags.defaultValue;\n f.size.value=f.size.defaultValue;\n f.freeze.checked=false;\n f.domview.value="";\n f.htmlview.value="";\n f.status.value="";\n p.innerHTML="";\n if (!title.length) return;\n f.current=title;\n // values for new/shadow tiddlers\n var cdate=new Date();\n var mdate=new Date();\n var modifier=config.options.txtUserName;\n var text=config.views.editor.defaultText.format([title]);\n var tags="";\n // adjust values for shadow tiddlers\n if (store.isShadowTiddler(title))\n { modifier=config.views.wikified.shadowModifier; text=store.getTiddlerText(title) }\n // get values for specified tiddler (if it exists)\n var t=store.getTiddler(title);\n if (t) { var cdate=t.created; var mdate=t.modified; var modifier=t.modifier; var text=t.text; var tags=t.getTags(); }\n if (!t && !store.isShadowTiddler(title)) f.tiddlers.options[f.tiddlers.options.length]=new Option(title,title,false,true); // add item to list\n f.tiddlers.value=title; // select current title (just in case it wasn't already selected)\n f.created.value=cdate.formatString(this.datetimefmt);\n f.modified.value=mdate.formatString(this.datetimefmt);\n f.author.value=modifier;\n f.content.value=text;\n f.tags.value=tags;\n f.minoredits.checked=config.options.chkForceMinorUpdate&&!readOnly;\n f.size.value=f.content.value.length+" bytes";\n if (f.preview.checked) { p.style.display="block"; this.render(id); }\n}\n\nconfig.macros.tidIDE.add=function(id) {\n var place=document.getElementById(id+"_editorpanel"); if (!place) return;\n var f=document.getElementById(id+"_form");\n var p=document.getElementById(id+"_preview");\n if (f.dirty && !confirm(config.commands.cancelTiddler.warning.format([f.current]))) return;\n var title=prompt(this.titleMsg,config.macros.newTiddler.title);\n while (title && store.tiddlerExists(title) && !confirm(config.messages.overwriteWarning.format([title])))\n title=prompt(this.titleMsg,config.macros.newTiddler.title);\n if (!title || !title.trim().length) return; // cancelled by user\n f.dirty=false; // suppress unneeded confirmation message\n this.set(id,title);\n}\n\nconfig.macros.tidIDE.remove=function(id) {\n var place=document.getElementById(id+"_editorpanel"); if (!place) return;\n var f=document.getElementById(id+"_form");\n var p=document.getElementById(id+"_preview");\n if (!f.current.length) return;\n if (!store.tiddlerExists(f.current) && store.isShadowTiddler(f.current)) { alert(this.isShadowMsg.format([f.current])); return; }\n if (config.options.chkConfirmDelete && !confirm(config.commands.deleteTiddler.warning.format([f.current]))) return;\n if (store.tiddlerExists(f.current)) {\n story.closeTiddler(f.current);\n store.removeTiddler(f.current);\n store.setDirty(true);\n if(config.options.chkAutoSave) saveChanges();\n }\n f.tiddlers.options[f.tiddlers.selectedIndex]=null; // remove item from list\n f.dirty=false; // suppress unneeded confirmation message\n this.set(id,""); // clear form controls\n}\n\nconfig.macros.tidIDE.save=function(id,saveAs) {\n var place=document.getElementById(id+"_editorpanel"); if (!place) return;\n var f=document.getElementById(id+"_form");\n var title=f.current;\n if (!title || !title.trim().length || saveAs) { // get a new title\n title=prompt(this.titleMsg,config.macros.newTiddler.title);\n while (title && store.tiddlerExists(title) && !confirm(config.messages.overwriteWarning.format([title])))\n title=prompt(this.titleMsg,config.macros.newTiddler.title);\n if (!title || !title.trim().length) return; // cancelled by user\n f.tiddlers.options[f.tiddlers.options.length]=new Option(title,title,false,true); // add item to list\n f.current=title;\n }\n var author=config.options.txtUserName;\n var mdate=new Date();\n var content=f.content.value;\n var tags=f.tags.value;\n var tiddler=store.saveTiddler(title,title,content,author,mdate,tags);\n if (f.minoredits.checked) {\n var author=f.author.value;\n var mdate=new Date(f.modified.value);\n var cdate=new Date(f.created.value);\n tiddler.assign(null,null,author,mdate,null,cdate);\n }\n store.setDirty(true);\n if(config.options.chkAutoSave) saveChanges();\n story.refreshTiddler(title,null,true);\n f.dirty=false;\n}\n//}}}\n\n// // EDITOR PANEL: PREVIEW FUNCTIONS\n//{{{\nif (config.options.txtTidIDEAutoFreeze==undefined)\n config.options.txtTidIDEAutoFreeze=250; // limit (in milliseconds) for auto-freezing preview display\n\nconfig.macros.tidIDE.render=function(id) {\n var place=document.getElementById(id+"_editorpanel"); if (!place) return;\n var f=document.getElementById(id+"_form");\n var p=document.getElementById(id+"_preview");\n var d=document.getElementById(id+"_domview");\n var h=document.getElementById(id+"_htmlview");\n p.innerHTML="";\n f.status.value=this.renderMsg;\n var start=new Date();\n wikify(f.content.value.replace(regexpCarriageReturn,''),p);\n var end=new Date();\n this.renderDOM(id);\n this.renderHTML(id);\n f.status.value=f.current+": "+(end-start+1)+"ms";\n // automatically suspend preview updates for slow rendering tiddlers\n if (end-start+1>config.options.txtTidIDEAutoFreeze) {\n f.freeze.checked=true;\n f.status.value+=this.timeoutMsg.format([config.options.txtTidIDEAutoFreeze]);\n }\n if (f.freeze.checked) f.status.value+=this.freezeMsg;\n}\n\nconfig.macros.tidIDE.renderDOM=function(id) {\n var place=document.getElementById(id+"_editorpanel"); if (!place) return;\n var f=document.getElementById(id+"_form");\n var p=document.getElementById(id+"_preview");\n var d=document.getElementById(id+"_domview");\n var h=document.getElementById(id+"_htmlview");\n p.style.height=(f.dom.checked||f.html.checked)?"10em":"25em";\n if (f.dom.checked) d.value=this.getNodeTree(p,"| ");\n d.style.display=f.dom.checked?"inline":"none";\n d.style.width=f.html.checked?"49.5%":"100%";\n h.style.width=f.dom.checked?"49.5%":"100%";\n}\n\nconfig.macros.tidIDE.renderHTML=function(id) {\n var place=document.getElementById(id+"_editorpanel"); if (!place) return;\n var f=document.getElementById(id+"_form");\n var p=document.getElementById(id+"_preview");\n var d=document.getElementById(id+"_domview");\n var h=document.getElementById(id+"_htmlview");\n p.style.height=(f.dom.checked||f.html.checked)?"10em":"25em";\n if (f.html.checked) h.value=this.formatHTML(p.innerHTML);\n h.style.display=f.html.checked?"inline":"none";\n d.style.width=f.html.checked?"49.5%":"100%";\n h.style.width=f.dom.checked?"49.5%":"100%";\n}\n\nconfig.macros.tidIDE.formatHTML=function(txt) {\n if (config.browser.isIE) return txt; // BYPASS - 4/24/2006 due to IE hang problem. Will fix later...\n var out="";\n var indent="";\n var level=0;\n for (var i=0;i<txt.length;i++) {\n var c=txt.substr(i,1);\n if (c=="<") {\n if (txt.substr(i+1,1)=="/") indent=indent.substr(0,indent.length-2);\n out+="\sn"+indent;\n if (txt.substr(i+1,1)!="/" && txt.substr(i+1,3)!="br>" && txt.substr(i+1,2)!="p>" && txt.substr(i+1,3)!="hr>") indent+=" ";\n }\n out+=c;\n if (c=="\sn")\n out+=indent;\n if (c==">" && txt.substr(i+1,1)!="<")\n out+="\sn"+indent;\n }\n return out;\n}\n\nconfig.macros.tidIDE.getNodeTree=function(theNode,theIndent,showPath,inline,thePrefix,thePath)\n{\n if (!theNode) return "";\n if (!thePrefix) thePrefix="";\n if (!thePath) thePath="";\n var mquote='"'+(inline?"{{{":"");\n var endmquote=(inline?"}}}":"")+'"';\n // generate output for this node\n var out = thePrefix;\n if (showPath && thePath.length)\n out += (inline?"//":"")+thePath.substr(1)+":"+(inline?"//":"")+"\sr\sn"+thePrefix;\n if (theNode.className=="DOMViewer")\n return out+'[DOMViewer]\sr\sn'; // avoid self-referential recursion\n out += (inline?"''":"")+theNode.nodeName.toUpperCase()+(inline?"''":"");\n if (theNode.nodeName=="#text")\n out += ' '+mquote+theNode.nodeValue.replace(/\sn/g,'\s\sn')+endmquote;\n if (theNode.className)\n out += ' class='+mquote+theNode.className+endmquote;\n if (theNode.type)\n out += ' type='+mquote+theNode.type+endmquote;\n if (theNode.id)\n out += ' id='+mquote+theNode.id+endmquote;\n if (theNode.name)\n out += " "+theNode.name+(theNode.value?"="+mquote+theNode.value+endmquote:"");\n if (theNode.href)\n out += ' href='+mquote+theNode.href+endmquote;\n if (theNode.src)\n out += ' src='+mquote+theNode.src+endmquote;\n if (theNode.attributes && theNode.getAttribute("tiddlyLink")!=undefined)\n out += ' tiddler='+mquote+theNode.getAttribute("tiddlyLink")+endmquote;\n out += "\sr\sn";\n // recursively generate output for child nodes\n thePath=thePath+"."+theNode.nodeName.toLowerCase();\n thePrefix=theIndent+thePrefix;\n for (var i=0;i<theNode.childNodes.length;i++)\n {\n var thisChild=theNode.childNodes.item(i);\n var theNum=(inline?"~~":"(")+(i+1)+(inline?"~~":")");\n out += this.getNodeTree(thisChild,theIndent,showPath,inline,thePrefix,thePath+theNum);\n }\n return out;\n}\n//}}}\n\n// // DOMViewer macro\n//{{{\nversion.extensions.DOMViewer = version.extensions.tidIDE;\nconfig.macros.DOMViewer = { };\nconfig.macros.DOMViewer.handler = function(place,macroName,params) {\n // set default params\n var inline=false;\n var theRows=15;\n var theIndent="| ";\n var showPath=false;\n var theTarget=place;\n // unpack options parameters\n if (params[0]=='inline') { inline=true; theIndent=">"; params.shift(); } \n if (params[0]&&(params[0].substr(0,7)=="indent:")) { theIndent=params[0].substr(7); params.shift(); } \n if (params[0]&&(params[0].substr(0,5)=="rows:")) { theRows=params[0].substr(5); params.shift(); } \n if (params[0]=='path') { showPath=true; params.shift(); } \n if (params[0]) {\n theTarget=document.getElementById(params[0]);\n if (!theTarget)\n if (store.getTiddler(params[0])!=undefined) {\n theTarget=document.getElementById("tiddler"+params[0]);\n if (!theTarget && confirm("DOMViewer asks:\sn\snIs it OK to open tiddler '"+params[0]+"' now?")) { \n story.displayTiddler(null,params[0],1,null,null,false);\n theTarget=document.getElementById("tiddler"+params[0]);\n }\n }\n params.shift();\n }\n // generate and display DOM tree\n if (inline) {\n var out=config.macros.tidIDE.getNodeTree(theTarget,theIndent,showPath,inline);\n wikify(out,place);\n }\n else {\n var out=config.macros.tidIDE.getNodeTree(theTarget,theIndent,showPath,inline);\n var css=".DOMViewer{width:100%;font-size:8pt;color:inherit;background:transparent;border:0px;}";\n setStylesheet(css,"DOMViewerPlugin");\n var theTextArea=createTiddlyElement(place,"textarea",null,"DOMViewer",out);\n theTextArea.rows=theRows;\n theTextArea.cols=60;\n theTextArea.wrap="off";\n theTextArea.theTarget=theTarget;\n theTextArea.theIndent=theIndent;\n theTextArea.showPath=showPath;\n }\n}\n//}}}\n\n// // SYSTEM PANEL FUNCTIONS\n//{{{\nconfig.macros.tidIDE.showObject=function(o) { // generate formatted output for displaying object references\n var t="";\n for (var p in o) {\n if (typeof o[p]=="function") {\n t+="- - - - - - - - - - "+p+" - - - - - - - - - -\sn";\n t+=o[p].toString();\n t+="\sn- - - - - - - - - - END: "+p+" - - - - - - - - - -\sn";\n }\n else\n t+='['+typeof o[p]+'] '+p+": "+o[p]+"\sn";\n }\n return t;\n}\n\nconfig.macros.tidIDE.getsys=function(id) {\n var place=document.getElementById(id+"_systempanel"); if (!place) return;\n\n var f=document.getElementById(id+"_form");\n f.sysview.value="";\n // OPTIONS\n while (f.sys_opts.options.length > 1) { f.sys_opts.options[1]=null; } // clear list\n f.config_view.value=""; // clear edit field\n var cookies = { };\n if (document.cookie != "") {\n var p = document.cookie.split("; ");\n for (var i=0; i < p.length; i++) {\n var pos=p[i].indexOf("=");\n if (pos==-1)\n cookies[p[i]]="";\n else\n cookies[p[i].substr(0,pos)]=unescape(p[i].slice(pos+1));\n }\n }\n var c=1;\n var opt=new Array(); for (var i in config.options) opt.push(i); opt.sort();\n for(var i=0; i<opt.length; i++) {\n if ((opt[i].substr(0,3)=="txt")||(opt[i].substr(0,3)=="chk")) {\n var txt = (opt[i].substr(0,3)=="chk"?("["+(config.options[opt[i]]?"x":"_")+"] "):"")+opt[i]+(cookies[opt[i]]?" (cookie)":"");\n var val = config.options[opt[i]];\n f.sys_opts.options[c++]=new Option(txt,val,false,false);\n }\n }\n // STYLESHEETS\n while (f.sys_styles.options.length > 1) { f.sys_styles.options[1]=null; } // clear list\n var c=1;\n var styles=document.getElementsByTagName("style");\n for(var i=0; i < styles.length; i++) {\n var id=styles[i].getAttribute("id"); if (!id) id="(default)";\n var txt=id;\n var val="/* stylesheet:"+txt+" */\sn"+styles[i].innerHTML;\n f.sys_styles.options[c++]=new Option(txt,val,false,false);\n }\n // SHADOWS\n while (f.sys_shadows.options.length > 1) { f.sys_shadows.options[1]=null; } // clear list\n var c=1;\n for(var s in config.shadowTiddlers) f.sys_shadows.options[c++]=new Option(s,config.shadowTiddlers[s],false,false);\n // NOTIFICATIONS\n while (f.sys_notify.options.length > 1) { f.sys_notify.options[1]=null; } // clear list\n var c=1;\n for (var i=0; i<store.namedNotifications.length; i++) {\n var n = store.namedNotifications[i];\n var fn = n.notify.toString();\n fn = fn.substring(fn.indexOf("function ")+9,fn.indexOf("{")-1);\n var txt=(n.name?n.name:"any change")+"="+fn;\n var val="/* notify: "+txt+" */\sn"+n.notify.toString();\n f.sys_notify.options[c++]=new Option(txt,val,false,false);\n }\n // MACROS\n while (f.sys_macros.options.length > 1) { f.sys_macros.options[1]=null; } // clear list\n var c=1;\n var macros=new Array(); for (var m in config.macros) macros.push(m); macros.sort();\n for(var i=0; i < macros.length; i++)\n f.sys_macros.options[c++]=new Option(macros[i],this.showObject(config.macros[macros[i]]),false,false);\n // TOOLBAR COMMANDS\n while (f.sys_commands.options.length > 1) { f.sys_commands.options[1]=null; } // clear list\n var c=1;\n for(var cmd in config.commands)\n f.sys_commands.options[c++]=new Option(cmd,this.showObject(config.commands[cmd]),false,false);\n // FORMATTERS\n while (f.sys_formatters.options.length > 1) { f.sys_formatters.options[1]=null; } // clear list\n var c=1;\n for(var i=0; i < config.formatters.length; i++)\n f.sys_formatters.options[c++]=new Option(config.formatters[i].name,this.showObject(config.formatters[i]),false,false);\n // PARAMIFIERS\n while (f.sys_params.options.length > 1) { f.sys_params.options[1]=null; } // clear list\n var c=1;\n for(var param in config.paramifiers)\n f.sys_params.options[c++]=new Option(param,this.showObject(config.paramifiers[param]),false,false);\n // GLOBALS\n //global variables and functions (excluding most DOM and ~TiddyWiki core definitions)://\n var DOM0_globals = {\n addEventListener: 1, alert: 1, atob: 1, back: 1, blur: 1, btoa: 1, captureEvents: 1, clearInterval: 1,\n clearTimeout: 1, close: 1, closed: 1, Components: 1, confirm: 1, content: 1, controllers: 1, crypto: 1,\n defaultStatus: 1, defaultStatus: 1, directories: 1, disableExternalCapture: 1, dispatchEvent: 1, document: 1,\n dump: 1, enableExternalCapture: 1, escape: 1, find: 1, focus: 1, forward: 1, frameElement: 1, frames: 1,\n fullScreen: 1, getAttention: 1, getComputedStyle: 1, getSelection: 1, history: 1, home: 1, innerHeight: 1,\n innerWidth: 1, length: 1, location: 1, locationbar: 1, menubar: 1, moveBy: 1, moveTo: 1, name: 1,\n navigator: 1, open: 1, openDialog: 1, opener: 1, outerHeight: 1, outerWidth: 1, pageXOffset: 1,\n pageYOffset: 1, parent: 1, personalbar: 1, pkcs11: 1, print: 1, prompt: 1, prompter: 1, releaseEvents: 1,\n removeEventListener: 1, resizeBy: 1, resizeTo: 1, routeEvent: 1, screen: 1, screenX: 1, screenY: 1,\n scroll: 1, scrollbars: 1, scrollBy: 1, scrollByLines: 1, scrollByPages: 1, scrollMaxX: 1, scrollMaxY: 1,\n scrollTo: 1, scrollX: 1, scrollY: 1, self: 1, setInterval: 1, setResizable: 1, setTimeout: 1, sidebar: 1,\n sizeToContent: 1, status: 1, statusbar: 1, stop: 1, toolbar: 1, top: 1, unescape: 1, updateCommands: 1,\n window: 1, getInterface: 1\n };\n var tw_globals = {\n version: 1, config: 1, DEFAULT_VIEW_TEMPLATE: 1, DEFAULT_EDIT_TEMPLATE: 1, store: 1, story: 1,\n Formatter: 1, anim: 1, readOnly: 1, highlightHack: 1, main: 1, restart: 1, saveTest: 1, loadSystemConfig: 1,\n processConfig: 1, invokeMacro: 1, Formatter: 1, wikify: 1, wikifyPlain: 1, highlightify: 1, Wikifier: 1, \n Tiddler: 1, regexpBackSlashEn: 1, regexpBackSlash: 1, regexpBackSlashEss: 1, regexpNewLine: 1, \n regexpCarriageReturn: 1, TiddlyWiki: 1, displayTiddlers: 1, displayTiddler: 1, Story: 1, displayMessage: 1,\n clearMessage: 1, refreshElements: 1, applyHtmlMacros: 1, refreshPageTemplate: 1, applyPageTemplate: 1,\n refreshDisplay: 1, refreshPageTitle: 1, refreshStyles: 1, loadOptionsCookie: 1, saveOptionCookie: 1,\n saveUsingSafari: 1, startSaveArea: 1, endSaveArea: 1, checkUnsavedChanges: 1, saveChanges: 1,\n getBackupPath: 1, generateRss: 1, allTiddlersAsHtml: 1,\n convertUTF8ToUnicode: 1, manualConvertUTF8ToUnicode: 1, mozConvertUTF8ToUnicode: 1,\n convertUnicodeToUTF8: 1, manualConvertUnicodeToUTF8: 1, mozConvertUnicodeToUTF8: 1,\n saveFile: 1, loadFile: 1, ieSaveFile: 1, ieLoadFile: 1, mozillaSaveFile: 1, mozillaLoadFile: 1,\n operaUrlToFilename: 1, operaSaveFile: 1, operaLoadFile: 1, safariFilenameToUrl: 1, safariLoadFile: 1,\n safariSaveFile: 1, detectPlugin: 1, createTiddlyButton: 1, createTiddlyLink: 1, refreshTiddlyLink: 1,\n createExternalLink: 1, onClickTiddlerLink: 1, createTagButton: 1, onClickTag: 1, onClickTagOpenAll: 1,\n createTiddlyError: 1, Animator: 1, Zoomer: 1, Cascade: 1, Scroller: 1, Slider: 1, Popup: 1,\n createTiddlerPopup: 1, scrollToTiddlerPopup: 1, hideTiddlerPopup: 1, RGB: 1, drawGradient: 1,\n createTiddlyText: 1, createTiddlyElement: 1, addEvent: 1, removeEvent: 1, addClass: 1,\n removeClass: 1, hasClass: 1, resolveTarget: 1, getPlainText: 1, ensureVisible: 1, \n findWindowWidth: 1, findWindowHeight: 1, findScrollX: 1, findScrollY: 1, findPosX: 1, findPosY: 1,\n insertSpacer: 1, removeChildren: 1, setStylesheet: 1,\n Packages: 1, sun: 1, java: 1, netscape: 1, XPCNativeWrapper: 1, GeckoActiveXObject: 1\n };\n while (f.sys_globals.options.length > 1) { f.sys_globals.options[1]=null; } // clear list\n var c=1;\n for (var v in window) if (!(DOM0_globals[v] || tw_globals[v])) {\n var t=window[v];\n if ((typeof window[v])=='object') {\n var t='';\n for (var p in window[v]) {\n t+=((typeof window[v][p])!='function')?('['+typeof window[v][p]+'] '+p):p;\n t+=((typeof window[v][p])!='function')?('='+window[v][p]):'';\n t+='\sn';\n }\n }\n f.sys_globals.options[c++]=new Option(((typeof window[v])!='function')?('['+typeof window[v]+'] '+v):v,t,false,false);\n }\n}\n\nconfig.macros.tidIDE.setsys=function(id) {\n var place=document.getElementById(id+"_systempanel"); if (!place) return;\n var f=document.getElementById(id+"_form");\n if (f.sys_opts.selectedIndex==0) return; // heading - do nothing\n var name=f.sys_opts.options[f.sys_opts.selectedIndex].text.replace(/\s[[Xx_]\s] /,'').replace(/ \s(cookie\s)/,'')\n var value=f.config_view.value;\n config.options[name]=value;\n saveOptionCookie(name);\n f.sys_opts.options[f.sys_opts.selectedIndex].value=value;\n return;\n}\n//}}}\n\n// // HTML DEFINITIONS\n//{{{\nconfig.macros.tidIDE.html = { };\nconfig.macros.tidIDE.html.framework = " \s\n <html><form id='%id%_form' style='display:inline;margin:0;padding:0;'> \s\n %version% %selector% <hr style='margin:0;padding:0'> %panels% \s\n </form></html> \s\n";\n//}}}\n//{{{\nconfig.macros.tidIDE.html.editorchk = " \s\n <input type=checkbox name=editor style='display:inline;width:auto;margin:1px;' title='add/delete/modify tiddlers' CHECKED \s\n onclick='document.getElementById(\s"%id%_editorpanel\s").style.display=this.checked?\s"block\s":\s"none\s"; \s\n if (this.checked) config.macros.tidIDE.render(\s"%id%\s");'>%toolname% \s\n";\nconfig.macros.tidIDE.html.systemchk = " \s\n <input type=checkbox name=system style='display:inline;width:auto;margin:1px;' title='view TiddlyWiki system internals and configurable options' \s\n onclick='document.getElementById(\s"%id%_systempanel\s").style.display=this.checked?\s"block\s":\s"none\s"; \s\n if (this.checked) config.macros.tidIDE.getsys(\s"%id%\s");'>%toolname% \s\n";\nconfig.macros.tidIDE.html.toolschk = " \s\n <input type=checkbox name=tools style='display:inline;width:auto;margin:1px;' title='' \s\n onclick='document.getElementById(\s"%id%_%toolid%_panel\s").style.display=this.checked?\s"block\s":\s"none\s"; \s\n if (this.checked) config.macros.tidIDE.loadPanel(\s"%id%\s",\s"%toolid%\s");'>%toolname% \s\n";\n//}}}\n//{{{\nconfig.macros.tidIDE.html.toolspanel = " \s\n <div id='%id%_%toolid%_panel' style='display:none;margin:0;margin-top:0.5em'> \s\n </div> \s\n";\n//}}}\n//{{{\nconfig.macros.tidIDE.html.systempanel = " \s\n <div id='%id%_systempanel' style='display:none;margin:0;margin-top:0.5em;white-space:nowrap'> \s\n <!-- configurable options --> \s\n <table style='width:100%;border:0;padding:0;margin:0'><tr style='border:0;padding:0;margin:0'> \s\n <td style='width:30%;border:0;padding:0;margin:0'> \s\n <select size=1 name='sys_opts' style='width:100%;font-size:8pt' \s\n onchange='this.form.config_view.value=this.value'> \s\n <option value=\s"\s">TiddlyWiki internal config.options ...</option> \s\n </select> \s\n </td><td style='width:50%;border:0;padding:0;margin:0;'> \s\n <input type=text name='config_view' size=60 style='width:100%;font-size:8pt' value=''> \s\n </td><td style='width:20%;text-align:right;white-space:nowrap;border:0;padding:0;margin:0;'> \s\n <input type=button style='display:inline;width:50%;' value='set option' title='save this TiddlyWiki option value' \s\n onclick='config.macros.tidIDE.setsys(\s"%id%\s");config.macros.tidIDE.getsys(\s"%id%\s");'><!-- \s\n --><input type=button style='display:inline;width:50%;' value='refresh' title='retrieve current TiddlyWiki options and system values' \s\n onclick='config.macros.tidIDE.getsys(\s"%id%\s")'> \s\n </td></tr><tr><td colspan=3 style='border:0;padding:0;margin:0'> \s\n <!-- system objects --> \s\n <select size=1 name='sys_styles' style='width:25%;font-size:8pt' onchange='this.form.%id%_sysview.value=this.value'> \s\n <option value=\s"\s">stylesheets...</option> \s\n </select><select size=1 name='sys_shadows' style='width:25%;font-size:8pt' onchange='this.form.%id%_sysview.value=this.value'> \s\n <option value=\s"\s">shadows...</option> \s\n </select><select size=1 name='sys_notify' style='width:25%;font-size:8pt' onchange='this.form.%id%_sysview.value=this.value'> \s\n <option value=\s"\s">notifications...</option> \s\n </select><select size=1 name='sys_globals' style='width:25%;font-size:8pt' onchange='this.form.%id%_sysview.value=this.value'> \s\n <option value=\s"\s">globals...</option> \s\n </select><br><select size=1 name='sys_macros' style='width:25%;font-size:8pt' onchange='this.form.%id%_sysview.value=this.value'> \s\n <option value=\s"\s">macros...</option> \s\n </select><select size=1 name='sys_commands' style='width:25%;font-size:8pt' onchange='this.form.%id%_sysview.value=this.value'> \s\n <option value=\s"\s">toolbars...</option> \s\n </select><select size=1 name='sys_formatters' style='width:25%;font-size:8pt' onchange='this.form.%id%_sysview.value=this.value'> \s\n <option value=\s"\s">wikifiers...</option> \s\n </select><select size=1 name='sys_params' style='width:25%;font-size:8pt' onchange='this.form.%id%_sysview.value=this.value'> \s\n <option value=\s"\s">paramifiers...</option> \s\n </select> \s\n <!-- system value display area --> \s\n <div style='white-space:normal'><textarea id='%id%_sysview' name=sysview cols=60 rows=12 \s\n onfocus='this.select()' style='width:100%;height:16em;font-size:8pt'></textarea></div> \s\n </td></tr></table> \s\n </div> \s\n";\n//}}}\n//{{{\nconfig.macros.tidIDE.html.editorpanel = " \s\n <div id='%id%_editorpanel' style='display:block;margin:0;margin-top:0.5em'> \s\n <!-- tiddler editor list and buttons --> \s\n <select size=1 name=tiddlers style='display:inline;width:55%' \s\n onchange='config.macros.tidIDE.set(\s"%id%\s",this.value); this.value=this.form.current;'> \s\n <option value=''>select a tiddler...</option> \s\n %tiddlerlist% \s\n </select><!-- \s\n --><input name=view type=button style='display:inline;width:9%' value='view' title='open this tiddler for regular viewing' \s\n onclick='if (!this.form.current.length) return; story.displayTiddler(null,this.form.current)'><!-- \s\n --><input name=add type=button style='display:inline;width:9%' value='add' title='create a new tiddler' \s\n onclick='config.macros.tidIDE.add(\s"%id%\s")' %disabled%><!-- \s\n --><input name=remove type=button style='display:inline;width:9%' value='remove' title='delete this tiddler' \s\n onclick='config.macros.tidIDE.remove(\s"%id%\s")' %disabled%><!-- \s\n --><input name=save type=button style='display:inline;width:9%' value='save' title='save changes to this tiddler' \s\n onclick='config.macros.tidIDE.save(\s"%id%\s")' %disabled%><!-- \s\n --><input name=saveas type=button style='display:inline;width:9%' value='save as' title='save changes to a new tiddler' \s\n onclick='config.macros.tidIDE.save(\s"%id%\s",true)' %disabled%> \s\n <!-- tiddler content edit --> \s\n <div><textarea id='%id%_content' name=content cols=60 rows=%maxrows% style='width:100%;font-size:8pt;font-family:verdana,arial,helvetica' \s\n onkeyup='var f=this.form; f.dirty=true; f.size.value=this.value.length+\s" bytes\s"; \s\n var p=document.getElementById(\s"%id%_preview\s"); \s\n if (f.preview.checked && !f.freeze.checked) { config.macros.tidIDE.render(\s"%id%\s"); }'></textarea></div> \s\n <!-- tag edit and droplist --> \s\n <table width='100%' style='border:0;padding:0;margin:0'><tr style='border:0;padding:0;margin:0'> \s\n <td style='border:0;padding:0;margin:0'> \s\n <input type=text name=tags size=60 style='width:100%;font-size:8pt' value='' \s\n onchange='this.form.dirty=true' %disabled%> \s\n </td><td width='1' style='border:0;padding:0;margin:0;'> \s\n <select size=1 name=taglist style='font-size:8pt' \s\n onchange='this.form.dirty=true; this.form.tags.value+=\s" \s"+this.value' %disabled%> \s\n <option value=''>select tags...</option> \s\n %taglist% \s\n </select> \s\n </td></tr></table> \s\n <!-- created/modified dates, author, current tiddler size --> \s\n <div style='float:right;'> \s\n created <input type=text name=created size=18 style='display:inline;font-size:8pt;text-align:center;padding:0;' value='' \s\n onchange='this.form.dirty=true' %minoredits%> \s\n modified <input type=text name=modified size=18 style='display:inline;font-size:8pt;text-align:center;padding:0;' value='' \s\n onchange='this.form.dirty=true;' %minoredits%> \s\n by <input type=text name=author size=15 style='display:inline;font-size:8pt;padding:0;' value='' \s\n onfocus='this.select()' onchange='this.form.dirty=true' %minoredits%> \s\n <input type=text name=size size=10 style='display:inline;font-size:8pt;text-align:center;padding:0;' value='' \s\n onfocus='this.blur()' onkeydown='return false' DISABLED> \s\n </div> \s\n <!-- toggles: preview, read-only, minor edit --> \s\n <span style='white-space:nowrap'> \s\n <input type=checkbox name=preview style='display:inline;width:auto;margin:1px;' title='display tiddler changes BEFORE you save them' \s\n onclick='document.getElementById(\s"%id%_previewpanel\s").style.display=this.checked?\s"block\s":\s"none\s"; \s\n if (this.checked) config.macros.tidIDE.render(\s"%id%\s");'>preview \s\n <input type=checkbox name=readonly style='display:inline;width:auto;margin:1px;' %readonlychk% \s\n title='do not allow tiddler changes to be saved' \s\n onclick='readOnly=config.options.chkHttpReadOnly=this.checked;saveOptionCookie(\s"chkHttpReadOnly\s"); \s\n var f=this.form; f.minoredits.disabled=f.tags.disabled=f.taglist.disabled=this.checked; \s\n f.add.disabled=f.remove.disabled=f.save.disabled=f.saveas.disabled=this.checked; \s\n f.created.disabled=f.modified.disabled=f.author.disabled=this.checked||!f.minoredits.checked;'>readonly \s\n <input type=checkbox name=minoredits style='display:inline;width:auto;margin:1px;' %disabled% %minorchk% \s\n title='check: save datestamps/author as entered, uncheck: auto-update modified/author' \s\n onclick='this.form.created.disabled=this.form.modified.disabled=this.form.author.disabled=!this.checked; \s\n config.options.chkForceMinorUpdate=this.checked;saveOptionCookie(\s"chkForceMinorUpdate\s");'>minor edits \s\n </span> \s\n <!-- tiddler preview display --> \s\n <div id='%id%_previewpanel' style='display:none;white-space:nowrap'> \s\n <div id='%id%_preview' class='viewer' style='margin:0;margin-top:.5em;height:25em;overflow:auto;white-space:normal'> \s\n \s\n </div> \s\n <!-- DOM and HTML viewers --> \s\n <textarea id='%id%_domview' name=domview cols=60 rows=12 wrap=off \s\n onfocus='this.select()' style='display:none;width:100%;height:16em;font-size:8pt'></textarea><!-- \s\n --><textarea id='%id%_htmlview' name=htmlview cols=60 rows=12 wrap=off \s\n onfocus='this.select()' style='display:none;width:100%;height:16em;font-size:8pt'></textarea> \s\n <!-- status line, preview option checkboxes, run/refresh buttons --> \s\n <table width='100%' style='border:0;padding:0;margin:0'><tr style='border:0;padding:0;margin:0'> \s\n <td style='border:0;padding:0;margin:0'> \s\n <input type=text '%id%_status' name=status style='padding:0;width:100%;font-size:8pt;'> \s\n </td><td style='width:1%;border:0;padding:0;margin:0;text-align:right;white-space:nowrap'> \s\n <input type=checkbox name=dom style='display:inline;width:auto;margin:1px;' title='show Document Object Model (DOM) information' \s\n onclick='config.macros.tidIDE.renderDOM(\s"%id%\s");'>DOM \s\n <input type=checkbox name=html style='display:inline;width:auto;margin:1px;' title='show rendered HTML' \s\n onclick='config.macros.tidIDE.renderHTML(\s"%id%\s");'>HTML \s\n <input type=checkbox name=freeze style='display:inline;width:auto;margin:1px;' title='do not update preview display as changes are made' \s\n onclick='var p=document.getElementById(\s"%id%_preview\s"); \s\n if (this.checked) this.form.status.value+=config.macros.tidIDE.freezeMsg; \s\n else config.macros.tidIDE.render(\s"%id%\s");'>freeze \s\n <input type=button style='display:inline;width:auto;' value='run' title='evaluate this tiddler as a javascript \s"systemConfig\s" plugin' \s\n onclick='if (!confirm(config.macros.tidIDE.evalMsg.format([this.form.current]))) return false; \s\n var err=processConfig(this.form.content.value); \s\n if(err)displayMessage(config.messages.customConfigError.format([err,this.form.current]));'><!-- \s\n --><input type=button style='display:inline;width:auto;' value='refresh' title='update preview display' \s\n onclick='config.macros.tidIDE.render(\s"%id%\s")'> \s\n </td></tr></table> \s\n </div> \s\n </div> \s\n";\n//}}}
/* use default stylesheet with TidIDE templates */\n[[StyleSheet]]\n<<template TidIDE>>
<<importTiddlers>> - <<exportTiddlers>> - <<attach>> | +++^[changes]...\n <<moveablePanel>><<tiddler DocumentChanges>>===\n - +++^[plugins]...\n <<moveablePanel>><<tiddler DocumentPlugins>>===\n - +++^18em^[calendar]...\n <<moveablePanel>>calendar\n @@font-size:10pt;<<calendar thismonth>><script>place.lastChild.style.width="100%";</script>\n @@[[view entire year...|DocumentCalendarYear]]===\n - +++^[tagcloud]...\n <<moveablePanel>>tagcloud\n <<tiddler TagCloud>>===\n - +++^[style tester]...<script>place.style.width="35em"</script><<moveablePanel>>enter CSS styles:\n <html><form><textarea name="ta" style="width:100%;height:10em" onkeyup="if (event.ctrlKey && event.keyCode==13) this.form.go.click()"></textarea><input type=button name=go value="apply styles" onclick="setStylesheet(this.form.ta.value,'testStyles')"></form></html>===\n | <script label="customize...">\n var here=story.findContainingTiddler(place); var id=here?here.id.substr(7):"";\n config.macros.tidIDE.set(id,"TidIDETools");\n return false;\n </script>
<html><form target="_blank" style="display:inline;text-align:left;margin:0;padding:0"><!--\n--><span style="float:right"> <input type="text" name=ticket value="" onfocus="this.select()" style="font-size:8pt;width:4em;text-align:center"><!--\n--><input type="button" value="get ticket" style="font-size:8pt;"\n onclick="var t=this.form.ticket; if (t.value==t.defaultValue) {alert('please enter a ticket number.'); t.focus(); return; } window.frames['tracframe'].location='http://trac.tiddlywiki.org/tiddlywiki/ticket/'+t.value;"><!--\n--> <input type="text" name=search value="" onfocus="this.select()" style="font-size:8pt;width:10em;"><!--\n--><input type="button" value="search" style="font-size:8pt;"\n onclick="window.frames['tracframe'].location='http://trac.tiddlywiki.org/tiddlywiki/search?ticket=on&changeset=on&wiki=on&q='+this.form.search.value;"></span><!--\n--><input type="button" value="<" title="back" style="font-size:8pt;width:2em"\n onclick="try{window.frames['tracframe'].history.go(-1)}catch(e){window.history.go(-1)}" ><!--\n--><input type="button" value=">" title="forward" style="font-size:8pt;width:2em"\n onclick="try{window.frames['tracframe'].history.go(+1)}catch(e){window.history.go(+1)}"><!--\n--><input type="button" value="+" title="refresh"style="font-size:8pt;width:2em"\n onclick="window.frames['tracframe'].location.reload()"><!--\n--><input type="button" value="x" title="stop"style="font-size:8pt;width:2em"\n onclick="window.stop()"><!--\n--></form><form target="tracframe" style="display:inline;text-align:left;margin:0;padding:0" action="http://trac.tiddlywiki.org/tiddlywiki/report/1"><!--\n--> show by <select size="1" name=sort style="font-size:8pt;"><!--\n--> <option value="ticket">ticket # <option value="summary">summary <option value="component">component <!--\n--> <option value="version">version <option value="milestone">milestone <option value="type">type<!--\n--> <option value="owner">owner <option value="created" SELECTED>create date<!--\n--></select><select size="1" name=asc style="font-size:8pt;"><!--\n--> <option value="1">ascending<!--\n--> <option value="0" SELECTED>descending<!--\n--></select><!--\n--><input type="submit" value="get report" title="get report using current settings" style="font-size:8pt;"><!--\n--><input type="button" value="..." title="open in a separate window" style="font-size:8pt;"\n onclick="window.open('http://trac.tiddlywiki.org/tiddlywiki/report/1?sort='+this.form.sort.value+'&asc='+this.form.asc.value)"><!--\n--></form><!--\n--><iframe name="tracframe" src="" style="background:#eee;width:100%;height:30em;"></iframe><!--\n--></html>
<!--{{{-->\n<div class='toolbar' macro='toolbar collapseTiddler collapseOthers -closeTiddler closeOthers +editTiddler permalink references jump'></div>\n<span class='title' macro='view title'></span> <span class='subtitle' macro='tiddler ShowTiddlerDates'></span>\n<div class='tagging' macro='tagging'></div>\n<div class='tagged' macro='tags'></div>\n<div class='viewer' macro='view text wikified'></div>\n<div class='tagClear'></div>\n<!--}}}-->
default tiddlers\n+DefaultTiddlers\n----\ngeneral information\nDocumentAbout DocumentDownload [[About ELS Design]] IntuitiveInterfaces LegalStatements\n----\ndocument status\nDocumentCredits TagCloud DocumentChanges DocumentPlugins\n----\nmenu definitions\nSiteMenuTopics SiteMenuCommands SiteMenuExtras SiteMenuRecent SiteMenu MainMenu SideBarOptions\n----\nPoesía\n[[Anoxia]] [[Arcilla]] [[Aserrín]] [[Asunción]] [[Atardeceres varios (diapositivas)]] [[Avenoche]] [[Barca]] [[Boludo]] [[Canción Infantil]] [[Cavilaciones de Hildo Cayuqueo]] [[Construcciones]] [[Corredor]] [[Cortedades I]] [[Cortedades II]] [[Cortedades III]] [[Cortedades IV]] [[Cortedades IX]] [[Cortedades V]] [[Cortedades VI]] [[Cortedades VII]] [[Cortedades VIII]] [[Cortedades X]] [[Cortedades XI]] [[Cortedades XII]] [[Cortedades XIII]] [[Cortedades XIV]] [[Cucarachas]] [[De armas]] [[De rocas y amapolas]] [[Delay]] [[Despertar]] [[Dimensión del silencio]] [[Ding]] [[El haz]] [[Elemental]] [[Espiral]] [[Estoy]] [[Fluvial]] [[Foresta]] [[Fuego negro]] [[Fuente]] [[Galeón]] [[Globos]] [[HPL]] [[Hambre]] [[Hiedra]] [[Holograma]] [[Hormiga]] [[Huyeron]] [[Hálito]] [[Ida y vuelta]] [[Impregnación]] [[Intronauta]] [[La implacable]] [[La letra perdida]] [[La marca de Caín]] [[La revancha de Ícaro]] [[Lista de poemas]] [[Luna sobre el Riachuelo]] [[Látigo]] [[Matutina]] [[Melange vacua]] [[Menudencias]] [[Mi letra]] [[Mudas]] [[Mutantia]] [[Niebla sobre el bosque]] [[No-vos]] [[Noche de perros]] [[Nocturno I]] [[Nocturno III]] [[Nocturno IV]] [[Nocturno suave]] [[Oboe]] [[Obviedad (proyecto de tango)]] [[Orbital]] [[Orografía]] [[Pausas]] [[Plástico]] [[Re-conocerse]] [[Requiem]] [[Retrato de mujer I]] [[Robo furtivo]] [[Sandstorm]] [[Sapiencia]] [[Sati]] [[Semidespierto]] [[Señales]] [[Si]] [[Si en un instante]] [[Siesta con primeros pasos]] [[Simbiosis]] [[Sirenas]] [[Sopas alteradas]] [[Soplo]] [[Su Danza]] [[Sueño de Orquídea]] [[Te doy una palabra]] [[Telúrica]] [[Tu llanto]] [[Tu viaje]] [[Umbral]] [[Un cuadro de Klimt]] [[Una canción]] [[Variaciones sobre un tema remanido]] [[Volver en música]] [[Vórtice]]
/***\n''TiddlerGroupsPlugin for TiddlyWiki version 2.x''\n^^author: Eric Shulman - ELS Design Studios\nsource: http://www.TiddlyTools.com/#TiddlerGroupsPlugin\nlicense: [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]^^\n\nQuickly view a set of tiddlers by selecting a "tiddler group" from a droplist control. Groups are defined in TiddlerGroupsList. Each group definition is separated by a "----" (horizontal rule), and consists of two lines of text: a description (for display in the droplist) and a space-separated list of tiddler titles (use {{{[[...]]}}} around titles containing spaces). When a tiddler title is preceded by a "+" (e.g., "+DefaultTiddlers"), it is replaced with a list of tiddlers that are ''//linked//'' from that tiddler.\n\nThe droplist shows all tiddler groups that are currently defined in the TiddlerGroupsList, followed by several viewing options:\n* ''fold grouped tiddlers'' - if a CollapsedTemplate tiddler is defined in the document, you can automatically fold the tiddlers as they are displayed to make it easier to locate desired content without excessive scrolling. This is especially useful if the group contains many tiddlers or tiddlers with lengthy content.\n* ''close other tiddlers'' - reduce information clutter by ensuring that only the tiddlers from the selected group are displayed.\n* ''open new window'' - view the grouped tiddlers in a separate copy of the current document (not including unsaved tiddler changes)\nThe droplist also includes commands to quickly ''add a group'' to the list (using the currently displayed tiddlers), or ''edit the list'' so you can manually add/remove/re-order the group definitions. Note: these commands are automatically hidden when TW is operating in 'readOnly' mode (i.e., when viewed via http:)\n!!!!!Example\n<<<\nsyntax: {{{<<tiddlerGroups>>}}}\n<<tiddlerGroups>>\n<<<\n!!!!!Installation\n<<<\nimport (or copy/paste) the following tiddlers into your document:\n''TiddlerGroupsPlugin'' (tagged with <<tag systemConfig>>)\n<<<\n!!!!!Revisions\n<<<\n''2006.06.11 [0.9.5]'' cleanup options handling. added 'close others' option. added 'open new window' option. use cookies for tracking options\n''2006.06.09 [0.8.1]'' added 'fold group when viewed' toggle option\n''2006.06.09 [0.7.0]'' added notification for auto-refresh when list definitions are changed\n''2006.06.08 [0.5.0]'' converted to plugin/macro\n''2006.06.02 [0.0.0]'' started (as inline javascript)\n<<<\n!!!!!Credits\n>This feature was developed by EricShulman from [[ELS Design Studios|http://www.elsdesign.com]]\n!!!!!Code\n***/\n//{{{\nversion.extensions.tiddlerGroups= {major: 0, minor: 9, revision: 5, date: new Date(2006,6,11)};\nif (config.options.chkGroupFold==undefined) config.options.chkGroupFold=false;\nif (config.options.chkGroupClose==undefined) config.options.chkGroupClose=true;\nif (config.options.chkGroupOpen==undefined) config.options.chkGroupOpen=false;\nconfig.macros.tiddlerGroups= { \n\n groupsList: "TiddlerGroupsList",\n indent: "\sxa0\sxa0\sxa0\sxa0",\n selectprompt: "select a group to view",\n optionsprompt: "viewing options",\n foldcmd: "[%0] fold group",\n closecmd: "[%0] close others",\n opencmd: "[%0] new window",\n addcmd: "add a group...",\n addprompt: "Please enter a group name for these tiddlers:\sn%0",\n editcmd: "edit the list...",\n\n handler:\n function(place,macroName,params) {\n var s=createTiddlyElement(place,"select",null,"tiddlerGroupsList"); s.size=1; s.onchange=this.onchange;\n setStylesheet(".tiddlerGroupsList { width:100%; font-size:8pt; }", "tiddlerGroupsListStyles");\n store.addNotification(this.groupsList,this.refresh); this.refresh();\n },\n\n refresh:\n function() { // called directly, AND triggered by notification events\n var indent=config.macros.tiddlerGroups.indent;\n var all=document.all? document.all : document.getElementsByTagName("select");\n for (var i=0; i<all.length; i++) {\n if (all[i].className!="tiddlerGroupsList") continue;\n var here=all[i];\n while (here.length) here.options[0]=null; // remove current list items\n here.options[here.length]=new Option(config.macros.tiddlerGroups.selectprompt,"",true,true);\n var list=store.getTiddlerText(config.macros.tiddlerGroups.groupsList);\n if (list && list.trim().length) {\n var parts=list.split("\sn----\sn");\n for (var p=0; p<parts.length; p++) {\n var lines=parts[p].split("\sn");\n var label=lines.shift(); // 1st line=display text\n var value=lines.shift(); // 2nd line=item value\n here.options[here.length]=new Option(indent+label,value,false,false);\n }\n }\n here.options[here.length]=new Option(config.macros.tiddlerGroups.optionsprompt,"",false,false);\n if (!config.options.chkGroupOpen) {\n if (store.tiddlerExists("CollapsedTemplate")) {\n var msg=config.macros.tiddlerGroups.foldcmd.format([config.options.chkGroupFold?"x":"\sxa0\sxa0"]);\n here.options[here.length]=new Option(indent+msg,"_fold",false,false);\n }\n var msg=config.macros.tiddlerGroups.closecmd.format([config.options.chkGroupClose?"x":"\sxa0\sxa0"]);\n here.options[here.length]=new Option(indent+msg,"_close",false,false);\n }\n var msg=config.macros.tiddlerGroups.opencmd.format([config.options.chkGroupOpen?"x":"\sxa0\sxa0"]);\n here.options[here.length]=new Option(indent+msg,"_open",false,false);\n if (!readOnly) {\n here.options[here.length]=new Option(config.macros.tiddlerGroups.addcmd,"_add",false,false);\n here.options[here.length]=new Option(config.macros.tiddlerGroups.editcmd,"_edit",false,false);\n }\n }\n },\n\n onchange:\n function() { // this == droplist control\n var v=this.value; if (!v.length) return;\n switch (v) {\n case '_fold':\n config.options.chkGroupFold=!config.options.chkGroupFold;\n saveOptionCookie('chkGroupFold'); config.macros.tiddlerGroups.refresh();\n break;\n case '_close':\n config.options.chkGroupClose=!config.options.chkGroupClose;\n saveOptionCookie('chkGroupClose'); config.macros.tiddlerGroups.refresh();\n break;\n case '_open':\n config.options.chkGroupOpen=!config.options.chkGroupOpen;\n saveOptionCookie('chkGroupOpen'); config.macros.tiddlerGroups.refresh();\n break;\n case '_add':\n var list=[]; story.forEachTiddler(function(title,element){list.push(String.encodeTiddlyLink(title))}); list=list.join(" ");\n var d=prompt(config.macros.tiddlerGroups.addprompt.format([list.readBracketedList().join(', ')]),'');\n if (!d || !d.trim().length) return;\n var t=store.getTiddler(config.macros.tiddlerGroups.groupsList); t.set(null,t.text+"\sn----\sn"+d+"\sn"+list);\n store.setDirty(true); story.refreshTiddler(config.macros.tiddlerGroups.groupsList,null,true);\n config.macros.tiddlerGroups.refresh(); this.value=list; // reload list and select newly added item\n break;\n case '_edit':\n story.displayTiddler(null,config.macros.tiddlerGroups.groupsList,2);\n break;\n default:\n var list=v.readBracketedList();\n for (var i=0; i<list.length; i++) if (list[i].substr(0,1)=='+') list.splice(i,1,store.getTiddlerText(list[i].substr(1)).readBracketedList());\n if (config.options.chkGroupOpen) {\n for (var i=0; i<list.length; i++) list[i]=String.encodeTiddlyLink(list[i]); list=list.join(" ");\n var url=document.location.protocol+"//"+document.location.host+document.location.pathname+"#"+encodeURIComponent(list);\n window.open(url,"_blank");\n break;\n }\n if (config.options.chkGroupClose) story.closeAllTiddlers();\n var template=(config.options.chkGroupFold && store.tiddlerExists("CollapsedTemplate"))?"CollapsedTemplate":null;\n story.displayTiddlers(null,list,template);\n break;\n }\n }\n}\n//}}}
/***\n|''Name:''|TiddlerWithParamsPlugin|\n|''Version:''|1.0.1 (2006-03-22)|\n|''Source:''|http://tiddlywiki.abego-software.de/#TiddlerWithParamsPlugin|\n|''Author:''|UdoBorkowski (ub [at] abego-software [dot] de)|\n|''Licence:''|[[BSD open source license]]|\n!Description\n\nThe TiddlerWithParamsPlugin extends the build-in {{{<<tiddler...>>}}} macro. It replaces placeholders ($1, $2, ...) in the given tiddler by values passed with the macro. Then it inserts the (replaced) text, just like the original {{{<<tiddler...>>}}} macro.\n\n''Syntax:'' \n|>|{{{<<}}}''tiddler '' //tiddlerName// [//className//] [''asText''] [''with:'' //arguments// ] [''prefix:'' //prefixString//] {{{>>}}}|\n|//tiddlerName//|The name of the tiddler to be included. The tiddler may contain placeholders ($1, $2, ... $9) that will be replaced with the values passed with the macro|\n|//className//|The (CSS) class to be used around the embedded tiddler|\n|''asText''|When defined the (replaced) content of the tiddler is inserted as pure text, i.e. it is not "wikified".|\n|//arguments//|up to 9 arguments may be passed to the macro, used as the values for the placeholders $1, $2, ... $9 in the referenced template|\n|//prefixString//|By default the placeholders $1, $2, $3,..., $9 are used. But you may change the "prefix" before the placeholder number ("$") to some other text through the "prefix:" option. This may be necessary when you are using the $n in the tiddler you are referencing (e.g. when you are using regular expressions).|\n|>|~~Syntax formatting: Keywords in ''bold'', optional parts in [...]. ~~|\n\n!Example\n\nThe following ''//ProjectTemplate//'' tiddler defines an "Overview" page for a project, that gives access to various "sub-tiddlers" used in the project, that follow a static naming schema (e.g. all Notes for any project are stored in a tiddler called "//projectName// Notes"). $1 holds the name of the Project (e.g. "ForEachTiddler"), $2 holds the type of the published component (e.g. "Plugin", "Macro", "Function").\n{{{\n![[$1Project]] Overview\n* [[$1$2]]\n* [[ToDo|$1 ToDos]]\n* [[Notes|$1 Notes]]\n* [[Examples|$1Examples]]\n* [[Tests|$1 Tests]]\n* [[Open Bugs/CRs|$1 Open Bugs and ChangeRequests]]\n}}}\n\nThis template is now used in the ''//ForEachTiddlerProject//'' tiddler:\n{{{\n<<tiddler ProjectTemplate with: ForEachTiddler Plugin>>\n}}}\n\nThis results in the following tiddler text for the ''//ForEachTiddlerProject//'' tiddler:\n{{{\n![[ForEachTiddlerProject]] Overview\n* [[ForEachTiddlerPlugin]]\n* [[ToDo|ForEachTiddler ToDos]]\n* [[Notes|ForEachTiddler Notes]]\n* [[Examples|ForEachTiddlerExamples]]\n* [[Tests|ForEachTiddler Tests]]\n* [[Open Bugs/CRs|ForEachTiddler Open Bugs and ChangeRequests]]\n}}}\n\n!Revision history\n* v1.0.0 (2006-01-20)\n** initial version\n* v1.0.1 (2006-03-22)\n** Added 'asText' option\n** Support Safari (Thanks to Elise Springer for reporting the problem)\n!Code\n***/\n//{{{\n//============================================================================\n// TiddlerWithParamsPlugin\n//============================================================================\n\n// Ensure that the Plugin is only installed once.\n//\nif (!version.extensions.TiddlerWithParamsPlugin) {\n\nversion.extensions.TiddlerWithParamsPlugin = {\n major: 1, minor: 0, revision: 1, \n date: new Date(2006,3,22), \n type: 'plugin',\n source: "http://tiddlywiki.abego-software.de/#TiddlerWithParamsPlugin"\n};\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nvar indexInArray = function(array, item) {\n for (var i = 0; i < array.length; i++) {\n if (array[i] == item) {\n return i;\n }\n }\n return -1;\n}\n\nvar myEscapeRegExp = function(s)\n{\n // The original escapeRegExp function does not work with Safari (2.0.3) \n // since the $& is not implemented.\nvar t = s.replace(/\s\s/g, "\s\s\s\s");\n t = t.replace(/\s^/g, "\s\s^");\n t = t.replace(/\s$/g, "\s\s$");\n t = t.replace(/\s*/g, "\s\s*");\n t = t.replace(/\s+/g, "\s\s+");\n t = t.replace(/\s?/g, "\s\s?");\n t = t.replace(/\s(/g, "\s\s(");\n t = t.replace(/\s)/g, "\s\s)");\n t = t.replace(/\s=/g, "\s\s=");\n t = t.replace(/\s!/g, "\s\s!");\n t = t.replace(/\s|/g, "\s\s|");\n t = t.replace(/\s,/g, "\s\s,");\n t = t.replace(/\s{/g, "\s\s{");\n t = t.replace(/\s}/g, "\s\s}");\n t = t.replace(/\s[/g, "\s\s[");\n t = t.replace(/\s]/g, "\s\s]");\n t = t.replace(/\s./g, "\s\s.");\n\n return t;\n}\n\n// ---------------------------------------------------------------------------\n// The (hijacked) tiddler Macro Handler \n// ---------------------------------------------------------------------------\n\nconfig.macros.tiddler.handler = function(place,macroName,params,wikifier,paramString,tiddler) {\n \n var className = null;\n var argsStart = -1;\n var doWikify = true;\n\n var iParams = 1;\n if (params[iParams] != "asText" && params[iParams] != "with:") {\n className = params[iParams++];\n }\n if (params[iParams] == "asText") {\n iParams++;\n doWikify = false;\n }\n if (params[iParams] == "with:") {\n iParams++;\n argsStart = iParams;\n }\n \n var wrapper = createTiddlyElement(place,"span",null,className ? className : null,null);\n var text = store.getTiddlerText(params[0]);\n if(text) {\n // Check for recursion\n var tiddlerName = params[0];\n var stack = config.macros.tiddler.tiddlerStack;\n if (stack.find(tiddlerName) !== null) return;\n\n if (argsStart >= 0) {\n // The params between the "with:" and the "prefix:" (or the end) are the arguments,\n // The param behind the "prefix:" is the prefix before the placeholder numbers.\n var argsEnd = params.length;\n var prefix = "$";\n var prefixIndex = indexInArray(params, "prefix:");\n if (prefixIndex >= argsStart) {\n argsEnd = prefixIndex;\n if (prefixIndex < (params.length-1)) {\n prefix = params[prefixIndex+1];\n }\n }\n // to avoid any "special RE chars" problems with the prefix string escape all chars.\n prefix = myEscapeRegExp(prefix);\n \n var args = params.slice(argsStart, argsEnd);\n var n = Math.min(args.length, 9);\n for (var i = 0; i < n; i++) {\n var value = args[i];\n \n var placeholderRE = new RegExp(prefix+(i+1),"mg");\n text = text.replace(placeholderRE, value);\n }\n }\n stack.push(tiddlerName);\n try {\n if (doWikify) {\n wikify(text,wrapper,null,store.getTiddler(params[0]));\n } else {\n wrapper.appendChild(document.createTextNode(text));\n }\n } finally { \n stack.pop();\n }\n }\n}\nconfig.macros.tiddler.tiddlerStack = [];\n\n// End of "install only once"\n}\n\n//============================================================================\n// End of TiddlerWithParamsPlugin\n//============================================================================\n//}}}\n/***\n!Licence and Copyright\nCopyright (c) abego Software ~GmbH, 2006 ([[www.abego-software.de|http://www.abego-software.de]])\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\nRedistributions of source code must retain the above copyright notice, this\nlist of conditions and the following disclaimer.\n\nRedistributions in binary form must reproduce the above copyright notice, this\nlist of conditions and the following disclaimer in the documentation and/or other\nmaterials provided with the distribution.\n\nNeither the name of abego Software nor the names of its contributors may be\nused to endorse or promote products derived from this software without specific\nprior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY\nEXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\nOF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT\nSHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\nTO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR\nBUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n***/\n
+++^55em^[plugin status...]...<<moveablePanel>><<tiddler DocumentPlugins>>=== <script label="show/hide entire catalog...">\n var here=story.findContainingTiddler(place); if (!here) here=place.parentNode;\n var elems=here.getElementsByTagName("*");\n var state="";\n for (var e=0; e<elems.length; e++) {\n var p=elems[e].sliderPanel;\n if (p && p.className=="sliderPanel") {\n if (!state.length) var state=p.style.display;\n if (p.style.display==state) window.onClickNestedSlider({target:elems[e]});\n }\n }\n return false;\n</script><script>place.lastChild.style.fontWeight="normal";</script>\n----\n++++[add-on features]>\n+++[Table Of Contents]\nTableOfContentsPlugin\nlistbox/droplist control replaces the tabbed tiddler lists. Includes 'command' items to sort the list, and collapsible tree display when sorted by date, author, or tags. List size can be automatically adjusted to fit the current contents, or manually set to show as many (or as few) items as you prefer. Reduce the list to a single line to switch to a "droplist" style.\n~~''source:'' http://www.TiddlyTools.com/#TableOfContentsPlugin~~\n^^installed/updated on <<date tiddler:TableOfContentsPlugin "DDD, MMM DDth, YYYY 0hh:0mm:0ss">>^^\n<<tiddler GroupBox>><script>place.style.marginLeft="1em"</script>===\n\n+++[Search Options]\nSearchOptionsPlugin\nAdds checkboxes in AdvancedOptions to let you selectively narrow the TiddlyWiki search function to just examine tiddler titles, tiddler text, or both (the default). It also provides an option to switch the search results order between 'titles mixed in' (default) and 'titles shown first', as well as an option to "list matching tiddlers", which displays the results as a list of links in an auto-generated "SearchResults" tiddler, rather than rendering all matching tiddlers.\n~~''source:'' http://www.TiddlyTools.com/#SearchOptionsPlugin~~\n^^installed/updated on <<date tiddler:SearchOptionsPlugin "DDD, MMM DDth, YYYY 0hh:0mm:0ss">>^^\n<<tiddler GroupBox>><script>place.style.marginLeft="1em"</script>===\n\n+++[Select Stylesheet]\nSelectStylesheetPlugin\nSelect alternative ~TiddlyWiki CSS stylesheet 'themes' from a list of tiddlers tagged with "stylesheets". Quickly switch to themes with colors, fonts, sizes, wallpaper, etc. that match your mood!.\n~~''source:'' http://www.TiddlyTools.com/#SelectStylesheetPlugin~~\n^^installed/updated on <<date tiddler:SelectStylesheetPlugin "DDD, MMM DDth, YYYY 0hh:0mm:0ss">>^^\n<<tiddler GroupBox>><script>place.style.marginLeft="1em"</script>===\n\n+++[Single Page Mode]\nSinglePageModePlugin\nConfigure ~TiddlyWiki to work more like a traditional multipage wiki with only one tiddler displayed at a time. Reduces clutter and potential information overload caused when lots of tiddlers are displayed at once.\n~~''source:'' http://www.TiddlyTools.com/#SinglePageModePlugin~~\n^^installed/updated on <<date tiddler:SinglePageModePlugin "DDD, MMM DDth, YYYY 0hh:0mm:0ss">>^^\n<<tiddler GroupBox>><script>place.style.marginLeft="1em"</script>===\n\n+++[Disable Automatic Wiki Links]\nDisableWikiLinksPlugin\nThis plugin allows you to disable TiddlyWiki's automatic WikiWord linking behavior, so that WikiWords embedded in tiddler content will be rendered as regular text, instead of being automatically converted to tiddler links. To create a tiddler link when automatic linking is disabled, you must enclose the link text within {{{[[}}} and {{{]]}}}\n~~''source:'' http://www.TiddlyTools.com/#DisableWikiLinksPlugin~~\n^^installed/updated on <<date tiddler:DisableWikiLinksPlugin "DDD, MMM DDth, YYYY 0hh:0mm:0ss">>^^\n<<tiddler GroupBox>><script>place.style.marginLeft="1em"</script>===\n\n+++[Tiddler Editor Text Area Extensions]\nTextAreaPlugin\nAdds extra keyboard functions to the standard textarea control in the tiddler editor. Control-F and control-G will "Find text" and "find text aGain", respectively, allowing you to copy-find-paste-findagain-paste-etc... In addition, this plugin will accept the TAB character as input to the textarea control, rather than as a signal to move the focus to another control. This allow you to easily use tab characters for column-aligned text indentations (very useful for writing readable plugin source code)\n~~''source:'' http://www.TiddlyTools.com/#TextAreaPlugin~~\n^^installed/updated on <<date tiddler:TextAreaPlugin "DDD, MMM DDth, YYYY 0hh:0mm:0ss">>^^\n<<tiddler GroupBox>><script>place.style.marginLeft="1em"</script>===\n\n+++[TidIDE: TiddlyWiki Integrated Development Environment ("Tie Dyed")]\nTidIDEPlugin\nA full-featured tiddler editor plus key-by-key ''LIVE PREVIEW''!! Also provides diagnostic tools to help you debug your TiddlyWiki problems by letting you view current TiddlyWiki internal option values, messages, shadows, stylesheets, notify and macro functions or display the internal DOM (Document Object Model) tree structure for any specific part of the TiddlyWiki document.\n~~''source:'' http://www.TiddlyTools.com/#TidIDEPlugin~~\n^^installed/updated on <<date tiddler:TidIDEPlugin "DDD, MMM DDth, YYYY 0hh:0mm:0ss">>^^\n<<tiddler GroupBox>><script>place.style.marginLeft="1em"</script>===\n\n<<tiddler SetBracketStyle>>===\n\n++++[tiddler management]>\n+++[Import Tiddlers]\nImportTiddlersPlugin\nTransfer tiddlers between ~TiddlyWiki documents. An interactive control panel lets you pick a document to import from, and then select which tiddlers to import, with prompting for skip, rename, merge or replace actions when importing tiddlers that match existing titles. Automatically add tags to imported tiddlers so they are easy to find later on. Generates a detailed report of import 'history' in ImportedTiddlers.\n~~''source:'' http://www.TiddlyTools.com/#ImportTiddlersPlugin~~\n^^installed/updated on <<date tiddler:ImportTiddlersPlugin "DDD, MMM DDth, YYYY 0hh:0mm:0ss">>^^\n<<tiddler GroupBox>><script>place.style.marginLeft="1em"</script>===\n\n+++[Export Tiddlers]\nExportTiddlersPlugin\nExtract selected tiddlers from your ~TiddlyWiki documents and save them to a local file or a remote server (requires server-side scripting). Tiddler data can be output using either TiddlyWiki 'storeArea DIVs' or RSS-compatible XML (for automatic feeds). An interactive control panel lets you pick a destination and format, and then select which tiddlers to export. An optional 'selection filter' helps you pick the desired tiddlers by specifying a combination of modification date, tags, or tiddler text to be matched/excluded.\n~~''source:'' http://www.TiddlyTools.com/#ExportTiddlersPlugin~~\n^^installed/updated on <<date tiddler:ExportTiddlersPlugin "DDD, MMM DDth, YYYY 0hh:0mm:0ss">>^^\n<<tiddler GroupBox>><script>place.style.marginLeft="1em"</script>===\n\n+++[Automatic Tagging]\nAutoTaggerPlugin\nAutomatically tag tiddlers with their original creation date and author and optionally scan the tiddler and add any tags that are embedded as text. Makes cross-referencing your tiddlers a snap!\n~~''source:'' http://www.TiddlyTools.com/#AutoTaggerPlugin~~\n^^installed/updated on <<date tiddler:AutoTaggerPlugin "DDD, MMM DDth, YYYY 0hh:0mm:0ss">>^^\n<<tiddler GroupBox>><script>place.style.marginLeft="1em"</script>===\n\n+++[New Document]\nNewDocumentPlugin\nQuickly create new TiddlyWiki documents from your existing document. Use the {{{<<newDocument>>}}} macro to place a "new document" link into your sidebar/mainmenu/any tiddler (wherever you like). Select this command to automatically create a "new.html" document containing all tiddlers tagged with<<tag includeNew>>or<<tag systemTiddlers>>. Optional parameters let you specify an alternate path/filename for the new file, or a different combination of tags to match (using AND, OR, NOT and parentheses to form complex matches). You can also indicate "ask" for either parameter, which will trigger a prompt for input when "new document" is selected.\n~~''source:'' http://www.TiddlyTools.com/#NewDocumentPlugin~~\n^^installed/updated on <<date tiddler:NewDocumentPlugin "DDD, MMM DDth, YYYY 0hh:0mm:0ss">>^^\n<<tiddler GroupBox>><script>place.style.marginLeft="1em"</script>===\n\n+++[Auto Sync]\nAutoSyncPlugin\n//''EXPERIMENTAL ALPHA RELEASE''//\nLive Publishing! "Simul-cast" changes in your document by ''automatically submitting tiddler data to a web server'' whenever you complete editing of a tiddler. AutoSyncPlugin requires installation of compatible server-side scripting to transmit, receive and store the updated tiddler data on the server. The plugin can be configured for use with different server-side scripts by setting the contents of specially-named tiddlers to match your web server ([[SiteHost]]) and script location ([[SitePost]]), as well as provide any flags, keywords, etc. ([[SiteParams]]) that may be required by the server-side scripting.\n~~''source:'' http://www.TiddlyTools.com/#AutoSyncPlugin~~\n^^installed/updated on <<date tiddler:AutoSyncPlugin "DDD, MMM DDth, YYYY 0hh:0mm:0ss">>^^\n<<tiddler GroupBox>><script>place.style.marginLeft="1em"</script>===\n\n<<tiddler SetBracketStyle>>===\n\n++++[authoring]>\n+++[Aliases]\nAliasPlugin\nCreate text-substitution macros that define abbreviations and other "aliases", and then embed them in the rest of your tiddler content to quickly insert common terms, phrases and links without a lot of repetitive typing.\n~~''source:'' http://www.TiddlyTools.com/#AliasPlugin~~\n^^installed/updated on <<date tiddler:AliasPlugin "DDD, MMM DDth, YYYY 0hh:0mm:0ss">>^^\n<<tiddler GroupBox>><script>place.style.marginLeft="1em"</script>===\n\n+++[Date Formatting/Linking]\nDatePlugin\nDisplay formatted dates, for the specified year, month, day using number values or mathematical expressions such as (Y+1) or (D+30). Optionally create a link from the formatted output to a 'dated tiddler' for quick blogging or create a popup menu that includes the dated tiddler link plus links to changes made on that date as well as links to any pending reminders for the coming 31 days (if the RemindersPlugin is installed). This plugin also provides a public API for easily incorporating formatted date output (with or without the links/popups) into other plugins, such as calendar generators, etc.\n~~''source:'' http://www.TiddlyTools.com/#DatePlugin~~\n^^installed/updated on <<date tiddler:DatePlugin "DDD, MMM DDth, YYYY 0hh:0mm:0ss">>^^\n<<tiddler GroupBox>><script>place.style.marginLeft="1em"</script>===\n\n+++[Calendar]\nCalendarPlugin\nShow a one month/year calendar for the current date or any specified month/year. Different backgrounds and font styles indicate the current date, weekends, and holidays. When the DatePlugin is installed //(see below)//, each date is also a popup menu containing a link to a 'dated tiddler' for quickly creating/updating daily blog entries (or activity reports), as well as links for any changed tiddlers and reminders on that date. //note: the CalendarPlugin has been slightly modified so it can use the DatePlugin's {{{showDate()}}} API//\n~~''source:'' http://rumsby.org/yatwa/ //(Steve Rumsby)//~~\n^^installed/updated on <<date tiddler:CalendarPlugin "DDD, MMM DDth, YYYY 0hh:0mm:0ss">>^^\n<<tiddler GroupBox>><script>place.style.marginLeft="1em"</script>===\n\n+++[Reminders]\nReminderMacros\nYou can set a reminder to 'fire' on a particular date (e.g. August 8th), or a more non-specific date like "every Friday". You can also use the showReminders macro to search through all of your tiddlers and list the ones that will fire within a range from the current date. The displayTiddlersWithReminders macro can be used to open any tiddlers that have reminders that will fire within a specified time span.\n~~''source:'' http://www.geocities.com/allredfaq/reminderMacros.html //(Jeremy Sheeley)//~~\n^^installed/updated on <<date tiddler:ReminderMacros "DDD, MMM DDth, YYYY 0hh:0mm:0ss">>^^\n<<tiddler GroupBox>><script>place.style.marginLeft="1em"</script>===\n\n+++[Quote of the Day]\nQuoteOfTheDayPlugin\nAdds a macro that displays a randomly selected quote each time it is rendered. Quotes are listed in a separate tiddler, separated by horizontal rules ("----").\n~~''source:'' http://www.TiddlyTools.com/#QuoteOfTheDayPlugin~~\n^^installed/updated on <<date tiddler:QuoteOfTheDayPlugin "DDD, MMM DDth, YYYY 0hh:0mm:0ss">>^^\n<<tiddler GroupBox>><script>place.style.marginLeft="1em"</script>===\n\n+++[HTML Formatting]\nHTMLFormattingPlugin\nMix TiddlyWiki formatting and standard HTML tags inside tiddler content. Let's you add CGI forms, complex tables, linked images, fonts, rollovers, etc.\n~~''source:'' http://www.TiddlyTools.com/#HTMLFormattingPlugin~~\n^^installed/updated on <<date tiddler:HTMLFormattingPlugin "DDD, MMM DDth, YYYY 0hh:0mm:0ss">>^^\n<<tiddler GroupBox>><script>place.style.marginLeft="1em"</script>===\n\n+++[In-line Javascript]\nInlineJavascriptPlugin\nInsert Javascript directly into your tiddler content using {{{<script>}}} and {{{</script>}}} tags. Lets you 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.\n~~''source:'' http://www.TiddlyTools.com/#InlineJavascriptPlugin~~\n^^installed/updated on <<date tiddler:InlineJavascriptPlugin "DDD, MMM DDth, YYYY 0hh:0mm:0ss">>^^\n<<tiddler GroupBox>><script>place.style.marginLeft="1em"</script>===\n\n+++[Nested In-line Sliders]\nNestedSlidersPlugin\nQuickly make any tiddler content into an expandable 'slider' panel, without needing to create a separate tiddler to contain the slider content. Optional syntax allows "default to open", "custom button label/tooltip" and "automatic blockquote formatting". You can also "nest" these sliders as deep as you like, so that expandable tree-like hierarchical displays can be created.\n~~''source:'' http://www.TiddlyTools.com/#NestedSlidersPlugin~~\n^^installed/updated on <<date tiddler:NestedSlidersPlugin "DDD, MMM DDth, YYYY 0hh:0mm:0ss">>^^\n<<tiddler GroupBox>><script>place.style.marginLeft="1em"</script>===\n\n+++[Checkboxes]\nCheckboxPlugin\nAdd checkboxes to your tiddler content. Checkbox states can be preserved in the document (by automatically modifying the tiddler content), or saved in local cookies by assigning an optional 'id' to the checkbox. Add custom javascript for programmatic initialization and onClick handling for any checkbox. Also provides access to checkbox DOM element data and tracks the checkbox state in TiddlyWiki's config.options[] internal data.\n~~''source:'' http://www.TiddlyTools.com/#CheckboxPlugin~~\n^^installed/updated on <<date tiddler:CheckboxPlugin "DDD, MMM DDth, YYYY 0hh:0mm:0ss">>^^\n<<tiddler GroupBox>><script>place.style.marginLeft="1em"</script>===\n\n+++[Unformatted Text]\nUnformattedTextPlugin\nAdd //extended quotes// around specific tiddler content to prevent any embedded formatting syntax from being processed by TiddlyWiki's rendering engine, so the content will appear exactly as entered into the tiddler (i.e., "raw text"), even when it contains character sequences that would normally be treated as TiddlyWiki formatting instructions.\n~~''source:'' http://www.TiddlyTools.com/#UnformattedTextPlugin~~\n^^installed/updated on <<date tiddler:UnformattedTextPlugin "DDD, MMM DDth, YYYY 0hh:0mm:0ss">>^^\n<<tiddler GroupBox>><script>place.style.marginLeft="1em"</script>===\n\n<<tiddler SetBracketStyle>>===
<<tiddler HideTiddlerTags>><<tiddler DoubleClickDisable>><script>\n place.className="viewer"; place.style.padding=".5em"; place.style.paddingBottom=".3em"\n</script>@@font-size:14pt;+++^50em^[plugins|extend or alter TiddlyWiki features and functions]...\n <<moveablePanel>>[[Plugin catalog|TiddlyStudiosCatalog]] | <<tiddler TiddlyStudiosCatalog>>===\n +++^35em^[scripts|short InlineJavascript program 'snippets']...<<moveablePanel>>inline scripts\n----\n ++++[tools]\n MiniBrowser\n a floating browser-in-browser with customizable "favorites" list\n MediaCenter\n a floating media player with auto-switching for Windows, ~RealOne, ~QuickTime and Flash media types\n CommentForm\n add a quick comment into a tiddler\n <<tiddler GroupBox>>===\n ++++[actions]\n SwitchTiddlers\n close current tiddler, open another in it's place\n DoubleClickForFocus\n double-click on tiddler does 'collapse others'\n DoubleClickDisable\n disallow double-click on tiddler\n DisplayAllTiddlers\n opens all tiddlers in title order\n <<tiddler GroupBox>>===\n ++++[styles]\n SetBorderStyle\n adds a rounded-box border around an element\n SetBracketStyle\n adds a rounded-corner L-bracket around an element\n GroupBox\n adds a border, background and margin around an element\n HideTiddlerTitle\n replaces tiddler title with <br> (preserves line space)\n HideTiddlerBackground\n hides background and border\n HideTiddlerToolbar\n hides tiddler toolbar\n <<tiddler GroupBox>>===\n===\n +++^35em^[stylesheets|colors, lines, spacing, fonts, backgrounds, etc.]...<<moveablePanel>>CSS definitions\n----\n ++++[themes]\n [[Plain]]\n [[Paper]]\n [[Textures]]\n [[Woodshop]]\n [[Seaside]]\n [[Edge of Night]]\n [[Let's Get Tanked!]]\n [[Where the Buffalo Roam]]\n <<tiddler GroupBox>>===\n ++++[overlays]\n [[Gray]]\n BlackMarble\n BrightText\n LayoutAdjustments\n FontAdjustments\n <<tiddler GroupBox>>===\n ++++[shadows]\n StyleSheetLayout\n StyleSheetColors\n StyleSheetPrint\n <<tiddler GroupBox>>===\n===\n +++^35em^[templates|custom page and tiddler layout definitions]...<<moveablePanel>>custom template definitions\n----\n {{groupbox{PageTemplate\n default layout for TW document\n ViewTemplate\n alternative tiddler layout without tagged, tagging and subtitle elements\n TidIDEViewTemplate\n alternative tiddler layout replacing standard editor with TidIDE editor\n CollapsedTemplate\n use with CollapseTiddlersPlugin}}}===\n +++^35em^[starters|TiddlyTools plugin bundles in ready-to-use TiddlyWiki documents]...<<moveablePanel>>starter documents\n----\n @@font-size:7pt;To download, ''right-click'' on a URL and select ''Save link as...'' from the menu@@\n ++++[TiddlyWiki]\n @@font-size:7pt;http://www.TiddlyTools.com/TW.html\n Complete ~TiddlyWiki v<<version>> standard distribution@@\n <<tiddler GroupBox>>===\n ++++[TiddlyWiki plus Import/Export]\n @@font-size:7pt;http://www.TiddlyTools.com/TW+ImportExport.html\n Empty ~TiddlyWiki v<<version>> standard distribution with [[ImportTiddlersPlugin]] and [[ExportTiddlersPlugin]] pre-installed@@\n <<tiddler GroupBox>>===\n===\n +++^35em^[exports|bundled TiddlyWiki accessories, ready to import into your documents]...<<moveablePanel>>tiddler export files\n----\n ''UPDATES COMING SOON!!!''\n ++++[Import/Export]\n @@font-size:7pt;http://www.TiddlyTools.com/ImportExport.html\n ImportTiddlersPlugin, ImportTiddlersPanel, ExportTiddlersPlugin, ExportTiddlersPanel@@\n <<tiddler GroupBox>>===\n ++++[Authoring "Power Pack"]\n @@font-size:7pt;http://www.TiddlyTools.com/Authoring.html\n AliasPlugin, CheckboxPlugin, DatePlugin, DisableWikiLinksPlugin, HTMLFormattingPlugin, InlineJavascriptPlugin, NestedSlidersPlugin, TiddlerWithParamsPlugin, UnformattedTextPlugin@@\n <<tiddler GroupBox>>===\n===\n +++^35em^[links]...<<moveablePanel>>~TiddlyWiki-related sites\n----\n +++[TiddlyWiki.com (Jeremy Ruston)]\n http://www.TiddlyWiki.com/\n http://www.TiddlyWiki.com/dev/\n http://www.TiddlyWiki.com/beta/\n <<tiddler GroupBox>>===\n\n +++[Google Groups]\n ~TiddlyWiki discussions for users and developers:\n http://groups-beta.google.com/group/TiddlyWiki\n http://groups-beta.google.com/group/TiddlyWikiDev\n <<tiddler GroupBox>>===\n\n +++[Frappr Global Map]\n add your own map-pin to the ~TiddlyWiki Map\n http://www.frappr.com/tiddlywiki/\n <<tiddler GroupBox>>===\n\n +++[TiddlyForge (Devon Jones)]\n The latest in ~TiddlyWiki news plus a comprehensive repository for ~TiddlyWiki plugins\n http://www.tiddlyforge.net/ and http://www.tiddlyforge.net/pytw/\n <<tiddler GroupBox>>===\n\n +++[TiddlyWorks (Russ Lipton)]\n "tiddly training and applications"\n http://russlipton.com/tiddlyworks.html\n <<tiddler GroupBox>>===\n\n +++[TiddlyWikiTips (Jim Barr)]\n hints and techniques for using ~TiddlyWiki\n http://www.TiddlyWikiTips.com\n <<tiddler GroupBox>>===\n\n +++[TiddlyTools / ELS Design Studios (Eric Shulman)]\n This site!\n http://www.TiddlyTools.com/\n <<tiddler GroupBox>>===\n\n +++[TiddlyStyles (Clint Checketts)]\n The Zen Master of ~TiddlyWiki CSS Wizardary\n http://www.checkettsweb.com/ and http://checkettsweb.com/dev/\n <<tiddler GroupBox>>===\n\n +++[TiddlyTagWiki and TiddlyDesktop (Jonny LeRoy)]\n hierarchical tagging system extensions for advanced multi-connected tag groupings\n alternative tiddler display using familiar 'floating window' desktop interface\n http://www.digitaldimsum.co.uk/\n <<tiddler GroupBox>>===\n\n +++[abegoExtensions (UdoBorkowski)]\n powerful programmable macros and more\n http://tiddlywiki.abego-software.de/\n <<tiddler GroupBox>>===\n\n +++[MonkeyPirateTiddlyWiki (Simon Baird)]\n useful plugins/macros, plus a really nice logo!\n http://simonbaird.com/mptw/\n <<tiddler GroupBox>>===\n\n +++[TiddlyW;inks (Daniel Baird)]\n add fun and games to your TW: ~MineSweeper, ~DiceRoll, and more...\n http://danielbaird.com/tiddlywinks/\n <<tiddler GroupBox>>===\n\n +++[YATWA (Steve Rumsby)]\n "Yet Another ~TiddlyWiki Adaptation"\n http://www.rumsby.org/yatwa\n <<tiddler GroupBox>>===\n\n +++[Paul's Notepad (Paul Petterson)]\n more useful plugins/macros\n http://thepettersons.org/PaulsNotepad.html\n <<tiddler GroupBox>>===\n\n +++[ZiddlyWiki (Tim Morgan)]\n combines ~TiddlyWiki with Zope hosting for server-side storage\n http://timmorgan.org/ZiddlyWiki/\n <<tiddler GroupBox>>===\n===@@
sidebars:<script label="left">\n var sb=document.getElementById('mainMenu'); sb.style.display=(sb.style.display!='block'?'block':'none');\n var da=document.getElementById('displayArea'); da.style.marginLeft=(sb.style.display!='block'?'1em':'10em');\n config.options.chkShowLeftSidebar=(sb.style.display=='block'); saveOptionCookie('chkShowLeftSidebar');\n return false;\n </script><script>place.lastChild.style.fontWeight="normal";</script>|<script label="right">\n var sb=document.getElementById('sidebar'); sb.style.display=(sb.style.display!='block'?'block':'none');\n var da=document.getElementById('displayArea'); da.style.marginRight=(sb.style.display!='block'?'1em':'17em');\n config.options.chkShowRightSidebar=(sb.style.display=='block'); saveOptionCookie('chkShowRightSidebar');\n return false;\n </script><script>place.lastChild.style.fontWeight="normal";</script>
Era tu llanto tan dulce\n tan callado\n cuando tus ojos lloraban\n racimitos temerosos\n de nomeolvides rosados\n cayendo\n en tibio rocío\n en charquitos de arcoiris\n donde abejas\n mariposas\n grillos\n peces dorados\n nacían\n y en espolvoreado trazo\n de iridiscente cometa\n alzaban su curva efímera\n confundiéndose en el cielo\n con pájaros azulados.\n\n Y vos seguías llorando...
En la página oscura\n de tus ojos muertos\n con savia de estrellas\n escribí mi nombre\n sólo por si en tu viaje\n te placía verlo\n y me llevaras un rato,\n no más que eso.\n Pero ese humo tenue\n en que te convertiste\n empañó los cristales\n de tu urna de cuentos\n y partiste sola,\n y me quedé muy lejos\n extrañando tu muerte,\n observando ese suelo\n en donde tu silueta,\n como último recuerdo,\n un nido de hojas secas\n le dejó a mi silencio.\n
Subite a las columnas de humo tenue\n que ondulan en el horizonte odiado y anhelado\n\n en el lomo de una tortuga marina\n recorré el submundo de los sueños\n donde la cálida boca espera devorarte\n\n hundite en el deseo sangriento de mi vientre\n que te abarca\n como la noche madre\n y te acuna\n cuna... cuna...\n y te acuna largamente\n\n poné tu pecho al rayo del destino\n y torcélo hacia tu vida\n acariciá tu alma\n llenála de silbidos\n de chispas incandescentes\n\n desencadená la tormenta de tus ojos\n que llueva tu interior sobre el mundo distraído\n sorprendiéndolo de amor\n de amor embravecido\n\n levantá tu risa como una espada sacra\n como una lanza de pimpollos tiernos\n y degollá la muerte\n someté las miserias\n al embrujo tibio de tus manos\n\n sacudí el tedio vespertino con estrellas\n y con roja voz cantá el canto del viajero\n que espera a un lado del camino\n el fin de la agonía del reloj impaciente\n\n bailá bajo la luna\n la lenta danza del olvido\n que al compás de los dóciles cometas\n los grillos ejecutan\n semidormidos.\n\n Una nube de ojos oculta gran secreto\n sencillo\n interminable\n acercáte a ella de puntillas y soplá\n dispersá su mirada multitudinaria\n sorbé el enjambre de pupilas\n agigantáte\n y flotá en la noche congelada\n estupefacta\n que con voces de estrellas te ovaciona\n emocionada.\n\n Reí\n volá\n nadá sobre las casas en la penumbra del alba\n proyectáte\n subí\n bebé tu alma.
Su cuerpo flota en las aguas tranquilas del estanque\n provocando en su deriva de silencio\n pequeños remolinos.\n\n Las hojas y las plantas\n velan el vuelo de sus ojos distraidos.\n\n ¿qué sueña ahora que no sueña?\n ¿hacia dónde corre su sangre detenida?\n\n Ahora que, al fin, sus anhelos y sus dudas\n no inquietan su universo\n ¿dónde mira?\n ¿qué busca en las alturas azules de su muerte?\n\n Flota y olvida.\n\n Aunque su olvido es un recuerdo permanente.\n\n Ahora que florece en sus ojos el humo de lo eterno\n y parece respirar tranquilamente\n el aire renovado de su triste transisión\n vaga su mente\n suelta\n dispersa\n destada\n festejando callada\n su nuevo nacimiento.\n
Una canción para erizarte el alma\n una canción para llevarte\n por ese mar de astros\n nadando entre peces transparentes\n\n una canción que te haga sangrar\n hasta quedarte vacía de tristezas\n que te haga reir descontroladamente\n hasta desaparecer en el rojo\n terciopelo de la aurora\n\n esa canción\n para traer desde el origen de tus días\n el recuerdo de ese amor\n carnívoro y a la vez benevolente\n que te arrulle en dulce letanía\n abrigada en la gasa de mis manos\n\n una canción\n de disparos tibios\n y flechas refulgentes\n atacando decidida\n tu corazón de hiedra\n barroca y cristalina\n\n una canción que atrape el vuelo\n de tus ojos desmedidos\n que encauce la marejada púrpura\n de tus labios entreabiertos\n hacia el ávido estanque de mis besos\n\n esa canción que extraiga\n desde el fondo de mi pecho\n hasta la última gota de ternura\n para abrumarte con sus mágicos misterios\n haciéndote llorar\n llorar hasta cansarte\n llorar hasta agotar\n la fuente de todo sufrimiento\n\n una canción de espumas y de viento\n de árboles batiéndose\n una canción de pastos tiernos\n\n esa canción\n ¿dónde la tengo?
/***\n''UnformattedTextPlugin for TiddlyWiki version 1.2.x and 2.0''\n^^author: Eric Shulman - ELS Design Studios\nsource: http://www.TiddlyTools.com/#UnformattedTextPlugin \nlicense: [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]^^\n\nAdd //extended quotes// around specific tiddler content to prevent any embedded formatting syntax from being processed by TiddlyWiki's rendering engine, so the content will appear exactly as entered into the tiddler (i.e., "raw text"), even when it contains character sequences that would normally be treated as TiddlyWiki formatting instructions.\n!!!!!Usage\n<<<\nWhen installed, this plugin adds new wiki syntax for surrounding tiddler content so that it can be excluded from the TiddlyWiki formatting rules when it is rendered.\n//{{{\n"""content goes here"""\n//}}}\nwhere:\n* {{{"""}}} //(three double-quote characters)//^^\nmarks the start and end of the unformatted content^^\n<<<\n!!!!!Examples\n<<<\nContent containing TiddlyWiki formatting syntax can be shown with the syntax unchanged:\n{{{\n"""this text is //not italic// and <<not a macro>> and [[not a link]]"""\n}}}\n"""this text is //not italic// and <<not a macro>> and [[not a link]]"""\n\nNote that, although formatting syntax contained ''within'' the quoted content does not affect the style of the output, any formatting syntax ''surrounding'' the quoted content will still be applied. For example, the following unformatted output will be underlined:\n{{{\n__"""this text is //not italic// and <<not a macro>> and [[not a link]], but it IS underlined"""__\n}}}\n__"""this text is //not italic// and <<not a macro>> and [[not a link]], but it IS underlined"""__\n<<<\n!!!!!Installation\n<<<\nimport (or copy/paste) the following tiddlers into your document:\n''UnformattedTextPlugin'' (tagged with <<tag systemConfig>>)\n<<<\n!!!!!Revision History\n<<<\n''2005.11.07 [1.0.0]''\ninitial release\n<<<\n!!!!!Credits\n<<<\nThis feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]]\n<<<\n!!!!!Code\n***/\n//{{{\nversion.extensions.unformattedText = {major: 0, minor: 5, revision: 0, date: new Date(2005,11,07)};\n\nconfig.formatters.push( {\n name: "rawText",\n match: "\s\s\s"{3}",\n lookahead: "\s\s\s"{3}((?:.|\s\sn)*?)\s\s\s"{3}",\n handler: function(w)\n {\n var lookaheadRegExp = new RegExp(this.lookahead,"mg");\n lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = lookaheadRegExp.exec(w.source)\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart)\n {\n var e = createTiddlyElement(w.output,"span",null,null,lookaheadMatch[1]);\n w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;\n }\n }\n }\n)\n//}}}\n
/* margins, padding, borders, position, z-index, etc... */\n[[StyleSheetLayout]] /* TW shadow */\n[[StyleSheetColors]] /* TW shadow */\n[[LayoutAdjustments]]\n[[FontAdjustments]]\n[[Gray]]\n\n/* borderless tiddlers */\n.viewer { background-image:none; background-color:transparent; padding: 1em; border: 0px; }\n\n/* background */\nbody { background-image: url('els/sky.jpg') !important; background-attachment: fixed !important; }\n#titleLine, #sidebar {\nbackground-color: transparent !important;\nbackground-image: none !important;\nborder-color:transparent !important;\nborder: 0px solid #014 !important;\n}\n#siteTitle { color:#33c; }\n#siteSubtitle { color:#669; }\n#titleLine a { color: #33f; }\n\n.floatingPanel, #messageArea, .attachPanel, #importPanel, #exportPanel { background: #def !important;}\n\n*[class="TOCList"] { background-color: transparent; color:#000; border-color:transparent !important;}\n
| !date | !user | !location | !storeUrl | !uploadDir | !toFilename | !backupdir | !origin |\n| 16/6/2006 7:39:31 | Eric | [[/|http://www.tiddlytools.com/]] | [[store.php|http://www.tiddlytools.com/store.php]] | | index.html | backup |\n| 16/6/2006 10:34:17 | Eric | [[/|http://www.tiddlytools.com/]] | [[store.php|http://www.tiddlytools.com/store.php]] | | index.html | backup |\n| 16/6/2006 10:40:5 | Eric | [[/|http://www.tiddlytools.com/]] | [[store.php|http://www.tiddlytools.com/store.php]] | | index.html | backup |\n| 16/6/2006 11:38:53 | Eric | [[/|http://www.tiddlytools.com/]] | [[store.php|http://www.tiddlytools.com/store.php]] | | index.html | backup |\n| 16/6/2006 12:35:33 | Eric | [[/|http://www.tiddlytools.com/]] | [[store.php|http://www.tiddlytools.com/store.php]] | | index.html | backup |\n| 16/6/2006 12:43:32 | Eric | [[/|http://www.tiddlytools.com/]] | [[store.php|http://www.tiddlytools.com/store.php]] | | index.html | backup |\n| 16/6/2006 13:24:20 | Eric | [[/|http://www.tiddlytools.com/]] | [[store.php|http://www.tiddlytools.com/store.php]] | | index.html | backup |\n| 16/6/2006 14:26:43 | Eric | [[/|http://www.tiddlytools.com/]] | [[store.php|http://www.tiddlytools.com/store.php]] | | index.html | backup |\n| 16/6/2006 15:38:55 | Eric | [[/|http://www.tiddlytools.com/]] | [[store.php|http://www.tiddlytools.com/store.php]] | | index.html | backup |\n| 16/6/2006 18:25:40 | Eric | [[/|http://www.tiddlytools.com/]] | [[store.php|http://www.tiddlytools.com/store.php]] | | index.html | backup | Ok |\n| 16/6/2006 18:31:37 | Eric | [[/|http://www.tiddlytools.com/]] | [[store.php|http://www.tiddlytools.com/store.php]] | | index.html | backup |\n| 16/6/2006 18:39:52 | Eric | [[/|http://www.tiddlytools.com/]] | [[store.php|http://www.tiddlytools.com/store.php]] | | index.html | backup |\n| 16/6/2006 18:47:26 | Eric | [[/|http://www.tiddlytools.com/]] | [[store.php|http://www.tiddlytools.com/store.php]] | | index.html | backup |\n| 16/6/2006 19:19:2 | Eric | [[/|http://www.tiddlytools.com/]] | [[store.php|http://www.tiddlytools.com/store.php]] | | index.html | backup |\n| 17/6/2006 4:23:27 | Yorga | [[TWDan.html|file:///F:/TWDan.html#ImportTiddlersPanel]] | [[store.php|http://www.tiddlytools.com/store.php]] | | index.html | backup |
/***\n<<tiddler UploadPluginDoc>>\n!Code\n***/\n//{{{\nversion.extensions.UploadPlugin = {\n major: 3, minor: 3, revision: 1, \n date: new Date(2006,3,30),\n type: 'macro',\n source: 'http://tiddlywiki.bidix.info/#UploadPlugin',\n docs: 'http://tiddlywiki.bidix.info/#UploadPluginDoc'\n};\n//}}}\n\n////+++!![config.lib.file]\n\n//{{{\nif (!config.lib) config.lib = {};\nif (!config.lib.file) config.lib.file= {\n author: 'BidiX',\n version: {major: 0, minor: 1, revision: 0}, \n date: new Date(2006,3,9)\n};\nconfig.lib.file.dirname = function (filePath) {\n var lastpos;\n if ((lastpos = filePath.lastIndexOf("/")) != -1) {\n return filePath.substring(0, lastpos);\n } else {\n return filePath.substring(0, filePath.lastIndexOf("\s\s"));\n }\n};\nconfig.lib.file.basename = function (filePath) {\n var lastpos;\n if ((lastpos = filePath.lastIndexOf("#")) != -1) \n filePath = filePath.substring(0, lastpos);\n if ((lastpos = filePath.lastIndexOf("/")) != -1) {\n return filePath.substring(lastpos + 1);\n } else\n return filePath.substring(filePath.lastIndexOf("\s\s")+1);\n};\nwindow.basename = function() {return "@@deprecated@@";};\n//}}}\n////===\n\n////+++!![config.lib.log]\n\n//{{{\nif (!config.lib) config.lib = {};\nif (!config.lib.log) config.lib.log= {\n author: 'BidiX',\n version: {major: 0, minor: 1, revision: 0}, \n date: new Date(2006,3,9)\n};\nconfig.lib.Log = function(tiddlerTitle, logHeader) {\n if (version.major < 2)\n this.tiddler = store.tiddlers[tiddlerTitle];\n else\n this.tiddler = store.getTiddler(tiddlerTitle);\n if (!this.tiddler) {\n this.tiddler = new Tiddler();\n this.tiddler.title = tiddlerTitle;\n this.tiddler.text = "| !date | !user | !location |" + logHeader;\n this.tiddler.created = new Date();\n this.tiddler.modifier = config.options.txtUserName;\n this.tiddler.modified = new Date();\n if (version.major < 2)\n store.tiddlers[tiddlerTitle] = this.tiddler;\n else\n store.addTiddler(this.tiddler);\n }\n return this;\n};\n\nconfig.lib.Log.prototype.newLine = function (line) {\n var now = new Date();\n var newText = "| ";\n newText += now.getDate()+"/"+(now.getMonth()+1)+"/"+now.getFullYear() + " ";\n newText += now.getHours()+":"+now.getMinutes()+":"+now.getSeconds()+" | ";\n newText += config.options.txtUserName + " | ";\n var location = document.location.toString();\n var filename = config.lib.file.basename(location);\n if (!filename) filename = '/';\n newText += "[["+filename+"|"+location + "]] |";\n this.tiddler.text = this.tiddler.text + "\sn" + newText;\n this.addToLine(line);\n};\n\nconfig.lib.Log.prototype.addToLine = function (text) {\n this.tiddler.text = this.tiddler.text + text;\n this.tiddler.modifier = config.options.txtUserName;\n this.tiddler.modified = new Date();\n if (version.major < 2)\n store.tiddlers[this.tiddler.tittle] = this.tiddler;\n else {\n store.addTiddler(this.tiddler);\n story.refreshTiddler(this.tiddler.title);\n store.notify(this.tiddler.title, true);\n }\n if (version.major < 2)\n store.notifyAll(); \n};\n//}}}\n////===\n\n////+++!![config.lib.options]\n\n//{{{\nif (!config.lib) config.lib = {};\nif (!config.lib.options) config.lib.options = {\n author: 'BidiX',\n version: {major: 0, minor: 1, revision: 0}, \n date: new Date(2006,3,9)\n};\n\nconfig.lib.options.init = function (name, defaultValue) {\n if (!config.options[name]) {\n config.options[name] = defaultValue;\n saveOptionCookie(name);\n }\n};\n//}}}\n////===\n\n////+++!![PasswordTweak]\n\n//{{{\nversion.extensions.PasswordTweak = {\n major: 1, minor: 0, revision: 2, date: new Date(2006,3,11),\n type: 'tweak',\n source: 'http://tiddlywiki.bidix.info/#PasswordTweak'\n};\n//}}}\n/***\n!!config.macros.option\n***/\n//{{{\nconfig.macros.option.passwordCheckboxLabel = "Save this password on this computer";\nconfig.macros.option.passwordType = "password"; // password | text\n\nconfig.macros.option.onChangeOption = function(e)\n{\n var opt = this.getAttribute("option");\n var elementType,valueField;\n if(opt) {\n switch(opt.substr(0,3)) {\n case "txt":\n elementType = "input";\n valueField = "value";\n break;\n case "pas":\n elementType = "input";\n valueField = "value";\n break;\n case "chk":\n elementType = "input";\n valueField = "checked";\n break;\n }\n config.options[opt] = this[valueField];\n saveOptionCookie(opt);\n var nodes = document.getElementsByTagName(elementType);\n for(var t=0; t<nodes.length; t++) {\n var optNode = nodes[t].getAttribute("option");\n if (opt == optNode) \n nodes[t][valueField] = this[valueField];\n }\n }\n return(true);\n};\n\nconfig.macros.option.handler = function(place,macroName,params)\n{\n var opt = params[0];\n var size = 15;\n if (params[1])\n size = params[1];\n if(config.options[opt] === undefined) {\n return;}\n var c;\n switch(opt.substr(0,3)) {\n case "txt":\n c = document.createElement("input");\n c.onkeyup = this.onChangeOption;\n c.setAttribute ("option",opt);\n c.size = size;\n c.value = config.options[opt];\n place.appendChild(c);\n break;\n case "pas":\n // input password\n c = document.createElement ("input");\n c.setAttribute("type",config.macros.option.passwordType);\n c.onkeyup = this.onChangeOption;\n c.setAttribute("option",opt);\n c.size = size;\n c.value = config.options[opt];\n place.appendChild(c);\n // checkbox link with this password "save this password on this computer"\n c = document.createElement("input");\n c.setAttribute("type","checkbox");\n c.onclick = this.onChangeOption;\n c.setAttribute("option","chk"+opt);\n place.appendChild(c);\n c.checked = config.options["chk"+opt];\n // text savePasswordCheckboxLabel\n place.appendChild(document.createTextNode(config.macros.option.passwordCheckboxLabel));\n break;\n case "chk":\n c = document.createElement("input");\n c.setAttribute("type","checkbox");\n c.onclick = this.onChangeOption;\n c.setAttribute("option",opt);\n place.appendChild(c);\n c.checked = config.options[opt];\n break;\n }\n};\n//}}}\n/***\n!! Option cookie stuff\n***/\n//{{{\nwindow.loadOptionsCookie_orig_PasswordTweak = window.loadOptionsCookie;\nwindow.loadOptionsCookie = function()\n{\n var cookies = document.cookie.split(";");\n for(var c=0; c<cookies.length; c++) {\n var p = cookies[c].indexOf("=");\n if(p != -1) {\n var name = cookies[c].substr(0,p).trim();\n var value = cookies[c].substr(p+1).trim();\n switch(name.substr(0,3)) {\n case "txt":\n config.options[name] = unescape(value);\n break;\n case "pas":\n config.options[name] = unescape(value);\n break;\n case "chk":\n config.options[name] = value == "true";\n break;\n }\n }\n }\n};\n\nwindow.saveOptionCookie_orig_PasswordTweak = window.saveOptionCookie;\nwindow.saveOptionCookie = function(name)\n{\n var c = name + "=";\n switch(name.substr(0,3)) {\n case "txt":\n c += escape(config.options[name].toString());\n break;\n case "chk":\n c += config.options[name] ? "true" : "false";\n // is there an option link with this chk ?\n if (config.options[name.substr(3)]) {\n saveOptionCookie(name.substr(3));\n }\n break;\n case "pas":\n if (config.options["chk"+name]) {\n c += escape(config.options[name].toString());\n } else {\n c += "";\n }\n break;\n }\n c += "; expires=Fri, 1 Jan 2038 12:00:00 UTC; path=/";\n document.cookie = c;\n};\n//}}}\n/***\n!! Initializations\n***/\n//{{{\n// define config.options.pasPassword\nif (!config.options.pasPassword) {\n config.options.pasPassword = 'defaultPassword';\n window.saveOptionCookie('pasPassword');\n}\n// since loadCookies is first called befor password definition\n// we need to reload cookies\nwindow.loadOptionsCookie();\n//}}}\n////===\n\n////+++!![config.macros.upload]\n\n//{{{\nconfig.macros.upload = {\n accessKey: "U",\n formName: "UploadPlugin",\n contentType: "text/html;charset=UTF-8",\n defaultStoreScript: "store.php"\n};\n\n// only this two configs need to be translated\nconfig.macros.upload.messages = {\n aboutToUpload: "About to upload TiddlyWiki to %0",\n errorDownloading: "Error downloading",\n errorUploadingContent: "Error uploading content",\n fileNotFound: "file to upload not found",\n fileNotUploaded: "File %0 NOT uploaded",\n mainFileUploaded: "Main TiddlyWiki file uploaded to %0",\n urlParamMissing: "url param missing",\n rssFileNotUploaded: "RssFile %0 NOT uploaded",\n rssFileUploaded: "Rss File uploaded to %0"\n};\n\nconfig.macros.upload.label = {\n promptOption: "Save and Upload this TiddlyWiki with UploadOptions",\n promptParamMacro: "Save and Upload this TiddlyWiki in %0",\n saveLabel: "save to web", \n saveToDisk: "save to disk",\n uploadLabel: "upload" \n};\n\nconfig.macros.upload.handler = function(place,macroName,params){\n // parameters initialization\n var storeUrl = params[0];\n var toFilename = params[1];\n var backupDir = params[2];\n var uploadDir = params[3];\n var username = params[4];\n var password; // for security reason no password as macro parameter\n var label;\n if (document.location.toString().substr(0,4) == "http")\n label = this.label.saveLabel;\n else\n label = this.label.uploadLabel;\n var prompt;\n if (storeUrl) {\n prompt = this.label.promptParamMacro.toString().format([this.dirname(storeUrl)]);\n }\n else {\n prompt = this.label.promptOption;\n }\n createTiddlyButton(place, label, prompt, \n function () {\n config.macros.upload.upload(storeUrl, toFilename, uploadDir, backupDir, username, password); \n return false;}, \n null, null, this.accessKey);\n};\nconfig.macros.upload.UploadLog = function() {\n return new config.lib.Log('UploadLog', " !storeUrl | !uploadDir | !toFilename | !backupdir | !origin |" );\n};\nconfig.macros.upload.UploadLog.prototype = config.lib.Log.prototype;\nconfig.macros.upload.UploadLog.prototype.startUpload = function(storeUrl, toFilename, uploadDir, backupDir) {\n var line = " [[" + config.lib.file.basename(storeUrl) + "|" + storeUrl + "]] | ";\n line += uploadDir + " | " + toFilename + " | " + backupDir + " |";\n this.newLine(line);\n};\nconfig.macros.upload.UploadLog.prototype.endUpload = function() {\n this.addToLine(" Ok |");\n};\nconfig.macros.upload.basename = config.lib.file.basename;\nconfig.macros.upload.dirname = config.lib.file.dirname;\nconfig.macros.upload.upload = function(storeUrl, toFilename, uploadDir, backupDir, username, password)\n{\n // parameters initialization\n storeUrl = (storeUrl ? storeUrl : config.options.txtUploadStoreUrl);\n toFilename = (toFilename ? toFilename : config.options.txtUploadFilename);\n if (toFilename === '') {\n toFilename = config.lib.file.basename(document.location.toString());\n }\n backupDir = (backupDir ? backupDir : config.options.txtUploadBackupDir);\n uploadDir = (uploadDir ? uploadDir : config.options.txtUploadDir);\n username = (username ? username : config.options.txtUploadUserName);\n password = config.options.pasUploadPassword; // for security reason no password as macro parameter\n\n clearMessage();\n // only for forcing the message to display\n if (version.major < 2)\n store.notifyAll();\n if (!storeUrl) {\n alert(config.macros.upload.messages.urlParamMissing);\n return;\n }\n \n var log = new this.UploadLog();\n log.startUpload(storeUrl, toFilename, uploadDir, backupDir);\n if (document.location.toString().substr(0,5) == "file:") {\n saveChanges();\n }\n displayMessage(config.macros.upload.messages.aboutToUpload.format([this.dirname(storeUrl)]), this.dirname(storeUrl));\n this.uploadChanges(storeUrl, toFilename, uploadDir, backupDir, username, password);\n if(config.options.chkGenerateAnRssFeed) {\n //var rssContent = convertUnicodeToUTF8(generateRss());\n var rssContent = generateRss();\n var rssPath = toFilename.substr(0,toFilename.lastIndexOf(".")) + ".xml";\n this.uploadContent(rssContent, storeUrl, rssPath, uploadDir, '', username, password, \n function (responseText) {\n if (responseText.substring(0,1) != '0') {\n displayMessage(config.macros.upload.messages.rssFileNotUploaded.format([rssPath]));\n }\n else {\n if (uploadDir) {\n rssPath = uploadDir + "/" + config.macros.upload.basename(rssPath);\n } else {\n rssPath = config.macros.upload.basename(rssPath);\n }\n displayMessage(config.macros.upload.messages.rssFileUploaded.format(\n [config.macros.upload.dirname(storeUrl)+"/"+rssPath]), config.macros.upload.dirname(storeUrl)+"/"+rssPath);\n }\n // for debugging store.php uncomment last line\n //DEBUG alert(responseText);\n });\n }\n return;\n};\n\nconfig.macros.upload.uploadChanges = function(storeUrl, toFilename, uploadDir, backupDir, \n username, password) {\n var original;\n if (document.location.toString().substr(0,4) == "http") {\n original = this.download(storeUrl, toFilename, uploadDir, backupDir, username, password);\n return;\n }\n else {\n // standard way : Local file\n \n original = loadFile(getLocalPath(document.location.toString()));\n if(window.Components) {\n // it's a mozilla browser\n try {\n netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");\n var converter = Components.classes["@mozilla.org/intl/scriptableunicodeconverter"]\n .createInstance(Components.interfaces.nsIScriptableUnicodeConverter);\n converter.charset = "UTF-8";\n original = converter.ConvertToUnicode(original);\n }\n catch(e) {\n }\n }\n }\n //DEBUG alert(original);\n this.uploadChangesFrom(original, storeUrl, toFilename, uploadDir, backupDir, \n username, password);\n};\n\nconfig.macros.upload.uploadChangesFrom = function(original, storeUrl, toFilename, uploadDir, backupDir, \n username, password) {\n var startSaveArea = '<div id="' + 'storeArea">'; // Split up into two so that indexOf() of this source doesn't find it\n var endSaveArea = '</d' + 'iv>';\n // Locate the storeArea div's\n var posOpeningDiv = original.indexOf(startSaveArea);\n var posClosingDiv = original.lastIndexOf(endSaveArea);\n if((posOpeningDiv == -1) || (posClosingDiv == -1))\n {\n alert(config.messages.invalidFileError.format([document.location.toString()]));\n return;\n }\n var revised = original.substr(0,posOpeningDiv + startSaveArea.length) + \n allTiddlersAsHtml() + "\sn\st\st" +\n original.substr(posClosingDiv);\n var newSiteTitle;\n if(version.major < 2){\n newSiteTitle = (getElementText("siteTitle") + " - " + getElementText("siteSubtitle")).htmlEncode();\n } else {\n newSiteTitle = (wikifyPlain ("SiteTitle") + " - " + wikifyPlain ("SiteSubtitle")).htmlEncode();\n }\n revised = revised.replace(new RegExp("<title>[^<]*</title>", "im"),"<title>"+ newSiteTitle +"</title>");\n var response = this.uploadContent(revised, storeUrl, toFilename, uploadDir, backupDir, \n username, password, function (responseText) {\n if (responseText.substring(0,1) != '0') {\n alert(responseText);\n displayMessage(config.macros.upload.messages.fileNotUploaded.format([getLocalPath(document.location.toString())]));\n }\n else {\n if (uploadDir !== '') {\n toFilename = uploadDir + "/" + config.macros.upload.basename(toFilename);\n } else {\n toFilename = config.macros.upload.basename(toFilename);\n }\n displayMessage(config.macros.upload.messages.mainFileUploaded.format(\n [config.macros.upload.dirname(storeUrl)+"/"+toFilename]), config.macros.upload.dirname(storeUrl)+"/"+toFilename);\n var log = new config.macros.upload.UploadLog();\n log.endUpload();\n store.setDirty(false);\n }\n // for debugging store.php uncomment last line\n //DEBUG alert(responseText);\n }\n );\n};\n\nconfig.macros.upload.uploadContent = function(content, storeUrl, toFilename, uploadDir, backupDir, \n username, password, callbackFn) {\n var boundary = "---------------------------"+"AaB03x"; \n var request;\n try {\n request = new XMLHttpRequest();\n } \n catch (e) { \n request = new ActiveXObject("Msxml2.XMLHTTP"); \n }\n if (window.netscape){\n try {\n if (document.location.toString().substr(0,4) != "http") {\n netscape.security.PrivilegeManager.enablePrivilege('UniversalBrowserRead');}\n }\n catch (e) { }\n } \n //DEBUG alert("user["+config.options.txtUploadUserName+"] password[" + config.options.pasUploadPassword + "]");\n // compose headers data\n var sheader = "\sr\sn";\n sheader += "--" + boundary + "\sr\snContent-disposition: form-data;name=\s"";\n sheader += config.macros.upload.formName +"\s"\sr\sn\sr\sn";\n sheader += "backupDir="+backupDir\n +";user=" + username \n +";password=" + password\n +";uploaddir=" + uploadDir\n + ";;\sr\sn"; \n sheader += "\sr\sn" + "--" + boundary + "\sr\sn";\n sheader += "Content-disposition: form-data;name=\s"userfile\s";filename=\s""+toFilename+"\s"\sr\sn";\n sheader += "Content-Type: " + config.macros.upload.contentType + "\sr\sn";\n sheader += "Content-Length: " + content.length + "\sr\sn\sr\sn";\n // compose trailer data\n var strailer = new String();\n strailer = "\sr\sn--" + boundary + "--\sr\sn";\n var data;\n data = sheader + content + strailer;\n //request.open("POST", storeUrl, true, username, password);\n request.open("POST", storeUrl, true);\n request.onreadystatechange = function () {\n if (request.readyState == 4) {\n if (request.status == 200)\n callbackFn(request.responseText);\n else\n alert(config.macros.upload.messages.errorUploadingContent);\n }\n };\n request.setRequestHeader("Content-Length",data.length);\n request.setRequestHeader("Content-Type","multipart/form-data; boundary="+boundary);\n request.send(data); \n};\n\n\nconfig.macros.upload.download = function(uploadUrl, uploadToFilename, uploadDir, uploadBackupDir, \n username, password) {\n var request;\n try {\n request = new XMLHttpRequest();\n } \n catch (e) { \n request = new ActiveXObject("Msxml2.XMLHTTP"); \n }\n try {\n if (uploadUrl.substr(0,4) == "http") {\n netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");\n }\n else {\n netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");\n }\n } catch (e) { }\n //request.open("GET", document.location.toString(), true, username, password);\n request.open("GET", document.location.toString(), true);\n request.onreadystatechange = function () {\n if (request.readyState == 4) {\n if(request.status == 200) {\n config.macros.upload.uploadChangesFrom(request.responseText, uploadUrl, \n uploadToFilename, uploadDir, uploadBackupDir, username, password);\n }\n else\n alert(config.macros.upload.messages.errorDownloading.format(\n [document.location.toString()]));\n }\n };\n request.send(null);\n};\n\n//}}}\n////===\n\n////+++!![Initializations]\n\n//{{{\nconfig.lib.options.init('txtUploadStoreUrl','store.php');\nconfig.lib.options.init('txtUploadFilename','');\nconfig.lib.options.init('txtUploadDir','');\nconfig.lib.options.init('txtUploadBackupDir','');\nconfig.lib.options.init('txtUploadUserName',config.options.txtUserName);\nconfig.lib.options.init('pasUploadPassword','');\nconfig.shadowTiddlers.UploadPluginDoc = "[[Full Documentation|http://tiddlywiki.bidix.info/l#UploadPluginDoc ]]\sn"; \n\n\n//}}}\n////===\n\n////+++!![Core Hijacking]\n\n//{{{\nconfig.macros.saveChanges.label_orig_UploadPlugin = config.macros.saveChanges.label;\nconfig.macros.saveChanges.label = config.macros.upload.label.saveToDisk;\n//}}}\n////===
/***\n|''Name:''|UploadPlugin|\n|''Type:''|Plugin|\n|''Version:''|3.3.1 (30/03/2006)|\n|''Source:''|[[TiddlyWiki.BidiX.info/#UploadPlugin|http://tiddlywiki.BidiX.info/#UploadPlugin]]|\n|''Documentation:''|[[TiddlyWiki.BidiX.info/#UploadPluginDoc|http://tiddlywiki.BidiX.info/#UploadPluginDoc]]|\n|''Author:''|BidiX[at]BidiX.info |\n|''Required:''| TW 2.0.6 or better, PHP 4.4 (perhaps less but not working on 4.1.2) |\n\n!Description\nUploadPlugin, with [[store.php]], provides @@upload@@ and @@save to web@@ functions. See HowToUpload ([[HowToUpload|http://TiddlyWiki.bidix.info/#HowToUpload]]).\nUploadPlugin uses Username and Password from UploadOptions stored in cookies to authenticate itself to [[store.php]].\nFrench translation available as a separate tiddler UploadPluginMsgFR\n\n!!UploadPlugin\n*If the TiddlyWiki is viewed from @@local disk@@ :\n**{{{<<saveChanges>>}}} \n***display as ''save to disk''\n***work as usual\n**{{{<<upload>>}}}\n***display as ''upload''\n***after saving to disk, upload in the storeUrl directory.\n*If the TiddlyWiki is viewed from @@website@@ and is @@readOnly@@ (in core TiddlyWiki since 2.0.6) :\n**{{{<<saveChanges>>}}} \n***print nothing\n***has been disabled\n**{{{<<upload>>}}}\n***display as '''save to web''\n***save in the uploadDir directory.\n*If GenerateAnRssFeed in AdvancedOptions is set :\n**generate the content of the RSSFeed \n**upload the RssFile in uploadDir directory\n**Caution : use the SiteUrl tiddler to specify the right url of the TiddlyWiki in the generated RssFile\n*DisplayMessage\n*Log upload action in UploadLog\nhint : if UploadLog is the first tiddler in the Timeline Tab, no tiddler has been updated since last upload.\n\n!![[store.php]]\n*UserVariables to set :\n//{{{\n$AUTHENTICATE_USER = true; // true | false\n$USERS = array(\n 'UserName1'=>'Password1', \n 'UserName2'=>'Password2', \n 'UserName3'=>'Password3'); // set usernames and strong passwords\n$DEBUG = false; // true | false\n//}}}\n*method GET\n**display an information page\n*method POST\n**if $~AUTHENTICATE_USER is ''true''\n***presence and value of user and password are checked with $USER and $PASSWORD \n**if toFilename already exists and backDir parameter specified\n***rename toFilename to backupDir/toFilename.AAAAMMDD.HHSS.html\n**copy temporaryUploadedFile to toFilename\n** return status\n\n!Usage : \n{{{\n<<upload>>\n uses UploadOptions saved in cookies :\n txtUploadUserName: username\n pasUploadPassword : password\n txtUploadStoreUrl : store script\n txtUploadDir : relative path for upload directory\n txtUploadFilename : upload filename\n txtUploadBackupDir : relative path for backup directory\n\n<<upload [storeUrl [toFilename [backupDir [uploadDir [username]]]]]>>\n optional positional parameters can be passed to overwrite UploadOptions in this order. \n}}}\n\nInstall the {{{<<upload ... >>}}} macro in SideBarOptions just below {{{<<saveChanges>>}}} macro.\n\n\n!User manual\nSee HowToUpload\n\n!Installation :\n*Install the UploadPlugin as usual\n*Upload the [[store.php]] file on your php aware webserver in your TiddlyWiki directory\n*Protect your server against malicious upload. Two approaches :\n**set $~AUTHENTICATE_USER to true in the [[store.php]] script\n***configure $USER and $PASSWORD in the [[store.php]] script on your webserver\n***set UploadOptions in conformity with [[store.php]]\n**Use server protection :\n***for Apache web server ([[for detail see Apache documentation|http://httpd.apache.org/docs/1.3/howto/htaccess.html]]) : \n****configure and upload the [[.htaccess]] [[.passwd]]\n***for other web servers see the appropriate documentation\n*Configure an upload button, for example in the SideBarOptions\n!Suppported Browser\n*Firefox : tested Ok\n*Internet Explorer : tested Ok\n*Safari : reported ok on OS X\n*Others : Not tested, please report status.\n\n!Revision history\n*V 3.3.1 (30/03/2006)\n**bug in backup folder when uploading rssfile fixed\n*V 3.3.0 (12/03/2006)\n**Code refactoring\n**suppress saveChanges hijacking\n*V3.2.2 (25/02/2006)\n**Use PasswordTweak 1.0.1\n**uploaddir is a relative path\n**backupdir is a relative path\n+++[previous revisions]\n*V3.2.1 (13/02/2006)\n**name and password added to open.request (Thanks to TedPavlic)\n*V3.2.0 (14/02/2006)\n**Use PassworDTweak (http://tiddlyWiki.bidix.info/#PasswordTweak) for password\n*V3.1.0 (12/02/2006)\n**UploadOptions in Cookies\n**Username and password from UploadOptions pass to store.php script for authentification check\n*V3.0.3 (03/02/2006)\n**Firefox 1.5.0.1 crashes due to global var fixed\n*V3.0.2 (25-Jan-2006)\n**HTTPS compatible\n*V3.0.1 (18-Jan-2006)\n**UTF8toUnicode conversion problem in Firefox\n*V3.0.0 (15-Jan-2006)\n**Asynchronous upload\n**Synchronous upload before unload of the page\n**All strings extracted in macro config\n**Compatibility checked with TW 2.0.2 & TW 1.2.39 for both FF 1.5 and IE 6\n*V2.0.2 (8-Jan-2006)\n**conversion of SiteTitle and SiteSubtitle in web page Title\n*V2.0.1 (8-Jan-2006)\n**Compatibilty with TiddlyWiki 2.0.1\n*V2.0.0 (3-Jan-2006)\n**Save to web\n**Compatibilty with TiddlyWiki 1.2.39 and TiddlyWiki 2.0.0 Beta 6\n*v1.1.0 (27-Dec-2005)\n**Upload RSS File\n*v1.0.3 (26-Dec-2005)\n**UploadLog tiddler\n*v1.0.2 (24-Dec-2005)\n**Optional parameter toFilename\n**Optional parameter backupDir\n*v1.0.1 (23-Dec-2005)\n**reformatting code\n* v1.0.0 (17-Dec-2005)\n** first public working version\n===\n\n
@@color(orange):''I\n\nHoy es junio\nes gris y húmeda vigilia\nse han corrido las nubes\nhasta el oscuro tinglado de tus ojos\ncoronándolos\ncon un frío afelpado y quieto.\n\nII\n\nHoy la ciudad se abre\na mi paso incrédulo\ntemerosa o reverente\nrespetuosa o precavida\ny en su bocanada de ausencia\notoñalmente\nme diluyo.\n\nIII\n\nHoy es tibieza y ocre\ncontrapuestos a soledades pálidas\na pasajes sombríos y encerrados\ndonde los pasos que resuenan\nno se acercan\ny quedan\ninsatisfechas\nlas esperas.\n\nIV\n\nHumo en los bordes de las calles:\npequeñas y múltiples columnas\nde vano empecinamiento\nporque el caos no puede encajonarse\n(todo lo que se nos escapa\nlo incomprensible\nlo inmanejable\nlo encomendamos\na los favores de la Hoguera).\n\nV\n\nClimas inconclusos\ngrises y vientos en camino\nllamas que murieron\nespectativa\nadiós yermo\nsilencio de inminencias\nmomentos postreros:\n\notoño\n\nintermedio.\n\nVI\n\nComo un suave polvillo\nla nostalgia renueva\naño a año su cliché.\n\nEs válido:\nel otoño nos da ciertos permisos.''@@
<!--{{{-->\n<div class='toolbar' macro='toolbar collapseTiddler collapseOthers closeTiddler closeOthers +editTiddler permalink references jump'></div>\n<span class='title' macro='tiddler TidIDECommand'></span><span class='subtitle' macro='tiddler ShowTiddlerDates'></span>\n<div class='tagging' macro='tagging'></div>\n<div class='tagged' macro='tags'></div>\n<div class='viewer' macro='view text wikified'></div>\n<div class='tagClear'></div>\n<span class="tearoff" macro='moveablePanel'></span>\n<!--}}}-->
¿Cómo se asocia una frase\n a su posible melodía?\n ¿Cómo decir "hay música en tus ojos"\n y lograr el arpegio profundo y azabache\n de tu mirada posándose en mi intento?\n ¿Cómo describir la turbadora caricia\n que reciben mis tímpanos\n cuando tu presencia agita el aire circundante?\n\n El siseo imperceptible de la hierba\n que en compases tácitos se inclina\n se yergue, se menea;\n el constante zumbar de las abejas\n que en un bajo continuo oscila y gira\n acompañando el tremolar de los zorzales\n ¿con qué palabras los plasmo en tus oídos?\n\n O el desgranar las gotas de nostalgia\n de un ejercicio de piano, paso a paso,\n el silbido nocturno\n que en la bóveda oscura y resonante\n se prolonga y se repite;\n o la tormenta sinfónica\n plena de timbales,\n de furiosos bronces y arcos apasionados\n ¿cómo los describo?\n\n ¡Ay, música que en mis manos, esquiva, te arrebatas!\n Ser lo que sos:\n pureza lineal y cimbreante,\n sencilla y elaborada,\n quisiera\n una vez que, consumida mi materia,\n en el todo de la nada me disuelva.
Mirás el fondo de tus ojos\n ¿buscando qué?\n un eterno caminar entre cortinas blancas\n en vuelo circular\n a un sueño de sombras y ecos apagados.\n\n Querés ver más allá\n ver el dragón desesperado\n la flor perfecta\n la sencillez del huevo\n\n querés ver la diadema\n el carozo de tu alma\n atrapado en la pulposa carne de la sabiduría\n\n y no encontrás temblores, silencio o armonía\n no encontrás sangre o paz\n amor ni desdicha\n no aparece la ira\n no la felicidad\n no el dolor\n no la corona de besos\n\n No aparecen las preguntas\n las respuestas,\n no la inocencia ni la culpa...\n\n sólo un oscuro y espeso remolino\n que te arrastra al vórtice de la disolución.\n
@@font-size:8pt;text-align:left;white-space:nowrap;<html><a href="javascript:;"\n onclick="story.refreshTiddler('Welcome',null,true);" title="get another quote"\n style="color:inherit !important; background:inherit !important;"><<QOTD Greetings>>, %u%...</a></html><script>\n place.lastChild.lastChild.innerHTML=place.lastChild.lastChild.innerHTML.replace(/%u%/,config.options.txtUserName)\n</script>+++^18em^[clock]...<<moveablePanel>>Clock\n----\n <html><embed src='clock.swf' style='margin:0;padding:0;height:90%;width:100%;'></embed></html>\n===<script>\n place.lastChild.previousSibling.innerHTML=(new Date()).formatString("it is DDD, MMM DDth, YYYY");\n</script>@@\n----\n@@font-size:12pt;font-family:Trebuchet MS;<html><a href="javascript:;"\n onclick="story.refreshTiddler('Welcome',null,true);" title="get another quote"\n style="display:block;color:inherit !important; background:inherit !important;"><<QOTD Quotations>></a></html>@@\n{{center{<<tiddler TiddlyTools>>}}}<<tiddler HideTiddlerTitle>><<tiddler HideTiddlerBackground>>\n
/* margins, padding, borders, position, z-index, etc... */\n[[StyleSheetLayout]] /* TW shadow */\n[[StyleSheetColors]] /* TW shadow */\n[[LayoutAdjustments]]\n[[FontAdjustments]]\n[[Gray]]\n\n/* see through tiddlers with topline*/\n.viewer { background-image:none; background-color:transparent; border-top: 1px dotted #999; padding:1em; }\n\n/* background */\nbody {\nbackground-color: #fafafa !important;\nbackground-image: url('els/buffalo.jpg') !important;\nbackground-attachment: fixed !important;\nbackground-position: center !important;\nbackground-repeat: no-repeat !important;\nbackground-size: 100% !important; /* CSS3 not yet supported */\n}\n#titleLine, #sidebar {\nbackground-color: transparent !important;\nbackground-image: none !important;\nborder-color:transparent !important;\nborder: 0px solid #014 !important;\n}\n#siteTitle { color:#993; }\n#siteSubtitle { color:#aa0; }\n#titleLine a { color: #666; }\n\n.floatingPanel, #messageArea, .attachPanel, #importPanel, #exportPanel { background: #eee !important;}\n\n*[class="TOCList"] { background-color: transparent; color:#000; border-color:transparent !important;}\n
/* margins, padding, borders, position, z-index, etc... */\n[[StyleSheetLayout]] /* TW shadow */\n[[StyleSheetColors]] /* TW shadow */\n[[LayoutAdjustments]]\n[[FontAdjustments]]\n[[Gray]]\n\nbody { background-image: url('[[WoodshopBackgroundMedium]]'); background-color:#db7; }\n.viewer { background-image: url('[[WoodshopBackgroundLight]]'); background-color:#edb; border: 2px solid #999; -moz-border-radius:1em; padding:1em; }\n#titleLine { background-image: url('[[WoodshopBackgroundDark]]'); background-color:#611; border-bottom:0px; }\n#siteTitle { color:#cc7; }\n#siteSubtitle { color:#ee9; }\n#titleLine a { color: #ca0; }\n\n.floatingPanel, #messageArea, .attachPanel, #importPanel, #exportPanel { background: #edb; background-image: url('[[WoodshopBackgroundLight]]') !important;}\n#sidebarOptions .sliderPanel { background-image: url('[[WoodshopBackgroundLight]]') }\n\n*[class="TOCList"] { background-color: transparent; color:#000; border-color:transparent !important; }\n\n
| source file|{{{...els\swood_dark.jpg}}}|\n| attached on|20 May 2006 by ELSDesignStudios|\n| embedded data|//none//|\n| local link|//none//|\n| remote link|/%REMOTE_LINK%/[[els/wood_dark.jpg|els/wood_dark.jpg]]|\nimage\n<<<\nusage: {{{[img[tooltip|WoodshopBackgroundDark]] or [img[tooltip|WoodshopBackgroundDark][link]]}}}\n[img[tooltip|WoodshopBackgroundDark]]\n<<<\n
| source file|{{{...els\swood_light.jpg}}}|\n| attached on|20 May 2006 by ELSDesignStudios|\n| embedded data|//none//|\n| local link|//none//|\n| remote link|/%REMOTE_LINK%/[[els/wood_light.jpg|els/wood_light.jpg]]|\nimage\n<<<\nusage: {{{[img[tooltip|WoodshopBackgroundLight]] or [img[tooltip|WoodshopBackgroundLight][link]]}}}\n[img[tooltip|WoodshopBackgroundLight]]\n<<<\n
| source file|{{{...els\swood.jpg}}}|\n| attached on|20 May 2006 by ELSDesignStudios|\n| embedded data|//none//|\n| local link|//none//|\n| remote link|/%REMOTE_LINK%/[[els/wood.jpg|els/wood.jpg]]|\nimage\n<<<\nusage: {{{[img[tooltip|WoodshopBackgroundMedium]] or [img[tooltip|WoodshopBackgroundMedium][link]]}}}\n[img[tooltip|WoodshopBackgroundMedium]]\n<<<\n
// // no animation\n//{{{\nconfig.options.chkAnimate=false;\n//}}}\n// // date plugin calendar colors\n//{{{\nconfig.macros.date.holidays=[ "01/01", "07/04", "07/24", "11/24" ]; // NewYearsDay, IndependenceDay(US), Eric's Birthday (hooray!), Thanksgiving(US)\nconfig.macros.date.weekend=[ 1,0,0,0,0,0,1 ]; // day index values: dom=0, lun=1, mar=2, mie=3, jue=4, vie=5, sab=6\nconfig.macros.date.format="YYYY.0MM.0DD"; // default date display format\nconfig.macros.date.linkformat="YYYY.0MM.0DD"; // 'dated tiddler' link format\nconfig.macros.date.weekendbg="#c0c0c0";\nconfig.macros.date.holidaybg="#ffaace";\nconfig.macros.date.modifiedsbg="#bbeeff";\nconfig.macros.date.linkedbg="#babb1e";\nconfig.macros.date.remindersbg="#c0ffee";\n//}}}\n
++++(expandir)^width^*[Texto=T|Expande el texto]>...\n[[Acá va el contenido|expand]]\nvarias líneas\npara ver\n===