Social and Environmental Aspects of Information Technology \n!General goals\nIn this subject, students study the ''environmental and social effects and impact of information technology'', its ''history'' and the ''legislation that affects it''. All the while, they should not overlook ''ethical requirements'' and ''professional ethics''. The generic character of the subject matter and the practical impossibility of addressing the field in its entirety also mean that students must be able to make critical readings of the diverse range of general texts covered in the subject.\n!Specific goals\n!!Knowledges\n#The social and environmental impact of science and technology with particular reference to computing and problems of sustainable development.\n#Legal issues arising from the use of computing, the legislation in force and its impact: LPDP, LSSIce, software copyright protection, etc.\n#Ethical issues and codes of practice in the computing field, the impact of computing on the environment, and the issue of sustainable development in today"s world.\n#An overall vision of the history of computing within the context of the history of science and technology, specific aspects of hardware and software and the people and companies that played a key role in the development of the computing industry.\n#Ability to critically read texts on computing, its impact and history.\n!!Abilities\n# Ability to reflect on the social and environmental impact of computing and one"s future career as a computer specialist.\n# Knowing how to critically read articles and books on computing, its history and social and environmental impact.\n# Knowing how to write essays on computing and its social impact.\n# Knowing how to make public presentations on the historic, social and environmental aspects of computing.\n!!Competences\n# Reflection and the ability to study and analyze problems.\n# Critical spirit.\n# Oral and written communication.
Estadístiques:\nASAI 2004-2005 \nAlumnes 90 \narticles Wiki 583 \nVisites menys de 25 52 \n de 25 a 50 88 \n de 50 a 75 131 \n de 75 a 100 84 \n de 100 a 500 205 \n de 500 a 1500 17 \n de 1500 a 5000 5 16 treballs amb més de 1000 visites\n 8701 1 les altres \ntamany pagines \n mensy de 512 bytes 102 \n menys de 1024 bytes 99 \n menys de 4 Kbytes 172 \n menys de 7 Kbytes 75 \n menys de 20 Kbytes 100 \n menys de 40 kbytes 22 \n de 40 Kbytes a 80 K bytes 11 \n de 80 K bytes a 170 k Bytes 3 \n \n \npagines a ba BD 2035 pagines \narticles 583 \nvisites 105653 13.71 promig\nedicions pàgina 7707 3.79 promig\n---------------------------\n\ncoses a millorar\n* falta de control de la activitat del alumne. No integrqada, limitada a les edicions del seu treball. No motiva el treball en altres espais ni la col.laboració entre grups. No mesura l'estudi. \n* falta mode grups\n* no existeix entorn disseny instruccional.\n* obert\n* no modificable --- mediawiki software ofuscado.\n\n\n\n
config.options.chkHttpReadOnly = false;\n
[[Reflexión previa a la innovacion docente (especialmente en TIC)]]\n[[ASAI]]\n[[Las 5 reglas]]\n\n#[[ASAI 2004-2005 QT : The MediaWiki experience]]\n#[[ASAI 2004-2005 QP: Moodle not so good at wiki]] \n#[[ASAI 2005-2006: Improving Moodle's wiki : DFWiki]]\n#[[ASAI -2006-2007 QT: Upgrading Moodle Wiki: nWiki]] \n\neines adicionals : copyscape
Wiki page\n@misc{ wiki:xxx,\nauthor = "Martin Dougiamas",\ntitle = "Pedagogy -- Moodledocs",\nyear = "2006",\nurl = "",\nnote = "[Online; accessed 2-December-2006]"\n}\n
@misc{ wiki:xxx,\n author = "Wikipedia",\n title = "BibTeX -- Wikipedia{,} The Free Encyclopedia",\n year = "2006",\n url = "",\n note = "[Online; accessed 2-December-2006]"\n }
!IEEE Education Society\n!IEEE Transactions on Education\n\n!CALL FOR PAPERS\n!!Special Issue: Open-Source Software\n!!Submission Deadline: 15 December 2006\n\n The Transactions seeks original manuscripts for a Special Issue on “Open-Source Software for Engineering Education: Pedagogical Strategies Beyond Tools” scheduled to appear in the November 2007 issue.\n\n Free- and Open-Source Software (FOSS) has received growing attention in recent years from various perspectives. The thriving numbers behind open-source software (OSS) adoption and contribution have captured the attention of engineering education researchers that, in the past years, have been trying to decipher the phenomenon of OSS, its relation to already-conducted research, and its implications for new research opportunities that effect classroom instruction.\n\n The current OSS landscape presents a very interesting picture. Although the idea behind OSS date back to the 1960’s and the Unix era in the 1980’s, the official term of OSS was coined in 1998. Since then, the OSS movement has evolved at a very fast pace. Prime examples of successful OSS projects include operating systems (Linux, FreeBSD, OpenBSD, NetBSD), Web browsers (Firefox, Konqueror), graphical environments (KDE, Gnome), productivity applications (OpenOffice), programming languages and infrastructure (Apache, MySQL), and development tools (GNU toolchain, Eclipse). These widely-accepted OSS endeavors demonstrate that a wide range of OSS applications are available and present a viable and robust alternative to proprietary software solutions.\n\n A great number of applications of free and open software for education are evident. Worldwide initiatives, such as Sakai, and a great number of the so-called Open-Learning Management Systems challenge Engineering Education.\n\n The objective of the special issue is to communicate and disseminate recent engineering education research and success stories that demonstrate the power of open-source software to improve traditional engineering education and e-learning approaches. The purpose of the special issue is to demonstrate state-of-the art approaches of Open-Source Software systems that have had successful application in the classroom and to show how new, advanced, pedagogical models and teaching strategies can expand the learning frontiers in engineering education.\n\n Consequently, manuscripts are sought that touch on these aspects and extend technical and domain knowledge in the classroom. This special issue is intended to initiate a dialog between the pedagogical, human, and technical views of the field that effect the engineering education environment. Novel pedagogical approaches and sound technological FOSS solutions will be expected.\n\n Topics of interest include, but are not limited to, the following classroom experiences.\n\n* Use of Free- and Open-Source Software for Learning Management Systems\n* Use of FOSS for Learning Objects and Learning Design Approaches\n* Pedagogical Strategies for the Deployment of FOSS Tools\n* Case Studies Utilized\n* Open-Learning Management Systems\n* Communities of Learners in Engineering Courses through Seployment of FOSS Tools\n* Collaborative/Constructive Content Authoring for Engineering Courses \n\n Authors wishing to contribute to this special issue MUST refer to the Transactions' Web site at for information relative to the issues that must be addressed in manuscript preparation. Note that submitted manuscripts MUST contain a balance of technical content and pedagogical content to be considered and MUST include meaningful, statistically-sound, student assessment/evaluation data that provides information relative to the strengths and weaknesses of the curriculum content in satisfying the pedagogical issues being addressed. Note that the absence of meaningful, statistically-sound supporting data will be grounds for publication rejection.\n\n Manuscripts must be submitted electronically to the Transactions’ Manuscript Central web site at no later than 15 December 2006, with “Special Issue” being selected as “Manuscript Type” in the corresponding menu.\n\n For further information contact the Special Issue Editors for this issue:\n\n Miltiadis Lytras\n University of Patras\n Patras, Greece\n\n\n Walt Scacchi\n University of California, Irvine\n Irvine, California\n \n\n Special Issue Schedule:\n\n* Manuscript Submission Deadline: 15 December 2006\n* Notification of Review Evaluation: 16 March 2007\n* Author Revision Due: 16 April 2007\n* Notification of Acceptance if Major Revision Required: 1 June 2007\n* Accepted Manuscripts Due for Editorial Review: 30 June 2007\n* Manuscript Packet Information Sent to Author: 16 July 2007\n* Manuscript Packet Due from Author to Editor: 17 August 2007\n * Tentative Publication Date: November 2007 \n
Esta idea explora más profundamente las motivaciones de los individuos en una discusión. Un comportamiento separado es cuando alguien intenta permanecer 'objetivo', se remite a lo hechos y tiende a defender sus propias ideas usando la lógica buscando agujeros en los razonamientos de sus oponentes. El comportamiento conectado es una aproximación más empática, que intenta escuchar y hacer preguntas en un esfuerzo para entender el punto de vista del interlocutor. El comportamiento constructivo es cuando una persona es sensible a ambas aproximaciones y es capaz de escoger una entre ambas como la apropiada para cada situación particular.\n\nEn general, una dosis saludable de comportamiento conectado en una comunidad de aprendizaje es un potente estimulante para aprender, no sólo aglutinando a la gente sino también promoviendo una reflexión profunda y un replanteamiento de las propias opiniones y puntos de vista.
/***\nJust some bits and pieces\n***/\n//{{{\nconfig.messages.messageClose.text = "X"; // default is "close"\nconfig.views.wikified.defaultText = ""; // default is "The tiddler '%0' doesn't yet exist. Double-click to create it"\n//}}}
\nEl construccionismo explica que el aprendizaje es particularmente efectivo cuando se construye algo que debe llegar otros. Esto puede ir desde una frase hablada o enviar un mensaje en internet, a artefactos más complejos como una pintura, una casa o un paquete de software.\n\nPor ejemplo, usted puede leer esta página varias veces y aun así haberla olvidado mañana; pero si tuviera que intentar explicar estas ideas a alguien usando sus propias palabras, o crear una presentación que explique estos conceptos, entonces puedo garantizar que usted tendría una mayor comprensión de estos conceptos, más integrada en sus propias ideas. Por esto la gente toma apuntes durante las lecciones, aunque nunca vayan a leerlos de nuevo.
Este punto de vista mantiene que la gente construye activamente nuevos conocimientos a medida que interactúa con su entorno.\n\nTodo lo que usted lee, ve, oye, siente y toca se contrasta con su conocimiento anterior y si encaja dentro del mundo que hay en su mente, puede formar nuevo conocimiento que se llevará consigo. Este conocimiento se refuerza si puede usarlo con éxito en el entorno que le rodea. No sólo es usted un banco de memoria que absorbe información pasivamente, ni se le puede "transmitir" conocimiento sólo leyendo algo o escuchando a alguien.\n\nEsto no significa que no pueda aprender nada leyendo una página web o asistiendo a una lección. Es obvio que puede hacerlo; sólo indica que se trata más de un proceso de interpretación que de una transferencia de información de un cerebro a otro.
Esto extiende las ideas anteriores a la construcción de cosas de un grupo social para otro, creando colaborativamente una pequeña cultura de artefactos compartidos con significados compartidos. Cuando alguien está inmerso en una cultura como ésta, está aprendiendo continuamente acerca de cómo formar parte de esa cultura en muchos niveles.\n\nUn ejemplo muy simple es un objeto como una copa. El objeto puede ser usado para muchas cosas distintas, pero su forma sugiere un "conocimiento" acerca de cómo almacenar y transportar líquidos. Un ejemplo más complejo es un curso en línea: no sólo las "formas" de las herramientas de software indican ciertas cosas acerca de cómo deberían funcionar los cursos en línea, sino que las actividades y textos producidos dentro del grupo como un todo ayudarán a definir a cada persona su forma de participar en el grupo.\n
[[The road to WikiBook]]\n[[Reflexión previa a la innovacion docente (especialmente en TIC)]]\n[[Punto de partida]]\n\n
DefaultTiddlers\n[[ Sync]]\nSideBarOptions\nMainMenu\n
Traducido de \n@misc{ wiki:xxx,\nauthor = "Martin Dougiamas",\ntitle = "Pedagogy -- Moodledocs",\nyear = "2006",\nurl = "",\nnote = "[Online; accessed 2-December-2006]"\n}\n\nEl construccionismo social como referente\n\nTengo una transparencia con 5 puntos fijos en todas las presentaciones que hago. Son referentes muy útiles sacados investigación que se aplican a la educación en general y que he condensado bajo la etiqueta de "constructionismo social".\n\n 1. '''Cada uno de nosotros es un maestro y un estudiante en potencia.- en un autentico entorno colaborativo somos ambas cosas a la vez'''.\n\n Recordar esto realmente importante.\n\n Creo que esta perspectiva nos debe ayudar como profesores a retener un cierto nivel de humildad, asi como a luchar contra la tendencia (absolutamente natural!) a consolidar el propio bagaje y asumir la reverenciada posición de la “sabia fuente de todo conocimiento”(Amen).\n\n Debemos estar atentos y propiciar que los demás participantes del proceso de aprendizaje compartan sus ideas con nosotros. Debemos poner consciencia en la necesidad de escuchar atentamente y formular las preguntas correctamente para sacar el máximo de nuestros interlocutores.\n\n Personalmente siento que debo recordarme esto constantemente, especialmente cuando la coyuntura de una situación me sitúa en un rol central (!como ahora!)\n 2. '''Aprendemos particularmente bien del acto de crear o expresar algo para una audiencia.'''\n\n Para la mayoría de nosotros esto consiste en "Aprender de la practica" (“learning by doing”), y es un principio obvio, que no obstante vale la pena recordar nos y tomar conciencia.\n\n Es sorprendente la proporción de enseñanza online que todavia se presenta en forma de información estática, proporcionando a los estudiantes pocas oportunidades de practicar las actividades sobre las que están aprendiendo. Veo a menudo profesores online dedicando gran cantidad de tiempo elaborando documentación impecable para sus cursos, que sin duda es una experiencia de aprendizaje estupenda para ellos mismos, pero deniegan a sus estudiantes la misma experiencia de aprendizaje. Incluso los libros de texto suelen aportar más con ejercicios después de cada capitulo o similares.\n\n Lo más importante, este aprendizaje es aun mejor cuando estas publicando en foros, desarrollando proyectos , tareas, etc '''para que lo vean demás'''. En esta situación tus "apuestas" personales son mucho más altas, y tiene lugar un monton de aunto evaluación y reflexion que aumenta el aprendizaje. Seymour Papert (el inventor del lenguaje Logo) describió el proceso de construir algo para que vean otros como una poderosa herramienta de aprendizaje, y realmente este tipo de pensamiento arranca de Platón, Socrates e incluso más atrás en el tiempo.\n\n 3. '''Aprendemos mucho solo con observar la actividad de nuestros iguales'''.\n\n Basicamente de esto va la "cultura de aula" o aprender por osmósis (que no consiste en ponerse una cataplasma de apuntes que química orgánica ''Nota del T ;-)''). Los seres humanos Humans somos muy buenos observando a los demás y aprendiendo que hacer en una situación dada a partir de señales de terceros.\n\n Por ejemplo: si entras en un aula donde todo el m undo esta sentado mirando hacia el frente, escuchando en silencio al profesor y tomando apuntes, seguramente eso es lo que tu vas a hacer, cierto?\n\n Si estás en una clase menos rígida donde la gente formula preguntas todos a la vez, seguramente tu sentirás que puedes hacer lo mismo. Haciendo esto estarás aprendiendo acerca del tema de la clase y acerca del meta-tema sobre como el sucede el aprendizaje a base de escuchar las discusiones de tus compañeros y el tipo de preguntas que formulan. Ello conduce a una inmersión multi-dimensional en el proceso de aprendizaje .\n\n 4. '''Al entender los contextos de los demás, podemos enseñar de un modo más trasformacional (ein??) (constructivismo)'''\n\n Seguramente ya sabes por experiencia, el consejo de un mentor o amigo puede aportar una mejor, más duradera y adecuada experiencia de aprendizaje que con alguien que no te conoce y esta hablando a cien personas más.\n\n Si comprendemos el contexto de la gente con la que estamos hablando podemos adaptar nuestro lenguaje y expresar los conceptos de forma más adecuada a la audiencia. Puedes escoger metáforas que sabes que la audiencia va a identificar. Puedes usar jerga cuando ayuda o evitar hacerlo cuando puede ser un impedimento.\n\n Una vez más esto esta es una idea muy basica - toda guía sobre como hablar en publico habla acerca de la necesidad de conocer a tu audiencia - pero en el online learning necesitamos poner especial conciencia en ello porque a menudo nunca habremos visto a esta gente y no podremos apoyarnos en señales visuales o gestuales.\n\n 5. '''Un entorno de aprendizaje debe ser flexible y adaptable, asi puede responder rápidamentea las necesidades de sus participantes '''.\n\n Combinando los elementos anteriores, si como profesor quieres aprovechar aquello que vas sabiendo de tus estudiantes, planificar oportunidades para compartir ideas, preguntar y expresar sus conocimientos , entonces necesitas un entorno flexible tanto en el espacio como en el tiempo.\n\n Si descubres que debes tirar por la borda tu planificación porque descubres que tus estudiantes saben bastante menos de lo que esperabas al diseñar el curso, deberías de forma sencilla poder reajustar tu planificación y añadir nuevas actividades de soporte (para todo el curso o solo un grupo). Del mismo modo algunas grandes ideas para una simulación o algho parecido pueden aparecer durante un debate, deberias poder añadir estas experfiencias al curso más adelante.\n\n Tus estudiantes pueden estar dispersados en distintas zonas horarias, o viven en la misma zona horaria pero tienen distintos horarios, asi que deberias poder ofrecer actividades asincronas en las que la gente pueda trabajar en grupo sin coincidir en el tiempo.\n\n\nJason Cole de la Open University UK recientemente se refirió a esto como las “5 leyes de Martin(!Jah!) pero realmente son referentes: conceptos guia que encuentro personalmente útiles y a los que me refiero cuando debo tomar una decisión en cualquier situación educacional. En particular los encuentro utiles para construir '''comunidades de estudiantes'''.\n\nSupongo que probablemente encontraras mucho de esto familiar, incluso si usas términos distintos. Si no hay mucha documentación e investigación acerca de construccionismo social, constructivismo que puedes encontrar en [ mis publicaciones más formales].
I was already keeping two blogs one in [[spanish|]] and another in [[catalan|]]. I once considered that I could keep a [[blog in english at|]] but I actually don't like the current [[Moodle||]] blogs engine. \n\nIf you wish to know more about me you may check this [[blogs]], or visit [[my websites]] that I use for [[teaching]] and to distribute the software that my team of developers :dfwikiteam creates. Or just stop by [[my home page|]]
* Los profesores e investigadores somos ''los primeros que debemos aprender'' las nuevas formas de trabajo que acarrean el FOSS, el fenómeno WEB 2.0, y la forma de trabajo en comunidad que conllevan.\n
/***\n|''Name:''|InlineJavascriptPlugin|\n|''Source:''||\n|''Author:''|Eric Shulman - ELS Design Studios|\n|''License:''|[[Creative Commons Attribution-ShareAlike 2.5 License|]]|\n|''~CoreVersion:''|2.0.10|\n\n!!!!!Credits\n<<<\nThis feature was developed by EricShulman from [[ELS Design Studios|http:/]]\n<<<\n!!!!!Code\n***/\n//{{{\nversion.extensions.inlineJavascript= {major: 1, minor: 5, revision: 2, date: new Date(2006,10,16)};\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]+"\sn};_out(this);"\n link.setAttribute("href","javascript:;"); link.setAttribute("title","");"pointer";\n }\n else { // run inline script code\n var code="function _out(place){"+lookaheadMatch[4]+"\sn};_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
/***\n|''Name:''|LegacyStrikeThroughPlugin|\n|''Description:''|Support for legacy (pre 2.1) strike through formatting|\n|''Version:''|1.0.1|\n|''Date:''|Jul 21, 2006|\n|''Source:''||\n|''Author:''|MartinBudden (mjbudden (at) gmail (dot) com)|\n|''License:''|[[BSD open source license]]|\n|''CoreVersion:''|2.1.0|\n|''Browser:''|Firefox 1.0.4+; Firefox 1.5; InternetExplorer 6.0|\n\n***/\n\n//{{{\n\n// Ensure that the LegacyStrikeThrough Plugin is only installed once.\nif(!version.extensions.LegacyStrikeThroughPlugin)\n {\n version.extensions.LegacyStrikeThroughPlugin = true;\n\nconfig.formatters.push(\n{\n name: "legacyStrikeByChar",\n match: "==",\n termRegExp: /(==)/mg,\n element: "strike",\n handler: config.formatterHelpers.createElementAndWikify\n});\n\n} // end of "install only once"\n//}}}\n
[[Ludo (Marc Alier) Home Page|]]\n[[my websites]] and [[blogs]]
El [[Call for papers]] indica claramente estos MUSTS bajo pena de REJECTION... buaaaaahhhh:-(\n----\n<<<\nSo Articles \n* ''MUST'' contain a ''balance of technical content and pedagogical content'' to be considered \n* ''MUST'' include meaningful, statistically-sound, student assessment/evaluation data that provides information relative to the strengths and weaknesses of the curriculum content in satisfying the pedagogical issues being addressed. \n<<<\n[[Relativo a los MUSTS]]\n
<<tag TheRoadToWikiBook>><<tag Tesis>><<tag Pedagogia>><<tag Bibliografia>>\n[[Ludo]] [[blogs]] [[my websites]] [[RSS Feed|]] [[Download|]]\n<script>\nvar _uacct=""; // set up the Urchin Account\nvar _userv=1; // service mode (0=local,1=remote,2=both)\n\n//-- UTM User Settings\nvar _ufsc=1; // set client info flag (1=on|0=off)\nvar _udn="auto"; // (auto|none|domain) set the domain name for cookies\nvar _uhash="on"; // (on|off) unique domain hash for cookies\nvar _utimeout="1800"; // set the inactive session timeout in seconds\nvar _ugifpath="/__utm.gif"; // set the web path to the __utm.gif file\nvar _utsp="|"; // transaction field separator\nvar _uflash=1; // set flash version detect option (1=on|0=off)\nvar _utitle=1; // set the document title detect option (1=on|0=off)\nvar _ulink=0; // enable linker functionality (1=on|0=off)\nvar _uanchor=0; // enable use of anchors for campaign (1=on|0=off)\nvar _utcp="/"; // the cookie path for tracking\nvar _usample=100; // The sampling % of visitors to track (1-100).\n\n//-- UTM Campaign Tracking Settings\nvar _uctm=1; // set campaign tracking module (1=on|0=off)\nvar _ucto="15768000"; // set timeout in seconds (6 month default)\nvar _uccn="utm_campaign"; // name\nvar _ucmd="utm_medium"; // medium (cpc|cpm|link|email|organic)\nvar _ucsr="utm_source"; // source\nvar _uctr="utm_term"; // term/keyword\nvar _ucct="utm_content"; // content\nvar _ucid="utm_id"; // id number\nvar _ucno="utm_nooverride"; // don't override\n\n//-- Auto/Organic Sources and Keywords\nvar _uOsr=new Array();\nvar _uOkw=new Array();\n_uOsr[0]="google"; _uOkw[0]="q";\n_uOsr[1]="yahoo"; _uOkw[1]="p";\n_uOsr[2]="msn"; _uOkw[2]="q";\n_uOsr[3]="aol"; _uOkw[3]="query";\n_uOsr[4]="aol"; _uOkw[4]="encquery";\n_uOsr[5]="lycos"; _uOkw[5]="query";\n_uOsr[6]="ask"; _uOkw[6]="q";\n_uOsr[7]="altavista"; _uOkw[7]="q";\n_uOsr[8]="search"; _uOkw[8]="q";\n_uOsr[9]="netscape"; _uOkw[9]="s";\n_uOsr[10]="cnn"; _uOkw[10]="query";\n_uOsr[11]="looksmart"; _uOkw[11]="qt";\n_uOsr[12]="about"; _uOkw[12]="terms";\n_uOsr[13]="mamma"; _uOkw[13]="query";\n_uOsr[14]="alltheweb"; _uOkw[14]="q";\n_uOsr[15]="gigablast"; _uOkw[15]="q";\n_uOsr[16]="voila"; _uOkw[16]="kw";\n_uOsr[17]="virgilio"; _uOkw[17]="qs";\n_uOsr[18]="live"; _uOkw[18]="q";\n_uOsr[19]="baidu"; _uOkw[19]="wd";\n_uOsr[20]="alice"; _uOkw[20]="qs";\n_uOsr[21]="seznam"; _uOkw[21]="w";\n_uOsr[22]="yandex"; _uOkw[22]="text";\n_uOsr[23]="najdi"; _uOkw[23]="q";\n\n//-- Auto/Organic Keywords to Ignore\nvar _uOno=new Array();\n//_uOno[0]="urchin";\n//_uOno[1]="";\n//_uOno[2]="";\n\n//-- Referral domains to Ignore\nvar _uRno=new Array();\n//_uRno[0]="";\n\n//-- **** Don't modify below this point ***\nvar _uff,_udh,_udt,_ubl=0,_udo="",_uu,_ufns=0,_uns=0,_ur="-",_ufno=0,_ust=0,_ubd=document,_udl=_ubd.location,_udlh="",_uwv="1";\nvar _ugifpath2="";\nif (_udl.hash) _udlh=_udl.href.substring(_udl.href.indexOf('#'));\nif (_udl.protocol=="https:") _ugifpath2="";\nif (!_utcp || _utcp=="") _utcp="/";\nfunction urchinTracker(page) {\n if (_udl.protocol=="file:") return;\n if (_uff && (!page || page=="")) return;\n var a,b,c,xx,v,z,k,x="",s="",f=0;\n var nx=" expires=Sun, 18 Jan 2038 00:00:00 GMT;";\n var dc=_ubd.cookie;\n _udh=_uDomain();\n if (!_uVG()) return;\n _uu=Math.round(Math.random()*2147483647);\n _udt=new Date();\n _ust=Math.round(_udt.getTime()/1000);\n a=dc.indexOf("__utma="+_udh);\n b=dc.indexOf("__utmb="+_udh);\n c=dc.indexOf("__utmc="+_udh);\n if (_udn && _udn!="") { _udo=" domain="+_udn+";"; }\n if (_utimeout && _utimeout!="") {\n x=new Date(_udt.getTime()+(_utimeout*1000));\n x=" expires="+x.toGMTString()+";";\n }\n if (_ulink) {\n if (_uanchor && _udlh && _udlh!="") s=_udlh+"&";\n;\n if(s && s!="" && s.indexOf("__utma=")>=0) {\n if (!(_uIN(a=_uGC(s,"__utma=","&")))) a="-";\n if (!(_uIN(b=_uGC(s,"__utmb=","&")))) b="-";\n if (!(_uIN(c=_uGC(s,"__utmc=","&")))) c="-";\n v=_uGC(s,"__utmv=","&");\n z=_uGC(s,"__utmz=","&");\n k=_uGC(s,"__utmk=","&");\n xx=_uGC(s,"__utmx=","&");\n if ((k*1) != ((_uHash(a+b+c+xx+z+v)*1)+(_udh*1))) {_ubl=1;a="-";b="-";c="-";xx="-";z="-";v="-";}\n if (a!="-" && b!="-" && c!="-") f=1;\n else if(a!="-") f=2;\n }\n }\n if(f==1) {\n _ubd.cookie="__utma="+a+"; path="+_utcp+";"+nx+_udo;\n _ubd.cookie="__utmb="+b+"; path="+_utcp+";"+x+_udo;\n _ubd.cookie="__utmc="+c+"; path="+_utcp+";"+_udo;\n } else if (f==2) {\n a=_uFixA(s,"&",_ust);\n _ubd.cookie="__utma="+a+"; path="+_utcp+";"+nx+_udo;\n _ubd.cookie="__utmb="+_udh+"; path="+_utcp+";"+x+_udo;\n _ubd.cookie="__utmc="+_udh+"; path="+_utcp+";"+_udo;\n _ufns=1;\n } else if (a>=0 && b>=0 && c>=0) {\n _ubd.cookie="__utmb="+_udh+"; path="+_utcp+";"+x+_udo;\n } else {\n if (a>=0) a=_uFixA(_ubd.cookie,";",_ust);\n else a=_udh+"."+_uu+"."+_ust+"."+_ust+"."+_ust+".1";\n _ubd.cookie="__utma="+a+"; path="+_utcp+";"+nx+_udo;\n _ubd.cookie="__utmb="+_udh+"; path="+_utcp+";"+x+_udo;\n _ubd.cookie="__utmc="+_udh+"; path="+_utcp+";"+_udo;\n _ufns=1;\n }\n if (_ulink && xx && xx!="" && xx!="-") {\n xx=_uUES(xx);\n if (xx.indexOf(";")==-1) _ubd.cookie="__utmx="+xx+"; path="+_utcp+";"+nx+_udo;\n }\n if (_ulink && v && v!="" && v!="-") {\n v=_uUES(v);\n if (v.indexOf(";")==-1) _ubd.cookie="__utmv="+v+"; path="+_utcp+";"+nx+_udo;\n }\n _uInfo(page);\n _ufns=0;\n _ufno=0;\n _uff=1;\n}\nfunction _uInfo(page) {\n var p,s="",dm="",;\n if (page && page!="") pg=_uES(page,1);\n _ur=_ubd.referrer;\n if (!_ur || _ur=="") { _ur="-"; }\n else {\n dm=_ubd.domain;\n if(_utcp && _utcp!="/") dm+=_utcp;\n p=_ur.indexOf(dm);\n if ((p>=0) && (p<=8)) { _ur="0"; }\n if (_ur.indexOf("[")==0 && _ur.lastIndexOf("]")==(_ur.length-1)) { _ur="-"; }\n }\n s+="&utmn="+_uu;\n if (_ufsc) s+=_uBInfo();\n if (_uctm) s+=_uCInfo();\n if (_utitle && _ubd.title && _ubd.title!="") s+="&utmdt="+_uES(_ubd.title);\n if (_udl.hostname && _udl.hostname!="") s+="&utmhn="+_uES(_udl.hostname);\n s+="&utmr="+_ur;\n s+="&utmp="+pg;\n if ((_userv==0 || _userv==2) && _uSP()) {\n var i=new Image(1,1);\n i.src=_ugifpath+"?"+"utmwv="+_uwv+s;\n i.onload=function() {_uVoid();}\n }\n if ((_userv==1 || _userv==2) && _uSP()) {\n var i2=new Image(1,1);\n i2.src=_ugifpath2+"?"+"utmwv="+_uwv+s+"&utmac="+_uacct+"&utmcc="+_uGCS();\n i2.onload=function() { _uVoid(); }\n }\n return;\n}\nfunction _uVoid() { return; }\nfunction _uCInfo() {\n if (!_ucto || _ucto=="") { _ucto="15768000"; }\n if (!_uVG()) return;\n var c="",t="-",t2="-",t3="-",o=0,cs=0,cn=0,i=0,z="-",s="";\n if (_uanchor && _udlh && _udlh!="") s=_udlh+"&";\n;\n var x=new Date(_udt.getTime()+(_ucto*1000));\n var dc=_ubd.cookie;\n x=" expires="+x.toGMTString()+";";\n if (_ulink && !_ubl) {\n z=_uUES(_uGC(s,"__utmz=","&"));\n if (z!="-" && z.indexOf(";")==-1) { _ubd.cookie="__utmz="+z+"; path="+_utcp+";"+x+_udo; return ""; }\n }\n z=dc.indexOf("__utmz="+_udh);\n if (z>-1) { z=_uGC(dc,"__utmz="+_udh,";"); }\n else { z="-"; }\n t=_uGC(s,_ucid+"=","&");\n t2=_uGC(s,_ucsr+"=","&");\n t3=_uGC(s,"gclid=","&");\n if ((t!="-" && t!="") || (t2!="-" && t2!="") || (t3!="-" && t3!="")) {\n if (t!="-" && t!="") c+="utmcid="+_uEC(t);\n if (t2!="-" && t2!="") { if (c != "") c+="|"; c+="utmcsr="+_uEC(t2); }\n if (t3!="-" && t3!="") { if (c != "") c+="|"; c+="utmgclid="+_uEC(t3); }\n t=_uGC(s,_uccn+"=","&");\n if (t!="-" && t!="") c+="|utmccn="+_uEC(t);\n else c+="|utmccn=(not+set)";\n t=_uGC(s,_ucmd+"=","&");\n if (t!="-" && t!="") c+="|utmcmd="+_uEC(t);\n else c+="|utmcmd=(not+set)";\n t=_uGC(s,_uctr+"=","&");\n if (t!="-" && t!="") c+="|utmctr="+_uEC(t);\n else { t=_uOrg(1); if (t!="-" && t!="") c+="|utmctr="+_uEC(t); }\n t=_uGC(s,_ucct+"=","&");\n if (t!="-" && t!="") c+="|utmcct="+_uEC(t);\n t=_uGC(s,_ucno+"=","&");\n if (t=="1") o=1;\n if (z!="-" && o==1) return "";\n }\n if (c=="-" || c=="") { c=_uOrg(); if (z!="-" && _ufno==1) return ""; }\n if (c=="-" || c=="") { if (_ufns==1) c=_uRef(); if (z!="-" && _ufno==1) return ""; }\n if (c=="-" || c=="") {\n if (z=="-" && _ufns==1) { c="utmccn=(direct)|utmcsr=(direct)|utmcmd=(none)"; }\n if (c=="-" || c=="") return "";\n }\n if (z!="-") {\n i=z.indexOf(".");\n if (i>-1) i=z.indexOf(".",i+1);\n if (i>-1) i=z.indexOf(".",i+1);\n if (i>-1) i=z.indexOf(".",i+1);\n t=z.substring(i+1,z.length);\n if (t.toLowerCase()==c.toLowerCase()) cs=1;\n t=z.substring(0,i);\n if ((i=t.lastIndexOf(".")) > -1) {\n t=t.substring(i+1,t.length);\n cn=(t*1);\n }\n }\n if (cs==0 || _ufns==1) {\n t=_uGC(dc,"__utma="+_udh,";");\n if ((i=t.lastIndexOf(".")) > 9) {\n _uns=t.substring(i+1,t.length);\n _uns=(_uns*1);\n }\n cn++;\n if (_uns==0) _uns=1;\n _ubd.cookie="__utmz="+_udh+"."+_ust+"."+_uns+"."+cn+"."+c+"; path="+_utcp+"; "+x+_udo;\n }\n if (cs==0 || _ufns==1) return "&utmcn=1";\n else return "&utmcr=1";\n}\nfunction _uRef() {\n if (_ur=="0" || _ur=="" || _ur=="-") return "";\n var i=0,h,k,n;\n if ((i=_ur.indexOf("://"))<0) return "";\n h=_ur.substring(i+3,_ur.length);\n if (h.indexOf("/") > -1) {\n k=h.substring(h.indexOf("/"),h.length);\n if (k.indexOf("?") > -1) k=k.substring(0,k.indexOf("?"));\n h=h.substring(0,h.indexOf("/"));\n }\n h=h.toLowerCase();\n n=h;\n if ((i=n.indexOf(":")) > -1) n=n.substring(0,i);\n for (var ii=0;ii<_uRno.length;ii++) {\n if ((i=n.indexOf(_uRno[ii].toLowerCase())) > -1 && n.length==(i+_uRno[ii].length)) { _ufno=1; break; }\n }\n if (h.indexOf("www.")==0) h=h.substring(4,h.length);\n return "utmccn=(referral)|utmcsr="+_uEC(h)+"|"+"utmcct="+_uEC(k)+"|utmcmd=referral";\n}\nfunction _uOrg(t) {\n if (_ur=="0" || _ur=="" || _ur=="-") return "";\n var i=0,h,k;\n if ((i=_ur.indexOf("://")) < 0) return "";\n h=_ur.substring(i+3,_ur.length);\n if (h.indexOf("/") > -1) {\n h=h.substring(0,h.indexOf("/"));\n }\n for (var ii=0;ii<_uOsr.length;ii++) {\n if (h.toLowerCase().indexOf(_uOsr[ii].toLowerCase()) > -1) {\n if ((i=_ur.indexOf("?"+_uOkw[ii]+"=")) > -1 || (i=_ur.indexOf("&"+_uOkw[ii]+"=")) > -1) {\n k=_ur.substring(i+_uOkw[ii].length+2,_ur.length);\n if ((i=k.indexOf("&")) > -1) k=k.substring(0,i);\n for (var yy=0;yy<_uOno.length;yy++) {\n if (_uOno[yy].toLowerCase()==k.toLowerCase()) { _ufno=1; break; }\n }\n if (t) return _uEC(k);\n else return "utmccn=(organic)|utmcsr="+_uEC(_uOsr[ii])+"|"+"utmctr="+_uEC(k)+"|utmcmd=organic";\n }\n }\n }\n return "";\n}\nfunction _uBInfo() {\n var sr="-",sc="-",ul="-",fl="-",cs="-",je=1;\n var n=navigator;\n if (self.screen) {\n sr=screen.width+"x"+screen.height;\n sc=screen.colorDepth+"-bit";\n } else if ( {\n var j=java.awt.Toolkit.getDefaultToolkit();\n var s=j.getScreenSize();\n sr=s.width+"x"+s.height;\n }\n if (n.language) { ul=n.language.toLowerCase(); }\n else if (n.browserLanguage) { ul=n.browserLanguage.toLowerCase(); }\n je=n.javaEnabled()?1:0;\n if (_uflash) fl=_uFlash();\n if (_ubd.characterSet) cs=_uES(_ubd.characterSet);\n else if (_ubd.charset) cs=_uES(_ubd.charset);\n return "&utmcs="+cs+"&utmsr="+sr+"&utmsc="+sc+"&utmul="+ul+"&utmje="+je+"&utmfl="+fl;\n}\nfunction __utmSetTrans() {\n var e;\n if (_ubd.getElementById) e=_ubd.getElementById("utmtrans");\n else if (_ubd.utmform && _ubd.utmform.utmtrans) e=_ubd.utmform.utmtrans;\n if (!e) return;\n var l=e.value.split("UTM:");\n var i,i2,c;\n if (_userv==0 || _userv==2) i=new Array();\n if (_userv==1 || _userv==2) { i2=new Array(); c=_uGCS(); }\n\n for (var ii=0;ii<l.length;ii++) {\n l[ii]=_uTrim(l[ii]);\n if (l[ii].charAt(0)!='T' && l[ii].charAt(0)!='I') continue;\n var r=Math.round(Math.random()*2147483647);\n if (!_utsp || _utsp=="") _utsp="|";\n var f=l[ii].split(_utsp),s="";\n if (f[0].charAt(0)=='T') {\n s="&utmt=tran"+"&utmn="+r;\n f[1]=_uTrim(f[1]); if(f[1]&&f[1]!="") s+="&utmtid="+_uES(f[1]);\n f[2]=_uTrim(f[2]); if(f[2]&&f[2]!="") s+="&utmtst="+_uES(f[2]);\n f[3]=_uTrim(f[3]); if(f[3]&&f[3]!="") s+="&utmtto="+_uES(f[3]);\n f[4]=_uTrim(f[4]); if(f[4]&&f[4]!="") s+="&utmttx="+_uES(f[4]);\n f[5]=_uTrim(f[5]); if(f[5]&&f[5]!="") s+="&utmtsp="+_uES(f[5]);\n f[6]=_uTrim(f[6]); if(f[6]&&f[6]!="") s+="&utmtci="+_uES(f[6]);\n f[7]=_uTrim(f[7]); if(f[7]&&f[7]!="") s+="&utmtrg="+_uES(f[7]);\n f[8]=_uTrim(f[8]); if(f[8]&&f[8]!="") s+="&utmtco="+_uES(f[8]);\n } else {\n s="&utmt=item"+"&utmn="+r;\n f[1]=_uTrim(f[1]); if(f[1]&&f[1]!="") s+="&utmtid="+_uES(f[1]);\n f[2]=_uTrim(f[2]); if(f[2]&&f[2]!="") s+="&utmipc="+_uES(f[2]);\n f[3]=_uTrim(f[3]); if(f[3]&&f[3]!="") s+="&utmipn="+_uES(f[3]);\n f[4]=_uTrim(f[4]); if(f[4]&&f[4]!="") s+="&utmiva="+_uES(f[4]);\n f[5]=_uTrim(f[5]); if(f[5]&&f[5]!="") s+="&utmipr="+_uES(f[5]);\n f[6]=_uTrim(f[6]); if(f[6]&&f[6]!="") s+="&utmiqt="+_uES(f[6]);\n }\n if ((_userv==0 || _userv==2) && _uSP()) {\n i[ii]=new Image(1,1);\n i[ii].src=_ugifpath+"?"+"utmwv="+_uwv+s;\n i[ii].onload=function() { _uVoid(); }\n }\n if ((_userv==1 || _userv==2) && _uSP()) {\n i2[ii]=new Image(1,1);\n i2[ii].src=_ugifpath2+"?"+"utmwv="+_uwv+s+"&utmac="+_uacct+"&utmcc="+c;\n i2[ii].onload=function() { _uVoid(); }\n }\n }\n return;\n}\nfunction _uFlash() {\n var f="-",n=navigator;\n if (n.plugins && n.plugins.length) {\n for (var ii=0;ii<n.plugins.length;ii++) {\n if (n.plugins[ii].name.indexOf('Shockwave Flash')!=-1) {\n f=n.plugins[ii].description.split('Shockwave Flash ')[1];\n break;\n }\n }\n } else if (window.ActiveXObject) {\n for (var ii=10;ii>=2;ii--) {\n try {\n var fl=eval("new ActiveXObject('ShockwaveFlash.ShockwaveFlash."+ii+"');");\n if (fl) { f=ii + '.0'; break; }\n }\n catch(e) {}\n }\n }\n return f;\n}\nfunction __utmLinker(l,h) {\n if (!_ulink) return;\n var p,k,a="-",b="-",c="-",x="-",z="-",v="-";\n var dc=_ubd.cookie;\n if (!l || l=="") return;\n var iq = l.indexOf("?"); \n var ih = l.indexOf("#"); \n if (dc) {\n a=_uES(_uGC(dc,"__utma="+_udh,";"));\n b=_uES(_uGC(dc,"__utmb="+_udh,";"));\n c=_uES(_uGC(dc,"__utmc="+_udh,";"));\n x=_uES(_uGC(dc,"__utmx="+_udh,";"));\n z=_uES(_uGC(dc,"__utmz="+_udh,";"));\n v=_uES(_uGC(dc,"__utmv="+_udh,";"));\n k=(_uHash(a+b+c+x+z+v)*1)+(_udh*1);\n p="__utma="+a+"&__utmb="+b+"&__utmc="+c+"&__utmx="+x+"&__utmz="+z+"&__utmv="+v+"&__utmk="+k;\n }\n if (p) {\n if (h && ih>-1) return;\n if (h) { _udl.href=l+"#"+p; }\n else {\n if (iq==-1 && ih==-1) _udl.href=l+"?"+p;\n else if (ih==-1) _udl.href=l+"&"+p;\n else if (iq==-1) _udl.href=l.substring(0,ih-1)+"?"+p+l.substring(ih);\n else _udl.href=l.substring(0,ih-1)+"&"+p+l.substring(ih);\n }\n } else { _udl.href=l; }\n}\nfunction __utmLinkPost(f,h) {\n if (!_ulink) return;\n var p,k,a="-",b="-",c="-",x="-",z="-",v="-";\n var dc=_ubd.cookie;\n if (!f || !f.action) return;\n var iq = f.action.indexOf("?"); \n var ih = f.action.indexOf("#"); \n if (dc) {\n a=_uES(_uGC(dc,"__utma="+_udh,";"));\n b=_uES(_uGC(dc,"__utmb="+_udh,";"));\n c=_uES(_uGC(dc,"__utmc="+_udh,";"));\n x=_uES(_uGC(dc,"__utmx="+_udh,";"));\n z=_uES(_uGC(dc,"__utmz="+_udh,";"));\n v=_uES(_uGC(dc,"__utmv="+_udh,";"));\n k=(_uHash(a+b+c+x+z+v)*1)+(_udh*1);\n p="__utma="+a+"&__utmb="+b+"&__utmc="+c+"&__utmx="+x+"&__utmz="+z+"&__utmv="+v+"&__utmk="+k;\n }\n if (p) {\n if (h && ih>-1) return;\n if (h) { f.action+="#"+p; }\n else {\n if (iq==-1 && ih==-1) f.action+="?"+p;\n else if (ih==-1) f.action+="&"+p;\n else if (iq==-1) f.action=f.action.substring(0,ih-1)+"?"+p+f.action.substring(ih);\n else f.action=f.action.substring(0,ih-1)+"&"+p+f.action.substring(ih);\n }\n }\n return;\n}\nfunction __utmSetVar(v) {\n if (!v || v=="") return;\n if (!_udo || _udo == "") {\n _udh=_uDomain();\n if (_udn && _udn!="") { _udo=" domain="+_udn+";"; }\n }\n if (!_uVG()) return;\n var r=Math.round(Math.random() * 2147483647);\n _ubd.cookie="__utmv="+_udh+"."+_uES(v)+"; path="+_utcp+"; expires=Sun, 18 Jan 2038 00:00:00 GMT;"+_udo;\n var s="&utmt=var&utmn="+r;\n if ((_userv==0 || _userv==2) && _uSP()) {\n var i=new Image(1,1);\n i.src=_ugifpath+"?"+"utmwv="+_uwv+s;\n i.onload=function() { _uVoid(); }\n }\n if ((_userv==1 || _userv==2) && _uSP()) {\n var i2=new Image(1,1);\n i2.src=_ugifpath2+"?"+"utmwv="+_uwv+s+"&utmac="+_uacct+"&utmcc="+_uGCS();\n i2.onload=function() { _uVoid(); }\n }\n}\nfunction _uGCS() {\n var t,c="",dc=_ubd.cookie;\n if ((t=_uGC(dc,"__utma="+_udh,";"))!="-") c+=_uES("__utma="+t+";+");\n if ((t=_uGC(dc,"__utmb="+_udh,";"))!="-") c+=_uES("__utmb="+t+";+");\n if ((t=_uGC(dc,"__utmc="+_udh,";"))!="-") c+=_uES("__utmc="+t+";+");\n if ((t=_uGC(dc,"__utmx="+_udh,";"))!="-") c+=_uES("__utmx="+t+";+");\n if ((t=_uGC(dc,"__utmz="+_udh,";"))!="-") c+=_uES("__utmz="+t+";+");\n if ((t=_uGC(dc,"__utmv="+_udh,";"))!="-") c+=_uES("__utmv="+t+";");\n if (c.charAt(c.length-1)=="+") c=c.substring(0,c.length-1);\n return c;\n}\nfunction _uGC(l,n,s) {\n if (!l || l=="" || !n || n=="" || !s || s=="") return "-";\n var i,i2,i3,c="-";\n i=l.indexOf(n);\n i3=n.indexOf("=")+1;\n if (i > -1) {\n i2=l.indexOf(s,i); if (i2 < 0) { i2=l.length; }\n c=l.substring((i+i3),i2);\n }\n return c;\n}\nfunction _uDomain() {\n if (!_udn || _udn=="" || _udn=="none") { _udn=""; return 1; }\n if (_udn=="auto") {\n var d=_ubd.domain;\n if (d.substring(0,4)=="www.") {\n d=d.substring(4,d.length);\n }\n _udn=d;\n }\n if (_uhash=="off") return 1;\n return _uHash(_udn);\n}\nfunction _uHash(d) {\n if (!d || d=="") return 1;\n var h=0,g=0;\n for (var i=d.length-1;i>=0;i--) {\n var c=parseInt(d.charCodeAt(i));\n h=((h << 6) & 0xfffffff) + c + (c << 14);\n if ((g=h & 0xfe00000)!=0) h=(h ^ (g >> 21));\n }\n return h;\n}\nfunction _uFixA(c,s,t) {\n if (!c || c=="" || !s || s=="" || !t || t=="") return "-";\n var a=_uGC(c,"__utma="+_udh,s);\n var lt=0,i=0;\n if ((i=a.lastIndexOf(".")) > 9) {\n _uns=a.substring(i+1,a.length);\n _uns=(_uns*1)+1;\n a=a.substring(0,i);\n if ((i=a.lastIndexOf(".")) > 7) {\n lt=a.substring(i+1,a.length);\n a=a.substring(0,i);\n }\n if ((i=a.lastIndexOf(".")) > 5) {\n a=a.substring(0,i);\n }\n a+="."+lt+"."+t+"."+_uns;\n }\n return a;\n}\nfunction _uTrim(s) {\n if (!s || s=="") return "";\n while ((s.charAt(0)==' ') || (s.charAt(0)=='\sn') || (s.charAt(0,1)=='\sr')) s=s.substring(1,s.length);\n while ((s.charAt(s.length-1)==' ') || (s.charAt(s.length-1)=='\sn') || (s.charAt(s.length-1)=='\sr')) s=s.substring(0,s.length-1);\n return s;\n}\nfunction _uEC(s) {\n var n="";\n if (!s || s=="") return "";\n for (var i=0;i<s.length;i++) {if (s.charAt(i)==" ") n+="+"; else n+=s.charAt(i);}\n return n;\n}\nfunction __utmVisitorCode(f) {\n var r=0,t=0,i=0,i2=0,m=31;\n var a=_uGC(_ubd.cookie,"__utma="+_udh,";");\n if ((i=a.indexOf(".",0))<0) return;\n if ((i2=a.indexOf(".",i+1))>0) r=a.substring(i+1,i2); else return ""; \n if ((i=a.indexOf(".",i2+1))>0) t=a.substring(i2+1,i); else return ""; \n if (f) {\n return r;\n } else {\n var c=new Array('A','B','C','D','E','F','G','H','J','K','L','M','N','P','R','S','T','U','V','W','X','Y','Z','1','2','3','4','5','6','7','8','9');\n return c[r>>28&m]+c[r>>23&m]+c[r>>18&m]+c[r>>13&m]+"-"+c[r>>8&m]+c[r>>3&m]+c[((r&7)<<2)+(t>>30&3)]+c[t>>25&m]+c[t>>20&m]+"-"+c[t>>15&m]+c[t>>10&m]+c[t>>5&m]+c[t&m];\n }\n}\nfunction _uIN(n) {\n if (!n) return false;\n for (var i=0;i<n.length;i++) {\n var c=n.charAt(i);\n if ((c<"0" || c>"9") && (c!=".")) return false;\n }\n return true;\n}\nfunction _uES(s,u) {\n if (typeof(encodeURIComponent) == 'function') {\n if (u) return encodeURI(s);\n else return encodeURIComponent(s);\n } else {\n return escape(s);\n }\n}\nfunction _uUES(s) {\n if (typeof(decodeURIComponent) == 'function') {\n return decodeURIComponent(s);\n } else {\n return unescape(s);\n }\n}\nfunction _uVG() {\n if((_udn.indexOf("") == 0 || _udn.indexOf(".google.") == 0 || _udn.indexOf("google.") == 0) && _utcp=='/') {\n return false;\n }\n return true;\n}\nfunction _uSP() {\n var s=100;\n if (_usample) s=_usample;\n if(s>=100 || s<=0) return true;\n return ((__utmVisitorCode(1)%10000)<(s*100));\n}\n\n_uacct = "UA-442126-8";urchinTracker();\n</script>\n
<div class='header' macro='gradient vert #000 #069'>\n <div class='headerShadow'>\n <span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>\n <span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>\n </div>\n <div class='headerForeground'>\n <span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;\n <span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>\n </div>\n <div id='topMenu' refresh='content' tiddler='MainMenu'></div>\n</div>\n<div id='sidebar'>\n <div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></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>
//Empezare por aquí y luego iremos tirando del ovillo //\n\n\n!Motivación \nRealizar una tesis doctoral que pueda caber dentro del programa de doctorado //"Sostenibilidad tecnologia y humanismo"// de la [[Cátedra UNESCO de la UPC]] \n\n!! Idea central\n<<<\n''La aplicación de las TIC a la educación es una herramienta valiosa para el fomento del [[Desarrollo Sostenible]]''.\n<<<\n!!Sin embargo\nEsta aplicación no puede hacerse de cualquier forma, sino todo lo contrario. Y por ello \n<<<\n''Merece la pena analizar qué tácticas y estrategias de aplicación de las TIC a la educación encaminan correctamente al fomento del desarrollo sostenible''. \n<<<\nAsí nace una linea de trabajo e investigación que se ha prolongado durante casi 3 años y medio. \n\n!Metodología\n!! Una hipótesis de trabajo\nDesde el primer momento he trabajado guiado por una hipótesis de trabajo que hasta la fecha sigo considerando cierta: \n<<<\n''La filosofía, estrategias de trabajo, productos y herramientas TIC que emanan del Free and Open Source Software (FOSS) son las mejores para favorecer los objetivos del Desarrollo Sostenible, y especialmente en el campo de la Educación. ''\n<<<\n!!Preguntas a responder\nLa formulación de esta hipótesis abre una serie de interrogantes:\n* [[¿Debemos investigar sobre TIC o acerca de la SIC?]]\n** ¿El problema es de índole exclusivamente tecnológica o se debe formular desde el principio como un problema multidisciplinar social y tecnológico, en el marco de la Sociedad de la Información y el Conocimiento ([[SIC]])?\n* [[¿Cual es la filosofía del FOSS?]]\n**¿Cómo y cuando aparece? ¿Cuales son sus antecedentes?¿A que se contrapone? ¿En que consiste?\n* [[¿Cuales son las estrategias de trabajo de FOSS?]]\n** ¿Realmente existen estrategias de trabajo propias del FOSS? ¿A que estrategias se contrapone? ¿En que consisten?\n* [[¿Puede el FOSS ser un valioso aliado para el fomento del desarrollo sostenible?]]\n** ¿Cuales son los productos y herramientas TIC generados por el FOSS aplicables al fomento del desarrollo sostenible?\n* [[¿Puede el FOSS aplicado a la educación ser un valioso aliado para el fomento del desarrollo sostenible?]]\n* [[¿Cuales son los productos y herramientas TIC generados por el FOSS aplicables al fomento del desarrollo sostenible en el campo de la educación?]]\n** ¿Existen estos productos y herramientas? ¿Qué grado de madurez e implantación tienen? ¿Cuales son sus puntos fuertes? ¿Cuales son sus puntos débiles? ¿A que se contraponen?\n** ¿Además de productos y herramientas que aporta el FOSS a la educación?
Toda experiencia de innovación docente debe partir de un serio planteamiento acerca de cuales son los principios pedagógicos creemos adecuados para nuestra empresa. La reflexión sobre estos principios nos será especialmente útil cuando usamos con herramientas TIC para el diseño de experiencias de aprendizaje. Es en este caso cuando somos más vulnerables ofuscar-nos con las maravillas tecnológicas a nuestro alcance (// No se ofusque con ese terror tecnológico que ha construido//). Debemos recordar-nos a menudo que '''las herramientas TIC no constituyen una mejora docente en si''' y que su uso debe estar guiado por objetivos en acorde con nuestros planteamientos y pedagógicos, sean cuales fueren. \n\nComo profesor de ingeniería del software mis primeros pasos no fueron guiados por una aproximación pedagógica formal. Al igual que la mayoría de mi colectivo, mis primeros pasos como docente ( a los 17 años ) siguieron el camino de la imitación de mis propios maestros, la prueba y el error. Con ello a lo largo de los años desarrollé, consciente o inconscientemente, mis propios principios pedagógicos que he venido aplicando durante años en mis clases. \n\nCuando hace más de 3 años accedí por primera vez a me sorprendió ver que donde yo esperaba en la página de descarga de un software web, se hallaba una comunidad de docentes y desarrolladores que orbitaba alrededor de un software diseñado a partir de (tal como se describía en el primer párrafo) profundos principios pedagógicos. []\n\nAl leer los principios pedagógicos en los que se basa Moodle me di cuenta de dos cosas: primero, que estos daban un marco teórico a mi forma de abordar la docencia, y segundo, que había llegado a para quedarme. Por ello mi primera acción en la comunidad fue traducir estos principios al castellano. \n\n*[[Constructivismo]]\n*[[Construccionismo]]\n*[[Constructivismo social]]\n*[[Conectados y Separados]]\n\nEstos principios se pueden resumir en 5 reglas mucho menos pomposas y manejables:\n#''Cada uno de nosotros es un maestro y un estudiante en potencia.- en un autentico entorno colaborativo somos ambas cosas a la vez''.\n#''Aprendemos particularmente bien del acto de crear o expresar algo para una audiencia.''\n#''Aprendemos mucho solo con observar la actividad de nuestros iguales''\n#''Al entender los contextos de los demás, podemos enseñar de un modo más trasformacional (ein??) (constructivismo)''\n# ''Un entorno de aprendizaje debe ser flexible y adaptable, asi puede responder rápidamente a las necesidades de sus participantes''.\n\n\nVease [[El construccionismo social como referente]]
El balance entre el contenido técnico y el pedagógico no nos preocupa. \n----\nEl ''MUST'' sobre datos estadísticos nos debe preocupar algo más puesto que deberemos inventar algo al respecto. \nObviamente gracias a Moodle y a Penny Leach disponemos de datos suficientes como para matar un burro a histogramas, però deberemos ver como queremos usar los datos de los que disponemos para ver que ''point'' queremos probar con ellos, y las gráficas no sean simplemente figuras vistosas en el articulo.\n \n
[[Orangoodling|]] [[Orangoodle|]] [[blog at moodle|]][[Editor Tools]]\n----\nThis site created by Marc Alier is distributed under a [[Creative Commons License|]] [>img[][]]\n<<search>><<closeAll>><<permaview>><<newTiddler>><<newJournal 'DD MMM YYYY'>><<saveChanges>><<upload index.html . . orangoodle>><html><a href='' class='button'>download</a></html><<slider chkSliderOptionsPanel OptionsPanel 'options »' 'Change TiddlyWiki advanced options'>>
The road to WikiBook
[img[][]]Orangoodle Shards
/***\nIncluded Styles\n***/\n/*{{{*/\n[[Styles TagglyTagging]]\n[[Styles HorizontalMainMenu]]\n[[Styles MessageArea]]\n[[Styles SideBarOptions]]\n[[Styles Calendar]]\n[[Styles Editor]]\n[[Styles Breadcrumbs]]\n/*}}}*/\n\n/***\nCosmetic fixes\n***/\n/*{{{*/\nh1,h2,h3,h4,h5 { color: #000; background: transparent; }\n\nbody { \n background: #eee; \n font-size: .99em;\n font-family: arial,helvetica;\n}\n\n.headerShadow {\n padding: 1.0em; }\n\n.headerForeground {\n padding: 1.0em; }\n\n.selected .tagging, .selected .tagged {\n padding: 0.5em;\n background-color: #eee;\n border-top: 1px solid #ccc; \n border-left: 1px solid #ccc; \n border-bottom: 3px solid #ccc; \n border-right: 3px solid #ccc; \n -moz-border-radius: 1em; }\n\n.shadow .title {\n color: #999; }\n\n.siteTitle {\n font-size: 2.5em; }\n\n.siteSubtitle {\n font-size: 1.0em; }\n\n.tabSelected{\n padding-top: 0.0em;\n padding-left: 1em;\n padding-right: 1em;\n -moz-border-radius-topleft: 0.5em; \n -moz-border-radius-topright: 0.5em;}\n\n.tabUnselected {\n padding-top: 0.0em;\n padding-left: 1em;\n padding-right: 1em;\n -moz-border-radius-topleft: 0.5em; \n -moz-border-radius-topright: 0.5em;}\n\n.tabContents {\n margin: 0px;\n padding-top: 0px;\n padding-bottom: 0px;\n padding-left: 2px;\n padding-right: 2px;\n -moz-border-radius: 1em; }\n\n.tagging, .tagged {\n padding: 0.5em;\n background-color: #eee;\n border-top: 1px solid #ccc; \n border-left: 1px solid #ccc; \n border-bottom: 3px solid #ccc; \n border-right: 3px solid #ccc; \n -moz-border-radius: 1em; }\n\n.tiddler {\n border-top: 1px solid #ccc; \n border-left: 1px solid #ccc; \n border-bottom: 3px solid #ccc; \n border-right: 3px solid #ccc; \n margin: 0.5em; \n background:#fff; \n padding: 0.5em; \n -moz-border-radius: 1em; }\n\n.title {\n color:black; \n font-size: 3em; }\n\n.viewer .listTitle { \n list-style-type: none; \n margin-left: -2em; }\n\n.viewer pre { \n background-color: #f8f8ff; \n border-color: #ddf }\n\n/*}}}*/\n
@media print {\n#mainMenu, #sidebar, #messageArea, #breadCrumbs, #topMenu, .siteTitle, .siteSubtitle {display: none ! important;}\n#displayArea {margin: 0.5em 0.5em 0em 0.5em;}\n}\n
These Styles represent all of the CSS Style data that control the look and feel of this site.\n\nNote that I recently "modularized" the StyleSheet Tiddler so that "Styles xxxx" Tiddlers are "called" by StyleSheet. This makes for better troubleshooting.\n\nIf you wish to use these Styles, please be sure to copy them all, because they are all called from within StyleSheet.
/***\nCalendar\n***/\n/*{{{*/\n.calendar a { margin:0px !important; padding:0px !important; } \n/*}}}*/\n
/***\nStyles Editor\n***/\n/*{{{*/\n.editor textarea {height:200px;background-color:#F2F2F2;}\n\n.editorFooter .button { \n padding-top: 0px; \n padding-bottom:0px; \n background: #fff;\n color: #000; \n border-top: 1px solid #ccc; \n border-left: 1px solid #ccc; \n border-bottom: 2px solid #ccc; \n border-right: 2px solid #ccc; \n margin-left: 3px;\n padding-top: 1px;\n padding-bottom: 1px;\n padding-left: 5px;\n padding-right: 5px; }\n \n.editorFooter .button:hover { \n border-top: 2px solid #ccc; \n border-left: 2px solid #ccc; \n border-bottom: 1px solid #ccc; \n border-right: 1px solid #ccc; \n margin-left: 3px;\n padding-top: 1px;\n padding-bottom: 1px;\n padding-left: 5px;\n padding-right: 5px; }\n/*}}}*/\n
/***\nTo use, add {{{[[Styles HorizontalMainMenu]]}}} to your StyleSheet tiddler, or you can just paste the CSS in directly. See also HorizontalMainMenu and PageTemplate.\n***/\n/*{{{*/\n\n#topMenu br {display:none; }\n#topMenu { background: #39a; }\n#topMenu { padding:2px; }\n#topMenu .button, #topMenu .tiddlyLink { padding-left:1em; padding-right:1em; color:white; font-size:115%;}\n#displayArea { margin: 1em 15.7em 0em 1em; }\n\n/* just in case want some QuickOpenTags in your topMenu */\n#topMenu .quickopentag { padding:0px; margin:0px; border:0px; }\n#topMenu .quickopentag .tiddlyLink { padding-right:1px; }\n#topMenu .quickopentag .button { padding-left:1px; border:0px; }\n\n\n/*}}}*/
/***\nStyle Message Area\n***/\n/*{{{*/\n#messageArea { \n background-color: #eee; \n border-color: #8ab; \n border-width: 4px; \n border-style: dotted; \n font-size: 90%; \n padding: 0.5em; \n -moz-border-radius: 1em; }\n#messageArea .button { text-decoration:none; font-weight:bold; background:transparent; border:0px; }\n#messageArea .button:hover {background: #acd; }\n/*}}}*/\n
/***\nTo use, add {{{[[Styles TagglyTagging]]}}} to your StyleSheet tiddler, or you can just paste the CSS in directly. See also ViewTemplate, EditTemplate and TagglyTagging.\n***/\n/*{{{*/\n.tagglyTagged li.listTitle { display:none;}\n.tagglyTagged li { display: inline; font-size:90%; }\n.tagglyTagged ul { margin:0px; padding:0px; }\n.tagglyTagging { padding-top:0.5em; }\n.tagglyTagging li.listTitle { display:none;}\n.tagglyTagging ul { margin-top:0px; padding-top:0.5em; padding-left:2em; margin-bottom:0px; padding-bottom:0px; }\n\n/* .tagglyTagging .tghide { display:inline; } */\n\n.tagglyTagging .button { display:none; margin-left:3px; margin-right:3px; }\n.tagglyTagging .button, .hidebutton { color:#aaa; font-size:90%; border:0px; padding-left:0.3em;padding-right:0.3em;}\n.tagglyTagging .button:hover, .hidebutton:hover { background:#eee; color:#888; }\n.selected .tagglyTagging .button { display:inline; }\n\n.tagglyLabel { color:#aaa; font-size:90%; }\n\n\n.editLabel { font-size:90%; padding-top:0.5em; }\n/*}}}*/\n
/***\n|''Name:''|TableOfContentsPlugin|\n|''Source:''||\n|''Author:''|Eric Shulman - ELS Design Studios|\n|''License:''|[[Creative Commons Attribution-ShareAlike 2.5 License|]]|\n|''~CoreVersion:''|2.0.10|\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]'' added onkeyup handling for enter key (=view selected tiddler, equivalent to double-click)\n''2006.02.14 [2.2.6]'' FF1501 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]'' add 'var' to unintended global variable declarations to avoid FireFox crash bug when assigning to globals\n''2005.12.21 [2.2.2]'' in onClickTOCList() and onDblClickTOCList(), prevent mouse events from 'bubbling' up to other handlers\n''2005.10.30 [2.2.1]'' in refreshTOCList(), fixed calculation of "showHidden" to check for 'readOnly' (i.e., "via HTTP") flag. Based on a report from LyallPearce\n''2005.10.30 [2.2.0]'' hide tiddlers tagged with 'excludeLists' (with option to override, i.e., "include hidden tiddlers")\n''2005.10.09 [2.1.0]'' combined documentation and code in a single tiddler\nadded click toggle for expand-all vs. show-one-branch\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 macro parameters for label, sort, date, size, width, hidelist and showtabs\n''2005.08.03 [1.0.3]'' added "showtabs" optional parameter\n''2005.07.27 [1.0.2]'' core 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]'' 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:/]]\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=19;\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">&#150;</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']) {['margin']; }\n if (parsedParams['padding']) {['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 ? "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 {['width']; }\n if (params['hidelist'])\n { ="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 (\n {\n case 'TOCMenu':\n var theSiblings = which.parentNode.parentNode.parentNode.childNodes;\n var;\n break;\n case 'TOCSmaller':\n case 'TOCLarger':\n case 'TOCMaximize':\n var theSiblings = which.parentNode.parentNode.childNodes;\n var;\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 '' button in '+thePlace);\n return theList;\n}\n\nfunction onClickTOCMenu(which)\n{\n var theList=getTOCListFromButton(which);\n if (!theList) return;\n var opening ="none";\n if(config.options.chkAnimate)\n anim.startAnimating(new Slider(theList,opening,false,"none"));\n else\n = 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 ("none") // make sure list is visible\n if(config.options.chkAnimate)\n anim.startAnimating(new Slider(theList,true,false,"none"));\n else\n = "block" ;\n switch (\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
Titulo provisional para el articulo que estoy preparando para el [[Call for papers]]\n\n*[[Ideas a comunicar]]\n*[[Storyboard]]\n*[[MUSTS]] del [[Call for papers]] y por mi parte lo [[Relativo a los MUSTS]]\n*[[Y que puedo explicar]]\n\n<<tag TheRoadToWikiBook>>
| !date | !user | !location | !storeUrl | !uploadDir | !toFilename | !backupdir | !origin |\n| 12/11/2006 18:8:18 | Ludo | [[orangoodle.html|file:///E:/Documents%20and%20Settings/Ludo/Escritorio/web%20ludo/!%5D%5D]] | [[store.cgi|]] | . | index.html | . |\n| 17/11/2006 18:21:25 | Ludo | [[orangoodle.html|file:///E:/Documents%20and%20Settings/Ludo/Escritorio/web%20ludo/orangoodle.html]] | [[store.cgi|]] | . | index.html | . | Ok |\n| 17/11/2006 18:22:59 | Ludo | [[orangoodle.html|file:///E:/Documents%20and%20Settings/Ludo/Escritorio/web%20ludo/orangoodle.html]] | [[store.cgi|]] | . | index.html | . |\n| 17/11/2006 18:23:15 | Ludo | [[orangoodle.html|file:///E:/Documents%20and%20Settings/Ludo/Escritorio/web%20ludo/orangoodle.html]] | [[store.cgi|]] | . | index.html | . | Ok | Ok |\n| 17/11/2006 18:58:21 | Ludo | [[orangoodle.html|file:///E:/Documents%20and%20Settings/Ludo/Escritorio/web%20ludo/orangoodle.html]] | [[store.cgi|]] | . | index.html | . | Ok |\n| 17/11/2006 19:15:48 | Ludo | [[orangoodle.html|file:///E:/Documents%20and%20Settings/Ludo/Escritorio/web%20ludo/orangoodle.html]] | [[store.cgi|]] | . | index.html | . | Ok |\n| 17/11/2006 19:17:21 | Ludo | [[orangoodle.html|file:///E:/Documents%20and%20Settings/Ludo/Escritorio/web%20ludo/orangoodle.html]] | [[store.cgi|]] | . | index.html | . | Ok |\n| 17/11/2006 19:31:31 | Ludo | [[orangoodle.html|file:///E:/Documents%20and%20Settings/Ludo/Escritorio/web%20ludo/orangoodle.html]] | [[store.cgi|]] | . | index.html | . | Ok |\n| 17/11/2006 19:39:24 | Ludo | [[orangoodle.html|file:///E:/Documents%20and%20Settings/Ludo/Escritorio/web%20ludo/orangoodle.html#%5B%5BY%20que%20puedo%20explicar%5D%5D]] | [[store.cgi|]] | . | index.html | . |\n| 18/11/2006 18:40:46 | Ludo | [[orangoodle.html|file:///E:/Documents%20and%20Settings/Ludo/Escritorio/web%20ludo/orangoodle.html]] | [[store.cgi|]] | . | index.html | . |\n| 18/11/2006 18:41:28 | Ludo | [[orangoodle.html|file:///E:/Documents%20and%20Settings/Ludo/Escritorio/web%20ludo/orangoodle.html]] | [[store.cgi|]] | . | index.html | . |\n| 18/11/2006 18:43:18 | Ludo | [[orangoodle.html|file:///E:/Documents%20and%20Settings/Ludo/Escritorio/web%20ludo/orangoodle.html]] | [[store.cgi|]] | . | index.html | . | Ok |\n| 18/11/2006 18:46:22 | Ludo | [[orangoodle.html|file:///E:/Documents%20and%20Settings/Ludo/Escritorio/web%20ludo/orangoodle.html]] | [[store.cgi|]] | . | index.html | . |\n| 18/11/2006 20:12:21 | Ludo | [[orangoodle.html|file:///E:/Documents%20and%20Settings/Ludo/Escritorio/web%20ludo/orangoodle.html]] | [[store.cgi|]] | . | index.html | . |\n| 19/11/2006 20:23:51 | Ludo | [[orangoodle.html|file:///E:/Documents%20and%20Settings/Ludo/Escritorio/web%20ludo/orangoodle.html]] | [[store.cgi|]] | . | index.html | . |\n| 20/11/2006 8:38:28 | Ludo | [[orangoodle.html|file:///E:/Documents%20and%20Settings/Ludo/Escritorio/web%20ludo/orangoodle.html]] | [[store.cgi|]] | . | index.html | . |\n| 2/12/2006 12:23:51 | Ludo | [[/|]] | [[store.cgi|]] | . | index.html | . | Ok |\n| 2/12/2006 12:47:54 | Ludo | [[/|]] | [[store.cgi|]] | . | index.html | . | Ok |\n| 2/12/2006 12:51:31 | Ludo | [[/|]] | [[store.cgi|]] | . | index.html | . | Ok |\n| 2/12/2006 13:20:53 | Ludo | [[/|]] | [[store.cgi|]] | . | index.html | . | Ok |\n| 2/12/2006 13:39:55 | Ludo | [[/|]] | [[store.cgi|]] | . | index.html | . |\n| 2/12/2006 18:30:37 | Ludo | [[/|]] | [[store.cgi|]] | . | index.html | . | Ok |\n| 3/12/2006 10:14:43 | Ludo | [[/|]] | [[store.cgi|]] | . | index.html | . | Ok |\n| 3/12/2006 10:38:54 | Ludo | [[/|]] | [[store.cgi|]] | . | index.html | . | Ok |\n| 3/12/2006 16:47:35 | Ludo | [[/|]] | [[store.cgi|]] | . | index.html | . |\n| 6/12/2006 11:0:15 | Ludo | [[orangoodle.html|file:///E:/Documents%20and%20Settings/Ludo/Escritorio/orangoodle.html]] | [[store.cgi|]] | . | index.html | . |\n| 6/12/2006 11:0:21 | Ludo | [[orangoodle.html|file:///E:/Documents%20and%20Settings/Ludo/Escritorio/orangoodle.html]] | [[store.cgi|]] | . | index.html | . |\n| 6/12/2006 11:1:9 | Ludo | [[orangoodle.html|file:///E:/Documents%20and%20Settings/Ludo/Escritorio/orangoodle.html]] | [[store.cgi|]] | . | index.html | . |\n| 11/12/2006 17:55:13 | YourName | [[/|]] | [[store.cgi|]] | . | index.html | . |
/***\n|''Name:''|UploadPlugin|\n|''Description:''|Save to web a TiddlyWiki|\n|''Version:''|3.4.4|\n|''Date:''|Sep 30, 2006|\n|''Source:''||\n|''Documentation:''||\n|''Author:''|BidiX (BidiX (at) bidix (dot) info)|\n|''License:''|[[BSD open source license| ]]|\n|''~CoreVersion:''|2.0.0|\n|''Browser:''|Firefox 1.5; InternetExplorer 6.0; Safari|\n|''Include:''|config.lib.file; config.lib.log; config.lib.options; PasswordTweak|\n|''Require:''|[[UploadService|]]|\n***/\n//{{{\nversion.extensions.UploadPlugin = {\n major: 3, minor: 4, revision: 4, \n date: new Date(2006,8,30),\n source: '',\n documentation: '',\n author: 'BidiX (BidiX (at) bidix (dot) info',\n license: '[[BSD open source license|]]',\n coreVersion: '2.0.0',\n browser: 'Firefox 1.5; InternetExplorer 6.0; Safari'\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: 1}, \n date: new Date(2006,8,19)\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: 3, date: new Date(2006,8,30),\n type: 'tweak',\n source: ''\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 {\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 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.className = "txtOptionInput "+opt;\n place.appendChild(c);\n c.value = config.options[opt];\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.className = "pasOptionInput "+opt;\n place.appendChild(c);\n c.value = config.options[opt];\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 c.className = "chkOptionInput "+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 c.className = "chkOptionInput "+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 backupFileStored: "Previous file backuped in %0",\n crossDomain: "Certainly a cross-domain isue: access to an other site isn't allowed",\n errorDownloading: "Error downloading",\n errorUploadingContent: "Error uploading content",\n fileLocked: "Files is locked: You are not allowed to Upload",\n fileNotFound: "file to upload not found",\n fileNotUploaded: "File %0 NOT uploaded",\n mainFileUploaded: "Main TiddlyWiki file uploaded to %0",\n passwordEmpty: "Unable to upload, your password is empty",\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.toDirUrl(storeUrl, uploadDir, username)]);\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.toRootUrl = function (storeUrl, username)\n{\n return root = (this.dirname(storeUrl)?this.dirname(storeUrl):this.dirname(document.location.toString()));\n}\nconfig.macros.upload.toDirUrl = function (storeUrl, uploadDir, username)\n{\n var root = this.toRootUrl(storeUrl, username);\n if (uploadDir && uploadDir != '.')\n root = root + '/' + uploadDir;\n return root;\n}\nconfig.macros.upload.toFileUrl = function (storeUrl, toFilename, uploadDir, username)\n{\n return this.toDirUrl(storeUrl, uploadDir, username) + '/' + toFilename;\n}\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 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 if (!password || password === '') {\n alert(config.macros.upload.messages.passwordEmpty);\n return;\n }\n if (storeUrl === '') {\n storeUrl = config.macros.upload.defaultStoreScript;\n }\n if (config.lib.file.dirname(storeUrl) === '') {\n storeUrl = config.lib.file.dirname(document.location.toString())+'/'+storeUrl;\n }\n if (toFilename === '') {\n toFilename = config.lib.file.basename(document.location.toString());\n }\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 // Check that file is not locked\n if (window.BidiX && BidiX.GroupAuthoring && BidiX.GroupAuthoring.lock) {\n if (BidiX.GroupAuthoring.lock.isLocked() && !BidiX.GroupAuthoring.lock.isMyLock()) {\n alert(config.macros.upload.messages.fileLocked);\n return;\n }\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 var toDir = config.macros.upload.toDirUrl(storeUrl, toFilename, uploadDir, username);\n displayMessage(config.macros.upload.messages.aboutToUpload.format([toDir]), toDir);\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 var toFileUrl = config.macros.upload.toFileUrl(storeUrl, rssPath, uploadDir, username);\n displayMessage(config.macros.upload.messages.rssFileUploaded.format(\n [toFileUrl]), toFileUrl);\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 =, 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"UniversalXPConnect");\n var converter = Components.classes[""]\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\n revised = revised.replaceChunk("<title"+">","</title"+">"," " + newSiteTitle + " ");\n revised = revised.replaceChunk("<!--PRE-HEAD-START--"+">","<!--PRE-HEAD-END--"+">","\sn" + store.getTiddlerText("MarkupPreHead","") + "\sn");\n revised = revised.replaceChunk("<!--POST-HEAD-START--"+">","<!--POST-HEAD-END--"+">","\sn" + store.getTiddlerText("MarkupPostHead","") + "\sn");\n revised = revised.replaceChunk("<!--PRE-BODY-START--"+">","<!--PRE-BODY-END--"+">","\sn" + store.getTiddlerText("MarkupPreBody","") + "\sn");\n revised = revised.replaceChunk("<!--POST-BODY-START--"+">","<!--POST-BODY-END--"+">","\sn" + store.getTiddlerText("MarkupPostBody","") + "\sn");\n\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 var toFileUrl = config.macros.upload.toFileUrl(storeUrl, toFilename, uploadDir, username);\n if (responseText.indexOf("destfile:") > 0) {\n var destfile = responseText.substring(responseText.indexOf("destfile:")+9, \n responseText.indexOf("\sn", responseText.indexOf("destfile:")));\n toFileUrl = config.macros.upload.toRootUrl(storeUrl, username) + '/' + destfile;\n }\n else {\n toFileUrl = config.macros.upload.toFileUrl(storeUrl, toFilename, uploadDir, username);\n }\n displayMessage(config.macros.upload.messages.mainFileUploaded.format(\n [toFileUrl]), toFileUrl);\n if (backupDir && responseText.indexOf("backupfile:") > 0) {\n var backupFile = responseText.substring(responseText.indexOf("backupfile:")+11, \n responseText.indexOf("\sn", responseText.indexOf("backupfile:")));\n toBackupUrl = config.macros.upload.toRootUrl(storeUrl, username) + '/' + backupFile;\n displayMessage(config.macros.upload.messages.backupFileStored.format(\n [toBackupUrl]), toBackupUrl);\n }\n var log = new config.macros.upload.UploadLog();\n log.endUpload();\n store.setDirty(false);\n // erase local lock\n if (window.BidiX && BidiX.GroupAuthoring && BidiX.GroupAuthoring.lock) {\n BidiX.GroupAuthoring.lock.eraseLock();\n // change mtime with new mtime after upload\n var mtime = responseText.substr(responseText.indexOf("mtime:")+6);\n BidiX.GroupAuthoring.lock.mtime = mtime;\n }\n \n \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'UniversalBrowserRead');}\n }\n catch (e) {}\n } \n //DEBUG alert("user["+config.options.txtUploadUserName+"] password[" + config.options.pasUploadPassword + "]");\n // compose headers data\n var sheader = "";\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 // add lock attributes to sheader\n if (window.BidiX && BidiX.GroupAuthoring && BidiX.GroupAuthoring.lock) {\n var l = BidiX.GroupAuthoring.lock.myLock;\n sheader += ";lockuser=" + l.user\n + ";mtime=" + l.mtime\n + ";locktime=" + l.locktime;\n }\n sheader += ";;\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 //strailer = "--" + boundary + "--\sr\sn";\n var data;\n data = sheader + content + strailer;\n //"POST", storeUrl, true, username, password);\n try {\n"POST", storeUrl, true); \n }\n catch(e) {\n alert(config.macros.upload.messages.crossDomain + "\snError:" +e);\n exit;\n }\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 + "\snStatus: "+request.status.statusText);\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\ = 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"UniversalBrowserRead");\n }\n else {\n"UniversalXPConnect");\n }\n } catch (e) { }\n //"GET", document.location.toString(), true, username, password);\n try {\n"GET", document.location.toString(), true);\n }\n catch(e) {\n alert(config.macros.upload.messages.crossDomain + "\snError:" +e);\n exit;\n }\n \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()]) + "\snStatus: "+request.status.statusText);\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','');\nsetStylesheet(\n ".pasOptionInput {width: 11em;}\sn"+\n ".txtOptionInput.txtUploadStoreUrl {width: 25em;}\sn"+\n ".txtOptionInput.txtUploadFilename {width: 25em;}\sn"+\n ".txtOptionInput.txtUploadDir {width: 25em;}\sn"+\n ".txtOptionInput.txtUploadBackupDir {width: 25em;}\sn"+\n "",\n "UploadOptionsStyles");\nconfig.shadowTiddlers.UploadDoc = "[[Full Documentation| ]]\sn"; \nconfig.options.chkAutoSave = false; saveOptionCookie('chkAutoSave');\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\nconfig.macros.saveChanges.handler_orig_UploadPlugin = config.macros.saveChanges.handler;\n\nconfig.macros.saveChanges.handler = function(place)\n{\n if ((!readOnly) && (document.location.toString().substr(0,4) != "http"))\n createTiddlyButton(place,this.label,this.prompt,this.onClick,null,null,this.accessKey);\n};\n\n//}}}\n////===\n
<div class='toolbar' macro='toolbar -closeTiddler closeOthers +editTiddler permalink references jump newHere'></div>\n<div class='title' macro='view title'></div>\n<div class='subtitle'>modified <span macro='view modified date [[DD MMM YYYY]]'></span>, created <span macro='view created date [[DD MMM YYYY]]'></span></div>\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|''Name:''|WikiBar|\n|''Version:''|2.0.0 beta3|\n|''Source:''|[[AiddlyWiki|]]|\n|''Author:''|[[Arphen Lin|]]|\n|''Type:''|toolbar macro command extension|\n|''Required:''|TiddlyWiki 2.0.0 beta6|\n!Description\nWikiBar is a toolbar that gives access to most of TiddlyWiki's formatting features with a few clicks. It's a handy tool for people who are not familiar with TiddlyWiki syntax.\nBesides, with WikiBar-addons, users can extend the power of WikiBar.\n!Support browser\n*Firefox 1.5\n!Revision history\n*v2.0.0 beta3 (2005/12/30)\n** remove macros (replaced by TWMacro addon)\n** add wikibar command in toolbar automatically\n** rename DOIT to HANDLER\n** rename TIP to TOOLTIP\n*v2.0.0 beta2 (2005/12/21)\n** re-design Wikibar addon framework\n*v2.0.0 beta1 (2005/12/14)\n** Note:\n*** WikiBarPlugin is renamed to WikiBar\n** New Features:\n*** support TiddlyWiki 2.0.0 template mechanism\n*** new wikibar data structure\n*** new wikibar-addon framework for developers\n**** support dynamic popup menu generator\n*** support most new macros added in TiddlyWiki 2.0.0\n*** multi-level popup menu\n*** fix wikibar tab stop\n*** remove paletteSelector\n** Known Bugs:\n*** popup-menu and color-picker can't be closed correctly\n*** some macros can't be displayed correctly in previewer\n*** text in previewer will be displayed italic\n*v1.2.0 (2005/11/21)\n**New Features:\n***User defined color palettes supported\n####Get color palettes from [[ColorZilla Palettes|]].\n####Save the palette file(*.gpl) as a new tiddler and tag it with 'ColorPalettes', then you can use it in WikiBar.\n***WikiBar style sheet supported\n***Click on document to close current colorPicker, paletteSelector or aboutWikibar\n*v1.1.1 (2005/11/03)\n**Bugs fixed:\n***'Not enough parameters!' message is displayed when the parameter includes '%+number', ex: 'hello%20world!'\n*v1.1.0 (2005/11/01)\n**Bugs fixed:\n***WikiBar overruns (reported by by GeoffS <>)\n**New features:\n***Insert a color code at the cursor. (Thanks to RunningUtes <>)\n***Enable gradient macro. (Thanks to RunningUtes <>)\n***Insert tiddler comment tags {{{/% ... %/}}}. (new feature supported by TiddlyWiki 1.2.37)\n***Insert DateFormatString for {{{<<today>>}}} macro. (new feature supported by TiddlyWiki 1.2.37)\n**Enhanced:\n***Allow optional parameters in syntax.\n**Bugs:\n***'Not enough parameters!' message is displayed when the parameter includes '%+number', ex: 'hello%20world!'\n*v1.0.0 (2005/10/30)\n**Initial release\n!Code\n***/\n//{{{\nconfig.macros.wikibar = {major: 2, minor: 0, revision: 0, beta: 3, date: new Date(2005,12,30)};\nconfig.macros.wikibar.handler = function(place,macroName,params,wikifier,paramString,tiddler){\n if(!(tiddler instanceof Tiddler)) {return;}\n story.setDirty(tiddler.title,true);\n = 'wikibar'+tiddler.title;\n place.className = 'toolbar wikibar';\n};\nfunction wikibar_install(){\n config.commands.wikibar = {\n text: 'wikibar',\n tooltip: 'wikibar on/off',\n handler: function(e,src,title) {\n if(!e){ e = window.event; }\n var theButton = resolveTarget(e);\n = 'wikibarButton'+title;\n wikibarPopup.remove();\n wikibar_installAddons(theButton, title);\n wikibar_createWikibar(title);\n return(false);\n }\n };\n config.shadowTiddlers['EditTemplate'] = wikibar_addWikibarCommand(config.shadowTiddlers['EditTemplate']);\n var tiddler = store.getTiddler('EditTemplate');\n if(tiddler){\n tiddler.text = wikibar_addWikibarCommand(tiddler.text);\n }\n}\nfunction wikibar_installAddons(theButton, title){\n var tiddlers = store.getTaggedTiddlers('wikibarAddons');\n if(!tiddlers) { return; }\n theButton.addons=[];\n for(var i=0; i<tiddlers.length; i++){\n try{\n eval(tiddlers[i].text);\n try{\n wikibar_addonInstall(title);\n wikibar_addonInstall = null;\n theButton.addons.push({ok:true, name:tiddlers[i].title});\n }catch(ex){\n theButton.addons.push({ok:false, name:tiddlers[i].title, error:ex});\n }\n }catch(ex){\n theButton.addons.push({ok:false, name:tiddlers[i].title, error:ex});\n }\n }\n}\nfunction wikibar_addWikibarCommand(tiddlerText){\n var div = document.createElement('div');\n = 'none';\n div.innerHTML = tiddlerText;\n for(var i=0; i<div.childNodes.length; i++){\n var o=div.childNodes[i];\n if(o.tagName==='DIV'){\n if(o.className=='toolbar'){\n var macroText = o.getAttribute('macro').trim();\n if('wikibar')<=0){\n macroText += ' wikibar';\n o.setAttribute('macro', macroText);\n }\n break;\n }\n }\n }\n return div.innerHTML.replace(/\s"/g, "\s'");\n}\nfunction wikibar_processSyntaxParams(theSyntax, params){\n try{\n var pcr = 'AplWikibarPcr';\n var rx=null;\n var allParams=null;\n if(params){\n if(typeof(params)=='object'){\n for(var i=0; i<params.length; i++){\n if(params[i]){\n params[i] = params[i].replace(new RegExp('%','g'), pcr).trim();\n rx = '(\s\s[%'+(i+1)+'\s\s])' + '|' + '(%'+(i+1)+')';\n theSyntax = theSyntax.replace(new RegExp(rx,'g'), params[i] );\n }\n }\n allParams = params.join(' ').trim();\n }else{\n allParams = params.replace(new RegExp('%','g'), pcr).trim();\n rx = /(\s[%1{1}\s])|(%1{1})/g;\n theSyntax = theSyntax.replace(rx, allParams);\n }\n }\n if(allParams){\n theSyntax = theSyntax.replace(new RegExp('%N{1}','g'), allParams);\n }\n rx=/\s[%(([1-9]{1,}[0-9]{0,})|(N{1}))\s]/g;\n theSyntax = theSyntax.replace(rx, '');\n rx=/%(([1-9]{1,}[0-9]{0,})|(N{1}))/g;\n if( theSyntax.match(rx) ){\n throw 'Not enough parameters! ' + theSyntax;\n }\n theSyntax=theSyntax.replace(new RegExp(pcr,'g'), '%');\n return theSyntax;\n } catch(ex){\n return null;\n }\n}\nfunction wikibar_resolveEditItem(tiddlerWrapper, itemName){\n if(tiddlerWrapper.hasChildNodes()){\n var c=tiddlerWrapper.childNodes;\n for(var i=0; i<c.length; i++){\n var txt=wikibar_resolveEditItem(c[i], itemName);\n if(!txt){\n continue;\n }else{\n return txt;\n }\n }\n }\n return ((tiddlerWrapper.getAttribute && tiddlerWrapper.getAttribute('edit')==itemName)? tiddlerWrapper : null);\n}\nfunction wikibar_resolveEditItemValue(tiddlerWrapper, itemName){\n var o = wikibar_resolveEditItem(tiddlerWrapper, itemName);\n return (o? o.value.replace(/\sr/mg,'') : null);\n}\nfunction wikibar_resolveTiddlerEditorWrapper(obj){\n if('tiddlerDisplay'){return null;}\n if((obj.getAttribute && obj.getAttribute('macro')=='edit text')){return obj;}\n return wikibar_resolveTiddlerEditorWrapper(obj.parentNode);\n}\nfunction wikibar_resolveTiddlerEditor(obj){\n if(obj.hasChildNodes()){\n var c = obj.childNodes;\n for(var i=0; i<c.length; i++){\n var o=wikibar_resolveTiddlerEditor(c[i]);\n if(o){ return o;}\n }\n }\n return ((obj.getAttribute && obj.getAttribute('edit')=='text')? obj : null);\n}\nfunction wikibar_resolveTargetButton(obj){\n if( &&,7)=='wikibar'){ return null; }\n if(obj.tiddlerTitle){\n return obj;\n }else{\n return wikibar_resolveTargetButton(obj.parentNode);\n }\n}\nfunction wikibar_isValidMenuItem(tool){\n if(!tool){ return false; }\n if(tool.TYPE=='MENU' || tool.TYPE=='MAIN_MENU'){\n for(var key in tool){\n if(key.substring(0,8)=='DYNAITEM'){ return true; }\n if(wikibar_isValidMenuItem(tool[key])){ return true; }\n }\n return false;\n }else{\n return (tool.HANDLER? true : false);\n }\n}\nfunction wikibar_editFormat(param){\n var editor = param.button.editor;\n var params = param.params;\n clearMessage();\n if(!editor){ return; }\n var repText = wikibar_processSyntaxParams(this.syntax, params);\n if(repText===null){ return; }\n var st = editor.scrollTop;\n var ss = editor.selectionStart;\n var se = editor.selectionEnd;\n var frontText= '';\n var endText = '';\n var fullText = editor.value;\n if(se>ss && ss>=0){\n frontText = fullText.substring(0, ss);\n endText = fullText.substring(se, fullText.length);\n }\n else if(ss===0 && (se===0 || se == fullText.length) ){\n endText = fullText;\n }\n else if(se==ss && ss>0){\n frontText = fullText.substring(0, ss);\n endText = fullText.substring(se, fullText.length);\n }\n if(repText.indexOf('user_text')>=0 && this.hint){\n repText = repText.replace('user_text', this.hint);\n }\n editor.value = frontText + repText + endText;\n editor.selectionStart = ss;\n editor.selectionEnd = ss + repText.length;\n editor.scrollTop = st;\n editor.focus();\n}\nfunction wikibar_editFormatByWord(param){\n var editor = param.button.editor;\n var params = param.params;\n clearMessage();\n if(!editor){return;}\n var repText = wikibar_processSyntaxParams(this.syntax, params);\n if(repText===null){ return; }\n var st = editor.scrollTop;\n var ss = editor.selectionStart;\n var se = editor.selectionEnd;\n var frontText= '';\n var selText = '';\n var endText = '';\n var fullText = editor.value;\n if(se>ss && ss>=0){\n frontText = fullText.substring(0, ss);\n selText = fullText.substring(ss,se);\n endText = fullText.substring(se, fullText.length);\n }\n else if(ss===0 && (se===0 || se == fullText.length) ){\n endText = fullText;\n }\n else if(se==ss && ss>0){\n frontText = fullText.substring(0, ss);\n endText = fullText.substring(se, fullText.length);\n if(!( fullText.charAt(ss-1).match(/\sW/gi) || fullText.charAt(ss).match(/\sW/gi) )){\n var m = frontText.match(/\sW/gi);\n if(m){\n ss = frontText.lastIndexOf(m[m.length-1])+1;\n }\n else{\n ss = 0;\n }\n m = endText.match(/\sW/gi);\n if(m){\n se += endText.indexOf(m[0]);\n }\n else{\n se = fullText.length;\n }\n frontText = fullText.substring(0, ss);\n endText = fullText.substring(se, fullText.length);\n selText = fullText.substring(ss,se);\n }\n }\n if(selText.length>0){\n repText = repText.replace('user_text', selText);\n }\n if(repText.indexOf('user_text')>=0 && this.hint){\n repText = repText.replace('user_text', this.hint);\n }\n editor.value = frontText + repText + endText;\n editor.selectionStart = ss;\n editor.selectionEnd = ss + repText.length;\n editor.scrollTop = st;\n editor.focus();\n}\nfunction wikibar_editFormatByCursor(param){\n var editor = param.button.editor;\n var params = param.params;\n clearMessage();\n if(!editor){ return; }\n var repText = wikibar_processSyntaxParams(this.syntax, params);\n if(repText===null){ return; }\n var st = editor.scrollTop;\n var ss = editor.selectionStart;\n var se = editor.selectionEnd;\n var frontText= '';\n var endText = '';\n var fullText = editor.value;\n if(se>ss && ss>=0){\n frontText = fullText.substring(0, ss);\n endText = fullText.substring(se, fullText.length);\n }\n else if(ss===0 && (se===0 || se == fullText.length) ){\n endText = fullText;\n }\n else if(se==ss && ss>0){\n frontText = fullText.substring(0, ss);\n endText = fullText.substring(se, fullText.length);\n }\n if(repText.indexOf('user_text')>=0 && this.hint){\n repText = repText.replace('user_text', this.hint);\n }\n editor.value = frontText + repText + endText;\n editor.selectionStart = ss;\n editor.selectionEnd = ss + repText.length;\n editor.scrollTop = st;\n editor.focus();\n}\nfunction wikibar_editFormatByLine(param){\n var editor = param.button.editor;\n var params = param.params;\n clearMessage();\n if(!editor){ return; }\n var repText = wikibar_processSyntaxParams(this.syntax, params);\n if(repText===null){ return; }\n var st = editor.scrollTop;\n var ss = editor.selectionStart;\n var se = editor.selectionEnd;\n var frontText= '';\n var selText = '';\n var endText = '';\n var fullText = editor.value;\n if(se>ss && ss>=0){\n if(this.byBlock){\n frontText = fullText.substring(0, ss);\n selText = fullText.substring(ss,se);\n endText = fullText.substring(se, fullText.length);\n }\n else{\n se = ss;\n }\n }\n if(ss===0 && (se===0 || se == fullText.length) ){\n var m=fullText.match(/(\sn|\sr)/g);\n if(m){\n se = fullText.indexOf(m[0]);\n }else{\n se = fullText.length;\n }\n selText = fullText.substring(0, se);\n endText = fullText.substring(se, fullText.length);\n }\n else if(se==ss && ss>0){\n frontText = fullText.substring(0, ss);\n endText = fullText.substring(se, fullText.length);\n m = frontText.match(/(\sn|\sr)/g);\n if(m){\n ss = frontText.lastIndexOf(m[m.length-1])+1;\n }\n else{\n ss = 0;\n }\n m = endText.match(/(\sn|\sr)/g);\n if(m){\n se += endText.indexOf(m[0]);\n }\n else{\n se = fullText.length;\n }\n frontText = fullText.substring(0, ss);\n selText = fullText.substring(ss,se);\n endText = fullText.substring(se, fullText.length);\n }\n if(selText.length>0){\n repText = repText.replace('user_text', selText);\n }\n if(repText.indexOf('user_text')>=0 && this.hint){\n repText = repText.replace('user_text', this.hint);\n }\n if(this.byBlock){\n if( (frontText.charAt(frontText.length-1)!='\sn') && ss>0 ){\n repText = '\sn' + repText;\n }\n if( (endText.charAt(0)!='\sn') || se==fullText.length){\n repText += '\sn';\n }\n }\n editor.value = frontText + repText + endText;\n editor.selectionStart = ss;\n editor.selectionEnd = ss + repText.length;\n editor.scrollTop = st;\n editor.focus();\n}\nfunction wikibar_editFormatByTableCell(param){\n var editor = param.button.editor;\n var params = param.params;\n clearMessage();\n if(!editor){ return; }\n var repText = wikibar_processSyntaxParams(this.syntax, params);\n if(repText===null){ return; }\n var st = editor.scrollTop;\n var ss = editor.selectionStart;\n var se = editor.selectionEnd;\n var frontText= '';\n var selText = '';\n var endText = '';\n var fullText = editor.value;\n if(ss===0 || ss==fullText.length){\n throw 'not valid cell!';\n }\n se=ss;\n frontText = fullText.substring(0, ss);\n endText = fullText.substring(se, fullText.length);\n i=frontText.lastIndexOf('\sn');\n j=frontText.lastIndexOf('|');\n if(i>j || j<0){\n throw 'not valid cell!';\n }\n ss = j+1;\n i=endText.indexOf('\sn');\n j=endText.indexOf('|');\n if(i<j || j<0){\n throw 'not valid cell!';\n }\n se += j;\n frontText = fullText.substring(0, ss-1);\n selText = fullText.substring(ss,se);\n endText = fullText.substring(se+1, fullText.length);\n if(this.key.substring(0,5)=='align'){\n selText = selText.trim();\n if( selText=='>' || selText=='~' || selText.substring(0,8)=='bgcolor(') {return; }\n }\n if(selText.length>0){\n repText = repText.replace('user_text', selText);\n }\n if(repText.indexOf('user_text')>=0 && this.hint){\n repText = repText.replace('user_text', this.hint);\n }\n editor.value = frontText + repText + endText;\n editor.selectionStart = ss;\n editor.selectionEnd = ss + repText.length - 2;\n editor.scrollTop = st;\n editor.focus();\n}\nfunction wikibar_editSelectAll(param){\n var editor = param.button.editor;\n editor.selectionStart = 0;\n editor.selectionEnd = editor.value.length;\n editor.scrollTop = 0;\n editor.focus();\n}\nfunction wikibar_doPreview(param){\n var theButton = param.button;\n var editor = param.button.editor;\n var wikibar = theButton.parentNode;\n if(!wikibar) { return; }\n title = theButton.tiddlerTitle;\n var editorWrapper = wikibar_resolveTiddlerEditorWrapper(editor);\n var tiddlerWrapper = editorWrapper.parentNode;\n var previewer = document.getElementById('previewer'+title);\n if(previewer){\n previewer.parentNode.removeChild(previewer);\n = 'block';\n visible=true;\n }else{\n previewer = document.createElement('div');\n = 'previewer'+title;\n previewer.className = 'viewer previewer';\n = (editor.offsetHeight) + 'px';\n wikify(editor.value, previewer);\n tiddlerWrapper.insertBefore(previewer, editorWrapper);\n = 'none';\n visible=false;\n }\n var pv=null;\n for(var i=0; i<wikibar.childNodes.length; i++){\n try{\n var btn = wikibar.childNodes[i];\n if(btn.toolItem.key == 'preview'){ pv=btn; }\n if(btn.toolItem.key != 'preview'){\n = visible ? '': 'none';\n }\n }catch(ex){}\n }\n if(!pv) { return; }\n if(visible){\n pv.innerHTML = '<font face=\s"verdana\s">&infin;</font>';\n pv.title = 'preview current tiddler';\n }\n else{\n pv.innerHTML = '<font face=\s"verdana\s">&larr;</font>';\n pv.title = 'back to editor';\n }\n}\nfunction wikibar_doListAddons(param){\n clearMessage();\n var title = param.button.tiddlerTitle;\n var wikibarButton = document.getElementById('wikibarButton'+title);\n var ok=0, fail=0;\n for(var i=0; i<wikibarButton.addons.length; i++){\n var addon=wikibarButton.addons[i];\n if(addon.ok){\n displayMessage('[ o ] ';\n ok++;\n }\n else{\n displayMessage('[ x ] ' + ': ' + addon.error);\n fail++;\n }\n }\n displayMessage('---------------------------------');\n displayMessage(ok + ' ok ; ' + fail + ' failed');\n}\nfunction wikibar_getColorCode(param){\n var cbOnPickColor = function(colorCode, param){\n param.params = colorCode;\n param.button.toolItem.doMore(param);\n };\n wikibarColorTool.openColorPicker(param.button, cbOnPickColor, param);\n}\nfunction wikibar_getLinkUrl(param){\n var url= prompt('Please enter the link target', (this.param? this.param : ''));\n if (url && url.trim().length>0){\n param.params = url;\n this.doMore(param);\n }\n}\nfunction wikibar_getTableRowCol(param){\n var rc= prompt('Please enter (rows x cols) of the table', '2 x 3');\n if (!rc || (rc.trim()).length<=0){ return; }\n var arr = rc.toUpperCase().split('X');\n if(arr.length != 2) { return; }\n for(var i=0; i<arr.length; i++){\n if(isNaN(arr[i].trim())) { return; }\n }\n var rows = parseInt(arr[0].trim(), 10);\n var cols = parseInt(arr[1].trim(), 10);\n var txtTable='';\n for(var r=0; r<rows; r++){\n for(var c=0; c<=cols; c++){\n if(c===0){\n txtTable += '|';\n }else{\n txtTable += ' |';\n }\n }\n txtTable += '\sn';\n }\n if(txtTable.trim().length>0){\n param.params = txtTable.trim();\n this.doMore(param);\n }\n}\nfunction wikibar_getMacroParam(param){\n var p = prompt('Please enter the parameters of macro \s"' + this.key + '\s":' +\n '\snSyntax: ' + this.syntax +\n '\sn\snNote: '+\n '\sn%1,%2,... - parameter needed'+\n '\sn[%1] - optional parameter'+\n '\sn%N - more than one parameter(1~n)'+\n '\sn[%N] - any number of parameters(0~n)'+\n '\sn\snPS:'+\n '\sn1. Parameters should be seperated with space character'+\n '\sn2. Use \s" to wrap the parameter that includes space character, ex: \s"hello world\s"'+\n '\sn3. Input the word(null) for the optional parameter ignored',\n (this.param? this.param : '') );\n if(!p) { return; }\n p=p.readMacroParams();\n for(var i=0; i<p.length; i++){\n var s=p[i].trim();\n if(s.indexOf(' ')>0){ p[i]="'"+s+"'"; }\n if(s.toLowerCase()=='null'){ p[i]=null; }\n }\n param.params = p;\n this.doMore(param);\n}\nfunction wikibar_getMorePalette(unused){\n clearMessage();\n displayMessage('Get more color palettes(*.gpl) from ColorZilla Palettes site', 'http:\s/\s/');\n displayMessage('Save it as a new tiddler with \s"ColorPalettes\s" tag');\n}\nfunction wikibar_createWikibar(title){\n var theWikibar = document.getElementById('wikibar' + title);\n if(theWikibar){\n if(theWikibar.hasChildNodes()){\n = ('block'? 'none':'block');\n return;\n }\n }\n var tiddlerWrapper = document.getElementById('tiddler'+title);\n var theTextarea = wikibar_resolveTiddlerEditor(tiddlerWrapper);\n if(!theTextarea){\n clearMessage();\n displayMessage('WikiBar only works in tiddler edit mode now');\n return;\n }else{\n if(!{ = 'editor'+title; }\n if(!{'editorWrapper'+title; }\n }\n if(theWikibar){\n theWikibar = document.getElementById('wikibar'+title);\n }else{\n var editorWrapper = wikibar_resolveTiddlerEditorWrapper(theTextarea);\n theWikibar = createTiddlyElement(tiddlerWrapper, 'div', 'wikibar'+title, 'toolbar');\n addClass(theWikibar, 'wikibar');\n var previewer = document.getElementById('previewer'+title);\n if(previewer){\n tiddlerWrapper.insertBefore(theWikibar, previewer);\n }else{\n tiddlerWrapper.insertBefore(theWikibar, editorWrapper);\n }\n }\n wikibar_createMenu(theWikibar,wikibarStore,title,theTextarea);\n if(config.options['chkWikibarSetEditorHeight'] && config.options['txtWikibarEditorRows']){\n theTextarea.rows = config.options['txtWikibarEditorRows'];\n }\n setStylesheet(\n '.wikibar{text-align:left;visibility:visible;margin:2px;padding:1px;}.previewer{overflow:auto;display:block;border:1px solid;}#colorPicker{position:absolute;display:none;z-index:10;margin:0px;padding:0px;}#colorPicker table{margin:0px;padding:0px;border:2px solid #000;border-spacing:0px;border-collapse:collapse;}#colorPicker td{margin:0px;padding:0px;border:1px solid;font-size:11px;text-align:center;cursor:auto;}#colorPicker .header{background-color:#fff;}#colorPicker .button{background-color:#fff;cursor:pointer;cursor:hand;}#colorPicker .button:hover{padding-top:3px;padding-bottom:3px;color:#fff;background-color:#136;}#colorPicker .cell{padding:4px;font-size:7px;cursor:crosshair;}#colorPicker .cell:hover{padding:10px;}.wikibarPopup{position:absolute;z-index:10;border:1px solid #014;color:#014;background-color:#cef;}.wikibarPopup table{margin:0;padding:0;border:0;border-spacing:0;border-collapse:collapse;}.wikibarPopup .button:hover{color:#eee;background-color:#014;}.wikibarPopup .disabled{color:#888;}.wikibarPopup .disabled:hover{color:#888;background-color:#cef;}.wikibarPopup tr .seperator hr{margin:0;padding:0;background-color:#cef;width:100%;border:0;border-top:1px dashed #014;}.wikibarPopup tr .icon{font-family:verdana;font-weight:bolder;}.wikibarPopup tr .marker{font-family:verdana;font-weight:bolder;}.wikibarPopup td{font-size:0.9em;padding:2px;}.wikibarPopup input{border:0;border-bottom:1px solid #014;margin:0;padding:0;font-family:arial;font-size:100%;background-color:#fff;}',\n 'WikiBarStyleSheet');\n}\nfunction wikibar_createMenu(place,toolset,title,editor){\n if(!wikibar_isValidMenuItem(toolset)){return;}\n if(!(toolset.TYPE=='MAIN_MENU' || toolset.TYPE=='MENU')){ return; }\n for(var key in toolset){\n if(key.substring(0,9)=='SEPERATOR'){\n wikibar_createMenuSeperator(place);\n continue;\n }\n if(key.substring(0,8)=='DYNAITEM'){\n var dynaTools = toolset[key](title,editor);\n if(dynaTools.TYPE && dynaTools.TYPE=='MENU'){\n wikibar_createMenuItem(place,dynaTools,null,editor,title);\n }else{\n dynaTools.TYPE = 'MENU';\n wikibar_createMenu(place, dynaTools, title, editor);\n }\n continue;\n }\n if((toolset[key].TYPE!='MENU' && toolset[key].TYPE!='MAIN_MENU') && !toolset[key].HANDLER){continue;}\n wikibar_createMenuItem(place,toolset,key,editor,title);\n }\n}\nfunction wikibar_createMenuItem(place,toolset,key,editor,title){\n if(!key){\n var tool = toolset;\n }else{\n tool = toolset[key];\n tool.key = key;\n }\n if(!wikibar_isValidMenuItem(tool)){return;}\n var toolIsOnMainMenu = (toolset.TYPE=='MAIN_MENU');\n var toolIsMenu = (tool.TYPE=='MENU');\n var theButton;\n if(toolIsOnMainMenu){\n theButton = createTiddlyButton(\n place,\n '',\n (tool.TOOLTIP? tool.TOOLTIP : ''),\n (toolIsMenu? wikibar_onClickMenuItem : wikibar_onClickItem),\n 'button');\n theButton.innerHTML = (tool.CAPTION? tool.CAPTION : key);\n theButton.isOnMainMenu = true;\n addClass(theButton, (toolIsMenu? 'menu' : 'item'));\n place.appendChild( document.createTextNode('\sn') );\n if(!toolIsMenu){\n if(config.options['chkWikibarPopmenuOnMouseOver']){\n theButton.onmouseover = function(e){ wikibarPopup.remove(); };\n }\n }\n }else{\n theButton=createTiddlyElement(place, 'tr',key,'button');\n theButton.title = (tool.TOOLTIP? tool.TOOLTIP : '');\n theButton.onclick = (toolIsMenu? wikibar_onClickMenuItem : wikibar_onClickItem);\n var tdL = createTiddlyElement(theButton, 'td','','marker');\n var td = createTiddlyElement(theButton, 'td');\n var tdR = createTiddlyElement(theButton, 'td','','marker');\n td.innerHTML = (tool.CAPTION? tool.CAPTION : key);\n if(toolIsMenu){\n tdR.innerHTML='&nbsp;&nbsp;&rsaquo;';\n }\n if(tool.SELECTED){\n tdL.innerHTML = '&radic; ';\n addClass(theButton, 'selected');\n }\n if(tool.DISABLED){\n addClass(theButton, 'disabled');\n }\n }\n theButton.tiddlerTitle = title;\n theButton.toolItem = tool;\n theButton.editor = editor;\n theButton.tabIndex = 999;\n if(toolIsMenu){\n if(config.options['chkWikibarPopmenuOnMouseOver']){\n theButton.onmouseover = wikibar_onClickMenuItem;\n }\n }\n}\nfunction wikibar_createMenuSeperator(place){\n if(,7)=='wikibar') { return; }\n var onclickSeperator=function(e){\n if(!e){ e = window.event; }\n e.cancelBubble = true;\n if (e.stopPropagation){ e.stopPropagation(); }\n return(false);\n };\n var theButton=createTiddlyElement(place,'tr','','seperator');\n var td = createTiddlyElement(theButton, 'td','','seperator');\n td.colSpan=3;\n theButton.onclick=onclickSeperator;\n td.innerHTML = '<hr>';\n}\nfunction wikibar_genWikibarAbout(){\n var toolset={};\n toolset.version = {\n CAPTION: '<center>WikiBar ' +\n config.macros.wikibar.major + '.' +\n config.macros.wikibar.minor + '.' +\n config.macros.wikibar.revision +\n (config.macros.wikibar.beta? ' beta '+config.macros.wikibar.beta : '') +\n '</center>',\n HANDLER: function(){}\n };\n toolset.SEPERATOR = {};\n = {\n CAPTION: '<center>Arphen Lin<br></center>',\n TOOLTIP: 'send mail to the author',\n HANDLER: function(){''); }\n };\n = {\n CAPTION: '<center></center>',\n TOOLTIP: 'go to the web site of WikiBar',\n HANDLER: function(){'http:\s/\s/'); }\n };\n return toolset;\n}\nfunction wikibar_genWikibarOptions(title, editor){\n var toolset={};\n toolset.popOnMouseOver = {\n CAPTION:'popup menu on mouse over',\n SELECTED: config.options['chkWikibarPopmenuOnMouseOver'],\n HANDLER: function(param){\n config.options['chkWikibarPopmenuOnMouseOver'] = !config.options['chkWikibarPopmenuOnMouseOver'];\n saveOptionCookie('chkWikibarPopmenuOnMouseOver');\n var title = param.button.tiddlerTitle;\n var wikibar = document.getElementById('wikibar'+title);\n if(wikibar){ wikibar.parentNode.removeChild(wikibar); }\n wikibar_createWikibar(title);\n }\n };\n toolset.setEditorSize = {\n CAPTION:'set editor height: <input id=\s"txtWikibarEditorRows\s" type=text size=1 MAXLENGTH=3 value=\s"' +\n (config.options['txtWikibarEditorRows']? config.options['txtWikibarEditorRows']:editor.rows) + '\s"> ok',\n HANDLER: function(param){\n var input = document.getElementById('txtWikibarEditorRows');\n if(input){\n var rows = parseInt(input.value, 10);\n if(!isNaN(rows)){\n var editor = param.button.editor;\n editor.rows = rows;\n }else{\n rows=config.maxEditRows;\n }\n config.options['txtWikibarEditorRows'] = rows;\n saveOptionCookie('txtWikibarEditorRows');\n config.maxEditRows = rows;\n }\n }\n };\n toolset.setEditorSizeOnLoadingWikibar = {\n CAPTION:'set editor height on loading wikibar',\n SELECTED: config.options['chkWikibarSetEditorHeight'],\n HANDLER: function(param){\n config.options['chkWikibarSetEditorHeight'] = !config.options['chkWikibarSetEditorHeight'];\n saveOptionCookie('chkWikibarSetEditorHeight');\n if(config.options['chkWikibarSetEditorHeight']){\n var rows = config.options['txtWikibarEditorRows'];\n if(!isNaN(rows)){ rows = 15; }\n var editor = param.button.editor;\n editor.rows = rows;\n config.options['txtWikibarEditorRows'] = rows;\n saveOptionCookie('txtWikibarEditorRows');\n }\n }\n };\n toolset.SEPERATOR = {};\n toolset.update = {\n CAPTION: 'check for updates',\n DISABLED: true,\n HANDLER: function(){}\n };\n return toolset;\n}\nfunction wikibar_genPaletteSelector(){\n try{\n var cpTiddlers = store.getTaggedTiddlers('ColorPalettes');\n if(!cpTiddlers) { return; }\n var palettes=[];\n palettes.push(wikibarColorTool.defaultPaletteName);\n for(var i=0; i<cpTiddlers.length; i++){\n palettes.push(cpTiddlers[i].title.trim());\n }\n var toolset={};\n for(i=0; i<palettes.length; i++){\n toolset[palettes[i]] = {\n TOOLTIP: palettes[i],\n SELECTED: (palettes[i]==wikibarColorTool.paletteName),\n HANDLER: wikibar_doSelectPalette\n };\n }\n return toolset;\n }catch(ex){ return null; }\n}\nfunction wikibar_onClickItem(e){\n if(!e){ e = window.event; }\n var theTarget = resolveTarget(e);\n if(theTarget.tagName=='INPUT'){\n e.cancelBubble = true;\n if (e.stopPropagation){ e.stopPropagation(); }\n return;\n }\n var theButton = wikibar_resolveTargetButton(theTarget);\n if(!theButton){ return(false); }\n var o = theButton.toolItem;\n if(!o) { return; }\n var param = {\n event: e,\n button: theButton\n };\n if(o.HANDLER){ o.HANDLER(param); }\n if(o.DISABLED){\n e.cancelBubble = true;\n if (e.stopPropagation){ e.stopPropagation(); }\n }\n return(false);\n}\nfunction wikibar_onClickMenuItem(e){\n if(!e){ e = window.event; }\n var theButton = wikibar_resolveTargetButton(resolveTarget(e));\n if(!theButton){ return(false); }\n e.cancelBubble = true;\n if (e.stopPropagation){ e.stopPropagation(); }\n var title = theButton.tiddlerTitle;\n var editor = theButton.editor;\n var tool = theButton.toolItem;\n if(!tool) { return; }\n var popup = wikibarPopup.create(this);\n if(popup){\n wikibar_createMenu(popup,tool,title,editor);\n if(!popup.hasChildNodes()){\n wikibarPopup.remove();\n }else{\n, false);\n }\n }\n return(false);\n}\nvar wikibarColorTool = {\n defaultPaletteName : 'default',\n defaultColumns : 16,\n defaultPalette : [\n '#FFF','#DDD','#CCC','#BBB','#AAA','#999','#666','#333','#111','#000','#FC0','#F90','#F60','#F30','#C30','#C03',\n '#9C0','#9D0','#9E0','#E90','#D90','#C90','#FC3','#FC6','#F96','#F63','#600','#900','#C00','#F00','#F36','#F03',\n '#CF0','#CF3','#330','#660','#990','#CC0','#FF0','#C93','#C63','#300','#933','#C33','#F33','#C36','#F69','#F06',\n '#9F0','#CF6','#9C3','#663','#993','#CC3','#FF3','#960','#930','#633','#C66','#F66','#903','#C39','#F6C','#F09',\n '#6F0','#9F6','#6C3','#690','#996','#CC6','#FF6','#963','#630','#966','#F99','#F39','#C06','#906','#F3C','#F0C',\n '#3F0','#6F3','#390','#6C0','#9F3','#CC9','#FF9','#C96','#C60','#C99','#F9C','#C69','#936','#603','#C09','#303',\n '#0C0','#3C0','#360','#693','#9C6','#CF9','#FFC','#FC9','#F93','#FCC','#C9C','#969','#939','#909','#636','#606',\n '#060','#3C3','#6C6','#0F0','#3F3','#6F6','#9F9','#CFC','#9CF','#FCF','#F9F','#F6F','#F3F','#F0F','#C6C','#C3C',\n '#030','#363','#090','#393','#696','#9C9','#CFF','#39F','#69C','#CCF','#C9F','#96C','#639','#306','#90C','#C0C',\n '#0F3','#0C3','#063','#396','#6C9','#9FC','#9CC','#06C','#369','#99F','#99C','#93F','#60C','#609','#C3F','#C0F',\n '#0F6','#3F6','#093','#0C6','#3F9','#9FF','#699','#036','#039','#66F','#66C','#669','#309','#93C','#C6F','#90F',\n '#0F9','#6F9','#3C6','#096','#6FF','#6CC','#366','#069','#36C','#33F','#33C','#339','#336','#63C','#96F','#60F',\n '#0FC','#6FC','#3C9','#3FF','#3CC','#399','#033','#39C','#69F','#00F','#00C','#009','#006','#003','#63F','#30F',\n '#0C9','#3FC','#0FF','#0CC','#099','#066','#3CF','#6CF','#09C','#36F','#0CF','#09F','#06F','#03F','#03C','#30C'\n ],\n colorPicker : null,\n pickColorHandler: null,\n userData: null\n};\nwikibarColorTool.paletteName = wikibarColorTool.defaultPaletteName;\nwikibarColorTool.columns = wikibarColorTool.defaultColumns;\nwikibarColorTool.palette = wikibarColorTool.defaultPalette;\nwikibarColorTool.onPickColor = function(e){\n if (!e){ e = window.event; }\n var theCell = resolveTarget(e);\n if(!theCell){ return(false); }\n color = theCell.bgColor.toLowerCase();\n if(!color) { return; }\n wikibarColorTool.displayColorPicker(false);\n if(wikibarColorTool.pickColorHandler){\n wikibarColorTool.pickColorHandler(color, wikibarColorTool.userData);\n }\n return(false);\n};\nwikibarColorTool.onMouseOver = function(e){\n if (!e){ e = window.event; }\n var theButton = resolveTarget(e);\n if(!theButton){ return(false); }\n if(!wikibarColorTool) { return; }\n color = theButton.bgColor.toUpperCase();\n if(!color) { return; }\n td=document.getElementById('colorPickerInfo');\n if(!td) { return; }\n td.bgColor = color;\n td.innerHTML = '<span style=\s"color:#000;\s">'+color+'</span>&nbsp;&nbsp;&nbsp;' +\n '<span style=\s"color:#fff;\s">'+color+'</span>';\n e.cancelBubble = true;\n if (e.stopPropagation){ e.stopPropagation(); }\n return(false);\n};\nwikibarColorTool.openColorPicker = function(theTarget, pickColorHandler, userData){\n wikibarColorTool.skipClickDocumentEvent = true;\n wikibarColorTool.pickColorHandler = pickColorHandler;\n wikibarColorTool.userData = userData;\n wikibarColorTool.moveColorPicker(theTarget);\n};\nwikibarColorTool.convert3to6HexColor = function(c){\n c=c.trim();\n var rx=/^\s#(\sd|[a-f])(\sd|[a-f])(\sd|[a-f])$/gi;\n return (rx.test(c)? c.replace(rx, '#$1$1$2$2$3$3') : c);\n};\nwikibarColorTool.numToHexColor = function (n){\n if(typeof(n)=='number' && (n>=0 && n<=255)) {\n s = n.toString(16).toLowerCase();\n return ((s.length==1)? '0'+s : s);\n }else{\n return null;\n }\n};\nwikibarColorTool.renderColorPalette = function(){\n if(wikibarColorTool.paletteName==wikibarColorTool.defaultPaletteName){\n wikibarColorTool.palette=wikibarColorTool.defaultPalette;\n wikibarColorTool.columns=wikibarColorTool.defaultColumns;\n return;\n }\n tiddlerText = (store.getTiddlerText(wikibarColorTool.paletteName, '')).trim();\n if(tiddlerText.length<=0) { return; }\n var cpContents = tiddlerText.split('\sn');\n var colors=[];\n columns = wikibarColorTool.defaultColumns;\n var tmpArray=null;\n errCount=0;\n for(var i=0; i<cpContents.length; i++){\n cpLine=cpContents[i].trim();\n if( (!cpLine) || (cpLine.length<=0) || (cpLine.charAt(0) == '#') ){ continue; }\n if(cpLine.substring(0,8).toLowerCase()=='columns:'){\n tmpArray = cpLine.split(':');\n try{\n columns = parseInt(tmpArray[1],10);\n }catch(ex){\n columns = wikibarColorTool.defaultColumns;\n }\n }else{\n tmpArray = cpLine.replace('\st', ' ').split(/[ ]{1,}/);\n try{\n color='';\n for(var j=0; j<3; j++){\n c=parseInt(tmpArray[j].trim(), 10);\n if(isNaN(c)){\n break;\n }else{\n c=wikibarColorTool.numToHexColor(c);\n if(!c) {break;}\n color+=c;\n }\n }\n if(color.length==6){\n colors.push('#'+color);\n } else {\n throw 'error';\n }\n }catch(ex){\n }\n }\n }\n if(colors.length>0){\n wikibarColorTool.palette = colors;\n wikibarColorTool.columns = columns;\n }else{\n throw 'renderColorPalette(): No color defined in the palette.';\n }\n};\nwikibarColorTool.displayColorPicker = function(visible){\n if(wikibarColorTool.colorPicker){\n = (visible? 'block' : 'none');\n }\n};\nwikibarColorTool.moveColorPicker = function(theTarget){\n if(!wikibarColorTool.colorPicker){\n wikibarColorTool.createColorPicker();\n }\n var cp = wikibarColorTool.colorPicker;\n var rootLeft = findPosX(theTarget);\n var rootTop = findPosY(theTarget);\n var popupLeft = rootLeft;\n var popupTop = rootTop;\n var popupWidth = cp.offsetWidth;\n var winWidth = findWindowWidth();\n if(popupLeft + popupWidth > winWidth){\n popupLeft = winWidth - popupWidth;\n }\n = popupLeft + 'px';\n = popupTop + 'px';\n wikibarColorTool.displayColorPicker(true);\n};\nwikibarColorTool.createColorPicker = function(unused, palette){\n if(palette){ wikibarColorTool.paletteName=palette; }\n wikibarColorTool.renderColorPalette();\n wikibarColorTool.colorPicker = document.createElement('div');\n = 'colorPicker';\n document.body.appendChild(wikibarColorTool.colorPicker);\n var theTable = document.createElement('table');\n wikibarColorTool.colorPicker.appendChild(theTable);\n var theTR = document.createElement('tr');\n theTable.appendChild(theTR);\n var theTD = document.createElement('td');\n theTD.className = 'header';\n theTD.colSpan = wikibarColorTool.columns;\n theTD.innerHTML = wikibarColorTool.paletteName;\n theTR.appendChild(theTD);\n for(var i=0; i<wikibarColorTool.palette.length; i++){\n if((i%wikibarColorTool.columns)===0){\n theTR = document.createElement('tr');\n theTable.appendChild(theTR);\n }\n theTD = document.createElement('td');\n theTD.className = 'cell';\n theTD.bgColor = wikibarColorTool.convert3to6HexColor(wikibarColorTool.palette[i]);\n theTD.onclick = wikibarColorTool.onPickColor;\n theTD.onmouseover = wikibarColorTool.onMouseOver;\n theTR.appendChild(theTD);\n }\n rest = wikibarColorTool.palette.length % wikibarColorTool.columns;\n if(rest>0){\n theTD = document.createElement('td');\n theTD.colSpan = wikibarColorTool.columns-rest;\n theTD.bgColor = '#000000';\n theTR.appendChild(theTD);\n }\n theTR = document.createElement('tr');\n theTable.appendChild(theTR);\n theTD = document.createElement('td');\n theTD.colSpan = wikibarColorTool.columns;\n = 'colorPickerInfo';\n theTR.appendChild(theTD);\n};\nwikibarColorTool.onDocumentClick = function(e){\n if (!e){ e = window.event; }\n if(wikibarColorTool.skipClickDocumentEvent) {\n wikibarColorTool.skipClickDocumentEvent = false;\n return true;\n }\n if((!e.eventPhase) || e.eventPhase == Event.BUBBLING_PHASE || e.eventPhase == Event.AT_TARGET){\n wikibarColorTool.displayColorPicker(false);\n }\n return true;\n};\nfunction wikibar_doSelectPalette(param){\n clearMessage();\n var theButton = param.button;\n if(!theButton.toolItem.key) { return; }\n var palette = theButton.toolItem.key;\n var oldPaletteName = wikibarColorTool.paletteName;\n if(oldPaletteName != palette){\n try{\n wikibarColorTool.createColorPicker(theButton, palette);\n displayMessage('Palette \s"'+palette+'\s" ('+ wikibarColorTool.palette.length +' colors) is selected');\n }catch(ex){\n errMsg = ex;\n if(errMsg.substring(0,18)=='renderColorPalette'){\n displayMessage('Invalid palette \s"' + palette + '\s", please check it out!');\n wikibarColorTool.createColorPicker(theButton, oldPaletteName);\n }\n }\n }\n}\nvar wikibarPopup = {\n skipClickDocumentEvent: false,\n stack: []\n};\nwikibarPopup.resolveRootPopup = function(o){\n if(o.isOnMainMenu){ return null; }\n if(o.className.substring(0,12)=='wikibarPopup'){ return o;}\n return wikibarPopup.resolveRootPopup(o.parentNode);\n};\nwikibarPopup.create = function(root){\n for(var i=0; i<wikibarPopup.stack.length; i++){\n var p=wikibarPopup.stack[i];\n if(p.root==root){\n wikibarPopup.removeFrom(i+1);\n return null;\n }\n }\n var rootPopup = wikibarPopup.resolveRootPopup(root);\n if(!rootPopup){\n wikibarPopup.remove();\n }else{\n wikibarPopup.removeFromRootPopup(rootPopup);\n }\n var popup = createTiddlyElement(document.body,'div','wikibarPopup'+root.toolItem.key,'wikibarPopup');\n var pop = createTiddlyElement(popup,'table','','');\n wikibarPopup.stack.push({rootPopup: rootPopup, root: root, popup: popup});\n return pop;\n};\ = function(unused,slowly){\n var curr = wikibarPopup.stack[wikibarPopup.stack.length-1];\n var overlayWidth = 1;\n var rootLeft, rootTop, rootWidth, rootHeight, popupLeft, popupTop, popupWidth;\n if(curr.rootPopup){\n rootLeft = findPosX(curr.rootPopup);\n rootTop = findPosY(curr.root);\n rootWidth = curr.rootPopup.offsetWidth;\n popupLeft = rootLeft + rootWidth - overlayWidth;\n popupTop = rootTop;\n }else{\n rootLeft = findPosX(curr.root);\n rootTop = findPosY(curr.root);\n rootHeight = curr.root.offsetHeight;\n popupLeft = rootLeft;\n popupTop = rootTop + rootHeight;\n }\n var winWidth = findWindowWidth();\n popupWidth = curr.popup.offsetWidth;\n if(popupLeft + popupWidth > winWidth){\n popupLeft = rootLeft - popupWidth + overlayWidth;\n }\n = popupLeft + 'px';\n = popupTop + 'px';\n = 'block';\n addClass(curr.root, 'highlight');\n if(config.options.chkAnimate){\n anim.startAnimating(new Scroller(curr.popup,slowly));\n }else{\n window.scrollTo(0,ensureVisible(curr.popup));\n }\n};\nwikibarPopup.remove = function(){\n if(wikibarPopup.stack.length > 0){\n wikibarPopup.removeFrom(0);\n }\n};\nwikibarPopup.removeFrom = function(from){\n for(var t=wikibarPopup.stack.length-1; t>=from; t--){\n var p = wikibarPopup.stack[t];\n removeClass(p.root,'highlight');\n p.popup.parentNode.removeChild(p.popup);\n }\n wikibarPopup.stack = wikibarPopup.stack.slice(0,from);\n};\nwikibarPopup.removeFromRootPopup = function(from){\n for(var t=0; t<wikibarPopup.stack.length; t++){\n var p = wikibarPopup.stack[t];\n if(p.rootPopup==from){\n wikibarPopup.removeFrom(t);\n break;\n }\n }\n};\nwikibarPopup.onDocumentClick = function(e){\n if (!e){ e = window.event; }\n if(wikibarPopup.skipClickDocumentEvent){\n wikibarPopup.skipClickDocumentEvent=false;\n return true;\n }\n if((!e.eventPhase) || e.eventPhase == Event.BUBBLING_PHASE || e.eventPhase == Event.AT_TARGET){\n wikibarPopup.remove();\n }\n return true;\n};\nvar wikibarStore = {\n TYPE: 'MAIN_MENU',\n help:{\n TYPE:'MENU',\n CAPTION: '<font face=\s"verdana\s">?</font>',\n TOOLTIP: 'about WikiBar',\n options:{\n TYPE:'MENU',\n DYNAITEM: wikibar_genWikibarOptions\n },\n about:{\n TYPE:'MENU',\n DYNAITEM: wikibar_genWikibarAbout\n }\n },\n preview:{\n TOOLTIP: 'preview this tiddler',\n CAPTION: '<font face=\s"verdana\s">&infin;</font>',\n HANDLER: wikibar_doPreview\n },\n line:{\n TOOLTIP: 'horizontal line',\n CAPTION: '<font face=\s"verdana\s">&mdash;</font>',\n syntax: '\sn----\sn',\n HANDLER: wikibar_editFormatByCursor\n },\n crlf:{\n TOOLTIP: 'new line',\n CAPTION: '<font face=\s"verdana\s">&para;</font>',\n syntax: '\sn',\n HANDLER: wikibar_editFormatByCursor\n },\n selectAll:{\n TOOLTIP: 'select all',\n CAPTION: '<font face=\s"verdana\s">&sect;</font>',\n HANDLER: wikibar_editSelectAll\n },\n deleteSelected:{\n TOOLTIP: 'delete selected',\n CAPTION: '<font face=\s"verdana\s">&times;</font>',\n syntax: '',\n HANDLER: wikibar_editFormat\n },\n textFormat:{\n TYPE: 'MENU',\n CAPTION: 'text',\n TOOLTIP: 'text formatters',\n ignore:{\n TOOLTIP: 'ignore wiki word',\n CAPTION: 'ignore wikiWord',\n syntax: '~user_text',\n hint: 'wiki_word',\n HANDLER: wikibar_editFormatByWord\n },\n bolder:{\n TOOLTIP: 'bolder text',\n CAPTION: '<strong>bolder</strong>',\n syntax: "''user_text''",\n hint: 'bold_text',\n HANDLER: wikibar_editFormatByWord\n },\n italic:{\n TOOLTIP: 'italic text',\n CAPTION: '<em>italic</em>',\n syntax: '\s/\s/user_text\s/\s/',\n hint: 'italic_text',\n HANDLER: wikibar_editFormatByWord\n },\n underline:{\n TOOLTIP: 'underline text',\n CAPTION: '<u>underline</u>',\n syntax: '__user_text__',\n hint: 'underline_text',\n HANDLER: wikibar_editFormatByWord\n },\n strikethrough:{\n TOOLTIP: 'strikethrough text',\n CAPTION: '<strike>strikethrough</strike>',\n syntax: '==user_text==',\n hint: 'strikethrough_text',\n HANDLER: wikibar_editFormatByWord\n },\n superscript:{\n TOOLTIP: 'superscript text',\n CAPTION: 'X<sup>superscript</sup>',\n syntax: '^^user_text^^',\n hint: 'superscript_text',\n HANDLER: wikibar_editFormatByWord\n },\n subscript:{\n TOOLTIP: 'subscript text',\n CAPTION: 'X<sub>subscript</sub>',\n syntax: '~~user_text~~',\n hint: 'subscript_text',\n HANDLER: wikibar_editFormatByWord\n },\n comment:{\n TOOLTIP: 'comment text',\n CAPTION: 'comment text',\n syntax: '/%user_text%/',\n hint: 'comment_text',\n HANDLER: wikibar_editFormatByWord\n },\n monospaced:{\n TOOLTIP: 'monospaced text',\n CAPTION: '<code>monospaced</code>',\n syntax: '{{{user_text}}}',\n hint: 'monospaced_text',\n HANDLER: wikibar_editFormatByWord\n }\n },\n paragraph:{\n TYPE: 'MENU',\n TOOLTIP: 'paragarph formatters',\n list:{\n TYPE: 'MENU',\n TOOLTIP: 'list tools',\n bullet:{\n TOOLTIP: 'bullet point',\n syntax: '*user_text',\n hint: 'bullet_text',\n HANDLER: wikibar_editFormatByLine\n },\n numbered:{\n TOOLTIP: 'numbered list',\n syntax: '#user_text',\n hint: 'numbered_text',\n HANDLER: wikibar_editFormatByLine\n }\n },\n heading:{\n TYPE: 'MENU',\n heading1:{\n CAPTION:'<h1>Heading 1</h1>',\n TOOLTIP: 'Heading 1',\n syntax: '!user_text',\n hint: 'heading_1',\n HANDLER: wikibar_editFormatByLine\n },\n heading2:{\n CAPTION:'<h2>Heading 2<h2>',\n TOOLTIP: 'Heading 2',\n syntax: '!!user_text',\n hint: 'heading_2',\n HANDLER: wikibar_editFormatByLine\n },\n heading3:{\n CAPTION:'<h3>Heading 3</h3>',\n TOOLTIP: 'Heading 3',\n syntax: '!!!user_text',\n hint: 'heading_3',\n HANDLER: wikibar_editFormatByLine\n },\n heading4:{\n CAPTION:'<h4>Heading 4</h4>',\n TOOLTIP: 'Heading 4',\n syntax: '!!!!user_text',\n hint: 'heading_4',\n HANDLER: wikibar_editFormatByLine\n },\n heading5:{\n CAPTION:'<h5>Heading 5</h5>',\n TOOLTIP: 'Heading 5',\n syntax: '!!!!!user_text',\n hint: 'heading_5',\n HANDLER: wikibar_editFormatByLine\n }\n },\n comment:{\n TYPE: 'MENU',\n commentByLine:{\n CAPTION:'comment by line',\n TOOLTIP: 'line comment',\n syntax: '/%user_text%/',\n hint: 'comment_text',\n HANDLER: wikibar_editFormatByLine\n },\n commentByBlock:{\n CAPTION:'comment by block',\n TOOLTIP: 'block comment',\n syntax: '/%\snuser_text\sn%/',\n hint: 'comment_text',\n byBlock: true,\n HANDLER: wikibar_editFormatByLine\n }\n },\n monospaced:{\n TYPE: 'MENU',\n monosByLine:{\n CAPTION: 'monospaced by line',\n TOOLTIP: 'line monospaced',\n syntax: '{{{\snuser_text\sn}}}',\n hint: 'monospaced_text',\n HANDLER: wikibar_editFormatByLine\n },\n monosByBlock:{\n CAPTION: 'monospaced by block',\n TOOLTIP: 'block monospaced',\n syntax: '{{{\snuser_text\sn}}}',\n hint: 'monospaced_text',\n byBlock: true,\n HANDLER: wikibar_editFormatByLine\n }\n },\n quote:{\n TYPE: 'MENU',\n quoteByLine:{\n CAPTION: 'quote by line',\n TOOLTIP: 'line quote',\n syntax: '>user_text',\n hint: 'quote_text',\n HANDLER: wikibar_editFormatByLine\n },\n quoteByBlcok:{\n CAPTION: 'quote by block',\n TOOLTIP: 'block quote',\n syntax: '<<<\snuser_text\sn<<<',\n hint: 'quote_text',\n byBlock: true,\n HANDLER: wikibar_editFormatByLine\n }\n },\n plugin:{\n TYPE: 'MENU',\n code:{\n CAPTION: 'code area',\n TOOLTIP: 'block monospaced for plugin',\n syntax: '\sn\s/\s/{{{\snuser_text\sn\s/\s/}}}\sn',\n hint: 'monospaced_plugin_code',\n byBlock: true,\n HANDLER: wikibar_editFormatByLine\n },\n commentByLine:{\n CAPTION: 'comment by line',\n TOOLTIP: 'line comment',\n syntax: '\s/\s/user_text',\n hint: 'plugin_comment',\n HANDLER: wikibar_editFormatByLine\n },\n commentByBlock:{\n CAPTION: 'comment by block',\n TOOLTIP: 'block comment',\n syntax: '\s/\s***\snuser_text\sn***\s/',\n hint: 'plugin_comment',\n byBlock: true,\n HANDLER: wikibar_editFormatByLine\n }\n },\n css:{\n TYPE: 'MENU',\n code:{\n CAPTION: 'code area',\n TOOLTIP: 'block monospaced for css',\n syntax: '\sn\snuser_text\sn\sn',\n hint: 'monospaced_css_code',\n byBlock: true,\n HANDLER: wikibar_editFormatByLine\n },\n commentByLine:{\n CAPTION: 'comment by line',\n TOOLTIP: 'line comment',\n syntax: '',\n hint: 'css_comment',\n HANDLER: wikibar_editFormatByLine\n },\n commentByBlock:{\n CAPTION: 'comment by block',\n TOOLTIP: 'block comment',\n syntax: '',\n hint: 'css_comment',\n byBlock: true,\n HANDLER: wikibar_editFormatByLine\n }\n }\n },\n color:{\n TYPE: 'MENU',\n TOOLTIP: 'color tools',\n highlight:{\n CAPTION:'highlight text',\n TOOLTIP: 'highlight text',\n syntax: '@@user_text@@',\n hint: 'highlight_text',\n HANDLER: wikibar_editFormatByWord\n },\n color:{\n CAPTION:'text color',\n TOOLTIP: 'text color',\n hint: 'your_text',\n syntax: '@@color(%1):user_text@@',\n HANDLER: wikibar_getColorCode,\n doMore: wikibar_editFormatByWord\n },\n bgcolor:{\n CAPTION:'background color',\n TOOLTIP: 'background color',\n hint: 'your_text',\n syntax: '@@bgcolor(%1):user_text@@',\n HANDLER: wikibar_getColorCode,\n doMore: wikibar_editFormatByWord\n },\n colorcode:{\n CAPTION:'color code',\n TOOLTIP: 'insert color code',\n syntax: '%1',\n HANDLER: wikibar_getColorCode,\n doMore: wikibar_editFormatByCursor\n },\n 'color palette':{\n TYPE:'MENU',\n DYNAITEM: wikibar_genPaletteSelector,\n SEPERATOR:{},\n morePalette:{\n CAPTION:'more palettes',\n TOOLTIP:'get more palettes',\n HANDLER: wikibar_getMorePalette\n }\n }\n },\n link:{\n TYPE: 'MENU',\n TOOLTIP: 'insert link',\n wiki:{\n CAPTION:'wiki link',\n TOOLTIP: 'wiki link',\n syntax: '[[user_text]]',\n hint: 'wiki_word',\n HANDLER: wikibar_editFormatByWord\n },\n pretty:{\n CAPTION: 'pretty link',\n TOOLTIP: 'pretty link',\n syntax: '[[user_text|%1]]',\n hint: 'pretty_word',\n param: 'PrettyLink Target',\n HANDLER: wikibar_getLinkUrl,\n doMore: wikibar_editFormatByWord\n },\n url:{\n TOOLTIP: 'url link',\n syntax: '[[user_text|%1]]',\n hint: 'your_text',\n param: 'http:\s/\s/...',\n HANDLER: wikibar_getLinkUrl,\n doMore: wikibar_editFormatByWord\n },\n image:{\n TOOLTIP: 'image link',\n syntax: '[img[user_text|%1]]',\n hint: 'alt_text',\n param: 'image/icon.jpg',\n HANDLER: wikibar_getLinkUrl,\n doMore: wikibar_editFormatByWord\n }\n },\n macro:{},\n more:{\n TYPE: 'MENU',\n TOOLTIP: 'more tools',\n table:{\n TYPE: 'MENU',\n TOOLTIP: 'table',\n table:{\n CAPTION:'create table',\n TOOLTIP: 'create a new table',\n syntax: '\sn%1\sn',\n HANDLER: wikibar_getTableRowCol,\n doMore: wikibar_editFormatByWord\n },\n header:{\n TOOLTIP: 'table header text',\n syntax: '|user_text|c',\n hint: 'table_header',\n HANDLER: wikibar_editFormatByWord\n },\n cell:{\n TOOLTIP: 'create a tabel cell',\n syntax: '|user_text|',\n hint: 'your_text',\n HANDLER: wikibar_editFormatByWord\n },\n columnHeader:{\n CAPTION:'column header',\n TOOLTIP: 'create a column header cell',\n syntax: '|!user_text|',\n hint: 'column_header',\n HANDLER: wikibar_editFormatByWord\n },\n cell:{\n TYPE: 'MENU',\n CAPTION: 'cell options',\n bgcolor:{\n CAPTION: 'background color',\n TOOLTIP: 'cell bgcolor',\n syntax: '|bgcolor(%1):user_text|',\n hint: 'your_text',\n HANDLER: wikibar_getColorCode,\n doMore: wikibar_editFormatByTableCell\n },\n alignLeft:{\n CAPTION: 'align left',\n TOOLTIP: 'left align cell text',\n syntax: '|user_text|',\n hint: 'your_text',\n HANDLER: wikibar_editFormatByTableCell\n },\n alignCenter:{\n CAPTION: 'align center',\n TOOLTIP: 'center align cell text',\n syntax: '| user_text |',\n hint: 'your_text',\n HANDLER: wikibar_editFormatByTableCell\n },\n alignRight:{\n CAPTION: 'align right',\n TOOLTIP: 'right align cell text',\n syntax: '| user_text|',\n hint: 'your_text',\n HANDLER: wikibar_editFormatByTableCell\n }\n }\n },\n html:{\n TYPE: 'MENU',\n html:{\n CAPTION: '&lt;html&gt;',\n TOOLTIP: 'html tag',\n syntax: '<html>\snuser_text\sn</html>',\n hint: 'html_content',\n byBlock: true,\n HANDLER: wikibar_editFormatByLine\n }\n }\n },\n addon:{\n TYPE: 'MENU',\n TOOLTIP:'3rd party tools',\n 'about addons':{\n TOOLTIP: 'list loaded addons',\n HANDLER: wikibar_doListAddons\n },\n SEPERATOR:{}\n }\n};\naddEvent(document, 'click', wikibarColorTool.onDocumentClick);\naddEvent(document, 'click', wikibarPopup.onDocumentClick);\nwikibar_install();\n//}}}
*Proceso de selección de Moodle como entorno para trabajar\n** [[Mediawiki]]\n** [[Tikiwiki]]\n** [[Moodle]]\n** [[DFWiki]] -> [[WikiBook]]\n*[[Aplicaciones pedagógicas de herramientas Open Source]]\n**ASAI \n*** + Datos estadísticos con varios años en el saco.\n*** + experiencia evolutiva\n*** + aulas abiertas a google , \n*** + mezclamos open source, creative commons, construccionismo, desarrollo y retorno a la comunidad\n** GSI \n*** + Internalmail \n*** + Simulació\n*** + Roleplay \n** DFWikiteam
I'm currently keeping this blogs:\n*[[spanish|]] \n*[[catalan|]]\n*[[blog in english at|]]\n\nAnd [[my websites]]
¿Que hacer con un ordenador 386 en un aula de 50 alumnos?\n*computador lento - elemento de solcializacion, a cuidar entre todos, todos buscar programas nuevos utiles, un elemento valioso a compartir... en lugar de un mecanismo neoliberal de "cuanto mas tengo mas poseeo" las cosas se pueden compartir de una forma distinta\n"todo lo que no se da se pierde" dominique la pierre en la ciudad de la alegria\nparadigma economia...\n* si todos tuvieramos coche... no se podria circular\n* la riqueza de unos supone la pobreza de otros\n.... este paradigma se rompe con la sociedad de la información\n* cuanta más gente se puede comunicar más util és... valor añadido con la extension del disfrute del bien\n! la edición dominical del new your times ocupa 4.7 millones de toneladas metricas papel.\n"conoci a un hombre que aprendió tanstas cosas en su vida que no tuvo tiempo de pensar en ellas" A. Machado. Juan de Mairena.\n*hay que llevar lo inmaterial (información conocimiento) donde esta lo material\nEconomia: Ecos nomos. Ecos. lo que nos rodea. Nomos: la ley\nEthos. la costumbre\n!Ley de utilidad de la red aumenta con el cuadrado del numero de usuarios.\nEtica de hacker\n1.El mundo está lleno de problemas fascinantes\nesperando a ser resueltos\n2. Nadie debería tener que resolver un problema\nya resuelto\n3. El aburrimiento es malo e insoportable\n4. La libertad es buena\n5. La actitud no substituye a la competencia\n
PageTemplate\n|>|>|SiteTitle - SiteSubtitle|\n|MainMenu|DefaultTiddlers<<br>><<br>><<br>><<br>>ViewTemplate<<br>><<br>>EditTemplate|SideBarOptions|\n|~|~|OptionsPanel|\n|~|~|AdvancedOptions|\n|~|~|<<tiddler Configuration.SideBarTabs>>|\n\n''StyleSheet:'' StyleSheetColors - StyleSheetLayout - StyleSheetPrint\n\nSiteUrl
> " el elemento que vincula cada individuo económico a una economía no es sólo el mercado sino algo más profundo: un lenguaje común, una historia, una moral e incluso unas ideas…El Ethos común o lo que los griegos denominaban el sentido moral-espiritual de comunidad, que cristaliza en la moralidad y en la ley y que influencia las acciones humanas, incluidas las económicas"\ntomado de G. SCHMOLLER, Über einige Grunfragen, pgs. 256-257. tomado de P. KOSLOWSKI, o.c., pgs21.\n\n> : “las normas de comportamiento social, incluyendo los códigos éticos y morales son reacciones de las sociedad para compensar los fallos de mercado”\nCf. F. HANMING, Social culture and economic performance, The American Economic Review, nº 4,\nvol 91 (2001), 924-926. K. ARROW, Political and economic evaluation of social effects and\nexternalities en M. INTRILIGATOR (Edit.) Frontiers of quantitative economics, Amsterdam, North\nHolland, 1971, 3-25.\n>La ética (...) mejora la capacidad de coordinación del mercado en tanto que genera una precoordinación interna en la persona que actúa al conducirle a anticipar e internalizar las consecuencias externas de su actuación, o lo que es lo mismo, una coordinación ética y económica asume que un canon ético de normas es generalmente aceptado.\n\n>La economía es una compleja práctica social y como tal, la ciencia económica es una ciencia cultural en el sentido weberiano del término, depende de su contexto histórico de valores, normas e instituciones. En el marco de este tipo de enfoque, ''la ética económica busca el diseño de una estructura normativa del mercado en orden a asegurar que sus fuerzas y su enorme productividad favorezcan una buena y justa vida de los pueblos.''\n\n>La solución a esta dialéctica la ofrece una “tercera vía” que P. Ulrich denomina Economía Ética Integrativa. Esta alternativa parte de una reflexión crítica del modo de pensar económico, es decir, se trataría de penetrar en los supuestos normativos ocultos tras la lógica de mercado y substituir el economicismo por una valiosa racionalidad socioeconómica. En definitiva, los objetivos serían, por un lado, la incorporación a la economía del amplísimo componente socio-cultural que se sitúa en el abstruso mundo de la “generación de preferencias” y, por otro, integrar a la ética dentro de la lógica conductual de la propia economía-\nULRICH, P. Integrative Economic Ethics, towards a conception of socioeconomic rationality en P.\nKOSLOWSKI, Contemporary Economic Ethics and Business Ethics, Berlin, Springer verlag, pgs. 37-\n55.\n<<<\n“Soy un convicto, ¿cómo sabe que no le mataré esta noche?” dijo Valjean.\n¿Cómo sabe que no le mataré yo?- Contestó el obispo.\nEstamos condenados a confiar el uno en el otro\n<<<\nVictor Hugo, Los Miserables.\n\n\n\n
*[[DFWikilabs is currently my most active site|]]\n*[[Orangoodle16, few open stuff here|]]\n*[[Orangoodle site for teaching and FOSS software delivery|]]\n\nI'm currently keeping this [[blogs]]\n
[[control panel|]] (your control panel username is //orangoodle//).\n<<tiddler tiddlyspotControls>>\n[[|]]. Also visit [[TiddlyWiki Guides|]] for documentation on learning and using [[TiddlyWiki mailing list|]]\n[[tiddlyspot support|]].\n[[|]]
| tiddlyspot password:|<<option pasUploadPassword>>|\n| site management:|<<upload index.html . . orangoodle>>//(requires tiddlyspot password)//<<br>>[[control panel|]], [[download (go offline)|]]|\n| links:|[[|]], [[FAQs|]], [[announcements|]], [[blog|]], email [[support|]] & [[feedback|]], [[donate|]]|